@jup-ag/plugin 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/global.css +0 -47
- package/dist/index.css +0 -36
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +461 -638
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/npmlibary.tsx","../src/library.tsx","../src/icons/JupiterLogo.tsx","../src/icons/ChevronDownIcon.tsx","../src/stores/jotai-plugin-in-view.tsx","../src/misc/cn.ts","../src/components/ShadowDomContainer.tsx","../src/index.tsx","../src/contexts/ScreenProvider.tsx","../src/contexts/SwapContext.tsx","../src/constants/index.ts","../src/types/constants.ts","../src/misc/utils.ts","../src/misc/tokenTags.ts","../src/contexts/WalletPassthroughProvider.tsx","../src/queries/useQuoteQuery.ts","../src/data/UltraSwapService.ts","../src/entity/FormattedUltraQuoteResponse.ts","../src/queries/useUltraSwapMutation.ts","../src/entity/TransactionError.ts","../src/hooks/useBalances.ts","../src/hooks/useAsset.ts","../src/contexts/SearchService.ts","../src/components/Header.tsx","../src/icons/RefreshSVG.tsx","../src/components/WalletComponents/components/WalletModalButton.tsx","../src/components/WalletComponents/WalletButton.tsx","../src/components/CurrentUserBadge.tsx","../src/contexts/BrandingProvider.tsx","../src/components/screens/InitialScreen.tsx","../src/components/Form.tsx","../src/misc/constants.ts","../src/components/Coinbalance.tsx","../src/components/JupButton.tsx","../src/components/TokenIcon.tsx","../src/icons/WarningIcon.tsx","../src/icons/WalletIcon.tsx","../src/components/CoinBalanceUSD.tsx","../src/components/PriceInfo/index.tsx","../src/components/ExchangeRate.tsx","../src/components/PrecisionTickSize/index.tsx","../src/icons/UltraIcon.tsx","../src/components/PriceInfo/TransactionFee.tsx","../src/queries/useUltraRouter.ts","../src/components/SwitchPairButton.tsx","../src/components/useTimeDiff/useTimeDiff.tsx","../src/components/JupShield.tsx","../src/hooks/useMobile.ts","../src/components/Popover/Popover.tsx","../src/components/Tooltip/PopoverTooltip.tsx","../src/components/Plural/index.tsx","../src/icons/InfoIcon.tsx","../src/components/FormPairSelector.tsx","../src/icons/LeftArrowIcon.tsx","../src/icons/SearchIcon.tsx","../src/components/FormPairRow.tsx","../src/contexts/preferredExplorer/index.tsx","../src/icons/ExternalIcon.tsx","../src/components/TokenLink.tsx","../src/components/CheckedBadge.tsx","../src/queries/useLstApy.ts","../src/hooks/useSearch.ts","../src/components/screens/ReviewOrderScreen.tsx","../src/components/screens/SwappingScreen.tsx","../src/components/Spinner/index.tsx","../src/icons/SuccessIcon.tsx","../src/components/screens/WalletScreen.tsx","../src/icons/CloseIcon.tsx","../src/icons/JupiterLogoV2.tsx","../src/components/Jupiter.tsx","../src/contexts/ContextProvider.tsx"],"sourcesContent":["{\n \"name\": \"@jup-ag/plugin\",\n \"version\": \"1.0.1\",\n \"private\": false,\n \"license\": \"MIT\",\n \"scripts\": {\n \"dev\": \"next dev\",\n \"build\": \"next build\",\n \"tsup\": \"tsup && npx tailwindcss --yes -i ./src/styles/globals.css -o ./dist/global.css\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"format:fix\": \"prettier --write src\",\n \"build-widget\": \"NODE_ENV=production MODE=widget webpack\",\n \"analyse\": \"NODE_ENV=production MODE=widget ANALYSE=true webpack\"\n },\n \"files\": [\n \"dist\"\n ],\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./tailwind\": \"./dist/tailwind.config.js\",\n \"./css\": \"./dist/global.css\"\n },\n \"typesVersions\": {\n \"*\": {\n \"index\": [\n \"dist/index.d.ts\"\n ]\n }\n },\n \"peerDependencies\": {\n \"@solana/spl-token\": \"^0.1.8\",\n \"@solana/web3.js\": \"^1.87.6\",\n \"react\": \"^18\",\n \"react-dom\": \"^18\"\n },\n \"dependencies\": {\n \"@jup-ag/wallet-adapter\": \"0.2.3\",\n \"@popperjs/core\": \"^2.11.8\",\n \"@solana/wallet-adapter-wallets\": \"0.19.33\",\n \"@tanstack/react-query\": \"^4.36.1\",\n \"bn.js\": \"5.2.1\",\n \"clsx\": \"^2.1.1\",\n \"decimal.js\": \"10.4.3\",\n \"jotai\": \"^2.8.3\",\n \"jsbi\": \"4.3.0\",\n \"lodash.debounce\": \"^4.0.8\",\n \"next\": \"13.4.19\",\n \"next-seo\": \"5.15.0\",\n \"react-colorful\": \"^5.6.1\",\n \"react-hook-form\": \"7.42.1\",\n \"react-number-format\": \"5.1.3\",\n \"react-popper\": \"^2.3.0\",\n \"react-syntax-highlighter\": \"^15.5.0\",\n \"react-use\": \"^17.5.0\",\n \"react-virtualized-auto-sizer\": \"1.0.7\",\n \"react-window\": \"1.8.8\",\n \"superstruct\": \"1.0.3\",\n \"tailwind-merge\": \"^2.5.2\",\n \"tailwindcss-animate\": \"^1.0.7\"\n },\n \"devDependencies\": {\n \"@svgr/webpack\": \"^6.5.1\",\n \"@types/bn.js\": \"^5.1.5\",\n \"@types/bs58\": \"^4.0.4\",\n \"@types/lodash.debounce\": \"^4.0.9\",\n \"@types/node\": \"18.11.5\",\n \"@types/react\": \"18.0.23\",\n \"@types/react-dom\": \"18.0.7\",\n \"@types/react-syntax-highlighter\": \"^15.5.13\",\n \"@types/react-virtualized-auto-sizer\": \"~1.0.4\",\n \"@types/react-window\": \"~1.8.8\",\n \"autoprefixer\": \"10.4.13\",\n \"css-loader\": \"^6.11.0\",\n \"css-minimizer-webpack-plugin\": \"^4.2.2\",\n \"cssnano\": \"^5.1.15\",\n \"esbuild-plugins-node-modules-polyfill\": \"^1.6.6\",\n \"eslint\": \"8.26.0\",\n \"eslint-config-next\": \"13.0.0\",\n \"eslint-config-prettier\": \"^8.10.0\",\n \"mini-css-extract-plugin\": \"^2.9.0\",\n \"next-transpile-modules\": \"10.0.0\",\n \"node-polyfill-webpack-plugin\": \"^2.0.1\",\n \"postcss\": \"^8.4.38\",\n \"postcss-loader\": \"^7.3.4\",\n \"postcss-preset-env\": \"^7.8.3\",\n \"prettier\": \"^3.3.2\",\n \"react-twitter-embed\": \"^4.0.4\",\n \"sass\": \"^1.77.6\",\n \"sass-loader\": \"^13.3.3\",\n \"style-loader\": \"^3.3.4\",\n \"stylus\": \"^0.59.0\",\n \"svg-inline-loader\": \"^0.8.2\",\n \"tailwindcss\": \"3.3.3\",\n \"ts-loader\": \"^9.5.1\",\n \"tsup\": \"8.2.4\",\n \"typescript\": \"5.2.2\",\n \"webpack\": \"^5.92.1\",\n \"webpack-bundle-analyzer\": \"^4.10.2\",\n \"webpack-cli\": \"^4.10.0\"\n },\n \"pnpm\": {\n \"overrides\": {\n \"@solana/web3.js\": \"1.87.6\",\n \"@solana/buffer-layout\": \"4.0.0\"\n }\n }\n}\n","import { init as ogInit, resume, close, appProps, syncProps } from './library';\nimport { IInit } from './types';\n\nimport { RenderJupiter } from '.';\n\nasync function init(props: IInit) {\n // Populate Jupiter object into window object\n (window as any).Jupiter = { init, resume, close, appProps, syncProps };\n // Populate JupiterRenderer into window object\n (window as any).JupiterRenderer = {\n RenderJupiter: RenderJupiter,\n };\n\n // Call original init function\n await ogInit(props);\n}\n\nexport { init, resume, close, appProps, syncProps };\n","import { createRoot } from 'react-dom/client';\nimport { atom, createStore } from 'jotai';\nimport { CSSProperties, useEffect, useMemo, useState } from 'react';\n\nimport { IInit } from './types';\n\nimport 'tailwindcss/tailwind.css';\nimport JupiterLogo from './icons/JupiterLogo';\nimport ChevronDownIcon from './icons/ChevronDownIcon';\nimport { setPluginInView } from './stores/jotai-plugin-in-view';\nimport React from 'react';\nimport { cn } from './misc/cn';\nimport { ShadowDomContainer } from './components/ShadowDomContainer';\n\nconst containerId = 'jupiter-plugin-instance';\nconst packageJson = require('../package.json');\nconst bundleName = `plugin-${packageJson.version}`;\n\nconst scriptDomain =\n (() => {\n if (!process.env.NEXT_PUBLIC_IS_PLUGIN_DEV) {\n return null\n }\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n \n const url = (document.currentScript as HTMLScriptElement)?.src;\n if (url) {\n return new URL(url).origin;\n }\n return null;\n })() || 'https://plugin.jup.ag';\n\nasync function loadRemote(id: string, href: string, type: 'text/javascript' | 'stylesheet') {\n return new Promise((res, rej) => {\n const existing = document.getElementById(id) as HTMLLinkElement | null;\n\n if (existing) {\n res({});\n } else {\n let el: HTMLScriptElement | HTMLLinkElement =\n type === 'text/javascript' ? document.createElement('script') : document.createElement('link');\n\n el.id = id;\n el.onload = res;\n el.onerror = rej;\n if (el instanceof HTMLScriptElement) {\n el.type = 'text/javascript';\n el.src = href;\n } else if (el instanceof HTMLLinkElement) {\n el.rel = 'stylesheet';\n el.href = href;\n }\n\n document.head.append(el);\n }\n });\n}\n\nasync function loadJupiter() {\n if (process.env.NODE_ENV === 'development') {\n return;\n }\n\n try {\n // Load all the scripts\n await loadRemote('jupiter-load-script-app', `${scriptDomain}/${bundleName}-app.js`, 'text/javascript');\n } catch (error) {\n console.error(`Error loading Jupiter Plugin: ${error}`);\n throw new Error(`Error loading Jupiter Plugin: ${error}`);\n }\n}\n\nconst defaultStyles: CSSProperties = {\n zIndex: 50,\n};\n\nconst RenderLoadableJupiter = (props: IInit) => {\n const [loaded, setLoaded] = useState(false);\n useEffect(() => {\n loadJupiter();\n\n let intervalId: NodeJS.Timer;\n if (!loaded) {\n intervalId = setInterval(() => {\n const instance = (window as any).JupiterRenderer?.RenderJupiter;\n if (instance) {\n setLoaded(true);\n }\n }, 50);\n }\n return () => {\n clearInterval(intervalId);\n };\n }, [loaded]);\n\n const RenderJupiter: (props: any) => JSX.Element = useMemo(() => {\n if (loaded) {\n return (window as any).JupiterRenderer.RenderJupiter;\n }\n\n return EmptyJSX;\n }, [loaded]);\n\n return <RenderJupiter {...props} />;\n};\n\nconst EmptyJSX = () => <></>;\nconst RenderShell = (props: IInit) => {\n const displayMode = props.displayMode;\n const containerStyles = props.containerStyles;\n const containerClassName = props.containerClassName;\n\n useEffect(() => setPluginInView(true), []);\n\n const displayClassName = useMemo(() => {\n // Default Modal\n if (!displayMode || displayMode === 'modal') {\n return 'fixed top-0 w-full h-full flex items-center justify-center bg-black/50 z-10';\n } else if (displayMode === 'integrated' || displayMode === 'widget') {\n return 'flex items-center justify-center w-full h-full z-10';\n }\n }, [displayMode]);\n\n const contentClassName = useMemo(() => {\n // Default Modal\n if (!displayMode || displayMode === 'modal' || displayMode === 'integrated') {\n return `flex flex-col h-[550px] w-full max-w-[360px] overflow-auto text-black relative bg-black rounded-lg webkit-scrollbar ${\n containerClassName || ''\n }`;\n } else if (displayMode === 'widget') {\n return 'flex flex-col h-[550px] w-full overflow-auto text-black relative webkit-scrollbar';\n }\n }, [containerClassName, displayMode]);\n\n const onClose = () => {\n if (window.Jupiter) {\n setPluginInView(false);\n window.Jupiter.close();\n }\n };\n\n return (\n <div className={displayClassName}>\n {/* eslint-disable @next/next/no-page-custom-font */}\n <div style={{ ...defaultStyles, ...containerStyles }} className={contentClassName}>\n <RenderLoadableJupiter {...props} />\n </div>\n\n {!displayMode || displayMode === 'modal' ? (\n <div onClick={onClose} className=\"absolute w-screen h-screen top-0 left-0 backdrop-blur-sm\" />\n ) : null}\n </div>\n );\n};\n\nconst RenderWidgetShell = (props: IInit) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const classes = useMemo(() => {\n const size = props.widgetStyle?.size || 'default';\n const offsetX = props.widgetStyle?.offset?.x ?? 0;\n const offsetY = props.widgetStyle?.offset?.y ?? 0;\n\n let result: { containerClassName: string; contentClassName: string; style: React.CSSProperties } | undefined =\n undefined;\n if (!props.widgetStyle?.position || props.widgetStyle?.position === 'bottom-right') {\n result = {\n containerClassName: 'bottom-6 right-6',\n contentClassName: size === 'default' ? 'bottom-[60px] -right-3' : 'bottom-[44px] -right-4',\n style: { transform: `translate(-${offsetX}px, -${offsetY}px)` },\n };\n }\n if (props.widgetStyle?.position === 'bottom-left') {\n result = {\n containerClassName: 'bottom-6 left-6',\n contentClassName: size === 'default' ? 'bottom-[60px] -left-3' : 'bottom-[44px] -left-4',\n style: { transform: `translate(${offsetX}px, -${offsetY}px)` },\n };\n }\n if (props.widgetStyle?.position === 'top-left') {\n result = {\n containerClassName: 'top-6 left-6',\n contentClassName: size === 'default' ? 'top-[60px] -left-3' : 'top-[44px] -left-4',\n style: { transform: `translate(${offsetX}px, ${offsetY}px)` },\n };\n }\n if (props.widgetStyle?.position === 'top-right') {\n result = {\n containerClassName: 'top-6 right-6',\n contentClassName: size === 'default' ? 'top-[60px] -right-3' : 'top-[44px] -right-4',\n style: { transform: `translate(-${offsetX}px, ${offsetY}px)` },\n };\n }\n\n return {\n ...result,\n widgetContainerClassName: size === 'default' ? 'h-14 w-14' : 'h-10 w-10',\n widgetLogoSize: size === 'default' ? 42 : 32,\n };\n }, [props.widgetStyle?.position, props.widgetStyle?.size, props.widgetStyle?.offset]);\n\n return (\n <div className={`fixed ${classes.containerClassName}`} style={classes.style}>\n <div\n className={`${classes.widgetContainerClassName} rounded-full bg-black flex items-center justify-center cursor-pointer`}\n onClick={() => {\n if (isOpen) {\n setIsOpen(false);\n setPluginInView(false);\n } else {\n setIsOpen(true);\n setPluginInView(true);\n }\n }}\n >\n {isOpen ? (\n <div\n className={cn('text-white fill-current pt-1', {\n 'rotate-180': props.widgetStyle?.position === 'top-left' || props.widgetStyle?.position === 'top-right',\n })}\n >\n <ChevronDownIcon width={classes.widgetLogoSize * 0.4} height={classes.widgetLogoSize * 0.4} />\n </div>\n ) : (\n <JupiterLogo width={classes.widgetLogoSize} height={classes.widgetLogoSize} />\n )}\n </div>\n\n <div\n id=\"target-container\"\n className={`absolute overflow-hidden ${classes.contentClassName} flex flex-col w-[90vw] h-[600px] max-w-[384px] max-h-[75vh] rounded-2xl bg-black transition-opacity duration-300 shadow-2xl ${\n !isOpen ? '!h-0 !w-0 opacity-0' : 'opacity-100'\n }`}\n >\n <RenderLoadableJupiter {...props} />\n </div>\n </div>\n );\n};\n\nconst store = createStore();\nconst appProps = atom<IInit | undefined>(undefined);\n\nasync function init(passedProps: IInit) {\n if (typeof window === 'undefined' || typeof document === 'undefined') return null;\n const props: IInit = {\n ...passedProps,\n };\n\n const {\n enableWalletPassthrough,\n passthroughWalletContextState,\n onRequestConnectWallet,\n onSwapError,\n onSuccess,\n onFormUpdate,\n onScreenUpdate,\n integratedTargetId,\n ...restProps\n } = props;\n\n const targetDiv = document.createElement('div');\n const instanceExist = document.getElementById(containerId);\n window.Jupiter.store = store;\n store.set(appProps, { ...props, scriptDomain });\n setPluginInView(false);\n\n // Remove previous instance\n if (instanceExist) {\n window.Jupiter._instance = null;\n instanceExist.remove();\n window.Jupiter.root?.unmount();\n }\n\n targetDiv.id = containerId;\n targetDiv.classList.add('w-full');\n targetDiv.classList.add('h-full');\n\n if (restProps.displayMode === 'integrated') {\n const target = document.getElementById(integratedTargetId!);\n if (!target) {\n throw new Error(`Jupiter Plugin: document.getElementById cannot find ${integratedTargetId}`);\n }\n target?.appendChild(targetDiv);\n } else {\n document.body.appendChild(targetDiv);\n }\n\n // Passthrough\n if (enableWalletPassthrough) {\n window.Jupiter.enableWalletPassthrough = true;\n window.Jupiter.onRequestConnectWallet = onRequestConnectWallet;\n } else {\n window.Jupiter.enableWalletPassthrough = false;\n }\n\n let element;\n if (restProps.displayMode === 'widget') {\n element = <RenderWidgetShell {...props} />;\n } else {\n element = <RenderShell {...props} />;\n }\n const stylesheetUrls = [\n `${scriptDomain}/${bundleName}-Tailwind.css`,\n `${scriptDomain}/scoped-preflight-v4.css`,\n `${scriptDomain}/${bundleName}-Jupiter.css`,\n 'https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&family=Poppins&display=swap',\n ];\n\n const root = createRoot(targetDiv);\n root.render(<ShadowDomContainer stylesheetUrls={stylesheetUrls}>{element}</ShadowDomContainer>);\n window.Jupiter.root = root;\n window.Jupiter._instance = element;\n\n // Callbacks\n window.Jupiter.onSwapError = onSwapError;\n window.Jupiter.onSuccess = onSuccess;\n window.Jupiter.onFormUpdate = onFormUpdate;\n window.Jupiter.onScreenUpdate = onScreenUpdate;\n\n}\n\nconst attributes =\n typeof document !== 'undefined' ? (document.currentScript as HTMLScriptElement)?.attributes : undefined;\nif (typeof window !== 'undefined' && typeof document !== 'undefined' && attributes) {\n document.onreadystatechange = function () {\n const loadComplete = document.readyState === 'complete';\n const shouldPreload = Boolean(attributes.getNamedItem('data-preload'));\n\n if (loadComplete && shouldPreload) {\n setTimeout(() => {\n loadJupiter().catch((error) => {\n console.error(`Error pre-loading Jupiter Plugin: ${error}`);\n throw new Error(`Error pre-loading Jupiter Plugin: ${error}`);\n });\n }, 2000);\n }\n };\n}\n\nconst resume = () => {\n const instanceExist = document.getElementById(containerId);\n if (instanceExist) {\n instanceExist.style.display = 'block';\n return;\n }\n};\n\nconst close = () => {\n const targetDiv = document.getElementById(containerId);\n if (targetDiv) {\n targetDiv.style.display = 'none';\n }\n};\n\nconst syncProps = (props: {\n enableWalletPassthrough?: IInit['enableWalletPassthrough'];\n passthroughWalletContextState?: IInit['passthroughWalletContextState'];\n}) => {\n const currentProps = store.get(appProps);\n const newProps = {\n ...currentProps,\n passthroughWalletContextState: props.passthroughWalletContextState || currentProps?.passthroughWalletContextState,\n } as IInit;\n store.set(appProps, newProps);\n};\n\nexport { init, resume, close, appProps, syncProps };\n","import React from 'react';\n\nconst JupiterLogo: React.FC<{ width?: number; height?: number }> = ({ width = 24, height = 24 }) => {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src={'https://jup.ag/svg/jupiter-logo.svg'} width={width} height={height} alt=\"Jupiter aggregator\" />;\n};\n\nexport default JupiterLogo;\n","const ChevronDownIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = 10, height = 6 }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 10 6\"\n fill=\"inherit\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.292893 0.292893C0.683416 -0.097631 1.31658 -0.097631 1.7071 0.292893L4.99999 3.58579L8.29288 0.292893C8.6834 -0.0976311 9.31657 -0.0976311 9.70709 0.292893C10.0976 0.683417 10.0976 1.31658 9.70709 1.70711L5.7071 5.70711C5.31657 6.09763 4.68341 6.09763 4.29289 5.70711L0.292893 1.70711C-0.0976309 1.31658 -0.0976309 0.683417 0.292893 0.292893Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default ChevronDownIcon;\n","import { atom } from 'jotai';\n\nconst pluginInViewAtom = atom<boolean>(false);\n\nexport const getPluginInView = (): boolean => {\n const store = window.Jupiter?.store;\n if (!store) {\n console.warn('Jupiter store is not available.');\n return false;\n }\n return store.get(pluginInViewAtom);\n};\n\nexport const setPluginInView = (value: boolean): void => {\n const store = window.Jupiter?.store;\n if (!store) {\n console.warn('Jupiter store is not available.');\n return;\n }\n store.set(pluginInViewAtom, value);\n};\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface Props {\n children: React.ReactNode;\n stylesheetUrls: string[];\n}\n\nexport const ShadowDomContainer: React.FC<Props> = ({ children, stylesheetUrls }) => {\n const hostRef = useRef<HTMLDivElement>(null);\n const [shadowRoot, setShadowRoot] = useState<ShadowRoot | null>(null);\n const [stylesLoaded, setStylesLoaded] = useState(false);\n\n useEffect(() => {\n if (hostRef.current && !shadowRoot) {\n // 1. Create the shadow root\n const newShadowRoot = hostRef.current.attachShadow({ mode: 'open' });\n\n const loadStyles = async () => {\n try {\n // Fetch all stylesheets as text\n const stylePromises = stylesheetUrls.map((url) =>\n fetch(url).then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to fetch stylesheet: ${url}`);\n }\n return res.text();\n }),\n );\n\n const allCssText = await Promise.all(stylePromises);\n\n // Inject all stylesheets\n allCssText.forEach((cssText) => {\n const styleEl = document.createElement('style');\n styleEl.textContent = cssText;\n newShadowRoot.appendChild(styleEl);\n });\n\n setStylesLoaded(true);\n } catch (error) {\n console.error('Error fetching and applying styles:', error);\n }\n };\n\n loadStyles();\n // Create container for React portal\n const portalContainer = document.createElement('div');\n portalContainer.id = 'portal-container';\n portalContainer.style.width = '100%';\n portalContainer.style.height = '100%';\n newShadowRoot.appendChild(portalContainer);\n\n setShadowRoot(newShadowRoot);\n }\n }, [hostRef, shadowRoot, stylesheetUrls]);\n\n const portalTarget = shadowRoot?.getElementById('portal-container');\n\n return (\n <div ref={hostRef} >\n {portalTarget && stylesLoaded ? createPortal(children, portalTarget) : null}\n </div>\n );\n};\n","import { Provider, useAtom } from 'jotai';\nimport JupiterApp from './components/Jupiter';\nimport { ContextProvider } from './contexts/ContextProvider';\nimport { ScreenProvider } from './contexts/ScreenProvider';\nimport WalletPassthroughProvider from './contexts/WalletPassthroughProvider';\nimport { appProps } from './library';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useMemo } from 'react';\n\nconst App = () => {\n const queryClient = useMemo(() => new QueryClient(), []);\n const [props] = useAtom(appProps);\n if (!props) return null;\n\n return (\n <QueryClientProvider client={queryClient}>\n <ContextProvider {...props}>\n <WalletPassthroughProvider>\n <ScreenProvider>\n <JupiterApp {...props} />\n </ScreenProvider>\n </WalletPassthroughProvider>\n </ContextProvider>\n </QueryClientProvider>\n );\n};\n\nconst RenderJupiter = () => {\n return (\n <Provider store={typeof window !== 'undefined' ? window.Jupiter.store : undefined}>\n <App />\n </Provider>\n );\n};\n\nexport { RenderJupiter };\n","import { createContext, Dispatch, FC, ReactNode, SetStateAction, useContext, useState } from 'react';\n\nexport type Screens = 'Initial' | 'Confirmation' | 'Swapping' | 'Success' | 'Error' | 'Wallet';\n\nexport interface ScreenProvider {\n screen: Screens;\n setScreen: Dispatch<SetStateAction<Screens>>;\n}\n\nexport const ScreenStateContext = createContext<ScreenProvider>({ screen: 'Initial', setScreen() {} });\n\nexport function useScreenState(): ScreenProvider {\n return useContext(ScreenStateContext);\n}\n\nexport const ScreenProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [screen, setScreen] = useState<Screens>('Initial');\n\n return <ScreenStateContext.Provider value={{ screen, setScreen }}>{children}</ScreenStateContext.Provider>;\n};\n","\nimport Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport {\n Dispatch,\n MutableRefObject,\n PropsWithChildren,\n SetStateAction,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { WRAPPED_SOL_MINT } from 'src/constants';\nimport { hasNumericValue, useDebounce } from 'src/misc/utils';\nimport { FormProps, IInit } from 'src/types';\nimport { useScreenState } from './ScreenProvider';\nimport { useWalletPassThrough } from './WalletPassthroughProvider';\nimport { useQuoteQuery } from 'src/queries/useQuoteQuery';\nimport { UltraQuoteResponse } from 'src/data/UltraSwapService';\nimport { FormattedUltraQuoteResponse } from 'src/entity/FormattedUltraQuoteResponse';\nimport { useUltraSwapMutation } from 'src/queries/useUltraSwapMutation';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { useAsset } from 'src/hooks/useAsset';\nimport { PublicKey } from '@solana/web3.js';\nimport { TransactionError } from 'src/types/TransactionError';\n\nexport interface IForm {\n fromMint: string;\n toMint: string;\n fromValue: string;\n toValue: string;\n}\n\nexport type QuoteResponse = {\n original: UltraQuoteResponse;\n quoteResponse: FormattedUltraQuoteResponse;\n};\n\nexport type SwapResult = {\n txid: string;\n inputAddress: PublicKey;\n outputAddress: PublicKey;\n inputAmount: number;\n outputAmount: number;\n} | {\n error?: TransactionError;\n};\n\nexport type SwappingStatus = 'loading' | 'pending-approval' | 'sending' | 'fail' | 'success' | 'timeout';\nexport interface ISwapContext {\n form: IForm;\n setForm: Dispatch<SetStateAction<IForm>>;\n\n errors: Record<string, { title: string; message: string }>;\n setErrors: Dispatch<\n SetStateAction<\n Record<\n string,\n {\n title: string;\n message: string;\n }\n >\n >\n >;\n fromTokenInfo?: Asset | null;\n toTokenInfo?: Asset | null;\n quoteResponseMeta: QuoteResponse | null;\n setQuoteResponseMeta: Dispatch<SetStateAction<QuoteResponse | null>>;\n onSubmit: VoidFunction;\n lastSwapResult: { swapResult: SwapResult; quoteReponse: QuoteResponse | null } | null;\n formProps: FormProps;\n displayMode: IInit['displayMode'];\n scriptDomain: IInit['scriptDomain'];\n swapping: {\n txStatus:\n | {\n txid: string;\n status: SwappingStatus;\n }\n | undefined;\n };\n reset: (props?: { resetValues: boolean }) => void;\n refresh: () => void;\n loading: boolean;\n quoteError?: unknown;\n lastRefreshTimestamp: number | undefined;\n isToPairFocused: MutableRefObject<boolean>;\n enableWalletPassthrough?: boolean;\n}\n\nexport const SwapContext = createContext<ISwapContext | null>(null);\n\nexport class SwapTransactionTimeoutError extends Error {\n constructor() {\n super('Transaction timed-out');\n }\n}\n\nexport function useSwapContext() {\n const context = useContext(SwapContext);\n if (!context) throw new Error('Missing SwapContextProvider');\n return context;\n}\n\nexport const PRIORITY_NONE = 0; // No additional fee\nexport const PRIORITY_HIGH = 0.000_005; // Additional fee of 1x base fee\nexport const PRIORITY_TURBO = 0.000_5; // Additional fee of 100x base fee\nexport const PRIORITY_MAXIMUM_SUGGESTED = 0.01;\n\nconst INITIAL_FORM = {\n fromMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n toMint: WRAPPED_SOL_MINT.toString(),\n fromValue: '',\n toValue: '',\n};\n\nconst DEFAULT_FORM_PROPS: FormProps = {\n swapMode: 'ExactIn',\n};\n\nexport const SwapContextProvider = (props: PropsWithChildren<IInit>) => {\n const { displayMode, scriptDomain, formProps: originalFormProps, children, enableWalletPassthrough } = props;\n const { screen } = useScreenState();\n const { wallet } = useWalletPassThrough();\n const { refetch: refetchBalances } = useBalances();\n const isToPairFocused = useRef<boolean>(false);\n const walletPublicKey = useMemo(() => wallet?.adapter.publicKey?.toString(), [wallet?.adapter.publicKey]);\n const formProps: FormProps = useMemo(() => ({ ...DEFAULT_FORM_PROPS, ...originalFormProps }), [originalFormProps]);\n\n const [form, setForm] = useState<IForm>({\n fromMint: formProps?.initialInputMint ?? 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n toMint: formProps?.initialOutputMint ?? WRAPPED_SOL_MINT.toString(),\n fromValue: '',\n toValue: '',\n });\n const { data: fromTokenInfo } = useAsset(form.fromMint);\n const { data: toTokenInfo } = useAsset(form.toMint);\n\n useEffect(() => {\n if (formProps.fixedMint) {\n if (formProps.fixedMint !== formProps.initialInputMint && formProps.fixedMint !== formProps.initialOutputMint) {\n console.error('fixedMint is not the same as the initial input or output mint');\n }\n }\n }, [formProps.fixedMint, formProps.initialInputMint, formProps.initialOutputMint]);\n\n const [errors, setErrors] = useState<Record<string, { title: string; message: string }>>({});\n\n\n\n // Set value given initial amount\n const setupInitialAmount = useCallback(() => {\n if (!formProps?.initialAmount || !fromTokenInfo || !toTokenInfo) return;\n const toUiAmount = () => {\n if (!formProps.initialAmount) {\n return;\n }\n\n if (!fromTokenInfo) return;\n const value = new Decimal(formProps.initialAmount).div(Math.pow(10, fromTokenInfo.decimals)).toFixed();\n return value;\n };\n setTimeout(() => {\n setForm((prev) => ({ ...prev, fromValue: toUiAmount() ?? '' }));\n }, 0);\n }, [formProps.initialAmount, fromTokenInfo, toTokenInfo]);\n\n useEffect(() => {\n setupInitialAmount();\n }, [formProps.initialAmount, setupInitialAmount]);\n\n const debouncedForm = useDebounce(form, 250);\n\n const amount = useMemo(() => {\n if (!fromTokenInfo || !toTokenInfo) {\n return JSBI.BigInt(0);\n }\n if (isToPairFocused.current === true) {\n if (!debouncedForm.toValue || !hasNumericValue(debouncedForm.toValue)) {\n return JSBI.BigInt(0);\n }\n return JSBI.BigInt(new Decimal(debouncedForm.toValue).mul(Math.pow(10, toTokenInfo.decimals)).floor().toFixed());\n } else {\n if (!debouncedForm.fromValue || !hasNumericValue(debouncedForm.fromValue)) {\n return JSBI.BigInt(0);\n }\n return JSBI.BigInt(\n new Decimal(debouncedForm.fromValue).mul(Math.pow(10, fromTokenInfo.decimals)).floor().toFixed(),\n );\n }\n }, [debouncedForm.fromValue, debouncedForm.toValue, fromTokenInfo, toTokenInfo]);\n\n const [txStatus, setTxStatus] = useState<ISwapContext['swapping']['txStatus']>(undefined);\n const {\n data: ogQuoteResponseMeta,\n isFetching: loading,\n error: quoteError,\n refetch: refresh,\n errorUpdatedAt,\n dataUpdatedAt,\n isSuccess,\n isError,\n } = useQuoteQuery(\n {\n inputMint: debouncedForm.fromMint,\n outputMint: debouncedForm.toMint,\n amount: amount.toString(),\n taker: walletPublicKey,\n swapMode: isToPairFocused.current ? 'ExactOut' : 'ExactIn',\n referralAccount: formProps.referralAccount,\n referralFee: formProps.referralFee,\n },\n // Stop refetching when transaction is in progress\n !txStatus,\n );\n\n useEffect(() => {\n if (quoteError) {\n if (typeof quoteError === 'string') {\n setErrors({\n fromValue: { title: quoteError, message: '' },\n });\n return ;\n }\n\n setErrors({\n fromValue: { title: 'Error fetching route. Try changing your input', message: '' },\n });\n return ;\n }\n setErrors({});\n }, [quoteError]);\n\n const lastRefreshTimestamp = useMemo(() => {\n if (loading) {\n return new Date().getTime();\n }\n if (isError) {\n return new Date(errorUpdatedAt).getTime();\n }\n if (isSuccess) {\n return new Date(dataUpdatedAt).getTime();\n }\n return undefined;\n }, [loading, errorUpdatedAt, dataUpdatedAt, isError, isSuccess]);\n\n const [quoteResponseMeta, setQuoteResponseMeta] = useState<QuoteResponse | null>(null);\n useEffect(() => {\n if (!ogQuoteResponseMeta) {\n setQuoteResponseMeta(null);\n return;\n }\n // the UI sorts the best route depending on ExactIn or ExactOut\n setQuoteResponseMeta(ogQuoteResponseMeta);\n }, [ogQuoteResponseMeta]);\n\n useEffect(() => {\n if (!form.fromValue && !form.toValue && !quoteResponseMeta) {\n setForm((prev) => ({ ...prev, fromValue: '', toValue: '' }));\n return;\n }\n\n setForm((prev) => {\n const newValue = { ...prev };\n\n if (!fromTokenInfo || !toTokenInfo) return prev;\n\n const { outAmount, inAmount } = quoteResponseMeta?.quoteResponse || {};\n if (!isToPairFocused.current) {\n newValue.toValue = outAmount ? new Decimal(outAmount.toString()).div(10 ** toTokenInfo.decimals).toFixed() : '';\n } else {\n newValue.fromValue = inAmount\n ? new Decimal(inAmount.toString()).div(10 ** fromTokenInfo.decimals).toFixed()\n : '';\n }\n return newValue;\n });\n }, [form.fromValue, form.toValue, fromTokenInfo, quoteResponseMeta, toTokenInfo]);\n\n const [lastSwapResult, setLastSwapResult] = useState<ISwapContext['lastSwapResult']>(null);\n\n const { mutateAsync: ultraSwapMutation } = useUltraSwapMutation();\n\n // const executeTransaction = useExecuteTransaction();\n const onSubmit = useCallback(async () => {\n if (!walletPublicKey || !wallet?.adapter || !quoteResponseMeta) {\n return null;\n }\n\n setTxStatus({\n txid: '',\n status: 'loading',\n });\n\n try {\n if (!fromTokenInfo) throw new Error('Missing fromTokenInfo');\n if (!toTokenInfo) throw new Error('Missing toTokenInfo');\n await ultraSwapMutation({\n quoteResponseMeta,\n fromTokenInfo,\n toTokenInfo,\n setTxStatus,\n setLastSwapResult,\n });\n } catch (error) {\n console.log('Swap error', error);\n }\n }, [walletPublicKey, wallet?.adapter, quoteResponseMeta, ultraSwapMutation, fromTokenInfo, toTokenInfo]);\n\n const reset = useCallback(\n ({ resetValues } = { resetValues: false }) => {\n if (resetValues) {\n setForm(INITIAL_FORM);\n setupInitialAmount();\n } else {\n setForm((prev) => ({ ...prev, toValue: '' }));\n }\n\n setQuoteResponseMeta(null);\n setErrors({});\n setLastSwapResult(null);\n setTxStatus(undefined);\n refetchBalances();\n },\n [refetchBalances, setupInitialAmount],\n );\n\n // onFormUpdate callback\n useEffect(() => {\n if (typeof window.Jupiter.onFormUpdate === 'function') {\n window.Jupiter.onFormUpdate(form);\n }\n }, [form]);\n\n // onFormUpdate callback\n useEffect(() => {\n if (typeof window.Jupiter.onScreenUpdate === 'function') {\n window.Jupiter.onScreenUpdate(screen);\n }\n }, [screen]);\n\n return (\n <SwapContext.Provider\n value={{\n form,\n setForm,\n errors,\n setErrors,\n fromTokenInfo,\n toTokenInfo,\n quoteResponseMeta,\n setQuoteResponseMeta,\n onSubmit,\n lastSwapResult,\n reset,\n refresh,\n loading,\n quoteError,\n lastRefreshTimestamp,\n isToPairFocused,\n displayMode,\n formProps,\n scriptDomain,\n swapping: {\n txStatus,\n },\n enableWalletPassthrough,\n }}\n >\n {children}\n </SwapContext.Provider>\n );\n};\n","import { PublicKey } from '@solana/web3.js';\nimport { DEFAULT_EXPLORER, FormProps } from 'src/types';\nimport { SwapMode } from 'src/types/constants';\n\nexport const USDC_MINT = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');\nexport const USDT_MINT = new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB');\nexport const JLP_MINT = new PublicKey('27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4');\n\nexport const WRAPPED_SOL_MINT = new PublicKey('So11111111111111111111111111111111111111112');\n\n\nexport interface IFormConfigurator {\n simulateWalletPassthrough: boolean;\n defaultExplorer: DEFAULT_EXPLORER;\n formProps: FormProps;\n colors: {\n /** Primary color (accent color) */\n primary?: string;\n /** Background color */\n background?: string;\n /** Primary text color */\n primaryText?: string;\n /** Warning color */\n warning?: string;\n /** Interactive elements color */\n interactive?: string;\n /** Module/component background color */\n module?: string;\n };\n branding?: {\n logoUri?: string;\n name?: string;\n };\n}\n\nexport const INITIAL_FORM_CONFIG: IFormConfigurator = Object.freeze({\n simulateWalletPassthrough: false,\n defaultExplorer: 'Solana Explorer',\n formProps: {\n fixedAmount: false,\n initialAmount: '',\n initialInputMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n initialOutputMint: WRAPPED_SOL_MINT.toString(),\n swapMode:SwapMode.ExactIn, \n },\n colors: {\n primary: '199, 242, 132',\n background: '0, 0, 0',\n primaryText: '232, 249, 255',\n warning: '251, 191, 36',\n interactive: '33, 42, 54',\n module: '16, 23, 31',\n },\n});\n","export const SwapMode = {\n ExactInOrOut: 'ExactInOrOut',\n ExactIn: 'ExactIn',\n ExactOut: 'ExactOut',\n } as const;","import { PublicKey } from '@solana/web3.js';\nimport BN from 'bn.js';\nimport Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport { RefObject, useEffect, useRef, useState } from 'react';\nimport { BalanceResponse } from 'src/data/UltraSwapService';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { checkIsUnknownToken } from './tokenTags';\n\nconst userLocale =\n typeof window !== 'undefined'\n ? navigator.languages && navigator.languages.length\n ? navigator.languages[0]\n : navigator.language\n : 'en-US';\n\nexport const numberFormatter = new Intl.NumberFormat(userLocale, {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 9,\n});\n\nconst getDecimalCount = (value: string) => {\n const parts = value.split('.');\n return parts.length > 1 ? parts[1].length : 0;\n};\n\nexport const formatNumber = {\n format: (val?: string | Decimal, precision?: number): string => {\n if (!val) {\n return '';\n }\n\n // Use the default precision if not provided\n const defaultDecimals = getDecimalCount(val.toString());\n // format it against user locale\n const numberFormatter = new Intl.NumberFormat(userLocale, {\n maximumFractionDigits: precision ?? defaultDecimals,\n });\n return numberFormatter.format(val.toString());\n },\n};\n\nexport function shortenAddress(address: string, chars = 4): string {\n return `${address.slice(0, chars)}...${address.slice(-chars)}`;\n}\n\nexport function readableValue(lamportsAmount: JSBI | BN | number | bigint, decimals: number): string {\n return new Decimal(lamportsAmount.toString())\n .div(10 ** decimals)\n .toDP(decimals, Decimal.ROUND_DOWN)\n .toFixed();\n}\n\nexport function fromLamports(lamportsAmount: JSBI | BN | number | bigint, decimals: number): number {\n return new Decimal(lamportsAmount.toString())\n .div(10 ** decimals)\n .toDP(decimals, Decimal.ROUND_DOWN)\n .toNumber();\n}\n\nexport function toLamports(lamportsAmount: JSBI | BN | number, decimals: number): number {\n return new Decimal(lamportsAmount.toString())\n .mul(10 ** decimals)\n .floor()\n .toNumber();\n}\n\n// https://usehooks.com/useEventListener/\nexport function useReactiveEventListener(\n eventName: string,\n handler: (event: any) => void,\n element = typeof window !== 'undefined' ? window : null,\n) {\n // Create a ref that stores handler\n const savedHandler = useRef<React.Ref<any>>();\n // Update ref.current value if handler changes.\n // This allows our effect below to always get latest handler ...\n // ... without us needing to pass it in effect deps array ...\n // ... and potentially cause effect to re-run every render.\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(\n () => {\n if (typeof window !== 'undefined') {\n // Make sure element supports addEventListener\n // On\n const isSupported = element && element.addEventListener;\n if (!isSupported) return;\n // Create event listener that calls handler function stored in ref\n const eventListener = (event: any) => typeof savedHandler.current === 'function' && savedHandler.current(event);\n // Add event listener\n element.addEventListener(eventName, eventListener);\n // Remove event listener on cleanup\n return () => {\n element.removeEventListener(eventName, eventListener);\n };\n }\n },\n [eventName, element], // Re-run if eventName or element changes\n );\n}\n\nexport const isMobile = () => typeof window !== 'undefined' && screen && screen.width <= 480;\n\nexport const detectedSeparator = formatNumber.format('1.1').substring(1, 2);\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n // Cancel the timeout if value changes (also on delay change or unmount)\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay], // Only re-call effect if value or delay changes\n );\n return debouncedValue;\n}\n\nexport function useOutsideClick(ref: RefObject<HTMLElement>, handler: (e: MouseEvent) => void) {\n useEffect(() => {\n const listener = (event: any) => {\n // Do nothing if clicking ref's element or descendent elements\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n handler(event);\n };\n document.addEventListener('mouseup', listener);\n return () => {\n document.removeEventListener('mouseup', listener);\n };\n }, [ref, handler]);\n}\n\nexport function splitIntoChunks<T>(array: T[], size: number): T[][] {\n return Array.apply<number, T[], T[][]>(0, new Array(Math.ceil(array.length / size))).map((_, index) =>\n array.slice(index * size, (index + 1) * size),\n );\n}\n\nexport const hasNumericValue = (amount: string | number) => {\n if (amount && !Number.isNaN(Number(amount))) {\n return true;\n }\n return false;\n};\n\nexport function jsonToBase64(object: Object) {\n try {\n const json = JSON.stringify(object);\n return Buffer.from(json).toString('base64');\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nexport function base64ToJson(base64String: string) {\n try {\n const json = Buffer.from(base64String, 'base64').toString();\n return JSON.parse(json);\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nexport function isValidSolanaAddress(address: string) {\n try {\n new PublicKey(address);\n return true;\n } catch (error) {\n console.error('Invalid Solana address:', error);\n return false;\n }\n}\n\n\n/**\n * Sorts search results based on user balance and other criteria\n * @param searchResults - Array of search assets to sort\n * @param options - Sorting options including balances and preferences\n * @returns Sorted array of search assets\n */\nexport const sortByUserBalance = (\n searchResults: Asset[],\n balances: BalanceResponse, \n): Asset[] => {\n\n // Create maps for efficient lookups\n const userBalanceMap = new Map<string, number>();\n const userUsdValueMap = new Map<string, Decimal>();\n\n // Calculate user balances and USD values\n Object.entries(balances)\n .filter(([_, item]) => item.uiAmount > 0)\n .forEach(([mint, item]) => {\n const tokenInfo = searchResults.find((token) => token.id === mint);\n if (!tokenInfo) return;\n\n const amount = item.uiAmount;\n userBalanceMap.set(mint, amount);\n\n const tokenPrice = tokenInfo.usdPrice || 0;\n if (tokenPrice) {\n const usdValue = new Decimal(amount).mul(tokenPrice);\n if (usdValue.greaterThan(0)) {\n userUsdValueMap.set(mint, usdValue);\n }\n }\n });\n\n // Deduplicate tokens by ID\n const deduplicatedResults = (() => {\n const map = new Map<string, Asset>();\n searchResults.forEach((item) => {\n if (!map.has(item.id)) {\n map.set(item.id, item);\n }\n });\n return Array.from(map.values());\n })();\n\n return deduplicatedResults.sort((t1, t2) => {\n // 1. USD value comparison (highest first)\n const t1UsdValue = userUsdValueMap.get(t1.id);\n const t2UsdValue = userUsdValueMap.get(t2.id);\n \n if (t1UsdValue && t2UsdValue) {\n const usdComparison = t2UsdValue.cmp(t1UsdValue);\n if (usdComparison !== 0) return usdComparison;\n } else if (t1UsdValue && !t2UsdValue) {\n return -1; // t1 has USD value, t2 doesn't\n } else if (!t1UsdValue && t2UsdValue) {\n return 1; // t2 has USD value, t1 doesn't\n }\n\n // 2. Balance comparison (highest first)\n const t1Balance = userBalanceMap.get(t1.id);\n const t2Balance = userBalanceMap.get(t2.id);\n \n if (t1Balance && t2Balance) {\n const balanceComparison = new Decimal(t2Balance).cmp(t1Balance);\n if (balanceComparison !== 0) return balanceComparison;\n } else if (t1Balance && !t2Balance) {\n return -1; // t1 has balance, t2 doesn't\n } else if (!t1Balance && t2Balance) {\n return 1; // t2 has balance, t1 doesn't\n }\n\n\n // 3. User token prioritization\n const t1HasBalance = userBalanceMap.has(t1.id);\n const t2HasBalance = userBalanceMap.has(t2.id);\n \n if (t1HasBalance && !t2HasBalance) return -1;\n if (!t1HasBalance && t2HasBalance) return 1;\n\n // 4. Volume-based scoring\n let t1Score = 0;\n let t2Score = 0;\n \n const t1Volume = (t1.stats24h?.buyVolume || 0) + (t1.stats24h?.sellVolume || 0);\n const t2Volume = (t2.stats24h?.buyVolume || 0) + (t2.stats24h?.sellVolume || 0);\n\n // Higher volume gets higher score\n if (t1Volume > t2Volume) t1Score += 1;\n if (t2Volume > t1Volume) t2Score += 1;\n\n // 5. Known token prioritization\n if (checkIsUnknownToken(t1)) t1Score -= 2;\n if (checkIsUnknownToken(t2)) t2Score -= 2;\n\n return t2Score - t1Score;\n });\n};","import { Asset } from 'src/entity/SearchResponse';\n\nexport const checkIsStrictOrVerified = (tokenInfo: Asset) => {\n return Boolean(\n tokenInfo.tags?.includes('verified') || tokenInfo.tags?.includes('strict') || tokenInfo.tags?.includes('community'),\n );\n};\n\n// If it's not VERIFIED, it's unknown\nexport const checkIsUnknownToken = (tokenInfo: Asset) => {\n return checkIsStrictOrVerified(tokenInfo) === false;\n};\n\nexport const checkIsToken2022 = (tokenInfo: Asset) => {\n return tokenInfo.tags?.includes('token-2022');\n};\n","import { SendTransactionOptions, useWallet, Wallet, WalletContextState, WalletName } from '@jup-ag/wallet-adapter';\nimport { Connection, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport { useAtom } from 'jotai';\nimport React, { createContext, FC, PropsWithChildren, ReactNode, useContext, useMemo } from 'react';\nimport { appProps } from 'src/library';\n\nconst initialPassThrough: WalletContextState = {\n publicKey: null,\n wallets: [],\n wallet: null,\n connect: async () => {},\n select: () => {},\n connecting: false,\n connected: false,\n disconnect: async () => {},\n autoConnect: false,\n disconnecting: false,\n sendTransaction: async (transaction: Transaction | VersionedTransaction, connection: Connection, options?: SendTransactionOptions) => '',\n signTransaction: undefined,\n signAllTransactions: undefined,\n signMessage: undefined,\n signIn: undefined,\n};\n\nexport const WalletPassthroughContext = createContext<WalletContextState>(initialPassThrough);\n\nexport function useWalletPassThrough(): WalletContextState {\n return useContext(WalletPassthroughContext);\n}\n\nconst FromWalletAdapter: FC<PropsWithChildren> = ({ children }) => {\n const walletContextState = useWallet();\n return <WalletPassthroughContext.Provider value={walletContextState}>{children}</WalletPassthroughContext.Provider>;\n};\n\nconst WalletPassthroughProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [atom] = useAtom(appProps);\n const wallet = atom?.passthroughWalletContextState?.wallet;\n\n const walletPassthrough: WalletContextState = useMemo(() => {\n return {\n ...initialPassThrough,\n ...atom?.passthroughWalletContextState,\n disconnect: async () => {\n try {\n if (wallet?.adapter?.disconnect) {\n return wallet?.adapter?.disconnect();\n }\n } catch (error) {\n console.log(error);\n }\n },\n };\n }, [atom?.passthroughWalletContextState, wallet?.adapter]);\n\n if (!window.Jupiter.enableWalletPassthrough) {\n return <FromWalletAdapter>{children}</FromWalletAdapter>;\n }\n\n if (walletPassthrough) {\n return <WalletPassthroughContext.Provider value={walletPassthrough}>{children}</WalletPassthroughContext.Provider>;\n }\n\n return <>{children}</>;\n};\n\nexport default WalletPassthroughProvider;\n","import { useQuery } from '@tanstack/react-query';\nimport { UltraSwapQuoteParams, ultraSwapService } from 'src/data/UltraSwapService';\nimport { FormattedUltraQuoteResponse } from 'src/entity/FormattedUltraQuoteResponse';\nimport { create } from 'superstruct';\n\nexport const useQuoteQuery = (params: UltraSwapQuoteParams, shouldRefetch: boolean = true) => {\n const { amount } = params;\n return useQuery({\n queryKey: ['quote', params],\n queryFn: async ({ signal }) => {\n if (Number(amount) === 0) {\n return null;\n }\n try {\n const response = await ultraSwapService.getQuote(params, signal);\n const quoteResponse = create(response, FormattedUltraQuoteResponse, 'conver FormattedUltraQuoteResponse Error');\n return {\n quoteResponse,\n original: response,\n };\n } catch (e) {\n if (e instanceof Response) {\n const errorObj = await e.json();\n throw errorObj.error;\n }\n throw e;\n }\n },\n refetchInterval: shouldRefetch ? 5_000 : false,\n retry: 0,\n enabled: Number(amount) > 0,\n keepPreviousData: Number(amount) > 0,\n onError: (error) => {\n console.error('useQuoteQuery', error);\n },\n });\n};\n","import JSBI from \"jsbi\";\n\nexport const AGGREGATOR_SOURCES = {\n METIS: 'metis',\n JUPITERZ: 'jupiterz',\n HASHFLOW: 'hashflow',\n DFLOW: 'dflow',\n} as const;\n\nexport type AggregatorSources = (typeof AGGREGATOR_SOURCES)[keyof typeof AGGREGATOR_SOURCES];\nexport interface UltraQuoteResponse {\n inputMint: string;\n inAmount: string;\n outputMint: string;\n outAmount: string;\n otherAmountThreshold: string;\n priceImpactPct: string;\n routePlan: {\n swapInfo: {\n inputMint: string;\n inAmount: string;\n outputMint: string;\n outAmount: string;\n ammKey: string;\n label: string;\n feeAmount: JSBI;\n feeMint: string;\n };\n percent: number;\n }[];\n contextSlot: number;\n transaction: string | null;\n swapType: 'ultra';\n gasless: boolean;\n requestId: string;\n prioritizationFeeLamports?: number;\n feeBps: number;\n router: AggregatorSources;\n }\n\n// Refer docs here https://dev.jup.ag/docs/api/ultra-api/order\nexport interface UltraSwapQuoteParams {\n inputMint: string;\n outputMint: string;\n amount: string;\n taker?: string;\n swapMode?: 'ExactIn' | 'ExactOut';\n referralAccount?: string;\n referralFee?: number;\n}\ninterface UltraSwapResponseBase {\n signature: string;\n code: number;\n status: 'Success' | 'Failed';\n slot: string;\n}\n\ninterface UltraSwapResponseSuccess extends UltraSwapResponseBase {\n status: 'Success';\n inputAmountResult: string;\n outputAmountResult: string;\n}\n\ninterface UltraSwapResponseFailed extends UltraSwapResponseBase {\n status: 'Failed';\n message: string;\n error: string;\n}\n\nexport type UltraSwapResponse = UltraSwapResponseSuccess | UltraSwapResponseFailed;\n\n\nexport interface Router {\n icon: string;\n id: AggregatorSources;\n name: string;\n}\n\nexport type RouterResponse = Router[];\ninterface UltraSwapService {\n getQuote(params: UltraSwapQuoteParams): Promise<UltraQuoteResponse>;\n submitSwap(signedTransaction: string, requestId: string): Promise<UltraSwapResponse>;\n}\n\ninterface TokenBalance {\n amount: string; // Raw token amount as string\n uiAmount: number; // Formatted amount with decimals\n slot: number; // Solana slot number\n isFrozen: boolean; // Whether the token account is frozen\n}\n\nexport type BalanceResponse = Record<string, TokenBalance>;\n\nexport enum Severity {\n INFO = 'info',\n WARNING = 'warning',\n CRITICAL = 'critical',\n}\n\nexport type Warning = {\n type: string;\n message: string;\n severity: Severity;\n};\n\nexport interface ShieldResponse {\n warnings: {\n [mintAddress: string]: Warning[];\n };\n}\nclass UltraSwapService implements UltraSwapService {\n private BASE_URL ='https://ultra-api.jup.ag';\n private ROUTE = {\n SWAP: `${this.BASE_URL}/execute`,\n ORDER: `${this.BASE_URL}/order`,\n ROUTERS: `${this.BASE_URL}/order/routers`,\n BALANCES: `${this.BASE_URL}/balances`,\n SHIELD: `${this.BASE_URL}/shield`,\n };\n\n async getQuote(params: UltraSwapQuoteParams, signal?: AbortSignal): Promise<UltraQuoteResponse> {\n const queryParams = new URLSearchParams(\n Object.entries(params)\n .filter(([_, value]) => value !== undefined)\n .reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value.toString(),\n }),\n {},\n ),\n );\n\n const response = await fetch(`${this.ROUTE.ORDER}?${queryParams.toString()}`, { signal });\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n\n async submitSwap(signedTransaction: string, requestId: string): Promise<UltraSwapResponse> {\n const response = await fetch(this.ROUTE.SWAP, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ signedTransaction, requestId }),\n });\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n async getRouters(): Promise<RouterResponse> {\n const response = await fetch(this.ROUTE.ROUTERS)\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n\n async getBalance(address: string, signal?: AbortSignal): Promise<BalanceResponse> {\n const response = await fetch(`${this.ROUTE.BALANCES}/${address}`, { signal });\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n async getShield(mintAddress: string[]): Promise<ShieldResponse> {\n const response = await fetch(`${this.ROUTE.SHIELD}?mints=${mintAddress.join(',')}`);\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n}\n\nexport const ultraSwapService = new UltraSwapService();\n","import { PublicKey } from '@solana/web3.js';\nimport JSBI from 'jsbi';\nimport {\n array,\n boolean,\n coerce,\n defaulted,\n Infer,\n instance,\n nullable,\n number,\n optional,\n string,\n type,\n} from 'superstruct';\n\nconst PublicKeyFromString = coerce(instance(PublicKey), string(), (value) => new PublicKey(value));\n\n//@ts-ignore bug because JSBI ctor being private?!?\nconst AmountFromString = coerce<JSBI, null, string>(instance(JSBI), string(), (value) => JSBI.BigInt(value));\n\nconst NumberFromString = coerce<string, null, number>(string(), number(), (value) => Number(value));\n\nconst SwapInfo = type({\n ammKey: PublicKeyFromString,\n label: string(),\n inputMint: string(),\n outputMint: string(),\n inAmount: AmountFromString,\n outAmount: AmountFromString,\n feeAmount: AmountFromString,\n feeMint: PublicKeyFromString,\n});\n\nconst RoutePlanStep = type({\n swapInfo: SwapInfo,\n percent: number(),\n});\nconst RoutePlanWithMetadata = array(RoutePlanStep);\n\nexport const FormattedUltraQuoteResponse = type({\n inputMint: PublicKeyFromString,\n inAmount: AmountFromString,\n outputMint: PublicKeyFromString,\n outAmount: AmountFromString,\n otherAmountThreshold: AmountFromString,\n priceImpactPct: NumberFromString,\n routePlan: RoutePlanWithMetadata,\n slippageBps: number(),\n contextSlot: defaulted(number(), 0),\n computedAutoSlippage: optional(number()),\n transaction: nullable(string()),\n swapType: string(),\n gasless: boolean(),\n requestId: string(),\n prioritizationFeeLamports: optional(number()),\n feeBps: number(),\n router: string(),\n});\n\nexport type FormattedUltraQuoteResponse = Infer<typeof FormattedUltraQuoteResponse>;\n","import { WalletSignTransactionError } from '@jup-ag/wallet-adapter';\nimport { useMutation } from '@tanstack/react-query';\nimport { ISwapContext, QuoteResponse } from 'src/contexts/SwapContext';\nimport { ultraSwapService } from 'src/data/UltraSwapService';\nimport { Buffer } from 'buffer';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { TransactionError } from 'src/entity/TransactionError';\n\ninterface UltraSwapMutationProps {\n fromTokenInfo: Asset;\n toTokenInfo: Asset;\n setTxStatus: (status: ISwapContext['swapping']['txStatus']) => void;\n setLastSwapResult: (result: ISwapContext['lastSwapResult']) => void;\n quoteResponseMeta: QuoteResponse;\n}\n\nenum UltraSwapErrorType {\n REJECTED = 'REJECTED',\n FAILED = 'FAILED',\n WALLET_SIGNING_FAILED = 'WALLET_SIGNING_FAILED',\n}\n\nclass UltraSwapError extends Error {\n type: UltraSwapErrorType;\n txid?: string;\n constructor(message: string, type: UltraSwapErrorType, txid?: string) {\n super(message);\n this.type = type;\n this.txid = txid;\n }\n}\n\nexport function useUltraSwapMutation() {\n const { wallet, signTransaction } = useWalletPassThrough();\n return useMutation({\n mutationFn: async ({\n setTxStatus,\n setLastSwapResult,\n fromTokenInfo,\n toTokenInfo,\n quoteResponseMeta,\n }: UltraSwapMutationProps) => {\n const publicKey = wallet?.adapter.publicKey;\n if (!signTransaction || !publicKey) {\n throw new UltraSwapError(\n 'Wallet not connected, or missing wallet functions',\n UltraSwapErrorType.WALLET_SIGNING_FAILED,\n );\n }\n\n setTxStatus({\n txid: '',\n status: 'pending-approval',\n });\n\n const selectedQuote = quoteResponseMeta.original;\n\n const { transaction, requestId } = selectedQuote;\n\n if (!transaction) throw new Error('Missing transaction');\n const based64tx = Buffer.from(transaction, 'base64');\n\n const versionedTransaction = VersionedTransaction.deserialize(new Uint8Array(based64tx));\n\n const signedTransaction = await signTransaction(versionedTransaction);\n const serializedTransaction = Buffer.from(signedTransaction.serialize()).toString('base64');\n\n setTxStatus({\n txid: '',\n status: 'sending',\n });\n\n const response = await ultraSwapService.submitSwap(serializedTransaction, requestId);\n\n const { signature, status } = response;\n\n if (status === 'Failed') {\n throw new UltraSwapError(response.error, UltraSwapErrorType.FAILED, signature);\n }\n\n const { inputAmountResult, outputAmountResult } = response;\n\n setTxStatus({\n txid: signature,\n status: 'success',\n });\n setLastSwapResult({\n swapResult: {\n txid: signature,\n inputAddress: new PublicKey(fromTokenInfo.id),\n outputAddress: new PublicKey(toTokenInfo.id),\n inputAmount: Number(inputAmountResult),\n outputAmount: Number(outputAmountResult),\n },\n quoteReponse: quoteResponseMeta,\n });\n return signature;\n },\n onError: async (error, variables) => {\n const { setTxStatus, setLastSwapResult, quoteResponseMeta } = variables;\n if (error instanceof WalletSignTransactionError) {\n const message = error.message || error.error || 'Transaction cancelled';\n setLastSwapResult({\n swapResult: {\n error: new TransactionError(message),\n },\n quoteReponse: quoteResponseMeta,\n });\n return;\n }\n\n if (error instanceof Error) {\n setLastSwapResult({\n swapResult: {\n error: new TransactionError(error.message),\n },\n quoteReponse: quoteResponseMeta,\n });\n return;\n }\n\n if ('json' in (error as any)) {\n const json = (await (error as any).json()) as {\n txid: string;\n signature: string;\n error: string;\n status: string;\n };\n\n setLastSwapResult({\n swapResult: {\n error: new TransactionError(json.error || 'Unknown error'),\n },\n quoteReponse: quoteResponseMeta,\n });\n\n setTxStatus({\n txid: json.txid || '',\n status: 'fail',\n });\n }\n },\n });\n}\n","export class TransactionError extends Error {\n txid?: string;\n code?: number;\n programIds?: string[];\n serializedTx?: string;\n \n constructor(\n message: string,\n txid?: string,\n code?: number,\n programIds?: string[],\n serializedTx?: string\n ) {\n super(message);\n this.name = 'TransactionError';\n this.txid = txid;\n this.code = code;\n this.programIds = programIds;\n this.serializedTx = serializedTx;\n }\n}","import { useQuery } from '@tanstack/react-query';\nimport { BalanceResponse, ultraSwapService } from 'src/data/UltraSwapService';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { useMemo } from 'react';\nimport { WRAPPED_SOL_MINT } from 'src/constants';\nimport { getPluginInView } from 'src/stores/jotai-plugin-in-view';\n\nconst ULTRA_NATIVESOL_ID = 'SOL';\nconst WSOL_ID = WRAPPED_SOL_MINT.toString();\nconst WRAPPED_SOL_ID = 'wSOL';\n\nfunction combineSolAmounts(data: BalanceResponse): BalanceResponse {\n const balances = structuredClone(data);\n\n /**\n * Note:\n * /balance return \"SOL\" as native sol and \"So11111111111111111111111111111111111111112\" as wrapped sol\n * Logic below is to convert \"So11111111111111111111111111111111111111112\" to wSOL and \"SOL\" to \"So11111111111111111111111111111111111111112\"\n *\n */\n if (balances[WSOL_ID]) {\n balances[WRAPPED_SOL_ID] = {\n ...balances[WSOL_ID],\n };\n }\n\n if (balances[ULTRA_NATIVESOL_ID]) {\n balances[WSOL_ID] = {\n ...balances[ULTRA_NATIVESOL_ID],\n };\n }\n\n return balances;\n}\n\nexport const useBalances = () => {\n const { publicKey } = useWalletPassThrough();\n\n const address = useMemo(() => {\n if (!publicKey) return '';\n return publicKey.toString();\n }, [publicKey]);\n\n return useQuery({\n queryKey: ['ultra', 'balances', address],\n queryFn: async ({ signal }) => {\n return await ultraSwapService.getBalance(address, signal);\n },\n enabled: !!address && getPluginInView(),\n cacheTime: 20_000,\n staleTime: 20_000,\n refetchOnWindowFocus: false,\n refetchIntervalInBackground: false,\n refetchOnMount: false,\n select: (data) => combineSolAmounts(data),\n });\n};\n","import { useQuery } from '@tanstack/react-query';\nimport { searchService } from 'src/contexts/SearchService';\n\nexport const ASSET_QUERY_KEY = ['search', 'assets'];\n\nexport const useAsset = (mint: string) => {\n return useQuery({\n queryKey: [...ASSET_QUERY_KEY, mint],\n queryFn: () => searchService.search(mint),\n enabled: !!mint,\n staleTime: Infinity,\n select: (data) => data[0],\n });\n};\n","import { SearchResponse } from 'src/entity/SearchResponse';\n\nconst BASE_URL = 'https://datapi.jup.ag';\n\nclass SearchService {\n private ROUTE = {\n SEARCH: `${BASE_URL}/v1/assets`,\n };\n\n async search(query: string): Promise<SearchResponse> {\n const response = await fetch(`${this.ROUTE.SEARCH}/search?query=${query}`, {\n credentials: 'include',\n });\n const data: SearchResponse = await response.json();\n return data;\n }\n}\n\nexport const searchService = new SearchService();\n","import React, { useCallback } from 'react';\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport RefreshSVG from 'src/icons/RefreshSVG';\n\nimport { WalletButton } from './WalletComponents';\nimport { useBranding } from 'src/contexts/BrandingProvider';\nimport { useBalances } from 'src/hooks/useBalances';\n\nconst Header = () => {\n const { refresh, enableWalletPassthrough } = useSwapContext();\n const { refetch: refetchBalances } = useBalances();\n const { logoUri, name } = useBranding();\n\n const onRefresh = useCallback(() => {\n refetchBalances();\n refresh();\n }, [refetchBalances, refresh]);\n\n return (\n <div className=\"mt-2 h-7 pl-3 pr-2\">\n <div className=\"w-full flex items-center justify-between \">\n <div className=\"flex items-center space-x-2\">\n <img src={logoUri} alt=\"Plugin Branding\" className=\"w-6 h-6\" />\n <span className=\"font-bold text-sm text-primary-text\">{name}</span>\n </div>\n\n <div className=\"flex space-x-1 items-center\">\n <button\n type=\"button\"\n className=\"p-2 h-7 w-7 flex items-center justify-center rounded-full bg-interactive text-primary-text fill-current\"\n onClick={onRefresh}\n >\n <RefreshSVG />\n </button>\n {!enableWalletPassthrough && <WalletButton />}\n </div>\n </div>\n </div>\n );\n};\n\nexport default Header;\n","const RefreshSVG: React.FC<React.SVGAttributes<SVGElement>> = ({ width = '12', height = '12' }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 12 12\" fill=\"inherit\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_841_4053)\">\n <path\n d=\"M11.6466 4.23513V0.706082L10.4111 1.94156C9.3173 0.741165 7.72912 0 6 0C2.6827 0 0 2.6827 0 6C0 9.3173 2.68203 12 6 12C7.69405 12 9.21142 11.2939 10.3059 10.165L9.31797 9.14128C8.50601 10.0234 7.30561 10.5879 6 10.5879C3.45892 10.5879 1.41216 8.5411 1.41216 6.00002C1.41216 3.45894 3.45892 1.41218 6 1.41218C7.34135 1.41218 8.57615 2.01238 9.42317 2.92954L8.11757 4.23515L11.6466 4.23513Z\"\n fill=\"inherit\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_841_4053\">\n <rect width={width} height={height} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport default RefreshSVG;\n","import React, { MouseEvent, useCallback } from 'react';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\n\nexport const WalletModalButton = () => {\n const { connecting } = useWalletPassThrough();\n const { setScreen } = useScreenState();\n const handleClick = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n if (window.Jupiter.enableWalletPassthrough && window.Jupiter.onRequestConnectWallet) {\n window.Jupiter.onRequestConnectWallet();\n } else { \n setScreen('Wallet');\n }\n }, [setScreen]);\n\n return (\n <button\n type=\"button\"\n className=\"py-2 px-3 h-7 flex items-center rounded-2xl text-xs bg-interactive text-primary-text\"\n onClick={handleClick}\n >\n {connecting ? (\n <span>\n <span>Connecting...</span>\n </span>\n ) : (\n <span>\n <span>Connect Wallet</span>\n </span>\n )}\n </button>\n );\n};\n","import React, { useMemo, useRef, useState } from 'react';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { useOutsideClick } from 'src/misc/utils';\nimport { CurrentUserBadge } from '../CurrentUserBadge';\n\nimport { WalletModalButton } from './components/WalletModalButton';\n\nexport const WalletButton = () => {\n const { publicKey, connected, connecting, disconnect } = useWalletPassThrough();\n const [active, setActive] = useState(false);\n const ref = useRef<HTMLUListElement>(null);\n const { screen, setScreen } = useScreenState();\n\n const base58 = useMemo(() => publicKey?.toBase58(), [publicKey]);\n const onClickDisconnect = () => {\n setActive(false);\n disconnect();\n };\n\n const closePopup = () => {\n setActive(false);\n };\n useOutsideClick(ref, closePopup);\n\n if ((!connected && !connecting) || !base58) {\n return (\n <div onClick={() => setScreen('Wallet')} className=\"text-primary-text\">\n <WalletModalButton />\n </div>\n );\n }\n\n return (\n <div className=\"cursor-pointer relative\">\n <div onClick={() => setActive(!active)}>\n <CurrentUserBadge />\n </div>\n\n {screen === 'Initial' ? (\n <ul\n aria-label=\"dropdown-list\"\n className={\n active\n ? 'absolute block top-10 right-0 text-sm bg-black rounded-lg p-2 text-primary-text dark:bg-white dark:text-black'\n : 'hidden'\n }\n ref={ref}\n role=\"menu\"\n >\n <li onClick={onClickDisconnect} role=\"menuitem\">\n <span>Disconnect</span>\n </li>\n </ul>\n ) : null}\n </div>\n );\n};\n","import React from 'react';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\n\nimport { shortenAddress } from '../misc/utils';\n\nexport const CurrentUserBadge: React.FC = () => {\n const { publicKey, wallet, } = useWalletPassThrough();\n\n if (!wallet || !publicKey) {\n return null;\n }\n\n return (\n <div className=\"flex items-center bg-interactive py-2 px-3 rounded-2xl h-7\">\n <div\n className=\"w-4 h-4 rounded-full bg-interactive dark:bg-white-10 flex justify-center items-center\"\n style={{ position: 'relative' }}\n >\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img alt=\"Wallet logo\" width={16} height={16} src={wallet?.adapter?.icon} />\n </div>\n\n <div className=\"ml-2\">\n <div className=\"text-xs text-primary-text\">{shortenAddress(`${publicKey}`, 2)}</div>\n </div>\n </div>\n );\n};\n","import { createContext, PropsWithChildren, useContext, useMemo } from \"react\";\nimport { IInit } from \"src/types\";\n\nexport interface BrandingContextState {\n logoUri?: string;\n name?: string;\n}\n\nexport const BrandingContext = createContext<BrandingContextState>({} as BrandingContextState);\n\nexport const BrandingProvider = (props: PropsWithChildren<IInit>) => {\n const { branding ,children} = props;\n\n const logoUri = useMemo(() => branding?.logoUri? branding.logoUri : 'https://jup.ag/svg/jupiter-logo.svg', [branding?.logoUri]);\n const name = useMemo(() => branding?.name? branding.name : 'Jupiter', [branding?.name]);\n\n return <BrandingContext.Provider value={{ logoUri, name }}>{children}</BrandingContext.Provider>;\n};\nexport function useBranding() {\n const context = useContext(BrandingContext);\n return context;\n}","\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport Form from '../../components/Form';\nimport FormPairSelector from '../../components/FormPairSelector';\nimport Decimal from 'decimal.js';\nimport { cn } from 'src/misc/cn';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { useAsset } from 'src/hooks/useAsset';\n\nconst InitialScreen = () => {\n const { data: balances } = useBalances();\n\n const {\n form,\n setForm,\n setErrors,\n quoteResponseMeta,\n loading,\n } = useSwapContext();\n const { setScreen } = useScreenState();\n\n const balance = useMemo(() => {\n if (!balances) return 0;\n return balances[form.fromMint]?.uiAmount || 0;\n }, [balances, form.fromMint]);\n\n const [isDisabled, setIsDisabled] = useState(false);\n\n const { data: asset } = useAsset(form.fromMint);\n\n useEffect(() => {\n if (!form.fromValue || !form.fromMint || !form.toMint || !form.toValue || !quoteResponseMeta || loading) {\n setErrors({});\n setIsDisabled(true);\n return;\n }\n\n if (new Decimal(form.fromValue).gt(balance)) {\n setErrors({\n fromValue: { title: `Insufficient ${asset?.symbol}`, message: '' },\n });\n setIsDisabled(true);\n return;\n }\n\n setErrors({});\n setIsDisabled(false);\n }, [form, asset, balance, quoteResponseMeta, loading, setErrors]);\n\n const [selectPairSelector, setSelectPairSelector] = useState<'fromMint' | 'toMint' | null>(null);\n\n const onSelectMint = useCallback(\n async (tokenInfo: Asset) => {\n if (selectPairSelector === 'fromMint') {\n setForm((prev) => ({\n ...prev,\n fromMint: tokenInfo.id,\n fromValue: '',\n // Prevent same token to same token;\n ...(prev.toMint === tokenInfo.id ? { toMint: prev.fromMint } : undefined),\n }));\n } else {\n setForm((prev) => ({\n ...prev,\n toMint: tokenInfo.id,\n toValue: '',\n // Prevent same token to same token;\n ...(prev.fromMint === tokenInfo.id ? { fromMint: prev.toMint } : undefined),\n }));\n }\n setSelectPairSelector(null);\n },\n [selectPairSelector, setForm],\n );\n\n \n const onSubmitToConfirmation = useCallback(() => {\n setScreen('Swapping');\n }, [setScreen]);\n\n return (\n <>\n {/* Body */}\n <form\n onSubmit={onSubmitToConfirmation}\n className={cn({\n hidden: Boolean(selectPairSelector),\n })}\n >\n <Form\n onSubmit={onSubmitToConfirmation}\n isDisabled={isDisabled}\n setSelectPairSelector={setSelectPairSelector}\n />\n </form>\n\n {selectPairSelector !== null ? (\n <div className=\"absolute top-0 left-0 h-full w-full bg-black rounded-lg overflow-hidden\">\n <FormPairSelector\n onSubmit={onSelectMint}\n onClose={() => setSelectPairSelector(null)}\n />\n </div>\n ) : null}\n </>\n );\n};\n\nexport default InitialScreen;\n","import { MouseEvent, useCallback, useEffect, useMemo } from 'react';\nimport { NumberFormatValues, NumericFormat } from 'react-number-format';\n\nimport { MAX_INPUT_LIMIT, MINIMUM_SOL_BALANCE } from '../misc/constants';\n\nimport CoinBalance from './Coinbalance';\nimport JupButton from './JupButton';\n\nimport TokenIcon from './TokenIcon';\n\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport ChevronDownIcon from 'src/icons/ChevronDownIcon';\nimport WalletIcon from 'src/icons/WalletIcon';\nimport { detectedSeparator } from 'src/misc/utils';\nimport { WRAPPED_SOL_MINT } from '../constants';\nimport { CoinBalanceUSD } from './CoinBalanceUSD';\nimport PriceInfo from './PriceInfo/index';\nimport SwitchPairButton from './SwitchPairButton';\nimport useTimeDiff from './useTimeDiff/useTimeDiff';\nimport Decimal from 'decimal.js';\nimport { cn } from 'src/misc/cn';\nimport { SwapMode } from 'src/types/constants';\nimport JupShield from './JupShield';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { Asset } from 'src/entity/SearchResponse';\n\nconst FormInputContainer: React.FC<{\n tokenInfo?: Asset;\n onBalanceClick?: (e: React.MouseEvent<HTMLElement>) => void;\n title: string;\n pairSelectDisabled: boolean;\n onClickSelectPair: () => void;\n value: string;\n children: React.ReactNode;\n}> = ({ tokenInfo, onBalanceClick, title, pairSelectDisabled, onClickSelectPair, children, value }) => {\n return (\n <div\n className={cn(\n 'border border-transparent bg-module rounded-xl transition-all',\n 'py-3 px-4 flex flex-col dark:text-primary-text gap-y-2',\n 'group focus-within:border-primary/50 focus-within:shadow-swap-input-dark rounded-xl',\n )}\n >\n <div className=\"flex justify-between items-center text-xs text-primary-text\">\n <div>{title}</div>\n {tokenInfo && (\n <div\n className={cn('flex space-x-1 text-xs items-center text-primary-text/50 fill-current ',{\n 'cursor-pointer': onBalanceClick,\n })}\n onClick={(e) => {\n onBalanceClick?.(e);\n }}\n >\n <WalletIcon width={10} height={10} />\n <CoinBalance mintAddress={tokenInfo.id} hideZeroBalance={false} />\n <span>{tokenInfo.symbol}</span>\n </div>\n )}\n </div>\n <div className=\"flex\">\n <div>\n <button\n type=\"button\"\n className={cn('py-2 px-3 rounded-lg flex items-center bg-interactive text-primary-text', {\n 'hover:bg-interactive/80': !pairSelectDisabled,\n })}\n disabled={pairSelectDisabled}\n onClick={onClickSelectPair}\n >\n <div className=\"h-5 w-5\">\n <TokenIcon info={tokenInfo} width={20} height={20} />\n </div>\n <div className=\"ml-4 mr-2 font-semibold\" translate=\"no\">\n <div className=\"truncate\">{tokenInfo?.symbol}</div>\n </div>\n {pairSelectDisabled ? null : (\n <span className=\"text-primary-text/25 fill-current\">\n <ChevronDownIcon />\n </span>\n )}\n </button>\n\n <div className=\"flex justify-between items-center h-[20px]\">\n {tokenInfo?.id && <JupShield tokenAddress={tokenInfo.id} />}\n </div>\n </div>\n <div className=\"flex flex-col items-end justify-between w-full\">\n {children}\n <span className=\"text-xs text-primary-text/50\">\n {tokenInfo && <CoinBalanceUSD tokenInfo={tokenInfo} amount={value} />}\n </span>\n </div>\n </div>\n </div>\n );\n};\n\nconst Form: React.FC<{\n onSubmit: () => void;\n isDisabled: boolean;\n setSelectPairSelector: React.Dispatch<React.SetStateAction<'fromMint' | 'toMint' | null>>;\n}> = ({ onSubmit, isDisabled, setSelectPairSelector }) => {\n const { publicKey } = useWalletPassThrough();\n\n const { data: balances } = useBalances();\n const {\n form,\n setForm,\n fromTokenInfo,\n toTokenInfo,\n quoteResponseMeta,\n formProps: { fixedAmount, swapMode, fixedMint },\n loading,\n refresh,\n quoteError,\n errors,\n isToPairFocused,\n onSubmit: onSubmitUltra,\n } = useSwapContext();\n const [hasExpired, timeDiff] = useTimeDiff();\n const { setScreen } = useScreenState();\n useEffect(() => {\n if (hasExpired) {\n refresh();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasExpired]);\n\n const shouldDisabledFromSelector = useMemo(() => {\n if (fromTokenInfo?.id === fixedMint) {\n return true;\n }\n return false;\n }, [fixedMint, fromTokenInfo?.id]);\n\n const shouldDisabledToSelector = useMemo(() => {\n if (toTokenInfo?.id === fixedMint) {\n return true;\n }\n return false;\n }, [fixedMint, toTokenInfo?.id]);\n\n const walletPublicKey = useMemo(() => publicKey?.toString(), [publicKey]);\n\n const onChangeFromValue = ({ value }: NumberFormatValues) => {\n if (value === '') {\n setForm((form) => ({ ...form, fromValue: '', toValue: '' }));\n return;\n }\n\n const isInvalid = Number.isNaN(value);\n if (isInvalid) return;\n\n setForm((form) => ({ ...form, fromValue: value }));\n };\n\n const onChangeToValue = ({ value }: NumberFormatValues) => {\n if (value === '') {\n setForm((form) => ({ ...form, fromValue: '', toValue: '' }));\n return;\n }\n\n const isInvalid = Number.isNaN(value);\n if (isInvalid) return;\n\n setForm((form) => ({ ...form, toValue: value }));\n };\n\n const balance: string | null = useMemo(() => {\n if (!fromTokenInfo?.id) return null;\n\n if (!balances) return null;\n const accBalanceObj = balances[fromTokenInfo.id];\n if (!accBalanceObj) return null;\n\n return accBalanceObj.uiAmount.toString();\n }, [balances, fromTokenInfo?.id]);\n\n\n const onClickMax = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n\n if (!balance) return;\n if (fromTokenInfo?.id === WRAPPED_SOL_MINT.toBase58()) {\n setForm((prev) => ({\n ...prev,\n fromValue: new Decimal(balance).gt(MINIMUM_SOL_BALANCE)\n ? new Decimal(balance).minus(MINIMUM_SOL_BALANCE).toFixed(9)\n : '0',\n }));\n } else {\n setForm((prev) => ({\n ...prev,\n fromValue: balance,\n }));\n }\n },\n [balance, fromTokenInfo?.id, setForm],\n );\n\n const onClickSwitchPair = () => {\n setForm((prev) => ({\n ...prev,\n fromValue: '',\n toValue: '',\n fromMint: prev.toMint,\n toMint: prev.fromMint,\n }));\n };\n\n const { inputAmountDisabled, outputAmountDisabled } = useMemo(() => {\n const result = { inputAmountDisabled: true, outputAmountDisabled: true };\n if (!fixedAmount) {\n if (swapMode === SwapMode.ExactIn) {\n result.inputAmountDisabled = false;\n } else if (swapMode === SwapMode.ExactOut) {\n result.outputAmountDisabled = false;\n } else {\n result.inputAmountDisabled = false;\n result.outputAmountDisabled = false;\n }\n }\n return result;\n }, [fixedAmount, swapMode]);\n\n const onClickSelectFromMint = useCallback(() => {\n if (shouldDisabledFromSelector) return;\n setSelectPairSelector('fromMint');\n }, [shouldDisabledFromSelector, setSelectPairSelector]);\n\n const onClickSelectToMint = useCallback(() => {\n if (shouldDisabledToSelector) return;\n setSelectPairSelector('toMint');\n }, [shouldDisabledToSelector, setSelectPairSelector]);\n\n const thousandSeparator = useMemo(() => (detectedSeparator === ',' ? '.' : ','), []);\n // Allow empty input, and input lower than max limit\n const withValueLimit = useCallback(\n ({ floatValue }: NumberFormatValues) => !floatValue || floatValue <= MAX_INPUT_LIMIT,\n [],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n if (window.Jupiter.enableWalletPassthrough && window.Jupiter.onRequestConnectWallet) {\n window.Jupiter.onRequestConnectWallet();\n } else {\n setScreen('Wallet');\n }\n },\n [setScreen],\n );\n\n const shouldButtonDisabled = useMemo(() => {\n if (isDisabled || loading || !!errors.fromValue) {\n return true;\n }\n return false;\n }, [isDisabled, loading, errors.fromValue]);\n\n return (\n <div className=\"h-full flex flex-col items-center justify-center\">\n <div className=\"w-full mt-2 rounded-xl flex flex-col px-2\">\n <div className=\"flex-col\">\n <FormInputContainer\n tokenInfo={fromTokenInfo!}\n onBalanceClick={(e) => {\n isToPairFocused.current = false;\n onClickMax(e);\n }}\n title=\"Selling\"\n pairSelectDisabled={shouldDisabledFromSelector}\n onClickSelectPair={onClickSelectFromMint}\n value={form.fromValue}\n >\n {fromTokenInfo?.decimals && (\n <NumericFormat\n disabled={fixedAmount || swapMode === SwapMode.ExactOut}\n value={typeof form.fromValue === 'undefined' ? '' : form.fromValue}\n decimalScale={fromTokenInfo.decimals}\n thousandSeparator={thousandSeparator}\n allowNegative={false}\n valueIsNumericString\n inputMode=\"decimal\"\n onValueChange={onChangeFromValue}\n placeholder={'0.00'}\n className={cn(\n 'w-full h-[40px] bg-transparent text-primary-text text-right font-semibold text-xl placeholder:text-primary-text/50',\n {\n 'cursor-not-allowed': inputAmountDisabled || swapMode === SwapMode.ExactOut,\n },\n )}\n onKeyDown={() => {\n isToPairFocused.current = false;\n }}\n decimalSeparator={detectedSeparator}\n isAllowed={withValueLimit}\n />\n )}\n </FormInputContainer>\n <div className=\"relative z-10 -my-3 flex justify-center\">\n <SwitchPairButton onClick={onClickSwitchPair} className={cn('transition-all')} />\n </div>\n <FormInputContainer\n tokenInfo={toTokenInfo!}\n title=\"Buying\"\n pairSelectDisabled={shouldDisabledToSelector}\n onClickSelectPair={onClickSelectToMint}\n value={form.toValue}\n >\n {toTokenInfo?.decimals && (\n <NumericFormat\n inputMode=\"decimal\"\n disabled={outputAmountDisabled || swapMode === SwapMode.ExactIn}\n value={typeof form.toValue === 'undefined' ? '' : form.toValue}\n decimalScale={toTokenInfo.decimals}\n thousandSeparator={thousandSeparator}\n allowNegative={false}\n valueIsNumericString\n onValueChange={onChangeToValue}\n className={cn(\n 'h-[40px] w-full bg-transparent text-primary-text text-right font-semibold text-lg placeholder:text-primary-text/50',\n {\n 'cursor-not-allowed': outputAmountDisabled || swapMode === SwapMode.ExactIn,\n },\n )}\n placeholder={swapMode === SwapMode.ExactOut ? 'Enter desired amount' : '0.00'}\n decimalSeparator={detectedSeparator}\n isAllowed={withValueLimit}\n onKeyDown={(e) => {\n if (\n e.metaKey ||\n e.ctrlKey ||\n e.key === 'Meta' ||\n e.key === 'Control' ||\n e.key === 'Alt' ||\n e.key === 'Shift'\n ) {\n return;\n }\n isToPairFocused.current = true;\n }}\n />\n )}\n </FormInputContainer>\n </div>\n </div>\n\n <div className=\"w-full px-2\">\n {!walletPublicKey ? (\n <JupButton size=\"lg\" className=\"w-full mt-4 bg-primary !text-uiv2-text/75\" onClick={handleClick}>\n Connect Wallet\n </JupButton>\n ) : (\n <JupButton\n size=\"lg\"\n className={cn('w-full mt-4 disabled:opacity-50 !text-uiv2-text/75 !bg-primary ')}\n onClick={() => {\n onSubmit();\n onSubmitUltra();\n }}\n disabled={shouldButtonDisabled}\n >\n {loading ? (\n <span>Loading</span>\n ) : errors.fromValue ? (\n <span>{errors.fromValue.title}</span>\n ) : (\n <span>Swap</span>\n )}\n </JupButton>\n )}\n\n {quoteResponseMeta && fromTokenInfo && toTokenInfo ? (\n <PriceInfo\n quoteResponse={quoteResponseMeta}\n fromTokenInfo={fromTokenInfo}\n toTokenInfo={toTokenInfo}\n loading={loading}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nexport default Form;\n","import { PublicKey } from '@solana/web3.js';\n\nexport const MINIMUM_SOL_BALANCE = 0.01;\n\nexport const ROUTE_CACHE_DURATION = 20_000;\n\n\nexport const MAX_INPUT_LIMIT = 100_000_000_000_000;\n\nexport const WRAPPED_SOL_MINT = new PublicKey('So11111111111111111111111111111111111111112');\n","import * as React from 'react';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { useBalances } from 'src/hooks/useBalances';\n\ninterface ICoinBalanceProps {\n mintAddress: string;\n hideZeroBalance?: boolean;\n}\n\nconst CoinBalance: React.FunctionComponent<ICoinBalanceProps> = (props) => {\n const { data: balances } = useBalances();\n const { connected } = useWalletPassThrough();\n\n const formattedBalance: string | null = React.useMemo(() => {\n if (!balances) {\n return '0';\n }\n const accBalanceObj = balances[props.mintAddress];\n if (!accBalanceObj) return '0';\n\n const balance = accBalanceObj.uiAmount.toString();\n return balance;\n }, [balances, props.mintAddress]);\n\n if (props.hideZeroBalance && (formattedBalance === '0' || !formattedBalance)) return null;\n\n if (!connected) return null;\n return <span translate=\"no\">{formattedBalance}</span>;\n};\n\nexport default CoinBalance;\n","import React, { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { cn } from 'src/misc/cn';\n\ninterface IJupButton {\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n children: ReactNode;\n className?: ButtonHTMLAttributes<HTMLButtonElement>['className'];\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst JupButton = React.forwardRef(\n ({ onClick, disabled, children, className = '', size = 'md' }: IJupButton, ref: React.ForwardedRef<any>) => {\n const contentClass = (() => {\n if (size === 'sm') {\n return 'px-4 py-2.5 text-xs';\n }\n if (size === 'md') {\n return 'px-4 py-3 text-sm font-semibold';\n }\n if (size === 'lg') {\n return 'p-5 text-md font-semibold';\n }\n })();\n return (\n <button\n type={'button'}\n ref={ref}\n className={cn(\"rounded-xl\",{\n relative: true,\n 'opacity-50 cursor-not-allowed': disabled,\n [className]: true,\n })}\n disabled={disabled}\n onClick={onClick}\n >\n <div className={`${contentClass} h-full w-full leading-none`}>{children}</div>\n </button>\n );\n },\n);\n\nJupButton.displayName = 'JupButton';\n\nexport default JupButton;\n","import * as React from 'react';\nimport { Asset } from 'src/entity/SearchResponse';\nimport WarningIcon from 'src/icons/WarningIcon';\nimport { checkIsUnknownToken } from 'src/misc/tokenTags';\n\ninterface ITokenIconProps {\n info: Asset | null | undefined;\n width?: number;\n height?: number;\n enableUnknownTokenWarning?: boolean;\n}\n\nfunction genImageTransformURL(url: string) {\n const qs = new URLSearchParams({\n w: '48',\n h: '48',\n url: (() => {\n if (url.endsWith('/')) return url.slice(0, -1);\n return url;\n })(),\n });\n\n return `https://wsrv.nl/?${qs.toString()}`;\n}\nconst UnknownTokenImage: React.FC<{\n width: number;\n height: number;\n imageUrl: string;\n}> = ({ width, height, imageUrl }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-url={imageUrl}\n data-transformed-url={genImageTransformURL(imageUrl?.toString() || '')}\n >\n <path\n d=\"M12 0C18.6271 0 24 5.37288 24 12C24 18.6271 18.6269 24 12 24C5.37312 24 0 18.6286 0 12C0 5.37144 5.37216 0 12 0Z\"\n fill=\"#23C1AA\"\n />\n <path\n d=\"M10.79 14.55H12.89V14.355C12.89 13.925 13.01 13.55 13.25 13.23C13.49 12.91 13.765 12.605 14.075 12.315C14.315 12.085 14.545 11.85 14.765 11.61C14.985 11.36 15.165 11.09 15.305 10.8C15.455 10.5 15.53 10.16 15.53 9.78C15.53 9.25 15.395 8.75 15.125 8.28C14.855 7.8 14.45 7.41 13.91 7.11C13.38 6.8 12.725 6.645 11.945 6.645C11.305 6.645 10.725 6.765 10.205 7.005C9.69504 7.245 9.27504 7.575 8.94504 7.995C8.62504 8.415 8.42004 8.905 8.33004 9.465L10.415 9.99C10.475 9.61 10.64 9.31 10.91 9.09C11.19 8.86 11.515 8.745 11.885 8.745C12.315 8.745 12.64 8.85 12.86 9.06C13.09 9.26 13.205 9.52 13.205 9.84C13.205 10.15 13.09 10.425 12.86 10.665C12.63 10.895 12.37 11.155 12.08 11.445C11.77 11.765 11.475 12.14 11.195 12.57C10.925 13 10.79 13.545 10.79 14.205V14.55ZM10.73 18H12.98V15.75H10.73V18Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n\nconst TokenIcon: React.FunctionComponent<ITokenIconProps> = ({\n info,\n width = 32,\n height = 32,\n enableUnknownTokenWarning = true,\n}) => {\n const [transformerHasError, setTransformerHasError] = React.useState(false);\n const [hasError, setHasError] = React.useState(false);\n\n React.useEffect(() => {\n setHasError(false);\n }, [info]);\n\n const imageUrl = React.useMemo(() => {\n try {\n if (!info?.icon) return undefined;\n // Locally hosted images on our project\n if (typeof window !== 'undefined' && info?.icon?.startsWith('/'))\n return new URL(window.location.origin + info.icon);\n\n return info?.icon ? new URL(info.icon) : undefined;\n } catch (error) {\n return undefined;\n }\n }, [info?.icon]);\n\n const isUnknown = React.useMemo(() => {\n if (!enableUnknownTokenWarning) return false;\n if (info) {\n return checkIsUnknownToken(info);\n }\n }, [enableUnknownTokenWarning, info]);\n\n const ImageComp = React.useMemo(() => {\n // If transformerHasError and hasError, render this.\n if (!imageUrl || !info || (hasError && transformerHasError)) {\n return <UnknownTokenImage width={width} height={height} imageUrl={imageUrl?.toString() || ''} />;\n }\n\n // Then try direct URL\n if (transformerHasError) {\n return (\n // eslint-disable-next-line\n <img\n src={info.icon}\n alt={info.symbol}\n width={width}\n height={height}\n style={{ maxWidth: width, maxHeight: height }} \n className={`object-cover rounded-full`}\n onError={() => {\n setHasError(true);\n }}\n />\n );\n }\n\n // Try free transform image\n return (\n // eslint-disable-next-line\n <img\n src={genImageTransformURL(info.icon || '')}\n alt={info.symbol}\n width={width}\n height={height}\n style={{ maxWidth: width, maxHeight: height }}\n className={`object-cover rounded-full`}\n onError={() => {\n setTransformerHasError(true);\n }}\n />\n );\n }, [hasError, height, imageUrl, info, transformerHasError, width]);\n\n // not in the whitelisted domains, so we just use img tag\n return (\n <span className=\"relative\">\n {ImageComp}\n {isUnknown && (\n <WarningIcon\n width={Math.max(width * 0.6, 16)}\n height={Math.max(height * 0.6, 16)}\n className=\"absolute -p-1 text-warning -bottom-[2px] -right-[5px]\"\n />\n )}\n </span>\n );\n};\n\nexport default TokenIcon;\n","import * as React from 'react';\n\ninterface IWarningIconProps extends React.SVGProps<SVGSVGElement> {}\n\nconst WarningIcon: React.FunctionComponent<IWarningIconProps> = (props) => {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect x=\"8\" y=\"6\" width=\"4\" height=\"10\" fill=\"white\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.8634 15.6962C17.5539 15.1565 11.3038 4.37041 10.7692 3.44957C10.4179 2.8452 9.58075 2.85511 9.22912 3.44957C8.83702 4.11227 2.55515 14.9396 2.11839 15.7235C1.7984 16.2978 2.15189 17.0509 2.88009 17.0509H17.0974C17.7586 17.0509 18.2502 16.3695 17.8635 15.696L17.8634 15.6962ZM10.0005 15.6277C9.50937 15.6277 9.11108 15.2297 9.11108 14.7383C9.11108 14.247 9.50937 13.8489 10.0005 13.8489C10.4918 13.8489 10.8899 14.247 10.8899 14.7383C10.8899 15.2297 10.4918 15.6277 10.0005 15.6277ZM10.5341 12.7817C10.5341 13.1374 10.3562 13.3154 10.0005 13.3154C9.64474 13.3154 9.46681 13.1375 9.46681 12.7817L8.93314 7.62324C8.93314 7.08957 9.28887 6.5559 10.0005 6.5559C10.7119 6.5559 11.0678 7.08957 11.0678 7.62324L10.5341 12.7817Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default WarningIcon;\n","import React from 'react';\n\nconst WalletIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = 20, height = 20 }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 11 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2.0625 11H10.3125V2.75H8.59375V0H2.0625C0.923158 0 0 0.923158 0 2.0625V8.9375C0 10.0768 0.923158 11 2.0625 11ZM8.9375 4.125V9.625H2.0625C1.6825 9.625 1.375 9.3175 1.375 8.9375V4.00486C1.59589 4.08408 1.82818 4.12437 2.0625 4.12504L8.9375 4.125ZM2.0625 1.375H7.21875V2.75H2.0625C1.6825 2.75 1.375 2.4425 1.375 2.0625C1.375 1.6825 1.6825 1.375 2.0625 1.375Z\"\n fill=\"white\"\n fillOpacity=\"0.25\"\n />\n </svg>\n );\n};\n\nexport default WalletIcon;\n","import Decimal from 'decimal.js';\nimport { useMemo } from 'react';\nimport { formatNumber, hasNumericValue } from 'src/misc/utils';\nimport { Asset } from 'src/entity/SearchResponse';\n\ninterface ComponentProps {\n tokenInfo: Asset;\n amount?: number | string;\n maxDecimals?: number;\n prefix?: string;\n}\n\nexport const CoinBalanceUSD = (props: ComponentProps) => {\n const { tokenInfo, amount, maxDecimals, prefix = '' } = props;\n const tokenPrice = tokenInfo.usdPrice || 0;\n\n const amountInUSD = useMemo(() => {\n if (!amount || !hasNumericValue(amount)) return new Decimal(0);\n return new Decimal(amount).mul(tokenPrice);\n }, [amount, tokenPrice]);\n\n return (\n <>\n {prefix}${formatNumber.format(amountInUSD, maxDecimals || 2)}\n </>\n );\n};\n","import Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport { useMemo, useState } from 'react';\nimport { formatNumber } from 'src/misc/utils';\nimport ExchangeRate from '../ExchangeRate';\nimport TransactionFee from './TransactionFee';\nimport { QuoteResponse } from 'src/contexts/SwapContext';\nimport { cn } from 'src/misc/cn';\nimport { useUltraRouters } from 'src/queries/useUltraRouter';\nimport { Asset } from 'src/entity/SearchResponse';\n\nconst Index = ({\n quoteResponse,\n fromTokenInfo,\n toTokenInfo,\n loading,\n containerClassName,\n}: {\n quoteResponse: QuoteResponse;\n fromTokenInfo: Asset;\n toTokenInfo: Asset;\n loading: boolean;\n containerClassName?: string;\n}) => {\n const rateParams = {\n inAmount: quoteResponse?.quoteResponse.inAmount || JSBI.BigInt(0), // If there's no selectedRoute, we will use first route value to temporarily calculate\n inputDecimal: fromTokenInfo.decimals,\n outAmount: quoteResponse?.quoteResponse.outAmount || JSBI.BigInt(0), // If there's no selectedRoute, we will use first route value to temporarily calculate\n outputDecimal: toTokenInfo.decimals,\n };\n\n const { data: routerInfo } = useUltraRouters({\n select: (data) => {\n if (!quoteResponse) {\n return null;\n }\n return data.find((router) => router.id === quoteResponse.quoteResponse.router);\n },\n });\n\n const priceImpact = formatNumber.format(\n new Decimal(quoteResponse?.quoteResponse.priceImpactPct || 0).mul(100).toDP(2),\n );\n\n const priceImpactText = Number(priceImpact) < 0.01 ? undefined : `-${priceImpact}%`;\n const fee = useMemo(() => {\n if (!quoteResponse) {\n return 0;\n }\n return quoteResponse.quoteResponse.feeBps / 100;\n }, [quoteResponse]);\n\n const router = useMemo(() => {\n if (!quoteResponse) {\n return;\n }\n return quoteResponse.quoteResponse.router;\n }, [quoteResponse]);\n\n\n const gasFee = useMemo(() => {\n if (quoteResponse) {\n const { prioritizationFeeLamports } = quoteResponse.quoteResponse;\n if (prioritizationFeeLamports) {\n return prioritizationFeeLamports / 1e9; // Convert lamports to SOL\n }\n }\n return 0;\n }, [quoteResponse]);\n\n // const hasAtaDeposit = (feeInformation?.ataDeposits.length ?? 0) > 0;\n\n return (\n <div className={cn('mt-4 space-y-4 border border-white/5 rounded-xl', containerClassName)}>\n <div className=\"flex items-center justify-between text-xs\">\n <div className=\"text-primary-text/50\">{<span>Rate</span>}</div>\n {JSBI.greaterThan(rateParams.inAmount, JSBI.BigInt(0)) &&\n JSBI.greaterThan(rateParams.outAmount, JSBI.BigInt(0)) ? (\n <ExchangeRate\n loading={loading}\n rateParams={rateParams}\n fromTokenInfo={fromTokenInfo}\n toTokenInfo={toTokenInfo}\n reversible={true}\n />\n ) : (\n <span className=\"text-primary-text/50\">{'-'}</span>\n )}\n </div>\n\n {priceImpactText && (\n <div className=\"flex items-center justify-between text-xs text-primary-text/50\">\n <div>\n <span>Price Impact</span>\n </div>\n <div className=\"text-primary-text\">{priceImpactText}</div>\n </div>\n )}\n\n {router && (\n <div className=\"flex items-center justify-between text-xs\">\n <div className=\"text-primary-text/50\">\n <span>Router</span>\n </div>\n\n <div className=\"flex items-center gap-1\">\n {/* eslint-disable @next/next/no-img-element */}\n {routerInfo && (\n <>\n <img src={routerInfo.icon} alt={quoteResponse.quoteResponse.router} width={10} height={10} />\n <div className=\"text-primary-text\">{routerInfo.name}</div>\n </>\n )}\n </div>\n </div>\n )}\n <div className=\"flex items-center justify-between text-xs\">\n <div className=\"text-primary-text/50\">\n <span>Fee</span>\n </div>\n <div className=\"text-primary-text\">{fee}%</div>\n </div>\n <TransactionFee gasFee={gasFee} gasless={quoteResponse?.quoteResponse.gasless} />\n </div>\n );\n};\n\nexport default Index;\n","\nimport Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport * as React from 'react';\n\nimport { formatNumber, fromLamports } from '../misc/utils';\nimport PrecisionTickSize from './PrecisionTickSize';\nimport { cn } from 'src/misc/cn';\nimport { Asset } from 'src/entity/SearchResponse';\n\nexport interface IRateParams {\n inAmount: JSBI;\n inputDecimal: number;\n outAmount: JSBI;\n outputDecimal: number;\n}\n\nexport const calculateRate = (\n { inAmount, inputDecimal, outAmount, outputDecimal }: IRateParams,\n reverse: boolean,\n): Decimal => {\n const input = fromLamports(inAmount, inputDecimal);\n const output = fromLamports(outAmount, outputDecimal);\n\n const rate = !reverse ? new Decimal(input).div(output) : new Decimal(output).div(input);\n\n if (Number.isNaN(rate.toNumber())) {\n return new Decimal(0);\n }\n\n return rate;\n};\n\nconst ApproxSVG = ({ width = 16, height = 16 }: { width?: string | number; height?: string | number }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.8573 8.18429L13.6323 5.95933L10.8573 3.73438V5.31937H3.32735V6.59937H10.8573V8.18429ZM5.14223 7.81429L2.36719 10.0393L5.14223 12.2642V10.6792H12.6722V9.39922H5.14223V7.81429Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\ninterface ExchangeRateProps {\n className?: string;\n textClassName?: string;\n loading?: boolean;\n fromTokenInfo: Asset;\n rateParams: IRateParams;\n toTokenInfo: Asset;\n reversible?: boolean;\n}\n\nconst ExchangeRate = ({\n className,\n textClassName,\n loading = false,\n fromTokenInfo,\n rateParams,\n toTokenInfo,\n reversible = true,\n}: ExchangeRateProps) => {\n const [reverse, setReverse] = React.useState(reversible ?? true);\n\n const rate = React.useMemo(() => calculateRate(rateParams, reverse), [reverse, rateParams])\n\n const onReverse: React.MouseEventHandler = React.useCallback((event) => {\n event.stopPropagation();\n setReverse((prevState) => !prevState);\n }, []);\n\n return (\n <div\n className={cn(className, 'flex cursor-pointer text-primary-text text-xs align-center')}\n onClick={onReverse}\n >\n <span className={cn(textClassName, 'max-w-full flex whitespace-nowrap')}>\n {reverse ? (\n <>\n 1 {fromTokenInfo.symbol} ≈\n <div className='flex ml-0.5'>\n {rate.gt(0.000_01) ?\n (\n `${formatNumber.format(rate, 6)} ${toTokenInfo.symbol}`\n )\n : (\n <>\n <PrecisionTickSize value={rate.toNumber()} maxSuffix={6} /> {toTokenInfo.symbol}\n </>\n )}\n </div>\n </>\n ) : (\n <>\n 1 {toTokenInfo.symbol} ≈\n <div className='flex ml-0.5'>\n\n {rate.gt(0.000_01) ?\n (\n `${formatNumber.format(rate, 6)} ${fromTokenInfo.symbol}`\n )\n : (\n <>\n <PrecisionTickSize value={rate.toNumber()} maxSuffix={6} /> {fromTokenInfo.symbol}\n </>\n )}\n </div>\n </>\n )}\n </span>\n {reversible ? (\n <div className={'ml-2'}>\n <ApproxSVG />\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default ExchangeRate;\n","import React from 'react';\nimport Decimal from 'decimal.js';\n\nfunction generateSubscriptNumbers(x: number): string {\n const subscriptNumbers: string[] = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'];\n const xString: string = x.toString();\n let result: string = '';\n\n for (let i = 0; i < xString.length; i++) {\n const digit: number = parseInt(xString.charAt(i), 10);\n const subscriptNumber: string = subscriptNumbers[digit];\n result += subscriptNumber;\n }\n\n return result;\n}\n\nconst usePrecisionTick = (value: number): [number, string, string] => {\n const firstSD = Decimal.abs(Decimal.ceil(new Decimal(-1).mul(Decimal.log10(value)))).toNumber();\n const [prefix, suffix] = [\n new Decimal(value).toFixed().slice(0, firstSD + 2), // +2 to account for 0.\n new Decimal(value).toFixed().slice(firstSD + 1), // +1 to account for 0. - and slice index\n ];\n\n return [firstSD, prefix, suffix];\n};\n\nconst PrecisionTickSize: React.FC<{ value: number; maxSuffix?: number }> = ({ value, maxSuffix }) => {\n const [firstSD, _, suffix] = usePrecisionTick(value);\n\n if (firstSD <= 5) {\n return <span>{value.toFixed(6)}</span>;\n }\n\n return (\n <span className='flex items-center h-4'>\n 0.0\n <span className='mb-3 text-xl mx-0.5'>{generateSubscriptNumbers(firstSD - 1)}</span>\n {suffix.slice(0, maxSuffix)}\n </span>\n );\n};\n\nexport default PrecisionTickSize;\n","import React, { SVGProps } from 'react';\n\nexport const UltraIcon: React.FC<React.SVGAttributes<SVGElement>> = (props) => {\n return (\n <svg viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" width=\"1em\" {...props}>\n <g clipPath=\"url(#clip0_1785_33901)\">\n <path\n d=\"M7.20001 7.86127C7.45429 7.86127 7.69815 7.96228 7.87795 8.14208C8.05775 8.32188 8.15876 8.56574 8.15876 8.82002C8.15876 8.56574 8.25977 8.32188 8.43957 8.14208C8.61937 7.96228 8.86324 7.86127 9.11751 7.86127C8.86324 7.86127 8.61937 7.76026 8.43957 7.58046C8.25977 7.40066 8.15876 7.15679 8.15876 6.90252C8.15876 7.15679 8.05775 7.40066 7.87795 7.58046C7.69815 7.76026 7.45429 7.86127 7.20001 7.86127ZM7.20001 2.10877C7.45429 2.10877 7.69815 2.20978 7.87795 2.38958C8.05775 2.56938 8.15876 2.81324 8.15876 3.06752C8.15876 2.81324 8.25977 2.56938 8.43957 2.38958C8.61937 2.20978 8.86324 2.10877 9.11751 2.10877C8.86324 2.10877 8.61937 2.00776 8.43957 1.82796C8.25977 1.64816 8.15876 1.40429 8.15876 1.15002C8.15876 1.40429 8.05775 1.64816 7.87795 1.82796C7.69815 2.00776 7.45429 2.10877 7.20001 2.10877Z\"\n stroke=\"currentColor\"\n strokeWidth=\"0.95875\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.09971 1.42435C4.08095 1.37314 4.04691 1.32892 4.00219 1.29768C3.95748 1.26644 3.90425 1.24969 3.84971 1.24969C3.79517 1.24969 3.74194 1.26644 3.69723 1.29768C3.65251 1.32892 3.61847 1.37314 3.59971 1.42435L3.34534 2.11935C3.1457 2.6643 2.82969 3.15919 2.41931 3.56957C2.00893 3.97996 1.51403 4.29596 0.969084 4.4956L0.274086 4.74998C0.222871 4.76874 0.178655 4.80279 0.147417 4.8475C0.116179 4.89221 0.0994263 4.94543 0.0994263 4.99998C0.0994263 5.05452 0.116179 5.10775 0.147417 5.15246C0.178655 5.19717 0.222871 5.23122 0.274086 5.24998L0.969084 5.50435C1.51403 5.70399 2.00893 6.02001 2.41931 6.43039C2.82969 6.84077 3.1457 7.33566 3.34534 7.88061L3.59971 8.5756C3.61847 8.62681 3.65251 8.67103 3.69723 8.70227C3.74194 8.7335 3.79517 8.75026 3.84971 8.75026C3.90425 8.75026 3.95748 8.7335 4.00219 8.70227C4.04691 8.67103 4.08095 8.62681 4.09971 8.5756L4.35409 7.88061C4.55372 7.33566 4.86973 6.84077 5.28011 6.43039C5.69049 6.02001 6.18538 5.70399 6.73033 5.50435L7.42533 5.24998C7.47654 5.23122 7.52076 5.19717 7.552 5.15246C7.58323 5.10775 7.59999 5.05452 7.59999 4.99998C7.59999 4.94543 7.58323 4.89221 7.552 4.8475C7.52076 4.80279 7.47654 4.76874 7.42533 4.74998L6.73033 4.4956C6.18538 4.29596 5.8125 3.97995 5.40212 3.56957C4.99174 3.15919 4.55372 2.6643 4.35409 2.11935L4.09971 1.42435Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1785_33901\">\n <rect width=\"10\" height=\"10\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import React from 'react';\nimport { cn } from 'src/misc/cn';\nimport { UltraIcon } from 'src/icons/UltraIcon';\n\nconst TransactionFee = ({ gasFee, gasless }: { gasFee: number | undefined; gasless: boolean }) => {\n if (!gasFee) return null;\n return (\n <div className=\"flex items-center justify-between text-xs\">\n <div className=\"flex w-[50%] text-primary-text/50\">\n <span>Network Fee</span>\n </div>\n <div className=\"flex items-center gap-1\">\n {gasless && (\n <>\n <UltraIcon color=\"#FDB022\" width={12} height={12} />\n <div className=\"text-xs text-primary-text\">Gasless</div>\n </>\n )}\n <div\n className={cn('text-primary-text', {\n 'line-through': gasless,\n })}\n >\n {gasFee} SOL\n </div>\n </div>\n </div>\n );\n};\n\nexport default TransactionFee;\n","import { useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport { ultraSwapService } from 'src/data/UltraSwapService';\nimport { RouterResponse } from 'src/data/UltraSwapService';\n\nexport const useUltraRouters = <TQueryData = RouterResponse, TData = TQueryData>(\n options?: Omit<UseQueryOptions<TQueryData, unknown, TData>, 'queryKey' | 'queryFn'>,\n) => {\n return useQuery<TQueryData, unknown, TData>({\n queryKey: ['routers'],\n queryFn: () => ultraSwapService.getRouters() as TQueryData,\n cacheTime: Infinity,\n staleTime: Infinity,\n ...options,\n });\n};\n","import React from 'react';\nimport { cn } from 'src/misc/cn';\n\nconst IconSwitchPairDark = () => (\n <svg width={20} height={20} viewBox=\"0 0 21 22\" fill=\"white\" fillOpacity={0.5} xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.51043 7.47998V14.99H7.77043V7.47998L9.66043 9.36998L10.5505 8.47994L7.5859 5.51453C7.3398 5.26925 6.94114 5.26925 6.69504 5.51453L3.73047 8.47994L4.62051 9.36998L6.51043 7.47998Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.4902 14.52V7.01001H13.2302V14.52L11.3402 12.63L10.4502 13.5201L13.4148 16.4855C13.6609 16.7308 14.0595 16.7308 14.3056 16.4855L17.2702 13.5201L16.3802 12.63L14.4902 14.52Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nconst SwitchPairButton = ({\n className,\n onClick,\n disabled,\n}: {\n className?: string;\n onClick(): void;\n disabled?: boolean;\n}) => {\n return (\n <div className=\"flex justify-center bg-background rounded-full\">\n <div\n onClick={onClick}\n className={cn(\n 'border-[3px] border-background fill-current text-black bg-interactive hover:bg-interactive/80 dark:text-primary-text-35 dark:hover:border-primary dark:border dark:border-white-35 h-8 w-8 rounded-full flex items-center justify-center cursor-pointer',\n className,\n {\n 'opacity-50 cursor-not-allowed': disabled,\n },\n )}\n >\n <IconSwitchPairDark />\n </div>\n </div>\n );\n};\n\nexport default SwitchPairButton;\n","import React, { useEffect, useState } from 'react';\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport { ROUTE_CACHE_DURATION } from 'src/misc/constants';\n\nconst useTimeDiff = (): [boolean, number] => {\n const { lastRefreshTimestamp } = useSwapContext();\n\n const [hasExpired, setHasExpired] = React.useState(false);\n const [timeDiff, setTimeDiff] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n if (!lastRefreshTimestamp) {\n return;\n }\n \n const value = Date.now() > lastRefreshTimestamp + ROUTE_CACHE_DURATION;\n\n const elapsedSeconds = (Date.now() - (lastRefreshTimestamp + ROUTE_CACHE_DURATION)) / 1_000;\n setTimeDiff((elapsedSeconds / (ROUTE_CACHE_DURATION / 1_000)) * 100);\n setHasExpired(value);\n }, 1000);\n\n return () => clearInterval(intervalId);\n }, [lastRefreshTimestamp]);\n\n return [hasExpired, timeDiff];\n};\n\nexport default useTimeDiff;\n","import { useQuery } from '@tanstack/react-query';\nimport { Severity, ultraSwapService, Warning } from 'src/data/UltraSwapService';\nimport { useMobile } from 'src/hooks/useMobile';\nimport PopoverTooltip from './Tooltip/PopoverTooltip';\nimport { cn } from 'src/misc/cn';\nimport { useCallback } from 'react';\nimport Plural from './Plural';\nimport WarningIcon from 'src/icons/WarningIcon';\nimport InfoIcon from 'src/icons/InfoIcon';\n\nconst parseShieldWarningtoSentenceCase = (warning: { type: string }) => {\n const str = warning.type.replace(/_/g, ' ');\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n};\n\nconst JupShieldIcon: React.FC<React.SVGAttributes<SVGElement>> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" width=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <g fill=\"none\">\n <path\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n d=\"M3 10.417c0-3.198 0-4.797.378-5.335c.377-.537 1.88-1.052 4.887-2.081l.573-.196C10.405 2.268 11.188 2 12 2s1.595.268 3.162.805l.573.196c3.007 1.029 4.51 1.544 4.887 2.081C21 5.62 21 7.22 21 10.417v1.574c0 5.638-4.239 8.375-6.899 9.536C13.38 21.842 13.02 22 12 22s-1.38-.158-2.101-.473C7.239 20.365 3 17.63 3 11.991z\"\n />\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\" d=\"M12 8v4\" />\n <circle cx=\"12\" cy=\"15\" r=\"1\" fill=\"currentColor\" />\n </g>\n </svg>\n );\n};\n\nconst Warnings = ({\n warning,\n children,\n isHighRisk,\n}: {\n warning: Warning;\n children: React.ReactNode;\n isHighRisk: boolean;\n}) => {\n const warningTitle = useCallback((warning: Warning) => {\n return parseShieldWarningtoSentenceCase(warning);\n }, []);\n\n return (\n <div key={warning.type} className=\"flex gap-1\">\n {children}\n <div className=\"flex flex-1 flex-col\">\n <span className={cn('text-neutral-300', isHighRisk && 'text-warning')}>{warningTitle(warning)}</span>\n <span className={cn('text-neutral-500', isHighRisk && 'text-amber-200')}>{warning.message}</span>\n </div>\n </div>\n );\n};\nconst JupShield = ({ tokenAddress }: { tokenAddress: string }) => {\n const isMobile = useMobile();\n const { data, isFetching } = useQuery({\n queryKey: ['shield', tokenAddress],\n queryFn: () => ultraSwapService.getShield([tokenAddress]),\n cacheTime: 5 * 60_000,\n staleTime: 5 * 60_000,\n keepPreviousData: true,\n select: (data) => {\n const warnings = data.warnings[tokenAddress];\n return {\n isNotVerified: warnings.find((warning) => warning.type === 'NOT_VERIFIED'),\n totalWarnings: warnings.length,\n highRiskWarnings: warnings.filter(\n (warning) => warning.severity === Severity.CRITICAL || warning.severity === Severity.WARNING,\n ),\n otherWarnings: warnings.filter((warning) => warning.severity === Severity.INFO),\n };\n },\n });\n\n if (!data || data.totalWarnings === 0) return null;\n\n const { isNotVerified, totalWarnings, highRiskWarnings, otherWarnings } = data;\n if (!isNotVerified) return null;\n\n return (\n <PopoverTooltip\n persistOnClick={isMobile}\n placement=\"bottom\"\n drawShades\n buttonContentClassName=\"!cursor-help\"\n offset={[120, 5]}\n content={\n <div className=\"flex flex-col gap-y-2 p-0 w-[260px]\">\n <div className=\"text-sm font-semibold text-warning\">\n {totalWarnings} JupShield <Plural one=\"Warning\" other=\"Warnings\" value={totalWarnings} />\n </div>\n\n {highRiskWarnings.length > 0 && (\n <div className=\"flex flex-col gap-y-2 rounded-md bg-warning/[8%] p-2\">\n {highRiskWarnings.map((warning) => (\n <Warnings key={warning.type} warning={warning} isHighRisk={true}>\n <InfoIcon width={15} height={15} className=\"text-warning\" />\n </Warnings>\n ))}\n </div>\n )}\n\n {otherWarnings.length > 0 && (\n <div className={cn('flex flex-col gap-y-2', highRiskWarnings.length > 0 && 'p-2')}>\n {otherWarnings.map((warning) => (\n <Warnings key={warning.type} warning={warning} isHighRisk={false}>\n <InfoIcon width={15} height={15} />\n </Warnings>\n ))}\n </div>\n )}\n </div>\n }\n >\n <div className={cn('mt-1 flex items-center gap-x-1', isFetching && 'blur-sm')}>\n <JupShieldIcon width={15} height={15} className=\"text-warning\" />\n <span\n className={cn(\n '!text-xxs font-semibold text-warning underline decoration-warning decoration-dashed underline-offset-4',\n )}\n >\n {totalWarnings} Warnings\n </span>\n </div>\n </PopoverTooltip>\n );\n};\n\nexport default JupShield;\n","import { useState } from 'react';\nimport { useIsomorphicLayoutEffect } from 'react-use';\n\nexport const useMobile = () => {\n const [isDesktop, setIsDesktop] = useState<boolean>(false);\n\n useIsomorphicLayoutEffect(() => {\n function updateSize() {\n const desktopQuery = window.matchMedia('(min-width: 1024px)');\n setIsDesktop(desktopQuery.matches);\n }\n\n // Initial check\n updateSize();\n\n // Listen to resize events\n window.addEventListener('resize', updateSize);\n return () => window.removeEventListener('resize', updateSize);\n }, []);\n\n // Initially, the state will be false (indicating non-desktop)\n // until the effect runs on the client side.\n return !isDesktop;\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { Placement, PositioningStrategy } from '@popperjs/core';\nimport { usePopper } from 'react-popper';\nimport debounce from 'lodash.debounce';\nimport { cn } from 'src/misc/cn';\nimport { useMobile } from 'src/hooks/useMobile';\nimport { useOutsideClick } from 'src/misc/utils';\n\ninterface IPopoverProps {\n id: string;\n buttonContent: React.ReactNode;\n popoverContent: React.ReactNode | null;\n placement: Placement;\n trigger?: 'click' | 'hover';\n /* popover stay open onClick, normally it's for where popover text is intended to be read by users */\n persistOnClick?: boolean;\n contentClassName?: string;\n buttonContentClassName?: string;\n strategy?: PositioningStrategy;\n isOpen?: boolean;\n onClose?: () => void;\n matchWidth?: boolean;\n offset?: [number, number];\n arrow?: boolean;\n drawShades?: boolean;\n}\n\nconst Popover: React.FunctionComponent<IPopoverProps> = ({\n placement = 'auto',\n trigger = 'click',\n persistOnClick = true,\n strategy = 'fixed',\n arrow = false,\n buttonContent,\n popoverContent,\n contentClassName,\n buttonContentClassName,\n isOpen,\n onClose,\n matchWidth,\n offset,\n drawShades = false,\n}) => {\n const isLocalMode = useMemo(\n () => typeof isOpen === 'undefined',\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const isMobile = useMobile();\n const [localOpen, setLocalOpen] = useState<boolean>(isLocalMode ? false : true);\n\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null);\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n\n const shouldShowArrow = useMemo(() => Boolean(popoverContent) && arrow, [popoverContent, arrow]);\n\n const modifiers = offset\n ? [\n {\n name: 'offset',\n options: {\n offset,\n },\n },\n ]\n : undefined;\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n strategy,\n placement,\n modifiers,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleClose = useCallback(\n debounce(\n () => {\n if (isLocalMode) {\n setLocalOpen(false);\n } else if (onClose) {\n onClose();\n }\n },\n // persistOnClick makes sure Tooltip stays open when user click on it\n // to make sure that if user hover to content, we don't close it\n trigger === 'hover' && persistOnClick ? 50 : 0,\n ),\n [setLocalOpen, isLocalMode, onClose, trigger, persistOnClick],\n );\n\n const handleOpen = useCallback(() => {\n handleClose.cancel();\n setLocalOpen(true);\n }, [setLocalOpen, handleClose]);\n\n useOutsideClick({ current: popperElement }, handleClose);\n\n const onClick = () => {\n if (isLocalMode) {\n if ((persistOnClick && trigger === 'hover') || trigger === 'click') {\n handleOpen();\n }\n } else if (isOpen && onClose) {\n onClose();\n }\n };\n\n const shouldRenderContent = isLocalMode ? localOpen : isOpen;\n const hoverProps =\n trigger === 'hover'\n ? isMobile\n ? {\n onTouchStart: handleOpen,\n onTouchEnd: handleClose,\n }\n : {\n onMouseEnter: handleOpen,\n onMouseLeave: handleClose,\n }\n : {};\n\n return (\n <>\n <div\n ref={setReferenceElement}\n onClick={onClick}\n className={cn(buttonContentClassName, {\n 'z-50': shouldRenderContent,\n })}\n {...hoverProps}\n >\n {buttonContent}\n </div>\n {shouldRenderContent && (\n <div\n id=\"tooltip\"\n ref={setPopperElement}\n style={{ ...styles.popper, maxWidth: matchWidth ? referenceElement?.clientWidth : 'auto' }}\n {...attributes.popper}\n {...hoverProps}\n className={cn(\n 'rounded-lg w-auto bg-none shadow-xl dark:bg-white/5 backdrop-blur-xl transition-opacity opacity-0',\n contentClassName,\n {\n 'z-50 opacity-100': shouldRenderContent,\n },\n )}\n >\n {popoverContent}\n {shouldShowArrow ? (\n <div\n id=\"arrow\"\n className=\"before:absolute absolute before:w-2 w-2 before:h-2 h-2 before:bg-inherit bg-inherit before:visible before:rotate-45 invisible\"\n data-popper-arrow\n ></div>\n ) : null}\n </div>\n )}\n\n <div\n className={cn('fixed top-0 left-0 w-full h-full transition-all opacity-0 pointer-events-none z-[-1]', {\n '!backdrop-blur-xxs !bg-black/20 opacity-100 pointer-events-auto z-40': drawShades && shouldRenderContent,\n })}\n onClick={handleClose}\n />\n </>\n );\n};\n\nexport default Popover;\n","import { Placement, PositioningStrategy } from '@popperjs/core';\nimport React from 'react';\nimport Popover from '../Popover/Popover';\nimport { cn } from 'src/misc/cn';\n\ninterface TooltipProps {\n content: string | React.ReactNode;\n disabled?: boolean;\n placement?: Placement;\n offset?: [number, number];\n variant?: 'dark' | 'light';\n persistOnClick?: boolean;\n buttonContentClassName?: string;\n contentClassName?: string;\n drawShades?: boolean;\n strategy?: PositioningStrategy;\n}\n\nconst PopoverTooltip: React.FC<React.PropsWithChildren<TooltipProps>> = ({\n content,\n disabled = false,\n variant = 'dark',\n children,\n offset,\n placement,\n persistOnClick,\n buttonContentClassName,\n contentClassName,\n drawShades,\n strategy,\n}) => {\n return (\n <Popover\n placement={placement || 'top'}\n buttonContent={children}\n buttonContentClassName={buttonContentClassName}\n offset={offset || [0, 2.5]}\n contentClassName={contentClassName}\n drawShades={drawShades}\n popoverContent={\n content && (\n <div\n className={cn('p-2 rounded-lg max-w-[360px] w-full text-xs', {\n 'bg-white text-black': variant === 'light',\n 'bg-black text-primary-text': variant === 'dark',\n 'group-hover:visible group-hover:z-50': !disabled,\n })}\n >\n {content}\n </div>\n )\n }\n id=\"TooltipPopover\"\n trigger={persistOnClick ? 'click' : 'hover'}\n persistOnClick={persistOnClick}\n strategy={strategy}\n ></Popover>\n );\n};\n\nexport default PopoverTooltip;\n","interface PluralProps {\n value: number;\n one: string;\n other: string;\n }\n \n const Plural: React.FC<PluralProps> = ({ value, one, other }) => {\n return <>{value === 1 ? one.replace('#', value.toString()) : other.replace('#', value.toString())}</>;\n };\n \n export default Plural;\n ","import React from 'react';\n\nconst InfoIcon: React.FC<React.SVGAttributes<SVGElement>> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" width=\"1em\" viewBox=\"0 0 256 256\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m-8-80V80a8 8 0 0 1 16 0v56a8 8 0 0 1-16 0m20 36a12 12 0 1 1-12-12a12 12 0 0 1 12 12\"\n ></path>\n </svg>\n );\n};\n\nexport default InfoIcon;\n","import React, { createRef, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { FixedSizeList, ListChildComponentProps, areEqual } from 'react-window';\nimport LeftArrowIcon from 'src/icons/LeftArrowIcon';\nimport SearchIcon from 'src/icons/SearchIcon';\nimport debounce from 'lodash.debounce';\nimport FormPairRow from './FormPairRow';\nimport { cn } from 'src/misc/cn';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { useSearch } from 'src/hooks/useSearch';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { sortByUserBalance } from 'src/misc/utils';\n\nexport const PAIR_ROW_HEIGHT = 72;\nconst SEARCH_BOX_HEIGHT = 56;\n\n// eslint-disable-next-line react/display-name\nconst rowRenderer = memo((props: ListChildComponentProps) => {\n const { data, index, style } = props;\n const item = data.searchResult[index];\n return <FormPairRow key={item.address} item={item} style={style} onSubmit={data.onSubmit} />;\n}, areEqual);\n\ninterface IFormPairSelector {\n onSubmit: (value: Asset) => void;\n onClose: () => void;\n}\nconst FormPairSelector = ({ onSubmit, onClose }: IFormPairSelector) => {\n const [search, setSearch] = useState<string>('');\n const { data: balances = {} } = useBalances();\n\n // empty query returns all blue chip tokens\n const { data: blueChipTokens = [] } = useSearch([]);\n const { data: searchTokens = [], isLoading } = useSearch([search], { staleTime: 5 * 60 * 1000 });\n const { data: userBalanceTokens = [] } = useSearch([Object.keys(balances).join(',')]);\n\n const searchResult = useMemo(() => {\n // if no search, return user balance tokens and blue chip tokens\n if (!search) {\n return sortByUserBalance([...userBalanceTokens, ...blueChipTokens], balances);\n } else {\n return sortByUserBalance(searchTokens, balances);\n }\n }, [blueChipTokens, balances, searchTokens, search, userBalanceTokens]);\n\n // Update triggerSearch to use cached user balance tokens\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const triggerSearch = useCallback(\n debounce(async (value: string) => {\n setSearch(value);\n }, 200),\n [blueChipTokens],\n );\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch('');\n triggerSearch(e.target.value);\n },\n [triggerSearch],\n );\n\n const listRef = createRef<FixedSizeList>();\n const inputRef = createRef<HTMLInputElement>();\n useEffect(() => inputRef.current?.focus(), [inputRef]);\n\n return (\n <div className=\"flex flex-col h-full w-full py-4 px-2 bg-black\">\n <div className=\"flex w-full justify-between\">\n <div className=\"text-primary-text fill-current w-6 h-6 cursor-pointer\" onClick={onClose}>\n <LeftArrowIcon width={24} height={24} />\n </div>\n\n <div className=\"text-primary-text\">Select Token</div>\n\n <div className=\" w-6 h-6\" />\n </div>\n\n <div\n className=\"flex px-5 mt-4 w-[98%] rounded-xl bg-module\"\n style={{ height: SEARCH_BOX_HEIGHT, maxHeight: SEARCH_BOX_HEIGHT }}\n >\n <SearchIcon />\n\n <input\n autoComplete=\"off\"\n className=\"w-full rounded-xl ml-4 truncate bg-transparent text-primary-text placeholder:text-primary-text/50\"\n placeholder={`Search`}\n onChange={(e) => onChange(e)}\n ref={inputRef}\n />\n </div>\n\n <div className=\"mt-2\" style={{ flexGrow: 1 }}>\n {searchResult && searchResult.length > 0 && (\n <AutoSizer>\n {({ height, width }: { height: number; width: number }) => {\n return (\n <FixedSizeList\n ref={listRef}\n height={height}\n itemCount={searchResult.length}\n itemSize={PAIR_ROW_HEIGHT}\n width={width - 2} // -2 for scrollbar\n itemData={{\n searchResult,\n onSubmit,\n }}\n className={cn('overflow-y-scroll mr-1 min-h-[12rem] px-5 webkit-scrollbar')}\n >\n {rowRenderer}\n </FixedSizeList>\n );\n }}\n </AutoSizer>\n )}\n\n {isLoading ? (\n <div className=\"mt-4 mb-4 text-center text-primary-text/50\">\n <span>Loading...</span>\n </div>\n ) : searchResult && searchResult.length === 0 ? (\n <div className=\"mt-4 mb-4 text-center text-primary-text/50\">\n <span>No tokens found</span>\n </div>\n ) : (\n <></>\n )}\n </div>\n </div>\n );\n};\n\nexport default FormPairSelector;\n","import * as React from 'react';\n\nconst LeftArrowIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = '12', height = '12' }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 53 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M17.3336 23.8334H43.7062V28.1667H17.3336L28.9555 39.7887L25.8919 42.8524L9.03955 26L25.8919 9.14771L28.9555 12.2114L17.3336 23.8334Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default LeftArrowIcon;\n","const SearchIcon = () => {\n return (\n <div className=\"flex items-center text-primary-text fill-current\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"inherit\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.30327 14.6058C8.75327 14.6074 10.1705 14.1746 11.3729 13.3637L15.5971 17.5871C16.1463 18.1371 17.0377 18.1371 17.5877 17.5871C18.1377 17.0371 18.1377 16.1457 17.5877 15.5964L13.3643 11.3722C14.5823 9.55661 14.9229 7.28943 14.2909 5.19563C13.6596 3.10183 12.1229 1.40183 10.1033 0.56283C8.08365 -0.276231 5.79385 -0.16607 3.86505 0.86283C1.93537 1.89251 0.569053 3.73243 0.140853 5.87683C-0.286487 8.02143 0.269759 10.2448 1.65725 11.9354C3.04397 13.6261 5.11665 14.6064 7.30325 14.6058H7.30327ZM7.30327 1.68943C8.79233 1.68865 10.2197 2.28005 11.2729 3.33319C12.3252 4.38631 12.9166 5.81359 12.9166 7.30279C12.9166 8.79199 12.3252 10.2192 11.2729 11.2724C10.2198 12.3247 8.79247 12.9162 7.30327 12.9162C5.81407 12.9162 4.38687 12.3247 3.33367 11.2724C2.28133 10.2193 1.68913 8.79199 1.68991 7.30279C1.69148 5.81451 2.28287 4.38719 3.33523 3.33479C4.38759 2.28239 5.81483 1.69103 7.30323 1.68947L7.30327 1.68943Z\"\n fill=\"inherit\"\n fillOpacity=\"0.25\"\n />\n </svg>\n </div>\n );\n};\n\nexport default SearchIcon;\n","import React, { CSSProperties, useEffect, useMemo, useRef } from 'react';\nimport Decimal from 'decimal.js';\nimport { WRAPPED_SOL_MINT } from 'src/constants';\nimport { checkIsStrictOrVerified, checkIsToken2022 } from 'src/misc/tokenTags';\nimport { formatNumber, hasNumericValue } from 'src/misc/utils';\nimport TokenIcon from './TokenIcon';\nimport TokenLink from './TokenLink';\nimport CoinBalance from './Coinbalance';\nimport CheckedBadge from './CheckedBadge';\nimport { useLstApyFetcher } from 'src/queries/useLstApy';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { ASSET_QUERY_KEY } from 'src/hooks/useAsset';\n\nexport const PAIR_ROW_HEIGHT = 72;\n\nexport interface IPairRow {\n usdValue?: Decimal;\n item: Asset;\n style: CSSProperties;\n onSubmit(item: Asset): void;\n suppressCloseModal?: boolean;\n showExplorer?: boolean;\n enableUnknownTokenWarning?: boolean;\n isLST?: boolean;\n}\n\ninterface IMultiTag {\n isVerified: boolean;\n isLST: boolean;\n // isUnknown: boolean;\n isToken2022: boolean;\n isFrozen: boolean;\n}\n\nconst LSTTag: React.FC<{ mintAddress: string }> = ({ mintAddress }) => {\n const { data: lstApy } = useLstApyFetcher();\n\n const apy = useMemo(() => {\n if (!lstApy) return;\n\n const value = lstApy.apys[mintAddress];\n if (value && hasNumericValue(value)) {\n return new Decimal(value).mul(100).toDP(2).toString();\n }\n return;\n }, [lstApy, mintAddress]);\n\n return (\n <p className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 text-primary/50 border border-primary/50 font-semibold\">\n LST {apy ? `${apy}%` : ''}\n </p>\n );\n};\n\nconst MultiTags: React.FC<IPairRow> = ({ item }) => {\n const { data: balances } = useBalances();\n const isLoading = useRef<boolean>(false);\n const isLoaded = useRef<boolean>(false);\n // It's cheaper to slightly delay and rendering once, than rendering everything all the time\n const [renderedTag, setRenderedTag] = React.useState<IMultiTag>({\n isVerified: false,\n isLST: false,\n // isUnknown: false,\n isToken2022: false,\n isFrozen: false,\n });\n\n useEffect(() => {\n if (isLoaded.current || isLoading.current) return;\n\n isLoading.current = true;\n setTimeout(() => {\n const result = {\n isVerified: checkIsStrictOrVerified(item),\n isLST: Boolean(item.tags?.includes('lst')),\n // isUnknown: checkIsUnknownToken(item),\n isToken2022: Boolean(checkIsToken2022(item)),\n isFrozen: balances?.[item.id]?.isFrozen || false,\n };\n setRenderedTag(result);\n isLoading.current = false;\n isLoaded.current = true;\n }, 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const remainingTags: string[] = []; // we use to show 'pump'\n\n if (!renderedTag) return null;\n\n const { isToken2022, isFrozen, isLST } = renderedTag;\n\n return (\n <div className=\"flex justify-end gap-x-1\">\n {isFrozen && (\n <p className=\"border rounded-md text-xxs leading-none transition-all py-0.5 px-1 border-warning/50 text-warning/50\">\n Frozen\n </p>\n )}\n\n {isToken2022 && (\n <p className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 bg-black/10 font-semibold text-primary-text/20\">\n Token2022\n </p>\n )}\n {remainingTags?.map((tag, idx) => (\n <div\n key={idx}\n className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 bg-black/10 font-semibold text-primary-text/20\"\n >\n {tag}\n </div>\n ))}\n\n {isLST && <LSTTag mintAddress={item.id} />}\n </div>\n );\n};\n\nconst FormPairRow = (props: IPairRow) => {\n const {\n item,\n style,\n onSubmit,\n suppressCloseModal,\n showExplorer = true,\n enableUnknownTokenWarning = true,\n } = props;\n const queryClient = useQueryClient();\n const onClick = React.useCallback(() => {\n // Optimistically update for useAsset hook\n queryClient.setQueryData([...ASSET_QUERY_KEY, item.id], [item]);\n onSubmit(item);\n\n if (suppressCloseModal) return;\n }, [onSubmit, item, suppressCloseModal, queryClient]);\n const { data: balances } = useBalances();\n const balance = balances?.[item.id]?.uiAmount;\n const usdValue = balance ? new Decimal(balance).mul(item.usdPrice || 0) : undefined;\n const usdValueDisplay =\n usdValue && usdValue.gte(0.01) // If smaller than 0.01 cents, dont show\n ? `$${formatNumber.format(usdValue, 2)}` // USD value can hardcode to 2\n : '';\n\n return (\n <li\n className={`rounded cursor-pointer px-5 my-1 list-none flex w-full items-center bg-interactive hover:bg-interactive/80`}\n style={{ maxHeight: PAIR_ROW_HEIGHT - 4, height: PAIR_ROW_HEIGHT - 4, ...style }}\n onClick={onClick}\n translate=\"no\"\n >\n <div className=\"flex h-full w-full items-center space-x-4\">\n <div className=\"flex-shrink-0\">\n <div className=\"bg-gray-200 rounded-full\">\n <TokenIcon info={item} width={36} height={36} enableUnknownTokenWarning={enableUnknownTokenWarning} />\n </div>\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-col gap-y-px\">\n <div className=\"flex items-center\">\n <p className=\"text-sm font-medium text-primary-text truncate\">{item.symbol}</p>\n\n {checkIsStrictOrVerified(item) && (\n <p className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 text-primary\">\n <CheckedBadge width={18} height={18} />\n </p>\n )}\n </div>\n\n <p className=\"text-xs text-primary-text/50 dark:text-primary-text-35 truncate\">\n {item.id === WRAPPED_SOL_MINT.toBase58() ? 'Solana' : item.name}\n </p>\n\n {/* Intentionally higher z to be clickable */}\n {showExplorer ? (\n <div className=\"-ml-1 z-10 w-fit\" onClick={(e) => e.stopPropagation()}>\n <TokenLink tokenInfo={item} />\n </div>\n ) : null}\n </div>\n </div>\n\n <div className=\"text-xs text-primary-text/50 text-right h-full flex flex-col justify-evenly\">\n <CoinBalance mintAddress={item.id} hideZeroBalance />\n {usdValueDisplay ? <p>{usdValueDisplay}</p> : null}\n <MultiTags {...props} />\n </div>\n </div>\n </li>\n );\n};\n\nexport default FormPairRow;\n","import React, { createContext, ReactNode, useCallback, useContext, useMemo, useState } from 'react';\nimport { Cluster } from '@solana/web3.js';\nimport { DEFAULT_EXPLORER, IInit } from 'src/types';\n\nexport const AVAILABLE_EXPLORER: {\n name: DEFAULT_EXPLORER;\n url: string;\n get: (txid: string, cluster?: Cluster) => string;\n getToken: (mint: string, cluster?: Cluster) => string;\n}[] = [\n {\n name: 'Solana Explorer',\n url: 'https://explorer.solana.com/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://explorer.solana.com/tx/${txid}?cluster=${cluster}`;\n return `https://explorer.solana.com/tx/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://explorer.solana.com/address/${mint}?cluster=${cluster}`;\n return `https://explorer.solana.com/address/${mint}`;\n },\n },\n {\n name: 'Solscan',\n url: 'https://solscan.io/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solscan.io/tx/${txid}?cluster=${cluster}`;\n return `https://solscan.io/tx/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solscan.io/token/${mint}?cluster=${cluster}`;\n return `https://solscan.io/token/${mint}`;\n },\n },\n {\n name: 'Solana Beach',\n url: 'https://solanabeach.io/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solanabeach.io/transaction/${txid}?cluster=${cluster}`;\n return `https://solanabeach.io/transaction/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solanabeach.io/address/${mint}?cluster=${cluster}`;\n return `https://solanabeach.io/address/${mint}`;\n },\n },\n {\n name: 'SolanaFM',\n url: 'https://solana.fm/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster === 'devnet') return `https://solana.fm/tx/${txid}?cluster=devnet-solana`;\n if (cluster === 'testnet') return `https://solana.fm/tx/${txid}?cluster=testnet-qn1`;\n return `https://solana.fm/tx/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster === 'devnet') return `https://solana.fm/address/${mint}?cluster=devnet-solana`;\n if (cluster === 'testnet') return `https://solana.fm/address/${mint}?cluster=testnet-qn1`;\n return `https://solana.fm/address/${mint}`;\n },\n },\n ];\n\nexport interface PreferredExplorer {\n name: string;\n url: string;\n get: (txid: string, cluster?: Cluster) => string;\n}\n\nconst PreferredExplorerContext = createContext<{\n explorer: string;\n getExplorer: (txid: string, cluster?: Cluster) => string;\n getTokenExplorer: (mint: string, cluster?: Cluster) => string;\n setExplorer: (explorer: DEFAULT_EXPLORER) => void;\n}>({\n explorer: AVAILABLE_EXPLORER[0].name,\n getExplorer: (txid: string, cluster?: Cluster) => '',\n getTokenExplorer: (mint: string, cluster?: Cluster) => '',\n setExplorer: (explorer: DEFAULT_EXPLORER) => { },\n});\n\nconst PreferredExplorerProvider = ({\n defaultExplorer,\n children,\n}: {\n defaultExplorer: IInit['defaultExplorer'];\n children: ReactNode;\n}) => {\n const [explorer, setExplorer] = useState(defaultExplorer ?? AVAILABLE_EXPLORER[0].name);\n\n const explorerObject = useMemo(() => {\n return AVAILABLE_EXPLORER.find((e) => e.name === explorer) || AVAILABLE_EXPLORER[0];\n }, [explorer]);\n\n const getExplorer = useCallback(\n (txid: string, cluster?: Cluster) => explorerObject.get(txid, cluster),\n [explorerObject],\n );\n const getTokenExplorer = useCallback(\n (mint: string, cluster?: Cluster) => explorerObject.getToken(mint, cluster),\n [explorerObject],\n );\n\n return (\n <PreferredExplorerContext.Provider\n value={{ explorer, getExplorer, getTokenExplorer, setExplorer: (explorer: DEFAULT_EXPLORER) => setExplorer(explorer) }}\n >\n {children}\n </PreferredExplorerContext.Provider>\n );\n};\n\nfunction usePreferredExplorer() {\n const context = useContext(PreferredExplorerContext);\n return context;\n}\n\nexport { PreferredExplorerProvider, usePreferredExplorer };\n","const ExternalIcon = () => (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M4 2V3H1.5V8.5H7V6H8V9C8 9.13261 7.94732 9.25979 7.85355 9.35355C7.75979 9.44732 7.63261 9.5 7.5 9.5H1C0.867392 9.5 0.740215 9.44732 0.646447 9.35355C0.552678 9.25979 0.5 9.13261 0.5 9V2.5C0.5 2.36739 0.552678 2.24021 0.646447 2.14645C0.740215 2.05268 0.867392 2 1 2H4ZM9.5 0.5V4.5H8.5V2.2065L4.6035 6.1035L3.8965 5.3965L7.7925 1.5H5.5V0.5H9.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport default ExternalIcon;\n","\nimport { usePreferredExplorer } from 'src/contexts/preferredExplorer';\nimport ExternalIcon from 'src/icons/ExternalIcon';\nimport { cn } from 'src/misc/cn';\nimport { shortenAddress } from 'src/misc/utils';\nimport { Asset } from 'src/entity/SearchResponse';\n\ninterface TokenLinkProps {\n tokenInfo: Asset;\n className?: string;\n}\n\nconst TokenLink: React.FC<TokenLinkProps> = ({ tokenInfo, className }) => {\n const { getTokenExplorer } = usePreferredExplorer();\n\n return (\n <a\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(\n 'flex items-center bg-black/25 text-primary-text/75 px-2 py-0.5 space-x-1 rounded cursor-pointer',\n className,\n )}\n href={getTokenExplorer(tokenInfo.id)}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"text-xxs\">{shortenAddress(tokenInfo.id)}</div>\n <ExternalIcon />\n </a>\n );\n};\nTokenLink.displayName = 'TokenLink';\n\nexport default TokenLink;\n","import React from 'react';\n\nconst CheckedBadge: React.FC<{ width?: number; height?: number }> = ({ width = 24, height = 24 }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.8179 4.54512L13.6275 4.27845C12.8298 3.16176 11.1702 3.16176 10.3725 4.27845L10.1821 4.54512C9.76092 5.13471 9.05384 5.45043 8.33373 5.37041L7.48471 5.27608C6.21088 5.13454 5.13454 6.21088 5.27608 7.48471L5.37041 8.33373C5.45043 9.05384 5.13471 9.76092 4.54512 10.1821L4.27845 10.3725C3.16176 11.1702 3.16176 12.8298 4.27845 13.6275L4.54512 13.8179C5.13471 14.2391 5.45043 14.9462 5.37041 15.6663L5.27608 16.5153C5.13454 17.7891 6.21088 18.8655 7.48471 18.7239L8.33373 18.6296C9.05384 18.5496 9.76092 18.8653 10.1821 19.4549L10.3725 19.7215C11.1702 20.8382 12.8298 20.8382 13.6275 19.7215L13.8179 19.4549C14.2391 18.8653 14.9462 18.5496 15.6663 18.6296L16.5153 18.7239C17.7891 18.8655 18.8655 17.7891 18.7239 16.5153L18.6296 15.6663C18.5496 14.9462 18.8653 14.2391 19.4549 13.8179L19.7215 13.6275C20.8382 12.8298 20.8382 11.1702 19.7215 10.3725L19.4549 10.1821C18.8653 9.76092 18.5496 9.05384 18.6296 8.33373L18.7239 7.48471C18.8655 6.21088 17.7891 5.13454 16.5153 5.27608L15.6663 5.37041C14.9462 5.45043 14.2391 5.13471 13.8179 4.54512Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 12L10.8189 13.8189V13.8189C10.9189 13.9189 11.0811 13.9189 11.1811 13.8189V13.8189L15 10\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default CheckedBadge;\n","import { useQuery } from '@tanstack/react-query';\n\nexport interface LstApy {\n apys: Record<string, number>;\n}\n\nexport function useLstApyFetcher() {\n return useQuery(\n ['lst-apy'],\n async () => {\n const lstApy = await fetch(`https://worker.jup.ag/lst-apys`);\n const apyResult: LstApy = await lstApy.json();\n\n return apyResult;\n },\n {\n retry: 3,\n keepPreviousData: true,\n staleTime: 300_000, // 5m\n },\n );\n}\n","import { useMemo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { searchService } from 'src/contexts/SearchService';\nimport { SearchResponse } from 'src/entity/SearchResponse';\n\ninterface SearchOptions {\n enabled?: boolean;\n staleTime?: number;\n}\n\nconst CHUNK_SIZE = 100;\n\nexport const useSearch = (mintAddresses: string[], options: SearchOptions = {}) => {\n\n const mintAddressesString = useMemo(() => mintAddresses.join(','), [mintAddresses]);\n \n return useQuery({\n queryKey:['search',mintAddressesString],\n queryFn: async () => {\n\n if (mintAddresses.length === 0) {\n return searchService.search('');\n }\n\n // Split into chunks of 100\n const chunks: string[][] = [];\n for (let i = 0; i < mintAddresses.length; i += CHUNK_SIZE) {\n chunks.push(mintAddresses.slice(i, i + CHUNK_SIZE));\n }\n\n // Make requests for each chunk\n const chunkPromises = chunks.map(chunk => \n searchService.search(chunk.join(','))\n );\n\n // Wait for all requests to complete\n const results = await Promise.allSettled(chunkPromises);\n\n return results.flatMap(result => result.status === 'fulfilled' ? result.value : []);\n },\n enabled: options.enabled ?? true,\n staleTime: options.staleTime ?? Infinity,\n });\n};\n","import React, { useCallback } from 'react';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport LeftArrowIcon from 'src/icons/LeftArrowIcon';\nimport useTimeDiff from '../useTimeDiff/useTimeDiff';\nimport PriceInfo from '../PriceInfo/index';\nimport JupButton from '../JupButton';\nimport { cn } from 'src/misc/cn';\n\nconst ConfirmationScreen = () => {\n const {\n fromTokenInfo,\n toTokenInfo,\n onSubmit: onSubmitJupiter,\n quoteResponseMeta,\n loading,\n refresh,\n } = useSwapContext();\n\n const [hasExpired] = useTimeDiff();\n\n const { setScreen } = useScreenState();\n\n const onGoBack = () => {\n refresh();\n setScreen('Initial');\n };\n const onSubmit = useCallback(async () => {\n setScreen('Swapping');\n onSubmitJupiter();\n }, [onSubmitJupiter, setScreen]);\n\n return (\n <div className=\"flex flex-col h-full w-full py-4 px-2\">\n <div className=\"flex w-full justify-between\">\n <div className=\"text-primary-text fill-current w-6 h-6 cursor-pointer\" onClick={onGoBack}>\n <LeftArrowIcon width={24} height={24} />\n </div>\n\n <div className=\"text-primary-text\">Review Order</div>\n\n <div className=\" w-6 h-6\" />\n </div>\n\n <div>\n {quoteResponseMeta && fromTokenInfo && toTokenInfo ? (\n <PriceInfo\n quoteResponse={quoteResponseMeta}\n fromTokenInfo={fromTokenInfo}\n toTokenInfo={toTokenInfo}\n loading={loading}\n containerClassName=\"bg-modiu; border-none\"\n />\n ) : null}\n </div>\n\n {hasExpired ? (\n <JupButton size=\"lg\" className=\"w-full mt-4 disabled:opacity-50 !p-0\" onClick={onGoBack}>\n <span className=\"text-sm\">Refresh</span>\n </JupButton>\n ) : (\n <JupButton\n size=\"lg\"\n className={cn(\n 'w-full mt-4 disabled:opacity-50 !text-uiv2-text/75 leading-none !max-h-14 bg-gradient-to-r from-[#00BEF0] to-[#C7F284]',\n )}\n onClick={onSubmit}\n >\n <span>Confirm</span>\n </JupButton>\n )}\n </div>\n );\n};\n\nexport default ConfirmationScreen;\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport JupButton from '../JupButton';\nimport Spinner from '../Spinner';\nimport SuccessIcon from 'src/icons/SuccessIcon';\nimport PriceInfo from '../PriceInfo/index';\nimport { readableValue } from 'src/misc/utils';\nimport { usePreferredExplorer } from 'src/contexts/preferredExplorer';\nimport JupiterLogoV2 from 'src/icons/JupiterLogoV2';\nimport JupiterLogo from 'src/icons/JupiterLogo';\n\nconst ErrorIcon = () => {\n return (\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_7547_116874)\">\n <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#F04A44\" />\n <path\n d=\"M19.8444 25.4321C18.6773 25.4332 17.7205 24.5092 17.6793 23.3431L17.1718 9.04107C17.1507 8.45326 17.3706 7.88344 17.7786 7.46056C18.1867 7.03768 18.7492 6.7998 19.337 6.7998H20.3519C20.9397 6.7998 21.5021 7.03768 21.9102 7.46056C22.3183 7.88344 22.5382 8.45329 22.5171 9.04107L22.0096 23.3431C21.9684 24.5092 21.0116 25.4332 19.8444 25.4321Z\"\n fill=\"white\"\n />\n <path\n d=\"M22.8893 30.4989C22.8893 32.1809 21.5266 33.5436 19.8446 33.5436C18.1626 33.5436 16.7998 32.1809 16.7998 30.4989C16.7998 28.8169 18.1626 27.4541 19.8446 27.4541C21.5266 27.4541 22.8893 28.8169 22.8893 30.4989Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_7547_116874\">\n <rect width=\"40\" height=\"40\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nconst SwappingScreen = () => {\n const {\n displayMode,\n lastSwapResult,\n reset,\n swapping: { txStatus },\n fromTokenInfo,\n toTokenInfo,\n refresh,\n } = useSwapContext();\n const { screen, setScreen } = useScreenState();\n\n const [errorMessage, setErrorMessage] = useState('');\n\n const onSwapMore = () => {\n reset();\n setErrorMessage('');\n setScreen('Initial');\n refresh();\n };\n\n const onGoBack = () => {\n reset({ resetValues: false });\n setErrorMessage('');\n setScreen('Initial');\n refresh();\n };\n\n useEffect(() => {\n if (screen !== 'Swapping') return;\n\n if (lastSwapResult?.swapResult && 'error' in lastSwapResult?.swapResult) {\n setErrorMessage(lastSwapResult?.swapResult?.error?.message || '');\n\n if (window.Jupiter.onSwapError) {\n window.Jupiter.onSwapError({\n error: lastSwapResult?.swapResult?.error,\n quoteResponseMeta: lastSwapResult?.quoteReponse,\n });\n }\n return;\n } else if (lastSwapResult?.swapResult && 'txid' in lastSwapResult?.swapResult) {\n if (window.Jupiter.onSuccess) {\n window.Jupiter.onSuccess({\n txid: lastSwapResult?.swapResult?.txid,\n swapResult: lastSwapResult?.swapResult,\n quoteResponseMeta: lastSwapResult?.quoteReponse,\n });\n }\n return;\n }\n }, [lastSwapResult, screen]);\n\n const onClose = () => {\n if (!displayMode || displayMode === 'modal') {\n window.Jupiter.close();\n }\n\n reset();\n setScreen('Initial');\n };\n\n const { explorer, getExplorer } = usePreferredExplorer();\n\n const isLoading =\n txStatus?.status === 'loading' || txStatus?.status === 'pending-approval' || txStatus?.status === 'sending';\n const Content = () => {\n return (\n <>\n <div className=\"flex w-full justify-center\">\n <div className=\"text-primary-text\">{'Swapping'}</div>\n </div>\n\n <div className=\"flex w-full justify-center items-center mt-9\">\n <div className=\"h-16 w-16 animate-hue duration-100\">\n <JupiterLogo width={64} height={64} />\n </div>\n </div>\n\n <div className=\"flex flex-col w-full justify-center items-center px-5 mt-7\">\n {isLoading && (\n <div className=\"flex items-center w-full rounded-xl p-4 bg-module mb-2\">\n <Spinner spinnerColor={'white'} />\n\n <div className=\"ml-4 flex w-full justify-between\">\n <span className=\"text-primary-text text-sm\">\n {txStatus.status === 'loading' && 'Preparing transactions'}\n {txStatus.status === 'pending-approval' && 'Pending Approval'}\n {txStatus.status === 'sending' && 'Swapping'}\n </span>\n </div>\n </div>\n )}\n </div>\n </>\n );\n };\n\n const SuccessContent = () => {\n const { inputAmount, outputAmount, explorerLink } = useMemo(() => {\n return {\n inputAmount:\n lastSwapResult?.swapResult && 'inputAmount' in lastSwapResult?.swapResult\n ? lastSwapResult?.swapResult.inputAmount\n : 0,\n outputAmount:\n lastSwapResult?.swapResult && 'outputAmount' in lastSwapResult?.swapResult\n ? lastSwapResult?.swapResult.outputAmount\n : 0,\n explorerLink:\n lastSwapResult?.swapResult && 'txid' in lastSwapResult?.swapResult\n ? getExplorer(lastSwapResult?.swapResult.txid)\n : '',\n };\n }, []);\n\n if (!fromTokenInfo || !toTokenInfo || !lastSwapResult?.quoteReponse) {\n return null;\n }\n\n return (\n <>\n <div className=\"flex justify-center mt-8\">\n <div className=\" flex justify-center relative items-center\">\n <div className='bg-success bg-opacity-[15%] animate-pulse h-[60px] w-[60px] rounded-full'/>\n <div className=\"rounded-full absolute justify-center\">\n <SuccessIcon className=\"text-success\" height={56} width={56} />\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col justify-center items-center gap-y-2\">\n <div className=\"mt-2 flex flex-col items-center justify-center text-center px-4\">\n <p className=\"text-xs font-semibold text-primary-text\">\n Swapped {readableValue(inputAmount, fromTokenInfo.decimals)} {fromTokenInfo.symbol} to\n </p>\n <p className=\"text-2xl font-semibold text-primary-text\">\n {readableValue(outputAmount, toTokenInfo.decimals)} {toTokenInfo.symbol}\n </p>\n </div>\n\n <div className=\" bg-module rounded-xl overflow-y-auto w-full webkit-scrollbar py-3 max-h-[260px] px-3\">\n <PriceInfo\n quoteResponse={lastSwapResult?.quoteReponse}\n fromTokenInfo={fromTokenInfo}\n toTokenInfo={toTokenInfo}\n loading={false} \n containerClassName=\" border-none mt-0\"\n />\n {explorerLink && (\n <div className=\"flex items-center justify-between text-xs text-primary-text/50 mt-4\">\n <div>\n <span>Transaction</span>\n </div>\n <a\n href={explorerLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"cursor-pointer text-primary-text ml-2 text-xs hover:underline\"\n >\n View on {explorer}\n </a>\n </div>\n )}\n </div>\n </div>\n\n <div className=\"pb-4 flex space-x-2\">\n <JupButton\n size=\"lg\"\n className=\"w-full mt-4 disabled:opacity-50 !text-uiv2-text/75 leading-none !max-h-14 bg-primary\"\n onClick={onSwapMore}\n >\n <span>\n <span className=\"text-sm\">Swap More</span>\n </span>\n </JupButton>\n\n {displayMode !== 'integrated' ? (\n <JupButton\n size=\"lg\"\n className=\"w-full mt-4 disabled:opacity-50 leading-none !max-h-14 text-primary-text bg-interactive\"\n onClick={onClose}\n >\n <span className=\"text-sm\">Close</span>\n </JupButton>\n ) : null}\n </div>\n </>\n );\n };\n\n return (\n <div className=\"flex flex-col h-full w-full px-2\">\n {errorMessage || txStatus?.status === 'fail' ? (\n <div>\n <div className=\"flex flex-col items-center justify-center text-center mt-12\">\n <ErrorIcon />\n\n <p className=\"text-primary-text mt-2\">Swap Failed</p>\n <p className=\"text-primary-text/50 text-xs mt-2\">We were unable to complete the swap, please try again.</p>\n {errorMessage ? <p className=\"text-primary-text/50 text-xs mt-2 break-all\">{errorMessage}</p> : ''}\n\n <JupButton\n size=\"lg\"\n className=\"w-full mt-6 disabled:opacity-50 !text-uiv2-text/75 leading-none !max-h-14 bg-primary\"\n onClick={onGoBack}\n >\n <span>Retry</span>\n </JupButton>\n </div>\n </div>\n ) : null}\n\n {!errorMessage && txStatus?.status === 'timeout' ? (\n <div className=\"flex justify-center\">\n <div className=\"flex flex-col items-center justify-center text-center mt-12\">\n <ErrorIcon />\n\n <p className=\"text-primary-text mt-2\">Transaction timed-out</p>\n <p className=\"text-primary-text/50 text-xs mt-2\">We were unable to complete the swap, please try again.</p>\n {errorMessage ? <p className=\"text-primary-text/50 text-xs mt-2\">{errorMessage}</p> : ''}\n\n <JupButton\n size=\"lg\"\n className=\"w-full mt-6 disabled:opacity-50 !text-uiv2-text/75 leading-none !max-h-14 bg-primary\"\n onClick={onGoBack}\n >\n <span>Retry</span>\n </JupButton>\n </div>\n </div>\n ) : null}\n {!errorMessage && isLoading ? <Content /> : null}\n {!errorMessage && txStatus?.status === 'success' ? <SuccessContent /> : null}\n </div>\n );\n};\n\nexport default SwappingScreen;\n","import * as React from 'react';\n\nconst Spinner = ({\n className,\n baseColor = 'currentColor',\n spinnerColor = 'currentColor',\n width = 16,\n height = 16,\n}: {\n className?: string;\n baseColor?: string;\n spinnerColor?: string;\n width?: number;\n height?: number;\n}) => (\n <div className={`rounded-full flex items-center justify-center ${className}`} style={{ width, height }}>\n <svg\n className=\"animate-spin h-5 w-5 text-black dark:text-primary-text\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke={baseColor} strokeWidth=\"4\"></circle>\n <path\n className=\"opacity-75\"\n fill={spinnerColor}\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n </div>\n);\n\nexport default Spinner;\n","import React, { SVGProps } from 'react';\n\nconst SuccessIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m45.66 85.66l-56 56a8 8 0 0 1-11.32 0l-24-24a8 8 0 0 1 11.32-11.32L112 148.69l50.34-50.35a8 8 0 0 1 11.32 11.32\"\n />\n </svg>\n );\n};\n\nexport default SuccessIcon;\n","import { useUnifiedWalletContext, Wallet } from '@jup-ag/wallet-adapter';\nimport { MouseEvent, useEffect, useMemo, useState } from 'react';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport CloseIcon from 'src/icons/CloseIcon';\n\nconst WalletScreen = () => {\n const { setScreen } = useScreenState();\n const { handleConnectClick } = useUnifiedWalletContext();\n\n const { wallets } = useWalletPassThrough();\n\n const handleConnect = async (event: MouseEvent<HTMLElement>, wallet: Wallet) => {\n try {\n await handleConnectClick(event, wallet.adapter);\n } catch (error) {\n console.error('Failed to connect wallet:', error);\n } finally {\n setScreen('Initial');\n }\n };\n\n const numberOfWallets = useMemo(() => {\n return wallets?.length;\n }, [wallets]);\n\n const hasWallet = useMemo(() => {\n return numberOfWallets > 0;\n }, [numberOfWallets]);\n\n return (\n <div className=\"text-primary-text p-2\">\n <div className=\"flex justify-between items-center mb-2 h-[28px] \">\n <h1 className=\"text-sm font-bold\">Available Wallets ({numberOfWallets})</h1>\n <button\n onClick={() => setScreen('Initial')}\n className=\"text-primary-text hover:text-primary-text/50 transition-colors bg-interactive rounded-full p-1\"\n >\n <CloseIcon width={15} height={15} />\n </button>\n </div>\n {!hasWallet && (\n <div className=\"text-sm font-medium text-primary-text flex items-center justify-center h-full py-4\">\n No wallet found\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-2\">\n {wallets?.map((wallet) => (\n <button\n key={wallet.adapter.name}\n onClick={(e) => handleConnect(e, wallet)}\n className={`w-full text-left bg-interactive p-4 rounded-lg transition-colors ${'hover:bg-interactive/80 cursor-pointer'}`}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {wallet.adapter.icon && (\n <img src={wallet.adapter.icon} alt={`${wallet.adapter.name} icon`} className=\"w-8 h-8\" />\n )}\n <div>\n <h2 className=\"text-sm font-medium\">{wallet.adapter.name}</h2>\n </div>\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n );\n};\n\nexport default WalletScreen;\n","import React from 'react';\n\nconst CloseIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = 20, height = 20 }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 20 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2.0336 16.2126L8.2336 10.0126L2.0336 3.81263C1.7961 3.57903 1.66172 3.25951 1.66016 2.92669C1.65938 2.59309 1.79141 2.27357 2.02734 2.03763C2.26328 1.80247 2.5828 1.67045 2.9164 1.67201C3.25 1.67357 3.56874 1.80795 3.80234 2.04623L9.99994 8.24623L16.1999 2.04623C16.4335 1.80795 16.7523 1.67357 17.0859 1.67201C17.4187 1.67045 17.739 1.80248 17.9749 2.03763C18.2109 2.27357 18.3429 2.59309 18.3413 2.92669C18.3406 3.25951 18.2062 3.57903 17.9687 3.81263L11.7663 10.0126L17.9663 16.2126C18.2038 16.4462 18.3382 16.7658 18.3397 17.0986C18.3405 17.4322 18.2085 17.7517 17.9725 17.9876C17.7366 18.2228 17.4171 18.3548 17.0835 18.3533C16.7499 18.3517 16.4311 18.2173 16.1975 17.979L9.99994 11.779L3.79994 17.979C3.31088 18.4611 2.52494 18.4579 2.039 17.9736C1.55384 17.4884 1.54994 16.7025 2.03119 16.2126L2.0336 16.2126Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default CloseIcon;\n","import { SVGProps } from 'react';\n\nexport const JupiterLogoV2 = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"128\" viewBox=\"0 0 33 32\" fill=\"none\" {...props}>\n <g clipPath=\"url(#clip0_11565_169621)\">\n <g filter=\"url(#filter0_d_11565_169621)\">\n <path\n d=\"M3.09074 25.1666C4.44267 27.0471 6.17683 28.6205 8.1795 29.7838C10.1822 30.947 12.4081 31.6738 14.7114 31.9165C13.5264 30.1333 11.8039 28.4928 9.65354 27.2438C7.50318 25.9948 5.22592 25.3125 3.09074 25.1666Z\"\n fill=\"url(#paint0_linear_11565_169621)\"\n />\n <path\n d=\"M12.543 22.2705C8.40015 19.8636 3.91612 19.2502 0.707663 20.3338C1.0174 21.3575 1.42589 22.3487 1.92738 23.2934C4.71498 23.2288 7.75856 23.9859 10.5906 25.6308C13.4227 27.2757 15.5888 29.5459 16.9143 32C17.9839 31.9672 19.0479 31.8309 20.0913 31.5932C19.4426 28.2698 16.6849 24.6779 12.543 22.2705Z\"\n fill=\"url(#paint1_linear_11565_169621)\"\n />\n <path\n d=\"M32.2852 12.5009C31.7585 10.3584 30.8054 8.34403 29.4829 6.57804C28.1604 4.81205 26.4956 3.33067 24.5879 2.22235C22.6802 1.11403 20.5687 0.401504 18.3796 0.127309C16.1904 -0.146885 13.9684 0.0228794 11.8463 0.626465C15.3915 1.06033 19.3267 2.39122 23.1859 4.63324C27.0452 6.87525 30.1533 9.63411 32.2852 12.5009Z\"\n fill=\"url(#paint2_linear_11565_169621)\"\n />\n <path\n d=\"M27.1271 20.3583C25.3124 17.3446 22.2038 14.4588 18.3743 12.2342C14.5449 10.0095 10.4991 8.7388 6.98531 8.65474C3.894 8.58152 1.57389 9.48017 0.621548 11.1197C0.616125 11.1294 0.608532 11.1386 0.602566 11.1484C0.516877 11.4559 0.44312 11.7639 0.37587 12.0731C1.70568 11.5481 3.24645 11.2558 4.95969 11.2232C8.76959 11.1517 13.0334 12.3703 16.9681 14.6562C20.9027 16.9422 24.0759 20.0438 25.9003 23.3878C26.7182 24.8944 27.2285 26.3777 27.4308 27.7948C27.6662 27.5844 27.8972 27.3669 28.1212 27.1408C28.1272 27.1305 28.131 27.1196 28.1369 27.1088C29.0893 25.4677 28.721 23.0076 27.1271 20.3583Z\"\n fill=\"url(#paint3_linear_11565_169621)\"\n />\n <path\n d=\"M15.4609 17.2485C9.59662 13.8416 3.11626 13.3079 0 15.6855C0.00612096 16.4297 0.0630166 17.1726 0.170292 17.9091C1.08699 17.6312 2.03177 17.4562 2.98718 17.3874C6.46952 17.1254 10.3087 18.0957 13.7927 20.1207C17.2766 22.1458 20.023 25.0018 21.5209 28.1543C21.935 29.018 22.2508 29.9254 22.4624 30.8595C23.1555 30.5878 23.8294 30.2694 24.4794 29.9066C25.0011 26.0213 21.3268 20.656 15.4609 17.2485Z\"\n fill=\"url(#paint4_linear_11565_169621)\"\n />\n <path\n d=\"M30.1434 15.3141C28.3082 12.3036 25.1724 9.40969 21.3158 7.17039C17.4593 4.93109 13.3977 3.64033 9.87257 3.53674C7.1853 3.45919 5.10382 4.11053 4.02457 5.34109C8.50588 4.58182 14.4168 5.85794 20.146 9.18625C25.8753 12.5146 29.9135 17.0181 31.4722 21.2868C32.0064 19.7406 31.5416 17.6098 30.1434 15.3141Z\"\n fill=\"url(#paint5_linear_11565_169621)\"\n />\n </g>\n </g>\n <defs>\n <filter\n id=\"filter0_d_11565_169621\"\n x=\"-22.7449\"\n y=\"-20.4704\"\n width=\"77.7749\"\n height=\"77.4898\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"2.27449\" />\n <feGaussianBlur stdDeviation=\"11.3724\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_11565_169621\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_11565_169621\" result=\"shape\" />\n </filter>\n <linearGradient\n id=\"paint0_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint4_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint5_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <clipPath id=\"clip0_11565_169621\">\n <rect width=\"32.2852\" height=\"32\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\nexport default JupiterLogoV2;\n","import { useScreenState } from 'src/contexts/ScreenProvider';\nimport { SwapContextProvider } from 'src/contexts/SwapContext';\nimport { IInit } from 'src/types';\n\nimport Header from '../components/Header';\nimport InitialScreen from './screens/InitialScreen';\nimport ReviewOrderScreen from './screens/ReviewOrderScreen';\nimport SwappingScreen from './screens/SwappingScreen';\nimport WalletScreen from './screens/WalletScreen';\nimport JupiterLogoV2 from 'src/icons/JupiterLogoV2';\nimport { BrandingProvider } from 'src/contexts/BrandingProvider';\n\nconst Content = () => {\n const { screen } = useScreenState();\n\n // ID is required for scoped preflight by tailwind to work\n return (\n <div id=\"jupiter-plugin\" className=\" h-full bg-background relative flex flex-col justify-between\">\n <div>\n {screen === 'Initial' ? (\n <>\n <Header />\n <InitialScreen />\n </>\n ) : null}\n {screen === 'Confirmation' ? <ReviewOrderScreen /> : null}\n {screen === 'Swapping' ? <SwappingScreen /> : null}\n {screen === 'Wallet' ? <WalletScreen /> : null}\n </div>\n <span className=\"text-primary-text/50 text-xs p-2 flex-row flex gap-1 justify-center\">\n Powered by\n <a href={'https://jup.ag'} target={'_blank'} rel=\"noreferrer noopener\" className=\"flex items-center gap-1 \">\n <JupiterLogoV2 className=\"text-primary-text/50\" width={15} height={15} />\n Jupiter\n </a>\n </span>\n </div>\n );\n};\n\nconst JupiterApp = (props: IInit) => {\n return (\n <SwapContextProvider {...props}>\n <BrandingProvider {...props}>\n <Content />\n </BrandingProvider>\n </SwapContextProvider>\n );\n};\n\nexport default JupiterApp;\n","import { UnifiedWalletProvider } from '@jup-ag/wallet-adapter';\nimport React, { PropsWithChildren, useState } from 'react';\n\nimport { ReactNode, useMemo } from 'react';\nimport { IInit } from 'src/types';\nimport { PreferredExplorerProvider } from './preferredExplorer';\nimport { IWalletNotification } from '@jup-ag/wallet-adapter/dist/types/contexts/WalletConnectionProvider';\n\nconst noop = () => {};\nconst WalletContextProvider: React.FC<PropsWithChildren<IInit>> = ({\n autoConnect,\n children,\n}) => {\n const enableWalletPassthrough = (() => {\n if (typeof window === 'undefined') return undefined;\n return window.Jupiter.enableWalletPassthrough;\n })();\n\n const wallets = useMemo(() => {\n if (enableWalletPassthrough) {\n return [];\n }\n\n return [];\n }, [enableWalletPassthrough]);\n\n const [showWalletStatus, setShowWalletStatus] = useState<{\n show: boolean;\n message: ReactNode;\n }>({\n show: false,\n message: '',\n });\n\n const ShouldWrapWalletProvider = useMemo(() => {\n return enableWalletPassthrough\n ? React.Fragment\n : ({ children }: { children: ReactNode }) => (\n <UnifiedWalletProvider\n wallets={wallets}\n config={{\n env: 'mainnet-beta',\n autoConnect: typeof autoConnect !== 'undefined' ? autoConnect : true,\n metadata: {\n name: 'Jupiter Plugin',\n url: 'https://plugin.jup.ag',\n description:\n 'An open-sourced, lite version of Jupiter that provides end-to-end swap flow by linking it in your HTML. Check out the visual demo for the various integration modes below. ',\n iconUrls: [],\n },\n hardcodedWallets: [],\n walletPrecedence: [],\n notificationCallback: {\n onConnect: noop,\n onConnecting: noop,\n onDisconnect: noop,\n onNotInstalled: ({ walletName, metadata }: IWalletNotification) => {\n setShowWalletStatus({\n show: true,\n message: (\n <p className=\"space-y-1\">\n {walletName} is not installed.\n <p className=\"space-x-1\">\n <a\n className=\"underline font-semibold\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={metadata.url}\n >\n Visit {walletName} website\n </a>\n <span>to install it.</span>\n </p>\n </p>\n ),\n });\n\n setTimeout(() => {\n setShowWalletStatus({\n show: false,\n message: '',\n });\n }, 5_000);\n },\n },\n theme: 'jupiter',\n }}\n >\n {children}\n </UnifiedWalletProvider>\n );\n }, [autoConnect, enableWalletPassthrough, wallets]);\n\n return (\n <>\n <ShouldWrapWalletProvider>{children}</ShouldWrapWalletProvider>\n {showWalletStatus.show && showWalletStatus.message ? (\n <div className=\"absolute bottom-2 w-full px-2\">\n <div className=\"w-full h-full bg-white/10 rounded-lg p-2 text-warning text-xs\">\n {showWalletStatus.message}\n </div>\n </div>\n ) : null}\n </>\n );\n};\n\nexport const ContextProvider: React.FC<PropsWithChildren<IInit>> = (props) => {\n return (\n <>\n <WalletContextProvider {...props}>\n <PreferredExplorerProvider defaultExplorer={props.defaultExplorer}>\n {props.children}\n </PreferredExplorerProvider>\n </WalletContextProvider>\n\n </>\n );\n};\n"],"mappings":"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","names":["exports","module","init","import_jotai","import_react","import_jsx_runtime","_a","store","import_jsx_runtime","import_jsx_runtime","_a","type","instance","RenderJupiter","_b","_c","_d","_e","import_jotai","import_react","import_jsx_runtime","screen","import_decimal","import_jsbi","import_react","import_web3","import_react","_a","numberFormatter","Decimal","Decimal","_a","import_jotai","import_react","import_jsx_runtime","_a","atom","import_web3","JSBI","import_superstruct","import_wallet_adapter","import_react_query","import_web3","type","import_react_query","import_react","import_react_query","import_jsx_runtime","_a","scriptDomain","screen","Decimal","JSBI","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","_a","import_jsx_runtime","screen","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_web3","WRAPPED_SOL_MINT","React","import_jsx_runtime","import_react","import_jsx_runtime","React","React","import_jsx_runtime","import_jsx_runtime","_a","import_jsx_runtime","import_decimal","import_react","import_jsx_runtime","Decimal","import_decimal","import_jsbi","import_react","import_decimal","React","import_decimal","import_jsx_runtime","Decimal","import_jsx_runtime","Decimal","import_jsx_runtime","import_jsx_runtime","import_react_query","import_jsx_runtime","JSBI","router","Decimal","import_jsx_runtime","import_react","React","import_decimal","import_react_query","import_react","import_react","import_jsx_runtime","attributes","debounce","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","warning","data","import_jsx_runtime","form","Decimal","import_react","import_jsx_runtime","import_jsx_runtime","import_lodash","import_react","import_decimal","import_react","import_jsx_runtime","explorer","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_query","import_react_query","import_jsx_runtime","Decimal","React","_a","import_react","import_react_query","_a","import_jsx_runtime","PAIR_ROW_HEIGHT","debounce","_a","AutoSizer","import_decimal","import_jsx_runtime","_a","Decimal","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","screen","_a","Content","import_wallet_adapter","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","screen","import_wallet_adapter","import_react","import_jsx_runtime","React","children","import_react_query","import_react","import_jsx_runtime","init"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/npmlibary.tsx","../src/library.tsx","../src/icons/JupiterLogo.tsx","../src/icons/ChevronDownIcon.tsx","../src/stores/jotai-plugin-in-view.tsx","../src/misc/cn.ts","../src/components/ShadowDomContainer.tsx","../src/index.tsx","../src/contexts/ScreenProvider.tsx","../src/contexts/SwapContext.tsx","../src/constants/index.ts","../src/types/constants.ts","../src/misc/utils.ts","../src/misc/tokenTags.ts","../src/contexts/WalletPassthroughProvider.tsx","../src/queries/useQuoteQuery.ts","../src/data/UltraSwapService.ts","../src/entity/FormattedUltraQuoteResponse.ts","../src/hooks/useBalances.ts","../src/hooks/useAsset.ts","../src/contexts/SearchService.ts","../src/components/Header.tsx","../src/icons/RefreshSVG.tsx","../src/components/WalletComponents/components/WalletModalButton.tsx","../src/components/WalletComponents/WalletButton.tsx","../src/components/CurrentUserBadge.tsx","../src/contexts/BrandingProvider.tsx","../src/components/screens/InitialScreen.tsx","../src/components/Form.tsx","../src/components/Coinbalance.tsx","../src/components/JupButton.tsx","../src/components/TokenIcon.tsx","../src/icons/WarningIcon.tsx","../src/icons/WalletIcon.tsx","../src/components/CoinBalanceUSD.tsx","../src/components/PriceInfo/index.tsx","../src/components/ExchangeRate.tsx","../src/components/PrecisionTickSize/index.tsx","../src/icons/UltraIcon.tsx","../src/components/PriceInfo/TransactionFee.tsx","../src/components/SwitchPairButton.tsx","../src/components/JupShield.tsx","../src/hooks/useMobile.ts","../src/components/Popover/Popover.tsx","../src/components/Tooltip/PopoverTooltip.tsx","../src/components/Plural/index.tsx","../src/icons/InfoIcon.tsx","../src/queries/useUltraSwapMutation.ts","../src/entity/TransactionError.ts","../src/components/SubmitButton.tsx","../src/components/FormPairSelector.tsx","../src/icons/LeftArrowIcon.tsx","../src/icons/SearchIcon.tsx","../src/components/FormPairRow.tsx","../src/contexts/preferredExplorer/index.tsx","../src/icons/ExternalIcon.tsx","../src/components/TokenLink.tsx","../src/components/CheckedBadge.tsx","../src/queries/useLstApy.ts","../src/hooks/useSearch.ts","../src/components/screens/SwappingScreen.tsx","../src/icons/SuccessIcon.tsx","../src/components/screens/WalletScreen.tsx","../src/icons/CloseIcon.tsx","../src/icons/JupiterLogoV2.tsx","../src/components/Jupiter.tsx","../src/contexts/ContextProvider.tsx"],"sourcesContent":["{\n \"name\": \"@jup-ag/plugin\",\n \"version\": \"1.0.3\",\n \"private\": false,\n \"license\": \"MIT\",\n \"scripts\": {\n \"dev\": \"next dev\",\n \"build\": \"next build\",\n \"tsup\": \"tsup && npx tailwindcss --yes -i ./src/styles/globals.css -o ./dist/global.css\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"format:fix\": \"prettier --write src\",\n \"build-widget\": \"NODE_ENV=production MODE=widget webpack\",\n \"analyse\": \"NODE_ENV=production MODE=widget ANALYSE=true webpack\"\n },\n \"files\": [\n \"dist\"\n ],\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./tailwind\": \"./dist/tailwind.config.js\",\n \"./css\": \"./dist/global.css\"\n },\n \"typesVersions\": {\n \"*\": {\n \"index\": [\n \"dist/index.d.ts\"\n ]\n }\n },\n \"peerDependencies\": {\n \"@solana/spl-token\": \"^0.1.8\",\n \"@solana/web3.js\": \"^1.87.6\",\n \"react\": \"^18\",\n \"react-dom\": \"^18\"\n },\n \"dependencies\": {\n \"@jup-ag/wallet-adapter\": \"0.2.3\",\n \"@popperjs/core\": \"^2.11.8\",\n \"@solana/wallet-adapter-wallets\": \"0.19.33\",\n \"@tanstack/react-query\": \"5.85.5\",\n \"bn.js\": \"5.2.1\",\n \"clsx\": \"^2.1.1\",\n \"decimal.js\": \"10.4.3\",\n \"jotai\": \"^2.8.3\",\n \"jsbi\": \"4.3.0\",\n \"lodash.debounce\": \"^4.0.8\",\n \"next\": \"13.4.19\",\n \"next-seo\": \"5.15.0\",\n \"react-colorful\": \"^5.6.1\",\n \"react-hook-form\": \"7.42.1\",\n \"react-number-format\": \"5.1.3\",\n \"react-popper\": \"^2.3.0\",\n \"react-syntax-highlighter\": \"^15.5.0\",\n \"react-use\": \"^17.5.0\",\n \"react-virtualized-auto-sizer\": \"1.0.7\",\n \"react-window\": \"1.8.8\",\n \"superstruct\": \"1.0.3\",\n \"tailwind-merge\": \"^2.5.2\",\n \"tailwindcss-animate\": \"^1.0.7\"\n },\n \"devDependencies\": {\n \"@svgr/webpack\": \"^6.5.1\",\n \"@types/bn.js\": \"^5.1.5\",\n \"@types/bs58\": \"^4.0.4\",\n \"@types/lodash.debounce\": \"^4.0.9\",\n \"@types/node\": \"18.11.5\",\n \"@types/react\": \"18.0.23\",\n \"@types/react-dom\": \"18.0.7\",\n \"@types/react-syntax-highlighter\": \"^15.5.13\",\n \"@types/react-virtualized-auto-sizer\": \"~1.0.4\",\n \"@types/react-window\": \"~1.8.8\",\n \"autoprefixer\": \"10.4.13\",\n \"css-loader\": \"^6.11.0\",\n \"css-minimizer-webpack-plugin\": \"^4.2.2\",\n \"cssnano\": \"^5.1.15\",\n \"esbuild-plugins-node-modules-polyfill\": \"^1.6.6\",\n \"eslint\": \"8.26.0\",\n \"eslint-config-next\": \"13.0.0\",\n \"eslint-config-prettier\": \"^8.10.0\",\n \"mini-css-extract-plugin\": \"^2.9.0\",\n \"next-transpile-modules\": \"10.0.0\",\n \"node-polyfill-webpack-plugin\": \"^2.0.1\",\n \"postcss\": \"^8.4.38\",\n \"postcss-loader\": \"^7.3.4\",\n \"postcss-preset-env\": \"^7.8.3\",\n \"prettier\": \"^3.3.2\",\n \"react-twitter-embed\": \"^4.0.4\",\n \"sass\": \"^1.77.6\",\n \"sass-loader\": \"^13.3.3\",\n \"style-loader\": \"^3.3.4\",\n \"stylus\": \"^0.59.0\",\n \"svg-inline-loader\": \"^0.8.2\",\n \"tailwindcss\": \"3.3.3\",\n \"ts-loader\": \"^9.5.1\",\n \"tsup\": \"8.2.4\",\n \"typescript\": \"5.2.2\",\n \"webpack\": \"^5.92.1\",\n \"webpack-bundle-analyzer\": \"^4.10.2\",\n \"webpack-cli\": \"^4.10.0\"\n },\n \"pnpm\": {\n \"overrides\": {\n \"@solana/web3.js\": \"1.87.6\",\n \"@solana/buffer-layout\": \"4.0.0\"\n }\n }\n}\n","import { init as ogInit, resume, close, appProps, syncProps } from './library';\nimport { IInit } from './types';\n\nimport { RenderJupiter } from '.';\n\nasync function init(props: IInit) {\n // Populate Jupiter object into window object\n (window as any).Jupiter = { init, resume, close, appProps, syncProps };\n // Populate JupiterRenderer into window object\n (window as any).JupiterRenderer = {\n RenderJupiter: RenderJupiter,\n };\n\n // Call original init function\n await ogInit(props);\n}\n\nexport { init, resume, close, appProps, syncProps };\n","import { createRoot } from 'react-dom/client';\nimport { atom, createStore } from 'jotai';\nimport { CSSProperties, useEffect, useMemo, useState } from 'react';\n\nimport { IInit } from './types';\n\nimport 'tailwindcss/tailwind.css';\nimport JupiterLogo from './icons/JupiterLogo';\nimport ChevronDownIcon from './icons/ChevronDownIcon';\nimport { setPluginInView } from './stores/jotai-plugin-in-view';\nimport React from 'react';\nimport { cn } from './misc/cn';\nimport { ShadowDomContainer } from './components/ShadowDomContainer';\n\nconst containerId = 'jupiter-plugin-instance';\nconst packageJson = require('../package.json');\nconst bundleName = `plugin-${packageJson.version}`;\n\nconst scriptDomain =\n (() => {\n if (!process.env.NEXT_PUBLIC_IS_PLUGIN_DEV) {\n return null\n }\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n \n const url = (document.currentScript as HTMLScriptElement)?.src;\n if (url) {\n return new URL(url).origin;\n }\n return null;\n })() || 'https://plugin.jup.ag';\n\nasync function loadRemote(id: string, href: string, type: 'text/javascript' | 'stylesheet') {\n return new Promise((res, rej) => {\n const existing = document.getElementById(id) as HTMLLinkElement | null;\n\n if (existing) {\n res({});\n } else {\n let el: HTMLScriptElement | HTMLLinkElement =\n type === 'text/javascript' ? document.createElement('script') : document.createElement('link');\n\n el.id = id;\n el.onload = res;\n el.onerror = rej;\n if (el instanceof HTMLScriptElement) {\n el.type = 'text/javascript';\n el.src = href;\n } else if (el instanceof HTMLLinkElement) {\n el.rel = 'stylesheet';\n el.href = href;\n }\n\n document.head.append(el);\n }\n });\n}\n\nasync function loadJupiter() {\n if (process.env.NODE_ENV === 'development') {\n return;\n }\n\n try {\n // Load all the scripts\n await loadRemote('jupiter-load-script-app', `${scriptDomain}/${bundleName}-app.js`, 'text/javascript');\n } catch (error) {\n console.error(`Error loading Jupiter Plugin: ${error}`);\n throw new Error(`Error loading Jupiter Plugin: ${error}`);\n }\n}\n\nconst defaultStyles: CSSProperties = {\n zIndex: 50,\n};\n\nconst RenderLoadableJupiter = (props: IInit) => {\n const [loaded, setLoaded] = useState(false);\n useEffect(() => {\n loadJupiter();\n\n let intervalId: NodeJS.Timer;\n if (!loaded) {\n intervalId = setInterval(() => {\n const instance = (window as any).JupiterRenderer?.RenderJupiter;\n if (instance) {\n setLoaded(true);\n }\n }, 50);\n }\n return () => {\n clearInterval(intervalId);\n };\n }, [loaded]);\n\n const RenderJupiter: (props: any) => JSX.Element = useMemo(() => {\n if (loaded) {\n return (window as any).JupiterRenderer.RenderJupiter;\n }\n\n return EmptyJSX;\n }, [loaded]);\n\n return <RenderJupiter {...props} />;\n};\n\nconst EmptyJSX = () => <></>;\nconst RenderShell = (props: IInit) => {\n const displayMode = props.displayMode;\n const containerStyles = props.containerStyles;\n const containerClassName = props.containerClassName;\n\n useEffect(() => setPluginInView(true), []);\n\n const displayClassName = useMemo(() => {\n // Default Modal\n if (!displayMode || displayMode === 'modal') {\n return 'fixed top-0 w-full h-full flex items-center justify-center bg-black/50 z-10';\n } else if (displayMode === 'integrated' || displayMode === 'widget') {\n return 'flex items-center justify-center w-full h-full z-10';\n }\n }, [displayMode]);\n\n const contentClassName = useMemo(() => {\n // Default Modal\n if (!displayMode || displayMode === 'modal' || displayMode === 'integrated') {\n return `flex flex-col h-[550px] w-full max-w-[360px] overflow-auto text-black relative bg-black rounded-lg webkit-scrollbar ${\n containerClassName || ''\n }`;\n } else if (displayMode === 'widget') {\n return 'flex flex-col h-[550px] w-full overflow-auto text-black relative webkit-scrollbar';\n }\n }, [containerClassName, displayMode]);\n\n const onClose = () => {\n if (window.Jupiter) {\n setPluginInView(false);\n window.Jupiter.close();\n }\n };\n\n return (\n <div className={displayClassName}>\n {/* eslint-disable @next/next/no-page-custom-font */}\n <div style={{ ...defaultStyles, ...containerStyles }} className={contentClassName}>\n <RenderLoadableJupiter {...props} />\n </div>\n\n {!displayMode || displayMode === 'modal' ? (\n <div onClick={onClose} className=\"absolute w-screen h-screen top-0 left-0 backdrop-blur-sm\" />\n ) : null}\n </div>\n );\n};\n\nconst RenderWidgetShell = (props: IInit) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const classes = useMemo(() => {\n const size = props.widgetStyle?.size || 'default';\n const offsetX = props.widgetStyle?.offset?.x ?? 0;\n const offsetY = props.widgetStyle?.offset?.y ?? 0;\n\n let result: { containerClassName: string; contentClassName: string; style: React.CSSProperties } | undefined =\n undefined;\n if (!props.widgetStyle?.position || props.widgetStyle?.position === 'bottom-right') {\n result = {\n containerClassName: 'bottom-6 right-6',\n contentClassName: size === 'default' ? 'bottom-[60px] -right-3' : 'bottom-[44px] -right-4',\n style: { transform: `translate(-${offsetX}px, -${offsetY}px)` },\n };\n }\n if (props.widgetStyle?.position === 'bottom-left') {\n result = {\n containerClassName: 'bottom-6 left-6',\n contentClassName: size === 'default' ? 'bottom-[60px] -left-3' : 'bottom-[44px] -left-4',\n style: { transform: `translate(${offsetX}px, -${offsetY}px)` },\n };\n }\n if (props.widgetStyle?.position === 'top-left') {\n result = {\n containerClassName: 'top-6 left-6',\n contentClassName: size === 'default' ? 'top-[60px] -left-3' : 'top-[44px] -left-4',\n style: { transform: `translate(${offsetX}px, ${offsetY}px)` },\n };\n }\n if (props.widgetStyle?.position === 'top-right') {\n result = {\n containerClassName: 'top-6 right-6',\n contentClassName: size === 'default' ? 'top-[60px] -right-3' : 'top-[44px] -right-4',\n style: { transform: `translate(-${offsetX}px, ${offsetY}px)` },\n };\n }\n\n return {\n ...result,\n widgetContainerClassName: size === 'default' ? 'h-14 w-14' : 'h-10 w-10',\n widgetLogoSize: size === 'default' ? 42 : 32,\n };\n }, [props.widgetStyle?.position, props.widgetStyle?.size, props.widgetStyle?.offset]);\n\n return (\n <div className={`fixed ${classes.containerClassName}`} style={classes.style}>\n <div\n className={`${classes.widgetContainerClassName} rounded-full bg-black flex items-center justify-center cursor-pointer`}\n onClick={() => {\n if (isOpen) {\n setIsOpen(false);\n setPluginInView(false);\n } else {\n setIsOpen(true);\n setPluginInView(true);\n }\n }}\n >\n {isOpen ? (\n <div\n className={cn('text-white fill-current pt-1', {\n 'rotate-180': props.widgetStyle?.position === 'top-left' || props.widgetStyle?.position === 'top-right',\n })}\n >\n <ChevronDownIcon width={classes.widgetLogoSize * 0.4} height={classes.widgetLogoSize * 0.4} />\n </div>\n ) : (\n <JupiterLogo width={classes.widgetLogoSize} height={classes.widgetLogoSize} />\n )}\n </div>\n\n <div\n id=\"target-container\"\n className={`absolute overflow-hidden ${classes.contentClassName} flex flex-col w-[90vw] h-[600px] max-w-[384px] max-h-[75vh] rounded-2xl bg-black transition-opacity duration-300 shadow-2xl ${\n !isOpen ? '!h-0 !w-0 opacity-0' : 'opacity-100'\n }`}\n >\n <RenderLoadableJupiter {...props} />\n </div>\n </div>\n );\n};\n\nconst store = createStore();\nconst appProps = atom<IInit | undefined>(undefined);\n\nasync function init(passedProps: IInit) {\n if (typeof window === 'undefined' || typeof document === 'undefined') return null;\n const props: IInit = {\n ...passedProps,\n };\n\n const {\n enableWalletPassthrough,\n passthroughWalletContextState,\n onRequestConnectWallet,\n onSwapError,\n onSuccess,\n onFormUpdate,\n onScreenUpdate,\n integratedTargetId,\n ...restProps\n } = props;\n\n const targetDiv = document.createElement('div');\n const instanceExist = document.getElementById(containerId);\n window.Jupiter.store = store;\n store.set(appProps, { ...props, scriptDomain });\n setPluginInView(false);\n\n // Remove previous instance\n if (instanceExist) {\n window.Jupiter._instance = null;\n instanceExist.remove();\n window.Jupiter.root?.unmount();\n }\n\n targetDiv.id = containerId;\n targetDiv.classList.add('w-full');\n targetDiv.classList.add('h-full');\n\n if (restProps.displayMode === 'integrated') {\n const target = document.getElementById(integratedTargetId!);\n if (!target) {\n throw new Error(`Jupiter Plugin: document.getElementById cannot find ${integratedTargetId}`);\n }\n target?.appendChild(targetDiv);\n } else {\n document.body.appendChild(targetDiv);\n }\n\n // Passthrough\n if (enableWalletPassthrough) {\n window.Jupiter.enableWalletPassthrough = true;\n window.Jupiter.onRequestConnectWallet = onRequestConnectWallet;\n } else {\n window.Jupiter.enableWalletPassthrough = false;\n }\n\n let element;\n if (restProps.displayMode === 'widget') {\n element = <RenderWidgetShell {...props} />;\n } else {\n element = <RenderShell {...props} />;\n }\n const stylesheetUrls = [\n `${scriptDomain}/${bundleName}-Tailwind.css`,\n `${scriptDomain}/scoped-preflight-v4.css`,\n `${scriptDomain}/${bundleName}-Jupiter.css`,\n 'https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&family=Poppins&display=swap',\n ];\n\n const root = createRoot(targetDiv);\n root.render(<ShadowDomContainer stylesheetUrls={stylesheetUrls}>{element}</ShadowDomContainer>);\n window.Jupiter.root = root;\n window.Jupiter._instance = element;\n\n // Callbacks\n window.Jupiter.onSwapError = onSwapError;\n window.Jupiter.onSuccess = onSuccess;\n window.Jupiter.onFormUpdate = onFormUpdate;\n window.Jupiter.onScreenUpdate = onScreenUpdate;\n\n}\n\nconst attributes =\n typeof document !== 'undefined' ? (document.currentScript as HTMLScriptElement)?.attributes : undefined;\nif (typeof window !== 'undefined' && typeof document !== 'undefined' && attributes) {\n document.onreadystatechange = function () {\n const loadComplete = document.readyState === 'complete';\n const shouldPreload = Boolean(attributes.getNamedItem('data-preload'));\n\n if (loadComplete && shouldPreload) {\n setTimeout(() => {\n loadJupiter().catch((error) => {\n console.error(`Error pre-loading Jupiter Plugin: ${error}`);\n throw new Error(`Error pre-loading Jupiter Plugin: ${error}`);\n });\n }, 2000);\n }\n };\n}\n\nconst resume = () => {\n const instanceExist = document.getElementById(containerId);\n if (instanceExist) {\n instanceExist.style.display = 'block';\n return;\n }\n};\n\nconst close = () => {\n const targetDiv = document.getElementById(containerId);\n if (targetDiv) {\n targetDiv.style.display = 'none';\n }\n};\n\nconst syncProps = (props: {\n enableWalletPassthrough?: IInit['enableWalletPassthrough'];\n passthroughWalletContextState?: IInit['passthroughWalletContextState'];\n}) => {\n const currentProps = store.get(appProps);\n const newProps = {\n ...currentProps,\n passthroughWalletContextState: props.passthroughWalletContextState || currentProps?.passthroughWalletContextState,\n } as IInit;\n store.set(appProps, newProps);\n};\n\nexport { init, resume, close, appProps, syncProps };\n","import React from 'react';\n\nconst JupiterLogo: React.FC<{ width?: number; height?: number }> = ({ width = 24, height = 24 }) => {\n // eslint-disable-next-line @next/next/no-img-element\n return <img src={'https://jup.ag/svg/jupiter-logo.svg'} width={width} height={height} alt=\"Jupiter aggregator\" />;\n};\n\nexport default JupiterLogo;\n","const ChevronDownIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = 10, height = 6 }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 10 6\"\n fill=\"inherit\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.292893 0.292893C0.683416 -0.097631 1.31658 -0.097631 1.7071 0.292893L4.99999 3.58579L8.29288 0.292893C8.6834 -0.0976311 9.31657 -0.0976311 9.70709 0.292893C10.0976 0.683417 10.0976 1.31658 9.70709 1.70711L5.7071 5.70711C5.31657 6.09763 4.68341 6.09763 4.29289 5.70711L0.292893 1.70711C-0.0976309 1.31658 -0.0976309 0.683417 0.292893 0.292893Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default ChevronDownIcon;\n","import { atom } from 'jotai';\n\nconst pluginInViewAtom = atom<boolean>(false);\n\nexport const getPluginInView = (): boolean => {\n const store = window.Jupiter?.store;\n if (!store) {\n console.warn('Jupiter store is not available.');\n return false;\n }\n return store.get(pluginInViewAtom);\n};\n\nexport const setPluginInView = (value: boolean): void => {\n const store = window.Jupiter?.store;\n if (!store) {\n console.warn('Jupiter store is not available.');\n return;\n }\n store.set(pluginInViewAtom, value);\n};\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface Props {\n children: React.ReactNode;\n stylesheetUrls: string[];\n}\n\nexport const ShadowDomContainer: React.FC<Props> = ({ children, stylesheetUrls }) => {\n const hostRef = useRef<HTMLDivElement>(null);\n const [shadowRoot, setShadowRoot] = useState<ShadowRoot | null>(null);\n const [stylesLoaded, setStylesLoaded] = useState(false);\n\n useEffect(() => {\n if (hostRef.current && !shadowRoot) {\n // 1. Create the shadow root\n const newShadowRoot = hostRef.current.attachShadow({ mode: 'open' });\n\n const loadStyles = async () => {\n try {\n // Fetch all stylesheets as text\n const stylePromises = stylesheetUrls.map((url) =>\n fetch(url).then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to fetch stylesheet: ${url}`);\n }\n return res.text();\n }),\n );\n\n const allCssText = await Promise.all(stylePromises);\n\n // Inject all stylesheets\n allCssText.forEach((cssText) => {\n const styleEl = document.createElement('style');\n styleEl.textContent = cssText;\n newShadowRoot.appendChild(styleEl);\n });\n\n setStylesLoaded(true);\n } catch (error) {\n console.error('Error fetching and applying styles:', error);\n }\n };\n\n loadStyles();\n // Create container for React portal\n const portalContainer = document.createElement('div');\n portalContainer.id = 'portal-container';\n portalContainer.style.width = '100%';\n portalContainer.style.height = '100%';\n newShadowRoot.appendChild(portalContainer);\n\n setShadowRoot(newShadowRoot);\n }\n }, [hostRef, shadowRoot, stylesheetUrls]);\n\n const portalTarget = shadowRoot?.getElementById('portal-container');\n\n return (\n <div ref={hostRef} >\n {portalTarget && stylesLoaded ? createPortal(children, portalTarget) : null}\n </div>\n );\n};\n","import { Provider, useAtom } from 'jotai';\nimport JupiterApp from './components/Jupiter';\nimport { ContextProvider } from './contexts/ContextProvider';\nimport { ScreenProvider } from './contexts/ScreenProvider';\nimport WalletPassthroughProvider from './contexts/WalletPassthroughProvider';\nimport { appProps } from './library';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useMemo } from 'react';\n\nconst App = () => {\n const queryClient = useMemo(() => new QueryClient(), []);\n const [props] = useAtom(appProps);\n if (!props) return null;\n\n return (\n <QueryClientProvider client={queryClient}>\n <ContextProvider {...props}>\n <WalletPassthroughProvider>\n <ScreenProvider>\n <JupiterApp {...props} />\n </ScreenProvider>\n </WalletPassthroughProvider>\n </ContextProvider>\n </QueryClientProvider>\n );\n};\n\nconst RenderJupiter = () => {\n return (\n <Provider store={typeof window !== 'undefined' ? window.Jupiter.store : undefined}>\n <App />\n </Provider>\n );\n};\n\nexport { RenderJupiter };\n","import { createContext, Dispatch, FC, ReactNode, SetStateAction, useContext, useState } from 'react';\n\nexport type Screens = 'Initial' | 'Swapping' | 'Success' | 'Error' | 'Wallet';\n\nexport interface ScreenProvider {\n screen: Screens;\n setScreen: Dispatch<SetStateAction<Screens>>;\n}\n\nexport const ScreenStateContext = createContext<ScreenProvider>({ screen: 'Initial', setScreen() {} });\n\nexport function useScreenState(): ScreenProvider {\n return useContext(ScreenStateContext);\n}\n\nexport const ScreenProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [screen, setScreen] = useState<Screens>('Initial');\n\n return <ScreenStateContext.Provider value={{ screen, setScreen }}>{children}</ScreenStateContext.Provider>;\n};\n","import Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport {\n Dispatch,\n MutableRefObject,\n PropsWithChildren,\n SetStateAction,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { WRAPPED_SOL_MINT } from 'src/constants';\nimport { hasNumericValue, useDebounce } from 'src/misc/utils';\nimport { FormProps, IInit } from 'src/types';\nimport { useScreenState } from './ScreenProvider';\nimport { useWalletPassThrough } from './WalletPassthroughProvider';\nimport { useQuoteQuery } from 'src/queries/useQuoteQuery';\nimport { UltraQuoteResponse } from 'src/data/UltraSwapService';\nimport { FormattedUltraQuoteResponse } from 'src/entity/FormattedUltraQuoteResponse';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { useAsset } from 'src/hooks/useAsset';\nimport { PublicKey } from '@solana/web3.js';\nimport { TransactionError } from 'src/types/TransactionError';\n\nexport interface IForm {\n fromMint: string;\n toMint: string;\n fromValue: string;\n toValue: string;\n}\n\nexport type QuoteResponse = {\n original: UltraQuoteResponse;\n quoteResponse: FormattedUltraQuoteResponse;\n};\n\nexport type SwapResult =\n | {\n txid: string;\n inputAddress: PublicKey;\n outputAddress: PublicKey;\n inputAmount: number;\n outputAmount: number;\n }\n | {\n error?: TransactionError;\n };\n\nexport type SwappingStatus = 'loading' | 'pending-approval' | 'sending' | 'fail' | 'success' | 'timeout';\nexport interface ISwapContext {\n form: IForm;\n setForm: Dispatch<SetStateAction<IForm>>;\n\n errors: Record<string, { title: string; message: string }>;\n setErrors: Dispatch<\n SetStateAction<\n Record<\n string,\n {\n title: string;\n message: string;\n }\n >\n >\n >;\n fromTokenInfo?: Asset | null;\n toTokenInfo?: Asset | null;\n quoteResponseMeta: QuoteResponse | null;\n setQuoteResponseMeta: Dispatch<SetStateAction<QuoteResponse | null>>;\n lastSwapResult: { swapResult: SwapResult; quoteReponse: QuoteResponse | null } | null;\n setLastSwapResult: Dispatch<SetStateAction<{ swapResult: SwapResult; quoteReponse: QuoteResponse | null } | null>>;\n formProps: FormProps;\n displayMode: IInit['displayMode'];\n scriptDomain: IInit['scriptDomain'];\n swapping: {\n txStatus:\n | {\n txid: string;\n status: SwappingStatus;\n }\n | undefined;\n };\n setTxStatus: Dispatch<SetStateAction<{ txid: string; status: SwappingStatus } | undefined>>;\n reset: (props?: { resetValues: boolean }) => void;\n refresh: () => void;\n loading: boolean;\n quoteError?: unknown;\n lastRefreshTimestamp: number | undefined;\n isToPairFocused: MutableRefObject<boolean>;\n enableWalletPassthrough?: boolean;\n}\n\nexport const SwapContext = createContext<ISwapContext | null>(null);\n\nexport class SwapTransactionTimeoutError extends Error {\n constructor() {\n super('Transaction timed-out');\n }\n}\n\nexport function useSwapContext() {\n const context = useContext(SwapContext);\n if (!context) throw new Error('Missing SwapContextProvider');\n return context;\n}\n\nconst INITIAL_FORM = {\n fromMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n toMint: WRAPPED_SOL_MINT.toString(),\n fromValue: '',\n toValue: '',\n};\n\nconst DEFAULT_FORM_PROPS: FormProps = {\n swapMode: 'ExactIn',\n};\n\nexport const SwapContextProvider = (props: PropsWithChildren<IInit>) => {\n const { displayMode, scriptDomain, formProps: originalFormProps, children, enableWalletPassthrough } = props;\n const { screen } = useScreenState();\n const { wallet } = useWalletPassThrough();\n const { data: balances, refetch: refetchBalances } = useBalances();\n const isToPairFocused = useRef<boolean>(false);\n const walletPublicKey = useMemo(() => wallet?.adapter.publicKey?.toString(), [wallet?.adapter.publicKey]);\n const formProps: FormProps = useMemo(() => ({ ...DEFAULT_FORM_PROPS, ...originalFormProps }), [originalFormProps]);\n\n const [form, setForm] = useState<IForm>({\n fromMint: formProps?.initialInputMint ?? 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n toMint: formProps?.initialOutputMint ?? WRAPPED_SOL_MINT.toString(),\n fromValue: '',\n toValue: '',\n });\n const { data: fromTokenInfo } = useAsset(form.fromMint);\n const { data: toTokenInfo } = useAsset(form.toMint);\n\n useEffect(() => {\n if (formProps.fixedMint) {\n if (formProps.fixedMint !== formProps.initialInputMint && formProps.fixedMint !== formProps.initialOutputMint) {\n console.error('fixedMint is not the same as the initial input or output mint');\n }\n }\n }, [formProps.fixedMint, formProps.initialInputMint, formProps.initialOutputMint]);\n\n const [errors, setErrors] = useState<Record<string, { title: string; message: string }>>({});\n\n // Set value given initial amount\n const setupInitialAmount = useCallback(() => {\n if (!formProps?.initialAmount || !fromTokenInfo || !toTokenInfo) return;\n const toUiAmount = () => {\n if (!formProps.initialAmount) {\n return;\n }\n\n if (!fromTokenInfo) return;\n const value = new Decimal(formProps.initialAmount).div(Math.pow(10, fromTokenInfo.decimals)).toFixed();\n return value;\n };\n setTimeout(() => {\n setForm((prev) => ({ ...prev, fromValue: toUiAmount() ?? '' }));\n }, 0);\n }, [formProps.initialAmount, fromTokenInfo, toTokenInfo]);\n\n useEffect(() => {\n setupInitialAmount();\n }, [formProps.initialAmount, setupInitialAmount]);\n\n const debouncedForm = useDebounce(form, 250);\n const debouncePending = useMemo(\n () => JSON.stringify(form) !== JSON.stringify(debouncedForm),\n [form, debouncedForm],\n );\n\n const amount = useMemo(() => {\n if (!fromTokenInfo || !toTokenInfo) {\n return JSBI.BigInt(0);\n }\n if (isToPairFocused.current === true) {\n if (!debouncedForm.toValue || !hasNumericValue(debouncedForm.toValue)) {\n return JSBI.BigInt(0);\n }\n return JSBI.BigInt(new Decimal(debouncedForm.toValue).mul(Math.pow(10, toTokenInfo.decimals)).floor().toFixed());\n } else {\n if (!debouncedForm.fromValue || !hasNumericValue(debouncedForm.fromValue)) {\n return JSBI.BigInt(0);\n }\n return JSBI.BigInt(\n new Decimal(debouncedForm.fromValue).mul(Math.pow(10, fromTokenInfo.decimals)).floor().toFixed(),\n );\n }\n }, [debouncedForm.fromValue, debouncedForm.toValue, fromTokenInfo, toTokenInfo]);\n\n const [txStatus, setTxStatus] = useState<ISwapContext['swapping']['txStatus']>(undefined);\n const {\n data: ogQuoteResponseMeta,\n isFetching: loading,\n error: quoteError,\n refetch: refresh,\n errorUpdatedAt,\n dataUpdatedAt,\n isSuccess,\n isError,\n } = useQuoteQuery(\n {\n inputMint: debouncedForm.fromMint,\n outputMint: debouncedForm.toMint,\n amount: amount.toString(),\n taker: walletPublicKey,\n swapMode: isToPairFocused.current ? 'ExactOut' : 'ExactIn',\n referralAccount: formProps.referralAccount,\n referralFee: formProps.referralFee,\n },\n // Stop refetching when transaction is in progress\n !txStatus,\n );\n\n const balance = useMemo(() => {\n if (!balances) return 0;\n return balances[form.fromMint]?.uiAmount || 0;\n }, [balances, form.fromMint]);\n\n useEffect(() => {\n if (quoteError) {\n if (typeof quoteError === 'string') {\n setErrors({\n fromValue: { title: quoteError, message: '' },\n });\n return;\n }\n\n setErrors({\n fromValue: { title: 'Error fetching route. Try changing your input', message: '' },\n });\n return;\n }\n if (form.fromValue && new Decimal(form.fromValue).gt(balance)) {\n setErrors({\n fromValue: { title: `Insufficient ${fromTokenInfo?.symbol}`, message: '' },\n });\n return;\n }\n setErrors({});\n }, [quoteError, balance, form.fromValue, fromTokenInfo]);\n\n const lastRefreshTimestamp = useMemo(() => {\n if (loading) {\n return new Date().getTime();\n }\n if (isError) {\n return new Date(errorUpdatedAt).getTime();\n }\n if (isSuccess) {\n return new Date(dataUpdatedAt).getTime();\n }\n return undefined;\n }, [loading, errorUpdatedAt, dataUpdatedAt, isError, isSuccess]);\n\n const [quoteResponseMeta, setQuoteResponseMeta] = useState<QuoteResponse | null>(null);\n useEffect(() => {\n if (!ogQuoteResponseMeta) {\n setQuoteResponseMeta(null);\n return;\n }\n // the UI sorts the best route depending on ExactIn or ExactOut\n setQuoteResponseMeta(ogQuoteResponseMeta);\n }, [ogQuoteResponseMeta]);\n\n useEffect(() => {\n if (!form.fromValue && !form.toValue && !quoteResponseMeta) {\n setForm((prev) => ({ ...prev, fromValue: '', toValue: '' }));\n return;\n }\n\n setForm((prev) => {\n const newValue = { ...prev };\n\n if (!fromTokenInfo || !toTokenInfo) return prev;\n\n const { outAmount, inAmount } = quoteResponseMeta?.quoteResponse || {};\n if (!isToPairFocused.current) {\n newValue.toValue = outAmount ? new Decimal(outAmount.toString()).div(10 ** toTokenInfo.decimals).toFixed() : '';\n } else {\n newValue.fromValue = inAmount\n ? new Decimal(inAmount.toString()).div(10 ** fromTokenInfo.decimals).toFixed()\n : '';\n }\n return newValue;\n });\n }, [form.fromValue, form.toValue, fromTokenInfo, quoteResponseMeta, toTokenInfo]);\n\n const [lastSwapResult, setLastSwapResult] = useState<ISwapContext['lastSwapResult']>(null);\n\n const reset = useCallback(\n ({ resetValues } = { resetValues: false }) => {\n if (resetValues) {\n setForm(INITIAL_FORM);\n setupInitialAmount();\n } else {\n setForm((prev) => ({ ...prev, toValue: '' }));\n }\n\n setQuoteResponseMeta(null);\n setErrors({});\n setLastSwapResult(null);\n setTxStatus(undefined);\n refetchBalances();\n },\n [refetchBalances, setupInitialAmount],\n );\n\n // onFormUpdate callback\n useEffect(() => {\n if (typeof window.Jupiter.onFormUpdate === 'function') {\n window.Jupiter.onFormUpdate(form);\n }\n }, [form]);\n\n // onFormUpdate callback\n useEffect(() => {\n if (typeof window.Jupiter.onScreenUpdate === 'function') {\n window.Jupiter.onScreenUpdate(screen);\n }\n }, [screen]);\n\n return (\n <SwapContext.Provider\n value={{\n form,\n setForm,\n errors,\n setErrors,\n fromTokenInfo,\n toTokenInfo,\n quoteResponseMeta,\n setQuoteResponseMeta,\n // onSubmit,\n lastSwapResult,\n setLastSwapResult,\n reset,\n refresh,\n loading: loading || debouncePending,\n quoteError,\n lastRefreshTimestamp,\n isToPairFocused,\n displayMode,\n formProps,\n scriptDomain,\n swapping: {\n txStatus,\n },\n setTxStatus,\n enableWalletPassthrough,\n }}\n >\n {children}\n </SwapContext.Provider>\n );\n};\n","import { PublicKey } from '@solana/web3.js';\nimport { DEFAULT_EXPLORER, FormProps } from 'src/types';\nimport { SwapMode } from 'src/types/constants';\n\nexport const USDC_MINT = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');\nexport const USDT_MINT = new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB');\nexport const JLP_MINT = new PublicKey('27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4');\n\nexport const WRAPPED_SOL_MINT = new PublicKey('So11111111111111111111111111111111111111112');\n\nexport const MINIMUM_SOL_BALANCE = 0.01;\n\nexport const MAX_INPUT_LIMIT = 100_000_000_000_000;\n\nexport interface IFormConfigurator {\n simulateWalletPassthrough: boolean;\n defaultExplorer: DEFAULT_EXPLORER;\n formProps: FormProps;\n colors: {\n /** Primary color (accent color) */\n primary?: string;\n /** Background color */\n background?: string;\n /** Primary text color */\n primaryText?: string;\n /** Warning color */\n warning?: string;\n /** Interactive elements color */\n interactive?: string;\n /** Module/component background color */\n module?: string;\n };\n branding?: {\n logoUri?: string;\n name?: string;\n };\n}\n\nexport const INITIAL_FORM_CONFIG: IFormConfigurator = Object.freeze({\n simulateWalletPassthrough: false,\n defaultExplorer: 'Solana Explorer',\n formProps: {\n fixedAmount: false,\n initialAmount: '',\n initialInputMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n initialOutputMint: WRAPPED_SOL_MINT.toString(),\n swapMode:SwapMode.ExactIn, \n },\n colors: {\n primary: '199, 242, 132',\n background: '0, 0, 0',\n primaryText: '232, 249, 255',\n warning: '251, 191, 36',\n interactive: '33, 42, 54',\n module: '16, 23, 31',\n },\n});\n","export const SwapMode = {\n ExactInOrOut: 'ExactInOrOut',\n ExactIn: 'ExactIn',\n ExactOut: 'ExactOut',\n } as const;","import { PublicKey } from '@solana/web3.js';\nimport BN from 'bn.js';\nimport Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport { RefObject, useEffect, useRef, useState } from 'react';\nimport { BalanceResponse } from 'src/data/UltraSwapService';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { checkIsUnknownToken } from './tokenTags';\n\nconst userLocale =\n typeof window !== 'undefined'\n ? navigator.languages && navigator.languages.length\n ? navigator.languages[0]\n : navigator.language\n : 'en-US';\n\nexport const numberFormatter = new Intl.NumberFormat(userLocale, {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 9,\n});\n\nconst getDecimalCount = (value: string) => {\n const parts = value.split('.');\n return parts.length > 1 ? parts[1].length : 0;\n};\n\nexport const formatNumber = {\n format: (val?: string | Decimal, precision?: number): string => {\n if (!val) {\n return '';\n }\n\n // Use the default precision if not provided\n const defaultDecimals = getDecimalCount(val.toString());\n // format it against user locale\n const numberFormatter = new Intl.NumberFormat(userLocale, {\n maximumFractionDigits: precision ?? defaultDecimals,\n });\n return numberFormatter.format(val.toString());\n },\n};\n\nexport function shortenAddress(address: string, chars = 4): string {\n return `${address.slice(0, chars)}...${address.slice(-chars)}`;\n}\n\nexport function readableValue(lamportsAmount: JSBI | BN | number | bigint, decimals: number): string {\n return new Decimal(lamportsAmount.toString())\n .div(10 ** decimals)\n .toDP(decimals, Decimal.ROUND_DOWN)\n .toFixed();\n}\n\nexport function fromLamports(lamportsAmount: JSBI | BN | number | bigint, decimals: number): number {\n return new Decimal(lamportsAmount.toString())\n .div(10 ** decimals)\n .toDP(decimals, Decimal.ROUND_DOWN)\n .toNumber();\n}\n\nexport function toLamports(lamportsAmount: JSBI | BN | number, decimals: number): number {\n return new Decimal(lamportsAmount.toString())\n .mul(10 ** decimals)\n .floor()\n .toNumber();\n}\n\n// https://usehooks.com/useEventListener/\nexport function useReactiveEventListener(\n eventName: string,\n handler: (event: any) => void,\n element = typeof window !== 'undefined' ? window : null,\n) {\n // Create a ref that stores handler\n const savedHandler = useRef<React.Ref<any>>();\n // Update ref.current value if handler changes.\n // This allows our effect below to always get latest handler ...\n // ... without us needing to pass it in effect deps array ...\n // ... and potentially cause effect to re-run every render.\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(\n () => {\n if (typeof window !== 'undefined') {\n // Make sure element supports addEventListener\n // On\n const isSupported = element && element.addEventListener;\n if (!isSupported) return;\n // Create event listener that calls handler function stored in ref\n const eventListener = (event: any) => typeof savedHandler.current === 'function' && savedHandler.current(event);\n // Add event listener\n element.addEventListener(eventName, eventListener);\n // Remove event listener on cleanup\n return () => {\n element.removeEventListener(eventName, eventListener);\n };\n }\n },\n [eventName, element], // Re-run if eventName or element changes\n );\n}\n\nexport const isMobile = () => typeof window !== 'undefined' && screen && screen.width <= 480;\n\nexport const detectedSeparator = formatNumber.format('1.1').substring(1, 2);\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n // Cancel the timeout if value changes (also on delay change or unmount)\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay], // Only re-call effect if value or delay changes\n );\n return debouncedValue;\n}\n\nexport function useOutsideClick(ref: RefObject<HTMLElement>, handler: (e: MouseEvent) => void) {\n useEffect(() => {\n const listener = (event: any) => {\n // Do nothing if clicking ref's element or descendent elements\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n handler(event);\n };\n document.addEventListener('mouseup', listener);\n return () => {\n document.removeEventListener('mouseup', listener);\n };\n }, [ref, handler]);\n}\n\nexport function splitIntoChunks<T>(array: T[], size: number): T[][] {\n return Array.apply<number, T[], T[][]>(0, new Array(Math.ceil(array.length / size))).map((_, index) =>\n array.slice(index * size, (index + 1) * size),\n );\n}\n\nexport const hasNumericValue = (amount: string | number) => {\n if (amount && !Number.isNaN(Number(amount))) {\n return true;\n }\n return false;\n};\n\nexport function jsonToBase64(object: Object) {\n try {\n const json = JSON.stringify(object);\n return Buffer.from(json).toString('base64');\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nexport function base64ToJson(base64String: string) {\n try {\n const json = Buffer.from(base64String, 'base64').toString();\n return JSON.parse(json);\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nexport function isValidSolanaAddress(address: string) {\n try {\n new PublicKey(address);\n return true;\n } catch (error) {\n console.error('Invalid Solana address:', error);\n return false;\n }\n}\n\n\n/**\n * Sorts search results based on user balance and other criteria\n * @param searchResults - Array of search assets to sort\n * @param options - Sorting options including balances and preferences\n * @returns Sorted array of search assets\n */\nexport const sortByUserBalance = (\n searchResults: Asset[],\n balances: BalanceResponse, \n): Asset[] => {\n\n // Create maps for efficient lookups\n const userBalanceMap = new Map<string, number>();\n const userUsdValueMap = new Map<string, Decimal>();\n\n // Calculate user balances and USD values\n Object.entries(balances)\n .filter(([_, item]) => item.uiAmount > 0)\n .forEach(([mint, item]) => {\n const tokenInfo = searchResults.find((token) => token.id === mint);\n if (!tokenInfo) return;\n\n const amount = item.uiAmount;\n userBalanceMap.set(mint, amount);\n\n const tokenPrice = tokenInfo.usdPrice || 0;\n if (tokenPrice) {\n const usdValue = new Decimal(amount).mul(tokenPrice);\n if (usdValue.greaterThan(0)) {\n userUsdValueMap.set(mint, usdValue);\n }\n }\n });\n\n // Deduplicate tokens by ID\n const deduplicatedResults = (() => {\n const map = new Map<string, Asset>();\n searchResults.forEach((item) => {\n if (!map.has(item.id)) {\n map.set(item.id, item);\n }\n });\n return Array.from(map.values());\n })();\n\n return deduplicatedResults.sort((t1, t2) => {\n // 1. USD value comparison (highest first)\n const t1UsdValue = userUsdValueMap.get(t1.id);\n const t2UsdValue = userUsdValueMap.get(t2.id);\n \n if (t1UsdValue && t2UsdValue) {\n const usdComparison = t2UsdValue.cmp(t1UsdValue);\n if (usdComparison !== 0) return usdComparison;\n } else if (t1UsdValue && !t2UsdValue) {\n return -1; // t1 has USD value, t2 doesn't\n } else if (!t1UsdValue && t2UsdValue) {\n return 1; // t2 has USD value, t1 doesn't\n }\n\n // 2. Balance comparison (highest first)\n const t1Balance = userBalanceMap.get(t1.id);\n const t2Balance = userBalanceMap.get(t2.id);\n \n if (t1Balance && t2Balance) {\n const balanceComparison = new Decimal(t2Balance).cmp(t1Balance);\n if (balanceComparison !== 0) return balanceComparison;\n } else if (t1Balance && !t2Balance) {\n return -1; // t1 has balance, t2 doesn't\n } else if (!t1Balance && t2Balance) {\n return 1; // t2 has balance, t1 doesn't\n }\n\n\n // 3. User token prioritization\n const t1HasBalance = userBalanceMap.has(t1.id);\n const t2HasBalance = userBalanceMap.has(t2.id);\n \n if (t1HasBalance && !t2HasBalance) return -1;\n if (!t1HasBalance && t2HasBalance) return 1;\n\n // 4. Volume-based scoring\n let t1Score = 0;\n let t2Score = 0;\n \n const t1Volume = (t1.stats24h?.buyVolume || 0) + (t1.stats24h?.sellVolume || 0);\n const t2Volume = (t2.stats24h?.buyVolume || 0) + (t2.stats24h?.sellVolume || 0);\n\n // Higher volume gets higher score\n if (t1Volume > t2Volume) t1Score += 1;\n if (t2Volume > t1Volume) t2Score += 1;\n\n // 5. Known token prioritization\n if (checkIsUnknownToken(t1)) t1Score -= 2;\n if (checkIsUnknownToken(t2)) t2Score -= 2;\n\n return t2Score - t1Score;\n });\n};","import { Asset } from 'src/entity/SearchResponse';\n\nexport const checkIsStrictOrVerified = (tokenInfo: Asset) => {\n return Boolean(\n tokenInfo.tags?.includes('verified') || tokenInfo.tags?.includes('strict') || tokenInfo.tags?.includes('community'),\n );\n};\n\n// If it's not VERIFIED, it's unknown\nexport const checkIsUnknownToken = (tokenInfo: Asset) => {\n return checkIsStrictOrVerified(tokenInfo) === false;\n};\n\nexport const checkIsToken2022 = (tokenInfo: Asset) => {\n return tokenInfo.tags?.includes('token-2022');\n};\n","import { SendTransactionOptions, useWallet, Wallet, WalletContextState, WalletName } from '@jup-ag/wallet-adapter';\nimport { Connection, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport { useAtom } from 'jotai';\nimport React, { createContext, FC, PropsWithChildren, ReactNode, useContext, useMemo } from 'react';\nimport { appProps } from 'src/library';\n\nconst initialPassThrough: WalletContextState = {\n publicKey: null,\n wallets: [],\n wallet: null,\n connect: async () => {},\n select: () => {},\n connecting: false,\n connected: false,\n disconnect: async () => {},\n autoConnect: false,\n disconnecting: false,\n sendTransaction: async (transaction: Transaction | VersionedTransaction, connection: Connection, options?: SendTransactionOptions) => '',\n signTransaction: undefined,\n signAllTransactions: undefined,\n signMessage: undefined,\n signIn: undefined,\n};\n\nexport const WalletPassthroughContext = createContext<WalletContextState>(initialPassThrough);\n\nexport function useWalletPassThrough(): WalletContextState {\n return useContext(WalletPassthroughContext);\n}\n\nconst FromWalletAdapter: FC<PropsWithChildren> = ({ children }) => {\n const walletContextState = useWallet();\n return <WalletPassthroughContext.Provider value={walletContextState}>{children}</WalletPassthroughContext.Provider>;\n};\n\nconst WalletPassthroughProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [atom] = useAtom(appProps);\n const wallet = atom?.passthroughWalletContextState?.wallet;\n\n const walletPassthrough: WalletContextState = useMemo(() => {\n return {\n ...initialPassThrough,\n ...atom?.passthroughWalletContextState,\n disconnect: async () => {\n try {\n if (wallet?.adapter?.disconnect) {\n return wallet?.adapter?.disconnect();\n }\n } catch (error) {\n console.log(error);\n }\n },\n };\n }, [atom?.passthroughWalletContextState, wallet?.adapter]);\n\n if (!window.Jupiter.enableWalletPassthrough) {\n return <FromWalletAdapter>{children}</FromWalletAdapter>;\n }\n\n if (walletPassthrough) {\n return <WalletPassthroughContext.Provider value={walletPassthrough}>{children}</WalletPassthroughContext.Provider>;\n }\n\n return <>{children}</>;\n};\n\nexport default WalletPassthroughProvider;\n","import { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport { UltraSwapQuoteParams, ultraSwapService } from 'src/data/UltraSwapService';\nimport { FormattedUltraQuoteResponse } from 'src/entity/FormattedUltraQuoteResponse';\nimport { create } from 'superstruct';\n\nexport const useQuoteQuery = (params: UltraSwapQuoteParams, shouldRefetch: boolean = true) => {\n const { amount } = params;\n return useQuery({\n queryKey: ['quote', params],\n queryFn: async ({ signal }) => {\n if (Number(amount) === 0) {\n return null;\n }\n try {\n const response = await ultraSwapService.getQuote(params, signal);\n const quoteResponse = create(response, FormattedUltraQuoteResponse, 'conver FormattedUltraQuoteResponse Error');\n return {\n quoteResponse,\n original: response,\n };\n } catch (e) {\n if (e instanceof Response) {\n const errorObj = await e.json();\n throw errorObj.error;\n }\n throw e;\n }\n },\n refetchInterval: shouldRefetch ? 5_000 : false,\n retry: 0,\n enabled: Number(amount) > 0,\n gcTime: 0,\n staleTime: 0,\n });\n};\n","import JSBI from \"jsbi\";\n\nexport const AGGREGATOR_SOURCES = {\n METIS: 'metis',\n JUPITERZ: 'jupiterz',\n HASHFLOW: 'hashflow',\n DFLOW: 'dflow',\n} as const;\n\nexport type AggregatorSources = (typeof AGGREGATOR_SOURCES)[keyof typeof AGGREGATOR_SOURCES];\nexport interface UltraQuoteResponse {\n inputMint: string;\n inAmount: string;\n outputMint: string;\n outAmount: string;\n otherAmountThreshold: string;\n priceImpactPct: string;\n routePlan: {\n swapInfo: {\n inputMint: string;\n inAmount: string;\n outputMint: string;\n outAmount: string;\n ammKey: string;\n label: string;\n feeAmount: JSBI;\n feeMint: string;\n };\n percent: number;\n }[];\n contextSlot: number;\n transaction: string | null;\n swapType: 'ultra';\n gasless: boolean;\n requestId: string;\n prioritizationFeeLamports?: number;\n feeBps: number;\n router: AggregatorSources;\n }\n\n// Refer docs here https://dev.jup.ag/docs/api/ultra-api/order\nexport interface UltraSwapQuoteParams {\n inputMint: string;\n outputMint: string;\n amount: string;\n taker?: string;\n swapMode?: 'ExactIn' | 'ExactOut';\n referralAccount?: string;\n referralFee?: number;\n}\ninterface UltraSwapResponseBase {\n signature: string;\n code: number;\n status: 'Success' | 'Failed';\n slot: string;\n}\n\ninterface UltraSwapResponseSuccess extends UltraSwapResponseBase {\n status: 'Success';\n inputAmountResult: string;\n outputAmountResult: string;\n}\n\ninterface UltraSwapResponseFailed extends UltraSwapResponseBase {\n status: 'Failed';\n message: string;\n error: string;\n}\n\nexport type UltraSwapResponse = UltraSwapResponseSuccess | UltraSwapResponseFailed;\n\n\nexport interface Router {\n icon: string;\n id: AggregatorSources;\n name: string;\n}\n\nexport type RouterResponse = Router[];\ninterface UltraSwapService {\n getQuote(params: UltraSwapQuoteParams): Promise<UltraQuoteResponse>;\n submitSwap(signedTransaction: string, requestId: string): Promise<UltraSwapResponse>;\n}\n\ninterface TokenBalance {\n amount: string; // Raw token amount as string\n uiAmount: number; // Formatted amount with decimals\n slot: number; // Solana slot number\n isFrozen: boolean; // Whether the token account is frozen\n}\n\nexport type BalanceResponse = Record<string, TokenBalance>;\n\nexport enum Severity {\n INFO = 'info',\n WARNING = 'warning',\n CRITICAL = 'critical',\n}\n\nexport type Warning = {\n type: string;\n message: string;\n severity: Severity;\n};\n\nexport interface ShieldResponse {\n warnings: {\n [mintAddress: string]: Warning[];\n };\n}\nclass UltraSwapService implements UltraSwapService {\n private BASE_URL ='https://ultra-api.jup.ag';\n private ROUTE = {\n SWAP: `${this.BASE_URL}/execute`,\n ORDER: `${this.BASE_URL}/order`,\n ROUTERS: `${this.BASE_URL}/order/routers`,\n BALANCES: `${this.BASE_URL}/balances`,\n SHIELD: `${this.BASE_URL}/shield`,\n };\n\n async getQuote(params: UltraSwapQuoteParams, signal?: AbortSignal): Promise<UltraQuoteResponse> {\n const queryParams = new URLSearchParams(\n Object.entries(params)\n .filter(([_, value]) => value !== undefined)\n .reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value.toString(),\n }),\n {},\n ),\n );\n\n const response = await fetch(`${this.ROUTE.ORDER}?${queryParams.toString()}`, { signal });\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n\n async submitSwap(signedTransaction: string, requestId: string): Promise<UltraSwapResponse> {\n const response = await fetch(this.ROUTE.SWAP, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ signedTransaction, requestId }),\n });\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n async getRouters(): Promise<RouterResponse> {\n const response = await fetch(this.ROUTE.ROUTERS)\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n\n async getBalance(address: string, signal?: AbortSignal): Promise<BalanceResponse> {\n const response = await fetch(`${this.ROUTE.BALANCES}/${address}`, { signal });\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n async getShield(mintAddress: string[]): Promise<ShieldResponse> {\n const response = await fetch(`${this.ROUTE.SHIELD}?mints=${mintAddress.join(',')}`);\n if (!response.ok) {\n throw response;\n }\n const result = await response.json();\n return result;\n }\n}\n\nexport const ultraSwapService = new UltraSwapService();\n","import { PublicKey } from '@solana/web3.js';\nimport JSBI from 'jsbi';\nimport {\n array,\n boolean,\n coerce,\n defaulted,\n Infer,\n instance,\n nullable,\n number,\n optional,\n string,\n type,\n} from 'superstruct';\n\nconst PublicKeyFromString = coerce(instance(PublicKey), string(), (value) => new PublicKey(value));\n\n//@ts-ignore bug because JSBI ctor being private?!?\nconst AmountFromString = coerce<JSBI, null, string>(instance(JSBI), string(), (value) => JSBI.BigInt(value));\n\nconst NumberFromString = coerce<string, null, number>(string(), number(), (value) => Number(value));\n\nconst SwapInfo = type({\n ammKey: PublicKeyFromString,\n label: string(),\n inputMint: string(),\n outputMint: string(),\n inAmount: AmountFromString,\n outAmount: AmountFromString,\n feeAmount: AmountFromString,\n feeMint: PublicKeyFromString,\n});\n\nconst RoutePlanStep = type({\n swapInfo: SwapInfo,\n percent: number(),\n});\nconst RoutePlanWithMetadata = array(RoutePlanStep);\n\nexport const FormattedUltraQuoteResponse = type({\n inputMint: PublicKeyFromString,\n inAmount: AmountFromString,\n outputMint: PublicKeyFromString,\n outAmount: AmountFromString,\n otherAmountThreshold: AmountFromString,\n priceImpactPct: NumberFromString,\n routePlan: RoutePlanWithMetadata,\n slippageBps: number(),\n contextSlot: defaulted(number(), 0),\n computedAutoSlippage: optional(number()),\n transaction: nullable(string()),\n swapType: string(),\n gasless: boolean(),\n requestId: string(),\n prioritizationFeeLamports: optional(number()),\n feeBps: number(),\n router: string(),\n errorMessage: optional(string()),\n});\n\nexport type FormattedUltraQuoteResponse = Infer<typeof FormattedUltraQuoteResponse>;\n","import { useQuery } from '@tanstack/react-query';\nimport { BalanceResponse, ultraSwapService } from 'src/data/UltraSwapService';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { useMemo } from 'react';\nimport { WRAPPED_SOL_MINT } from 'src/constants';\nimport { getPluginInView } from 'src/stores/jotai-plugin-in-view';\n\nconst ULTRA_NATIVESOL_ID = 'SOL';\nconst WSOL_ID = WRAPPED_SOL_MINT.toString();\nconst WRAPPED_SOL_ID = 'wSOL';\n\nfunction combineSolAmounts(data: BalanceResponse): BalanceResponse {\n const balances = structuredClone(data);\n\n /**\n * Note:\n * /balance return \"SOL\" as native sol and \"So11111111111111111111111111111111111111112\" as wrapped sol\n * Logic below is to convert \"So11111111111111111111111111111111111111112\" to wSOL and \"SOL\" to \"So11111111111111111111111111111111111111112\"\n *\n */\n if (balances[WSOL_ID]) {\n balances[WRAPPED_SOL_ID] = {\n ...balances[WSOL_ID],\n };\n }\n\n if (balances[ULTRA_NATIVESOL_ID]) {\n balances[WSOL_ID] = {\n ...balances[ULTRA_NATIVESOL_ID],\n };\n }\n\n return balances;\n}\n\nexport const useBalances = () => {\n const { publicKey } = useWalletPassThrough();\n\n const address = useMemo(() => {\n if (!publicKey) return '';\n return publicKey.toString();\n }, [publicKey]);\n\n return useQuery({\n queryKey: ['ultra', 'balances', address],\n queryFn: async ({ signal }) => {\n return await ultraSwapService.getBalance(address, signal);\n },\n enabled: !!address && getPluginInView(),\n gcTime: 20_000,\n staleTime: 20_000,\n refetchOnWindowFocus: false,\n refetchIntervalInBackground: false,\n refetchOnMount: false,\n select: (data) => combineSolAmounts(data),\n });\n};\n","import { useQuery } from '@tanstack/react-query';\nimport { searchService } from 'src/contexts/SearchService';\n\nexport const ASSET_QUERY_KEY = ['search', 'assets'];\n\nexport const useAsset = (mint: string) => {\n return useQuery({\n queryKey: [...ASSET_QUERY_KEY, mint],\n queryFn: () => searchService.search(mint),\n enabled: !!mint,\n staleTime: Infinity,\n select: (data) => data[0],\n });\n};\n","import { SearchResponse } from 'src/entity/SearchResponse';\n\nconst BASE_URL = 'https://datapi.jup.ag';\n\nclass SearchService {\n private ROUTE = {\n SEARCH: `${BASE_URL}/v1/assets`,\n };\n\n async search(query: string): Promise<SearchResponse> {\n const response = await fetch(`${this.ROUTE.SEARCH}/search?query=${query}`, {\n credentials: 'include',\n });\n const data: SearchResponse = await response.json();\n return data;\n }\n}\n\nexport const searchService = new SearchService();\n","import React, { useCallback } from 'react';\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport RefreshSVG from 'src/icons/RefreshSVG';\n\nimport { WalletButton } from './WalletComponents';\nimport { useBranding } from 'src/contexts/BrandingProvider';\nimport { useBalances } from 'src/hooks/useBalances';\n\nconst Header = () => {\n const { refresh, enableWalletPassthrough } = useSwapContext();\n const { refetch: refetchBalances } = useBalances();\n const { logoUri, name } = useBranding();\n\n const onRefresh = useCallback(() => {\n refetchBalances();\n refresh();\n }, [refetchBalances, refresh]);\n\n return (\n <div className=\"mt-2 h-7 pl-3 pr-2\">\n <div className=\"w-full flex items-center justify-between \">\n <div className=\"flex items-center space-x-2\">\n <img src={logoUri} alt=\"Plugin Branding\" className=\"w-6 h-6\" />\n <span className=\"font-bold text-sm text-primary-text\">{name}</span>\n </div>\n\n <div className=\"flex space-x-1 items-center\">\n <button\n type=\"button\"\n className=\"p-2 h-7 w-7 flex items-center justify-center rounded-full bg-interactive text-primary-text fill-current\"\n onClick={onRefresh}\n >\n <RefreshSVG />\n </button>\n {!enableWalletPassthrough && <WalletButton />}\n </div>\n </div>\n </div>\n );\n};\n\nexport default Header;\n","const RefreshSVG: React.FC<React.SVGAttributes<SVGElement>> = ({ width = '12', height = '12' }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 12 12\" fill=\"inherit\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_841_4053)\">\n <path\n d=\"M11.6466 4.23513V0.706082L10.4111 1.94156C9.3173 0.741165 7.72912 0 6 0C2.6827 0 0 2.6827 0 6C0 9.3173 2.68203 12 6 12C7.69405 12 9.21142 11.2939 10.3059 10.165L9.31797 9.14128C8.50601 10.0234 7.30561 10.5879 6 10.5879C3.45892 10.5879 1.41216 8.5411 1.41216 6.00002C1.41216 3.45894 3.45892 1.41218 6 1.41218C7.34135 1.41218 8.57615 2.01238 9.42317 2.92954L8.11757 4.23515L11.6466 4.23513Z\"\n fill=\"inherit\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_841_4053\">\n <rect width={width} height={height} fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport default RefreshSVG;\n","import React, { MouseEvent, useCallback } from 'react';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\n\nexport const WalletModalButton = () => {\n const { connecting } = useWalletPassThrough();\n const { setScreen } = useScreenState();\n const handleClick = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n if (window.Jupiter.enableWalletPassthrough && window.Jupiter.onRequestConnectWallet) {\n window.Jupiter.onRequestConnectWallet();\n } else { \n setScreen('Wallet');\n }\n }, [setScreen]);\n\n return (\n <button\n type=\"button\"\n className=\"py-2 px-3 h-7 flex items-center rounded-2xl text-xs bg-interactive text-primary-text\"\n onClick={handleClick}\n >\n {connecting ? (\n <span>\n <span>Connecting...</span>\n </span>\n ) : (\n <span>\n <span>Connect Wallet</span>\n </span>\n )}\n </button>\n );\n};\n","import React, { useMemo, useRef, useState } from 'react';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { useOutsideClick } from 'src/misc/utils';\nimport { CurrentUserBadge } from '../CurrentUserBadge';\n\nimport { WalletModalButton } from './components/WalletModalButton';\n\nexport const WalletButton = () => {\n const { publicKey, connected, connecting, disconnect } = useWalletPassThrough();\n const [active, setActive] = useState(false);\n const ref = useRef<HTMLUListElement>(null);\n const { screen, setScreen } = useScreenState();\n\n const base58 = useMemo(() => publicKey?.toBase58(), [publicKey]);\n const onClickDisconnect = () => {\n setActive(false);\n disconnect();\n };\n\n const closePopup = () => {\n setActive(false);\n };\n useOutsideClick(ref, closePopup);\n\n if ((!connected && !connecting) || !base58) {\n return (\n <div onClick={() => setScreen('Wallet')} className=\"text-primary-text\">\n <WalletModalButton />\n </div>\n );\n }\n\n return (\n <div className=\"cursor-pointer relative\">\n <div onClick={() => setActive(!active)}>\n <CurrentUserBadge />\n </div>\n\n {screen === 'Initial' ? (\n <ul\n aria-label=\"dropdown-list\"\n className={\n active\n ? 'absolute block top-10 right-0 text-sm bg-black rounded-lg p-2 text-primary-text dark:bg-white dark:text-black'\n : 'hidden'\n }\n ref={ref}\n role=\"menu\"\n >\n <li onClick={onClickDisconnect} role=\"menuitem\">\n <span>Disconnect</span>\n </li>\n </ul>\n ) : null}\n </div>\n );\n};\n","import React from 'react';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\n\nimport { shortenAddress } from '../misc/utils';\n\nexport const CurrentUserBadge: React.FC = () => {\n const { publicKey, wallet, } = useWalletPassThrough();\n\n if (!wallet || !publicKey) {\n return null;\n }\n\n return (\n <div className=\"flex items-center bg-interactive py-2 px-3 rounded-2xl h-7\">\n <div\n className=\"w-4 h-4 rounded-full bg-interactive dark:bg-white-10 flex justify-center items-center\"\n style={{ position: 'relative' }}\n >\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img alt=\"Wallet logo\" width={16} height={16} src={wallet?.adapter?.icon} />\n </div>\n\n <div className=\"ml-2\">\n <div className=\"text-xs text-primary-text\">{shortenAddress(`${publicKey}`, 2)}</div>\n </div>\n </div>\n );\n};\n","import { createContext, PropsWithChildren, useContext, useMemo } from \"react\";\nimport { IInit } from \"src/types\";\n\nexport interface BrandingContextState {\n logoUri?: string;\n name?: string;\n}\n\nexport const BrandingContext = createContext<BrandingContextState>({} as BrandingContextState);\n\nexport const BrandingProvider = (props: PropsWithChildren<IInit>) => {\n const { branding ,children} = props;\n\n const logoUri = useMemo(() => branding?.logoUri? branding.logoUri : 'https://jup.ag/svg/jupiter-logo.svg', [branding?.logoUri]);\n const name = useMemo(() => branding?.name? branding.name : 'Jupiter', [branding?.name]);\n\n return <BrandingContext.Provider value={{ logoUri, name }}>{children}</BrandingContext.Provider>;\n};\nexport function useBranding() {\n const context = useContext(BrandingContext);\n return context;\n}","import React, { useCallback, useState } from 'react';\n\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport Form from '../../components/Form';\nimport FormPairSelector from '../../components/FormPairSelector';\nimport { cn } from 'src/misc/cn';\nimport { Asset } from 'src/entity/SearchResponse';\n\nconst InitialScreen = () => {\n const { form, setForm, loading } = useSwapContext();\n\n const [isDisabled, setIsDisabled] = useState(false);\n\n const [selectPairSelector, setSelectPairSelector] = useState<'fromMint' | 'toMint' | null>(null);\n\n const onSelectMint = useCallback(\n async (tokenInfo: Asset) => {\n if (selectPairSelector === 'fromMint') {\n setForm((prev) => ({\n ...prev,\n fromMint: tokenInfo.id,\n fromValue: '',\n // Prevent same token to same token;\n ...(prev.toMint === tokenInfo.id ? { toMint: prev.fromMint } : undefined),\n }));\n } else {\n setForm((prev) => ({\n ...prev,\n toMint: tokenInfo.id,\n toValue: '',\n // Prevent same token to same token;\n ...(prev.fromMint === tokenInfo.id ? { fromMint: prev.toMint } : undefined),\n }));\n }\n setSelectPairSelector(null);\n },\n [selectPairSelector, setForm],\n );\n\n return (\n <>\n {/* Body */}\n <form\n className={cn({\n hidden: Boolean(selectPairSelector),\n })}\n >\n <Form isDisabled={isDisabled} setSelectPairSelector={setSelectPairSelector} />\n </form>\n\n {selectPairSelector !== null ? (\n <div className=\"absolute top-0 left-0 h-full w-full bg-black rounded-lg overflow-hidden\">\n <FormPairSelector onSubmit={onSelectMint} onClose={() => setSelectPairSelector(null)} />\n </div>\n ) : null}\n </>\n );\n};\n\nexport default InitialScreen;\n","import { MouseEvent, useCallback, useMemo } from 'react';\nimport { NumberFormatValues, NumericFormat } from 'react-number-format';\n\n\nimport CoinBalance from './Coinbalance';\nimport JupButton from './JupButton';\n\nimport TokenIcon from './TokenIcon';\n\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport ChevronDownIcon from 'src/icons/ChevronDownIcon';\nimport WalletIcon from 'src/icons/WalletIcon';\nimport { detectedSeparator } from 'src/misc/utils';\nimport { MAX_INPUT_LIMIT, MINIMUM_SOL_BALANCE, WRAPPED_SOL_MINT } from '../constants';\nimport { CoinBalanceUSD } from './CoinBalanceUSD';\nimport PriceInfo from './PriceInfo/index';\nimport SwitchPairButton from './SwitchPairButton';\nimport Decimal from 'decimal.js';\nimport { cn } from 'src/misc/cn';\nimport { SwapMode } from 'src/types/constants';\nimport JupShield from './JupShield';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { useUltraSwapMutation } from 'src/queries/useUltraSwapMutation';\nimport { SubmitButton } from './SubmitButton';\n\nconst FormInputContainer: React.FC<{\n tokenInfo?: Asset;\n onBalanceClick?: (e: React.MouseEvent<HTMLElement>) => void;\n title: string;\n pairSelectDisabled: boolean;\n onClickSelectPair: () => void;\n value: string;\n children: React.ReactNode;\n}> = ({ tokenInfo, onBalanceClick, title, pairSelectDisabled, onClickSelectPair, children, value }) => {\n return (\n <div\n className={cn(\n 'border border-transparent bg-module rounded-xl transition-all',\n 'py-3 px-4 flex flex-col dark:text-primary-text gap-y-2',\n 'group focus-within:border-primary/50 focus-within:shadow-swap-input-dark rounded-xl',\n )}\n >\n <div className=\"flex justify-between items-center text-xs text-primary-text\">\n <div>{title}</div>\n {tokenInfo && (\n <div\n className={cn('flex space-x-1 text-xs items-center text-primary-text/50 fill-current ', {\n 'cursor-pointer': onBalanceClick,\n })}\n onClick={(e) => {\n onBalanceClick?.(e);\n }}\n >\n <WalletIcon width={10} height={10} />\n <CoinBalance mintAddress={tokenInfo.id} hideZeroBalance={false} />\n <span>{tokenInfo.symbol}</span>\n </div>\n )}\n </div>\n <div className=\"flex\">\n <div>\n <button\n type=\"button\"\n className={cn('py-2 px-3 rounded-lg flex items-center bg-interactive text-primary-text', {\n 'hover:bg-interactive/80': !pairSelectDisabled,\n })}\n disabled={pairSelectDisabled}\n onClick={onClickSelectPair}\n >\n <div className=\"h-5 w-5\">\n <TokenIcon info={tokenInfo} width={20} height={20} />\n </div>\n <div className=\"ml-4 mr-2 font-semibold\" translate=\"no\">\n <div className=\"truncate\">{tokenInfo?.symbol}</div>\n </div>\n {pairSelectDisabled ? null : (\n <span className=\"text-primary-text/25 fill-current\">\n <ChevronDownIcon />\n </span>\n )}\n </button>\n\n <div className=\"flex justify-between items-center h-[20px]\">\n {tokenInfo?.id && <JupShield tokenAddress={tokenInfo.id} />}\n </div>\n </div>\n <div className=\"flex flex-col items-end justify-between w-full\">\n {children}\n <span className=\"text-xs text-primary-text/50\">\n\n {tokenInfo && <CoinBalanceUSD tokenInfo={tokenInfo} amount={value} />}\n </span>\n </div>\n </div>\n </div>\n );\n};\n\nconst Form: React.FC<{\n isDisabled: boolean;\n setSelectPairSelector: React.Dispatch<React.SetStateAction<'fromMint' | 'toMint' | null>>;\n}> = ({ setSelectPairSelector }) => {\n const { publicKey, wallet } = useWalletPassThrough();\n\n const { data: balances } = useBalances();\n const {\n form,\n setForm,\n fromTokenInfo,\n toTokenInfo,\n quoteResponseMeta,\n formProps: { fixedAmount, swapMode, fixedMint },\n loading,\n isToPairFocused,\n setTxStatus,\n setLastSwapResult,\n } = useSwapContext();\n const { setScreen } = useScreenState();\n const { mutateAsync: ultraSwapMutation } = useUltraSwapMutation();\n\n const onSubmit = useCallback(async () => {\n if (!wallet || !wallet.adapter.publicKey || !quoteResponseMeta) {\n return null;\n }\n\n try {\n if (!fromTokenInfo) throw new Error('Missing fromTokenInfo');\n if (!toTokenInfo) throw new Error('Missing toTokenInfo');\n await ultraSwapMutation({\n quoteResponseMeta,\n fromTokenInfo,\n toTokenInfo,\n setTxStatus,\n setLastSwapResult,\n });\n } catch (error) {\n console.log('Swap error', error);\n } finally{\n setScreen('Swapping');\n }\n }, [wallet, quoteResponseMeta, ultraSwapMutation, fromTokenInfo, toTokenInfo, setTxStatus, setLastSwapResult,setScreen]);\n\n\n const shouldDisabledFromSelector = useMemo(() => {\n if (fromTokenInfo?.id === fixedMint) {\n return true;\n }\n return false;\n }, [fixedMint, fromTokenInfo?.id]);\n\n const shouldDisabledToSelector = useMemo(() => {\n if (toTokenInfo?.id === fixedMint) {\n return true;\n }\n return false;\n }, [fixedMint, toTokenInfo?.id]);\n\n const walletPublicKey = useMemo(() => publicKey?.toString(), [publicKey]);\n\n const onChangeFromValue = ({ value }: NumberFormatValues) => {\n if (value === '') {\n setForm((form) => ({ ...form, fromValue: '', toValue: '' }));\n return;\n }\n\n const isInvalid = Number.isNaN(value);\n if (isInvalid) return;\n\n setForm((form) => ({ ...form, fromValue: value }));\n };\n\n const onChangeToValue = ({ value }: NumberFormatValues) => {\n if (value === '') {\n setForm((form) => ({ ...form, fromValue: '', toValue: '' }));\n return;\n }\n\n const isInvalid = Number.isNaN(value);\n if (isInvalid) return;\n\n setForm((form) => ({ ...form, toValue: value }));\n };\n\n const balance: string | null = useMemo(() => {\n if (!fromTokenInfo?.id) return null;\n\n if (!balances) return null;\n const accBalanceObj = balances[fromTokenInfo.id];\n if (!accBalanceObj) return null;\n\n return accBalanceObj.uiAmount.toString();\n }, [balances, fromTokenInfo?.id]);\n\n const onClickMax = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n\n if (!balance) return;\n if (fromTokenInfo?.id === WRAPPED_SOL_MINT.toBase58()) {\n setForm((prev) => ({\n ...prev,\n fromValue: new Decimal(balance).gt(MINIMUM_SOL_BALANCE)\n ? new Decimal(balance).minus(MINIMUM_SOL_BALANCE).toFixed(9)\n : '0',\n }));\n } else {\n setForm((prev) => ({\n ...prev,\n fromValue: balance,\n }));\n }\n },\n [balance, fromTokenInfo?.id, setForm],\n );\n\n const onClickSwitchPair = () => {\n setForm((prev) => ({\n ...prev,\n fromValue: '',\n toValue: '',\n fromMint: prev.toMint,\n toMint: prev.fromMint,\n }));\n };\n\n const { inputAmountDisabled, outputAmountDisabled } = useMemo(() => {\n const result = { inputAmountDisabled: true, outputAmountDisabled: true };\n if (!fixedAmount) {\n if (swapMode === SwapMode.ExactIn) {\n result.inputAmountDisabled = false;\n } else if (swapMode === SwapMode.ExactOut) {\n result.outputAmountDisabled = false;\n } else {\n result.inputAmountDisabled = false;\n result.outputAmountDisabled = false;\n }\n }\n return result;\n }, [fixedAmount, swapMode]);\n\n const onClickSelectFromMint = useCallback(() => {\n if (shouldDisabledFromSelector) return;\n setSelectPairSelector('fromMint');\n }, [shouldDisabledFromSelector, setSelectPairSelector]);\n\n const onClickSelectToMint = useCallback(() => {\n if (shouldDisabledToSelector) return;\n setSelectPairSelector('toMint');\n }, [shouldDisabledToSelector, setSelectPairSelector]);\n\n const thousandSeparator = useMemo(() => (detectedSeparator === ',' ? '.' : ','), []);\n // Allow empty input, and input lower than max limit\n const withValueLimit = useCallback(\n ({ floatValue }: NumberFormatValues) => !floatValue || floatValue <= MAX_INPUT_LIMIT,\n [],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n if (window.Jupiter.enableWalletPassthrough && window.Jupiter.onRequestConnectWallet) {\n window.Jupiter.onRequestConnectWallet();\n } else {\n setScreen('Wallet');\n }\n },\n [setScreen],\n );\n\n return (\n <div className=\"h-full flex flex-col items-center justify-center\">\n <div className=\"w-full mt-2 rounded-xl flex flex-col px-2\">\n <div className=\"flex-col\">\n <FormInputContainer\n tokenInfo={fromTokenInfo!}\n onBalanceClick={(e) => {\n isToPairFocused.current = false;\n onClickMax(e);\n }}\n title=\"Selling\"\n pairSelectDisabled={shouldDisabledFromSelector}\n onClickSelectPair={onClickSelectFromMint}\n value={form.fromValue}\n >\n {fromTokenInfo?.decimals && (\n <NumericFormat\n disabled={fixedAmount || swapMode === SwapMode.ExactOut}\n value={typeof form.fromValue === 'undefined' ? '' : form.fromValue}\n decimalScale={fromTokenInfo.decimals}\n thousandSeparator={thousandSeparator}\n allowNegative={false}\n valueIsNumericString\n inputMode=\"decimal\"\n onValueChange={onChangeFromValue}\n placeholder={'0.00'}\n className={cn(\n 'w-full h-[40px] bg-transparent text-primary-text text-right font-semibold text-xl placeholder:text-primary-text/50',\n {\n 'cursor-not-allowed': inputAmountDisabled || swapMode === SwapMode.ExactOut,\n },\n )}\n onKeyDown={() => {\n isToPairFocused.current = false;\n }}\n decimalSeparator={detectedSeparator}\n isAllowed={withValueLimit}\n />\n )}\n </FormInputContainer>\n <div className=\"relative z-10 -my-3 flex justify-center\">\n <SwitchPairButton onClick={onClickSwitchPair} className={cn('transition-all')} />\n </div>\n <FormInputContainer\n tokenInfo={toTokenInfo!}\n title=\"Buying\"\n pairSelectDisabled={shouldDisabledToSelector}\n onClickSelectPair={onClickSelectToMint}\n value={form.toValue}\n >\n {toTokenInfo?.decimals && (\n <NumericFormat\n inputMode=\"decimal\"\n disabled={outputAmountDisabled || swapMode === SwapMode.ExactIn}\n value={typeof form.toValue === 'undefined' ? '' : form.toValue}\n decimalScale={toTokenInfo.decimals}\n thousandSeparator={thousandSeparator}\n allowNegative={false}\n valueIsNumericString\n onValueChange={onChangeToValue}\n className={cn(\n 'h-[40px] w-full bg-transparent text-primary-text text-right font-semibold text-lg placeholder:text-primary-text/50',\n {\n 'cursor-not-allowed': outputAmountDisabled || swapMode === SwapMode.ExactIn,\n },\n )}\n placeholder={swapMode === SwapMode.ExactOut ? 'Enter desired amount' : '0.00'}\n decimalSeparator={detectedSeparator}\n isAllowed={withValueLimit}\n onKeyDown={(e) => {\n if (\n e.metaKey ||\n e.ctrlKey ||\n e.key === 'Meta' ||\n e.key === 'Control' ||\n e.key === 'Alt' ||\n e.key === 'Shift'\n ) {\n return;\n }\n isToPairFocused.current = true;\n }}\n />\n )}\n </FormInputContainer>\n </div>\n </div>\n\n <div className=\"w-full px-2\">\n {!walletPublicKey ? (\n <JupButton size=\"lg\" className=\"w-full mt-4 bg-primary !text-uiv2-text/75\" onClick={handleClick}>\n Connect Wallet\n </JupButton>\n ) : (\n <SubmitButton onSubmit={onSubmit} />\n )}\n\n {quoteResponseMeta && fromTokenInfo && toTokenInfo ? (\n <PriceInfo\n quoteResponse={quoteResponseMeta}\n fromTokenInfo={fromTokenInfo}\n toTokenInfo={toTokenInfo}\n loading={loading}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nexport default Form;\n","import * as React from 'react';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { useBalances } from 'src/hooks/useBalances';\n\ninterface ICoinBalanceProps {\n mintAddress: string;\n hideZeroBalance?: boolean;\n}\n\nconst CoinBalance: React.FunctionComponent<ICoinBalanceProps> = (props) => {\n const { data: balances } = useBalances();\n const { connected } = useWalletPassThrough();\n\n const formattedBalance: string | null = React.useMemo(() => {\n if (!balances) {\n return '0';\n }\n const accBalanceObj = balances[props.mintAddress];\n if (!accBalanceObj) return '0';\n\n const balance = accBalanceObj.uiAmount.toString();\n return balance;\n }, [balances, props.mintAddress]);\n\n if (props.hideZeroBalance && (formattedBalance === '0' || !formattedBalance)) return null;\n\n if (!connected) return null;\n return <span translate=\"no\">{formattedBalance}</span>;\n};\n\nexport default CoinBalance;\n","import React, { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { cn } from 'src/misc/cn';\n\ninterface IJupButton {\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n children: ReactNode;\n className?: ButtonHTMLAttributes<HTMLButtonElement>['className'];\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst JupButton = React.forwardRef(\n ({ onClick, disabled, children, className = '', size = 'md' }: IJupButton, ref: React.ForwardedRef<any>) => {\n const contentClass = (() => {\n if (size === 'sm') {\n return 'px-4 py-2.5 text-xs';\n }\n if (size === 'md') {\n return 'px-4 py-3 text-sm font-semibold';\n }\n if (size === 'lg') {\n return 'p-5 text-md font-semibold';\n }\n })();\n return (\n <button\n type={'button'}\n ref={ref}\n className={cn(\"rounded-xl\",{\n relative: true,\n 'opacity-50 cursor-not-allowed': disabled,\n [className]: true,\n })}\n disabled={disabled}\n onClick={onClick}\n >\n <div className={`${contentClass} h-full w-full leading-none`}>{children}</div>\n </button>\n );\n },\n);\n\nJupButton.displayName = 'JupButton';\n\nexport default JupButton;\n","import * as React from 'react';\nimport { Asset } from 'src/entity/SearchResponse';\nimport WarningIcon from 'src/icons/WarningIcon';\nimport { checkIsUnknownToken } from 'src/misc/tokenTags';\n\ninterface ITokenIconProps {\n info: Asset | null | undefined;\n width?: number;\n height?: number;\n enableUnknownTokenWarning?: boolean;\n}\n\nfunction genImageTransformURL(url: string) {\n const qs = new URLSearchParams({\n w: '48',\n h: '48',\n url: (() => {\n if (url.endsWith('/')) return url.slice(0, -1);\n return url;\n })(),\n });\n\n return `https://wsrv.nl/?${qs.toString()}`;\n}\nconst UnknownTokenImage: React.FC<{\n width: number;\n height: number;\n imageUrl: string;\n}> = ({ width, height, imageUrl }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-url={imageUrl}\n data-transformed-url={genImageTransformURL(imageUrl?.toString() || '')}\n >\n <path\n d=\"M12 0C18.6271 0 24 5.37288 24 12C24 18.6271 18.6269 24 12 24C5.37312 24 0 18.6286 0 12C0 5.37144 5.37216 0 12 0Z\"\n fill=\"#23C1AA\"\n />\n <path\n d=\"M10.79 14.55H12.89V14.355C12.89 13.925 13.01 13.55 13.25 13.23C13.49 12.91 13.765 12.605 14.075 12.315C14.315 12.085 14.545 11.85 14.765 11.61C14.985 11.36 15.165 11.09 15.305 10.8C15.455 10.5 15.53 10.16 15.53 9.78C15.53 9.25 15.395 8.75 15.125 8.28C14.855 7.8 14.45 7.41 13.91 7.11C13.38 6.8 12.725 6.645 11.945 6.645C11.305 6.645 10.725 6.765 10.205 7.005C9.69504 7.245 9.27504 7.575 8.94504 7.995C8.62504 8.415 8.42004 8.905 8.33004 9.465L10.415 9.99C10.475 9.61 10.64 9.31 10.91 9.09C11.19 8.86 11.515 8.745 11.885 8.745C12.315 8.745 12.64 8.85 12.86 9.06C13.09 9.26 13.205 9.52 13.205 9.84C13.205 10.15 13.09 10.425 12.86 10.665C12.63 10.895 12.37 11.155 12.08 11.445C11.77 11.765 11.475 12.14 11.195 12.57C10.925 13 10.79 13.545 10.79 14.205V14.55ZM10.73 18H12.98V15.75H10.73V18Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n\nconst TokenIcon: React.FunctionComponent<ITokenIconProps> = ({\n info,\n width = 32,\n height = 32,\n enableUnknownTokenWarning = true,\n}) => {\n const [transformerHasError, setTransformerHasError] = React.useState(false);\n const [hasError, setHasError] = React.useState(false);\n\n React.useEffect(() => {\n setHasError(false);\n }, [info]);\n\n const imageUrl = React.useMemo(() => {\n try {\n if (!info?.icon) return undefined;\n // Locally hosted images on our project\n if (typeof window !== 'undefined' && info?.icon?.startsWith('/'))\n return new URL(window.location.origin + info.icon);\n\n return info?.icon ? new URL(info.icon) : undefined;\n } catch (error) {\n return undefined;\n }\n }, [info?.icon]);\n\n const isUnknown = React.useMemo(() => {\n if (!enableUnknownTokenWarning) return false;\n if (info) {\n return checkIsUnknownToken(info);\n }\n }, [enableUnknownTokenWarning, info]);\n\n const ImageComp = React.useMemo(() => {\n // If transformerHasError and hasError, render this.\n if (!imageUrl || !info || (hasError && transformerHasError)) {\n return <UnknownTokenImage width={width} height={height} imageUrl={imageUrl?.toString() || ''} />;\n }\n\n // Then try direct URL\n if (transformerHasError) {\n return (\n // eslint-disable-next-line\n <img\n src={info.icon}\n alt={info.symbol}\n width={width}\n height={height}\n style={{ maxWidth: width, maxHeight: height }} \n className={`object-cover rounded-full`}\n onError={() => {\n setHasError(true);\n }}\n />\n );\n }\n\n // Try free transform image\n return (\n // eslint-disable-next-line\n <img\n src={genImageTransformURL(info.icon || '')}\n alt={info.symbol}\n width={width}\n height={height}\n style={{ maxWidth: width, maxHeight: height }}\n className={`object-cover rounded-full`}\n onError={() => {\n setTransformerHasError(true);\n }}\n />\n );\n }, [hasError, height, imageUrl, info, transformerHasError, width]);\n\n // not in the whitelisted domains, so we just use img tag\n return (\n <span className=\"relative\">\n {ImageComp}\n {isUnknown && (\n <WarningIcon\n width={Math.max(width * 0.6, 16)}\n height={Math.max(height * 0.6, 16)}\n className=\"absolute -p-1 text-warning -bottom-[2px] -right-[5px]\"\n />\n )}\n </span>\n );\n};\n\nexport default TokenIcon;\n","import * as React from 'react';\n\ninterface IWarningIconProps extends React.SVGProps<SVGSVGElement> {}\n\nconst WarningIcon: React.FunctionComponent<IWarningIconProps> = (props) => {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect x=\"8\" y=\"6\" width=\"4\" height=\"10\" fill=\"white\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.8634 15.6962C17.5539 15.1565 11.3038 4.37041 10.7692 3.44957C10.4179 2.8452 9.58075 2.85511 9.22912 3.44957C8.83702 4.11227 2.55515 14.9396 2.11839 15.7235C1.7984 16.2978 2.15189 17.0509 2.88009 17.0509H17.0974C17.7586 17.0509 18.2502 16.3695 17.8635 15.696L17.8634 15.6962ZM10.0005 15.6277C9.50937 15.6277 9.11108 15.2297 9.11108 14.7383C9.11108 14.247 9.50937 13.8489 10.0005 13.8489C10.4918 13.8489 10.8899 14.247 10.8899 14.7383C10.8899 15.2297 10.4918 15.6277 10.0005 15.6277ZM10.5341 12.7817C10.5341 13.1374 10.3562 13.3154 10.0005 13.3154C9.64474 13.3154 9.46681 13.1375 9.46681 12.7817L8.93314 7.62324C8.93314 7.08957 9.28887 6.5559 10.0005 6.5559C10.7119 6.5559 11.0678 7.08957 11.0678 7.62324L10.5341 12.7817Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default WarningIcon;\n","import React from 'react';\n\nconst WalletIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = 20, height = 20 }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 11 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2.0625 11H10.3125V2.75H8.59375V0H2.0625C0.923158 0 0 0.923158 0 2.0625V8.9375C0 10.0768 0.923158 11 2.0625 11ZM8.9375 4.125V9.625H2.0625C1.6825 9.625 1.375 9.3175 1.375 8.9375V4.00486C1.59589 4.08408 1.82818 4.12437 2.0625 4.12504L8.9375 4.125ZM2.0625 1.375H7.21875V2.75H2.0625C1.6825 2.75 1.375 2.4425 1.375 2.0625C1.375 1.6825 1.6825 1.375 2.0625 1.375Z\"\n fill=\"white\"\n fillOpacity=\"0.25\"\n />\n </svg>\n );\n};\n\nexport default WalletIcon;\n","import Decimal from 'decimal.js';\nimport { useMemo } from 'react';\nimport { formatNumber, hasNumericValue } from 'src/misc/utils';\nimport { Asset } from 'src/entity/SearchResponse';\n\ninterface ComponentProps {\n tokenInfo: Asset;\n amount?: number | string;\n maxDecimals?: number;\n prefix?: string;\n}\n\nexport const CoinBalanceUSD = (props: ComponentProps) => {\n const { tokenInfo, amount, maxDecimals, prefix = '' } = props;\n const tokenPrice = tokenInfo.usdPrice || 0;\n\n const amountInUSD = useMemo(() => {\n if (!amount || !hasNumericValue(amount)) return new Decimal(0);\n return new Decimal(amount).mul(tokenPrice);\n }, [amount, tokenPrice]);\n\n return (\n <>\n {prefix}${formatNumber.format(amountInUSD, maxDecimals || 2)}\n </>\n );\n};\n","import Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport { useMemo } from 'react';\nimport { formatNumber } from 'src/misc/utils';\nimport ExchangeRate from '../ExchangeRate';\nimport TransactionFee from './TransactionFee';\nimport { QuoteResponse } from 'src/contexts/SwapContext';\nimport { cn } from 'src/misc/cn';\nimport { Asset } from 'src/entity/SearchResponse';\n\nconst Index = ({\n quoteResponse,\n fromTokenInfo,\n toTokenInfo,\n loading,\n containerClassName,\n}: {\n quoteResponse: QuoteResponse;\n fromTokenInfo: Asset;\n toTokenInfo: Asset;\n loading: boolean;\n containerClassName?: string;\n}) => {\n const rateParams = {\n inAmount: quoteResponse?.quoteResponse.inAmount || JSBI.BigInt(0), // If there's no selectedRoute, we will use first route value to temporarily calculate\n inputDecimal: fromTokenInfo.decimals,\n outAmount: quoteResponse?.quoteResponse.outAmount || JSBI.BigInt(0), // If there's no selectedRoute, we will use first route value to temporarily calculate\n outputDecimal: toTokenInfo.decimals,\n };\n\n const priceImpact = formatNumber.format(\n new Decimal(quoteResponse?.quoteResponse.priceImpactPct || 0).mul(100).toDP(2),\n );\n\n const priceImpactText = Number(priceImpact) < 0.01 ? undefined : `-${priceImpact}%`;\n const fee = useMemo(() => {\n if (!quoteResponse) {\n return 0;\n }\n return quoteResponse.quoteResponse.feeBps / 100;\n }, [quoteResponse]);\n\n const router = useMemo(() => {\n if (!quoteResponse) {\n return;\n }\n return quoteResponse.quoteResponse.router;\n }, [quoteResponse]);\n\n const gasFee = useMemo(() => {\n if (quoteResponse) {\n const { prioritizationFeeLamports } = quoteResponse.quoteResponse;\n if (prioritizationFeeLamports) {\n return prioritizationFeeLamports / 1e9; // Convert lamports to SOL\n }\n }\n return 0;\n }, [quoteResponse]);\n\n return (\n <div className={cn('mt-4 space-y-4 ', containerClassName)}>\n <div className=\"flex items-center justify-between text-xs\">\n <div className=\"text-primary-text/50\">{<span>Rate</span>}</div>\n {JSBI.greaterThan(rateParams.inAmount, JSBI.BigInt(0)) &&\n JSBI.greaterThan(rateParams.outAmount, JSBI.BigInt(0)) ? (\n <ExchangeRate\n loading={loading}\n rateParams={rateParams}\n fromTokenInfo={fromTokenInfo}\n toTokenInfo={toTokenInfo}\n reversible={true}\n />\n ) : (\n <span className=\"text-primary-text/50\">{'-'}</span>\n )}\n </div>\n\n {priceImpactText && (\n <div className=\"flex items-center justify-between text-xs text-primary-text/50\">\n <div>\n <span>Price Impact</span>\n </div>\n <div className=\"text-primary-text\">{priceImpactText}</div>\n </div>\n )}\n\n <div className=\"flex items-center justify-between text-xs\">\n <div className=\"text-primary-text/50\">\n <span>Fee</span>\n </div>\n <div className=\"text-primary-text\">{fee}%</div>\n </div>\n <TransactionFee gasFee={gasFee} gasless={quoteResponse?.quoteResponse.gasless} />\n </div>\n );\n};\n\nexport default Index;\n","\nimport Decimal from 'decimal.js';\nimport JSBI from 'jsbi';\nimport * as React from 'react';\n\nimport { formatNumber, fromLamports } from '../misc/utils';\nimport PrecisionTickSize from './PrecisionTickSize';\nimport { cn } from 'src/misc/cn';\nimport { Asset } from 'src/entity/SearchResponse';\n\nexport interface IRateParams {\n inAmount: JSBI;\n inputDecimal: number;\n outAmount: JSBI;\n outputDecimal: number;\n}\n\nexport const calculateRate = (\n { inAmount, inputDecimal, outAmount, outputDecimal }: IRateParams,\n reverse: boolean,\n): Decimal => {\n const input = fromLamports(inAmount, inputDecimal);\n const output = fromLamports(outAmount, outputDecimal);\n\n const rate = !reverse ? new Decimal(input).div(output) : new Decimal(output).div(input);\n\n if (Number.isNaN(rate.toNumber())) {\n return new Decimal(0);\n }\n\n return rate;\n};\n\nconst ApproxSVG = ({ width = 16, height = 16 }: { width?: string | number; height?: string | number }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.8573 8.18429L13.6323 5.95933L10.8573 3.73438V5.31937H3.32735V6.59937H10.8573V8.18429ZM5.14223 7.81429L2.36719 10.0393L5.14223 12.2642V10.6792H12.6722V9.39922H5.14223V7.81429Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\ninterface ExchangeRateProps {\n className?: string;\n textClassName?: string;\n loading?: boolean;\n fromTokenInfo: Asset;\n rateParams: IRateParams;\n toTokenInfo: Asset;\n reversible?: boolean;\n}\n\nconst ExchangeRate = ({\n className,\n textClassName,\n loading = false,\n fromTokenInfo,\n rateParams,\n toTokenInfo,\n reversible = true,\n}: ExchangeRateProps) => {\n const [reverse, setReverse] = React.useState(reversible ?? true);\n\n const rate = React.useMemo(() => calculateRate(rateParams, reverse), [reverse, rateParams])\n\n const onReverse: React.MouseEventHandler = React.useCallback((event) => {\n event.stopPropagation();\n setReverse((prevState) => !prevState);\n }, []);\n\n return (\n <div\n className={cn(className, 'flex cursor-pointer text-primary-text text-xs align-center')}\n onClick={onReverse}\n >\n <span className={cn(textClassName, 'max-w-full flex whitespace-nowrap')}>\n {reverse ? (\n <>\n 1 {fromTokenInfo.symbol} ≈\n <div className='flex ml-0.5'>\n {rate.gt(0.000_01) ?\n (\n `${formatNumber.format(rate, 6)} ${toTokenInfo.symbol}`\n )\n : (\n <>\n <PrecisionTickSize value={rate.toNumber()} maxSuffix={6} /> {toTokenInfo.symbol}\n </>\n )}\n </div>\n </>\n ) : (\n <>\n 1 {toTokenInfo.symbol} ≈\n <div className='flex ml-0.5'>\n\n {rate.gt(0.000_01) ?\n (\n `${formatNumber.format(rate, 6)} ${fromTokenInfo.symbol}`\n )\n : (\n <>\n <PrecisionTickSize value={rate.toNumber()} maxSuffix={6} /> {fromTokenInfo.symbol}\n </>\n )}\n </div>\n </>\n )}\n </span>\n {reversible ? (\n <div className={'ml-2'}>\n <ApproxSVG />\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default ExchangeRate;\n","import React from 'react';\nimport Decimal from 'decimal.js';\n\nfunction generateSubscriptNumbers(x: number): string {\n const subscriptNumbers: string[] = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'];\n const xString: string = x.toString();\n let result: string = '';\n\n for (let i = 0; i < xString.length; i++) {\n const digit: number = parseInt(xString.charAt(i), 10);\n const subscriptNumber: string = subscriptNumbers[digit];\n result += subscriptNumber;\n }\n\n return result;\n}\n\nconst usePrecisionTick = (value: number): [number, string, string] => {\n const firstSD = Decimal.abs(Decimal.ceil(new Decimal(-1).mul(Decimal.log10(value)))).toNumber();\n const [prefix, suffix] = [\n new Decimal(value).toFixed().slice(0, firstSD + 2), // +2 to account for 0.\n new Decimal(value).toFixed().slice(firstSD + 1), // +1 to account for 0. - and slice index\n ];\n\n return [firstSD, prefix, suffix];\n};\n\nconst PrecisionTickSize: React.FC<{ value: number; maxSuffix?: number }> = ({ value, maxSuffix }) => {\n const [firstSD, _, suffix] = usePrecisionTick(value);\n\n if (firstSD <= 5) {\n return <span>{value.toFixed(6)}</span>;\n }\n\n return (\n <span className='flex items-center h-4'>\n 0.0\n <span className='mb-3 text-xl mx-0.5'>{generateSubscriptNumbers(firstSD - 1)}</span>\n {suffix.slice(0, maxSuffix)}\n </span>\n );\n};\n\nexport default PrecisionTickSize;\n","import React, { SVGProps } from 'react';\n\nexport const UltraIcon: React.FC<React.SVGAttributes<SVGElement>> = (props) => {\n return (\n <svg viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" width=\"1em\" {...props}>\n <g clipPath=\"url(#clip0_1785_33901)\">\n <path\n d=\"M7.20001 7.86127C7.45429 7.86127 7.69815 7.96228 7.87795 8.14208C8.05775 8.32188 8.15876 8.56574 8.15876 8.82002C8.15876 8.56574 8.25977 8.32188 8.43957 8.14208C8.61937 7.96228 8.86324 7.86127 9.11751 7.86127C8.86324 7.86127 8.61937 7.76026 8.43957 7.58046C8.25977 7.40066 8.15876 7.15679 8.15876 6.90252C8.15876 7.15679 8.05775 7.40066 7.87795 7.58046C7.69815 7.76026 7.45429 7.86127 7.20001 7.86127ZM7.20001 2.10877C7.45429 2.10877 7.69815 2.20978 7.87795 2.38958C8.05775 2.56938 8.15876 2.81324 8.15876 3.06752C8.15876 2.81324 8.25977 2.56938 8.43957 2.38958C8.61937 2.20978 8.86324 2.10877 9.11751 2.10877C8.86324 2.10877 8.61937 2.00776 8.43957 1.82796C8.25977 1.64816 8.15876 1.40429 8.15876 1.15002C8.15876 1.40429 8.05775 1.64816 7.87795 1.82796C7.69815 2.00776 7.45429 2.10877 7.20001 2.10877Z\"\n stroke=\"currentColor\"\n strokeWidth=\"0.95875\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.09971 1.42435C4.08095 1.37314 4.04691 1.32892 4.00219 1.29768C3.95748 1.26644 3.90425 1.24969 3.84971 1.24969C3.79517 1.24969 3.74194 1.26644 3.69723 1.29768C3.65251 1.32892 3.61847 1.37314 3.59971 1.42435L3.34534 2.11935C3.1457 2.6643 2.82969 3.15919 2.41931 3.56957C2.00893 3.97996 1.51403 4.29596 0.969084 4.4956L0.274086 4.74998C0.222871 4.76874 0.178655 4.80279 0.147417 4.8475C0.116179 4.89221 0.0994263 4.94543 0.0994263 4.99998C0.0994263 5.05452 0.116179 5.10775 0.147417 5.15246C0.178655 5.19717 0.222871 5.23122 0.274086 5.24998L0.969084 5.50435C1.51403 5.70399 2.00893 6.02001 2.41931 6.43039C2.82969 6.84077 3.1457 7.33566 3.34534 7.88061L3.59971 8.5756C3.61847 8.62681 3.65251 8.67103 3.69723 8.70227C3.74194 8.7335 3.79517 8.75026 3.84971 8.75026C3.90425 8.75026 3.95748 8.7335 4.00219 8.70227C4.04691 8.67103 4.08095 8.62681 4.09971 8.5756L4.35409 7.88061C4.55372 7.33566 4.86973 6.84077 5.28011 6.43039C5.69049 6.02001 6.18538 5.70399 6.73033 5.50435L7.42533 5.24998C7.47654 5.23122 7.52076 5.19717 7.552 5.15246C7.58323 5.10775 7.59999 5.05452 7.59999 4.99998C7.59999 4.94543 7.58323 4.89221 7.552 4.8475C7.52076 4.80279 7.47654 4.76874 7.42533 4.74998L6.73033 4.4956C6.18538 4.29596 5.8125 3.97995 5.40212 3.56957C4.99174 3.15919 4.55372 2.6643 4.35409 2.11935L4.09971 1.42435Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1785_33901\">\n <rect width=\"10\" height=\"10\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import React from 'react';\nimport { cn } from 'src/misc/cn';\nimport { UltraIcon } from 'src/icons/UltraIcon';\n\nconst TransactionFee = ({ gasFee, gasless }: { gasFee: number | undefined; gasless: boolean }) => {\n if (!gasFee) return null;\n return (\n <div className=\"flex items-center justify-between text-xs\">\n <div className=\"flex w-[50%] text-primary-text/50\">\n <span>Network Fee</span>\n </div>\n <div className=\"flex items-center gap-1\">\n {gasless && (\n <>\n <UltraIcon color=\"#FDB022\" width={12} height={12} />\n <div className=\"text-xs text-primary-text\">Gasless</div>\n </>\n )}\n <div\n className={cn('text-primary-text', {\n 'line-through': gasless,\n })}\n >\n {gasFee} SOL\n </div>\n </div>\n </div>\n );\n};\n\nexport default TransactionFee;\n","import React from 'react';\nimport { cn } from 'src/misc/cn';\n\nconst IconSwitchPairDark = () => (\n <svg width={20} height={20} viewBox=\"0 0 21 22\" fill=\"white\" fillOpacity={0.5} xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.51043 7.47998V14.99H7.77043V7.47998L9.66043 9.36998L10.5505 8.47994L7.5859 5.51453C7.3398 5.26925 6.94114 5.26925 6.69504 5.51453L3.73047 8.47994L4.62051 9.36998L6.51043 7.47998Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.4902 14.52V7.01001H13.2302V14.52L11.3402 12.63L10.4502 13.5201L13.4148 16.4855C13.6609 16.7308 14.0595 16.7308 14.3056 16.4855L17.2702 13.5201L16.3802 12.63L14.4902 14.52Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nconst SwitchPairButton = ({\n className,\n onClick,\n disabled,\n}: {\n className?: string;\n onClick(): void;\n disabled?: boolean;\n}) => {\n return (\n <div className=\"flex justify-center bg-background rounded-full\">\n <div\n onClick={onClick}\n className={cn(\n 'border-[3px] border-background fill-current text-black bg-interactive hover:bg-interactive/80 dark:text-primary-text-35 dark:hover:border-primary dark:border dark:border-white-35 h-8 w-8 rounded-full flex items-center justify-center cursor-pointer',\n className,\n {\n 'opacity-50 cursor-not-allowed': disabled,\n },\n )}\n >\n <IconSwitchPairDark />\n </div>\n </div>\n );\n};\n\nexport default SwitchPairButton;\n","import { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport { Severity, ultraSwapService, Warning } from 'src/data/UltraSwapService';\nimport { useMobile } from 'src/hooks/useMobile';\nimport PopoverTooltip from './Tooltip/PopoverTooltip';\nimport { cn } from 'src/misc/cn';\nimport { useCallback } from 'react';\nimport Plural from './Plural';\nimport WarningIcon from 'src/icons/WarningIcon';\nimport InfoIcon from 'src/icons/InfoIcon';\n\nconst parseShieldWarningtoSentenceCase = (warning: { type: string }) => {\n const str = warning.type.replace(/_/g, ' ');\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n};\n\nconst JupShieldIcon: React.FC<React.SVGAttributes<SVGElement>> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" width=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <g fill=\"none\">\n <path\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n d=\"M3 10.417c0-3.198 0-4.797.378-5.335c.377-.537 1.88-1.052 4.887-2.081l.573-.196C10.405 2.268 11.188 2 12 2s1.595.268 3.162.805l.573.196c3.007 1.029 4.51 1.544 4.887 2.081C21 5.62 21 7.22 21 10.417v1.574c0 5.638-4.239 8.375-6.899 9.536C13.38 21.842 13.02 22 12 22s-1.38-.158-2.101-.473C7.239 20.365 3 17.63 3 11.991z\"\n />\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\" d=\"M12 8v4\" />\n <circle cx=\"12\" cy=\"15\" r=\"1\" fill=\"currentColor\" />\n </g>\n </svg>\n );\n};\n\nconst Warnings = ({\n warning,\n children,\n isHighRisk,\n}: {\n warning: Warning;\n children: React.ReactNode;\n isHighRisk: boolean;\n}) => {\n const warningTitle = useCallback((warning: Warning) => {\n return parseShieldWarningtoSentenceCase(warning);\n }, []);\n\n return (\n <div key={warning.type} className=\"flex gap-1\">\n {children}\n <div className=\"flex flex-1 flex-col\">\n <span className={cn('text-neutral-300', isHighRisk && 'text-warning')}>{warningTitle(warning)}</span>\n <span className={cn('text-neutral-500', isHighRisk && 'text-amber-200')}>{warning.message}</span>\n </div>\n </div>\n );\n};\nconst JupShield = ({ tokenAddress }: { tokenAddress: string }) => {\n const isMobile = useMobile();\n const { data, isFetching } = useQuery({\n queryKey: ['shield', tokenAddress],\n queryFn: () => ultraSwapService.getShield([tokenAddress]),\n gcTime: 5 * 60_000,\n staleTime: 5 * 60_000,\n placeholderData: keepPreviousData,\n select: (data) => {\n const warnings = data.warnings[tokenAddress];\n return {\n isNotVerified: warnings.find((warning) => warning.type === 'NOT_VERIFIED'),\n totalWarnings: warnings.length,\n highRiskWarnings: warnings.filter(\n (warning) => warning.severity === Severity.CRITICAL || warning.severity === Severity.WARNING,\n ),\n otherWarnings: warnings.filter((warning) => warning.severity === Severity.INFO),\n };\n },\n });\n\n if (!data || data.totalWarnings === 0) return null;\n\n const { isNotVerified, totalWarnings, highRiskWarnings, otherWarnings } = data;\n if (!isNotVerified) return null;\n\n return (\n <PopoverTooltip\n persistOnClick={isMobile}\n placement=\"bottom\"\n drawShades\n buttonContentClassName=\"!cursor-help\"\n offset={[120, 5]}\n content={\n <div className=\"flex flex-col gap-y-2 p-0 w-[260px]\">\n <div className=\"text-sm font-semibold text-warning\">\n {totalWarnings} JupShield <Plural one=\"Warning\" other=\"Warnings\" value={totalWarnings} />\n </div>\n\n {highRiskWarnings.length > 0 && (\n <div className=\"flex flex-col gap-y-2 rounded-md bg-warning/[8%] p-2\">\n {highRiskWarnings.map((warning) => (\n <Warnings key={warning.type} warning={warning} isHighRisk={true}>\n <InfoIcon width={15} height={15} className=\"text-warning\" />\n </Warnings>\n ))}\n </div>\n )}\n\n {otherWarnings.length > 0 && (\n <div className={cn('flex flex-col gap-y-2', highRiskWarnings.length > 0 && 'p-2')}>\n {otherWarnings.map((warning) => (\n <Warnings key={warning.type} warning={warning} isHighRisk={false}>\n <InfoIcon width={15} height={15} />\n </Warnings>\n ))}\n </div>\n )}\n </div>\n }\n >\n <div className={cn('mt-1 flex items-center gap-x-1', isFetching && 'blur-sm')}>\n <JupShieldIcon width={15} height={15} className=\"text-warning\" />\n <span\n className={cn(\n '!text-xxs font-semibold text-warning underline decoration-warning decoration-dashed underline-offset-4',\n )}\n >\n {totalWarnings} Warnings\n </span>\n </div>\n </PopoverTooltip>\n );\n};\n\nexport default JupShield;\n","import { useState } from 'react';\nimport { useIsomorphicLayoutEffect } from 'react-use';\n\nexport const useMobile = () => {\n const [isDesktop, setIsDesktop] = useState<boolean>(false);\n\n useIsomorphicLayoutEffect(() => {\n function updateSize() {\n const desktopQuery = window.matchMedia('(min-width: 1024px)');\n setIsDesktop(desktopQuery.matches);\n }\n\n // Initial check\n updateSize();\n\n // Listen to resize events\n window.addEventListener('resize', updateSize);\n return () => window.removeEventListener('resize', updateSize);\n }, []);\n\n // Initially, the state will be false (indicating non-desktop)\n // until the effect runs on the client side.\n return !isDesktop;\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { Placement, PositioningStrategy } from '@popperjs/core';\nimport { usePopper } from 'react-popper';\nimport debounce from 'lodash.debounce';\nimport { cn } from 'src/misc/cn';\nimport { useMobile } from 'src/hooks/useMobile';\nimport { useOutsideClick } from 'src/misc/utils';\n\ninterface IPopoverProps {\n id: string;\n buttonContent: React.ReactNode;\n popoverContent: React.ReactNode | null;\n placement: Placement;\n trigger?: 'click' | 'hover';\n /* popover stay open onClick, normally it's for where popover text is intended to be read by users */\n persistOnClick?: boolean;\n contentClassName?: string;\n buttonContentClassName?: string;\n strategy?: PositioningStrategy;\n isOpen?: boolean;\n onClose?: () => void;\n matchWidth?: boolean;\n offset?: [number, number];\n arrow?: boolean;\n drawShades?: boolean;\n}\n\nconst Popover: React.FunctionComponent<IPopoverProps> = ({\n placement = 'auto',\n trigger = 'click',\n persistOnClick = true,\n strategy = 'fixed',\n arrow = false,\n buttonContent,\n popoverContent,\n contentClassName,\n buttonContentClassName,\n isOpen,\n onClose,\n matchWidth,\n offset,\n drawShades = false,\n}) => {\n const isLocalMode = useMemo(\n () => typeof isOpen === 'undefined',\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const isMobile = useMobile();\n const [localOpen, setLocalOpen] = useState<boolean>(isLocalMode ? false : true);\n\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null);\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n\n const shouldShowArrow = useMemo(() => Boolean(popoverContent) && arrow, [popoverContent, arrow]);\n\n const modifiers = offset\n ? [\n {\n name: 'offset',\n options: {\n offset,\n },\n },\n ]\n : undefined;\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n strategy,\n placement,\n modifiers,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleClose = useCallback(\n debounce(\n () => {\n if (isLocalMode) {\n setLocalOpen(false);\n } else if (onClose) {\n onClose();\n }\n },\n // persistOnClick makes sure Tooltip stays open when user click on it\n // to make sure that if user hover to content, we don't close it\n trigger === 'hover' && persistOnClick ? 50 : 0,\n ),\n [setLocalOpen, isLocalMode, onClose, trigger, persistOnClick],\n );\n\n const handleOpen = useCallback(() => {\n handleClose.cancel();\n setLocalOpen(true);\n }, [setLocalOpen, handleClose]);\n\n useOutsideClick({ current: popperElement }, handleClose);\n\n const onClick = () => {\n if (isLocalMode) {\n if ((persistOnClick && trigger === 'hover') || trigger === 'click') {\n handleOpen();\n }\n } else if (isOpen && onClose) {\n onClose();\n }\n };\n\n const shouldRenderContent = isLocalMode ? localOpen : isOpen;\n const hoverProps =\n trigger === 'hover'\n ? isMobile\n ? {\n onTouchStart: handleOpen,\n onTouchEnd: handleClose,\n }\n : {\n onMouseEnter: handleOpen,\n onMouseLeave: handleClose,\n }\n : {};\n\n return (\n <>\n <div\n ref={setReferenceElement}\n onClick={onClick}\n className={cn(buttonContentClassName, {\n 'z-50': shouldRenderContent,\n })}\n {...hoverProps}\n >\n {buttonContent}\n </div>\n {shouldRenderContent && (\n <div\n id=\"tooltip\"\n ref={setPopperElement}\n style={{ ...styles.popper, maxWidth: matchWidth ? referenceElement?.clientWidth : 'auto' }}\n {...attributes.popper}\n {...hoverProps}\n className={cn(\n 'rounded-lg w-auto bg-none shadow-xl dark:bg-white/5 backdrop-blur-xl transition-opacity opacity-0',\n contentClassName,\n {\n 'z-50 opacity-100': shouldRenderContent,\n },\n )}\n >\n {popoverContent}\n {shouldShowArrow ? (\n <div\n id=\"arrow\"\n className=\"before:absolute absolute before:w-2 w-2 before:h-2 h-2 before:bg-inherit bg-inherit before:visible before:rotate-45 invisible\"\n data-popper-arrow\n ></div>\n ) : null}\n </div>\n )}\n\n <div\n className={cn('fixed top-0 left-0 w-full h-full transition-all opacity-0 pointer-events-none z-[-1]', {\n '!backdrop-blur-xxs !bg-black/20 opacity-100 pointer-events-auto z-40': drawShades && shouldRenderContent,\n })}\n onClick={handleClose}\n />\n </>\n );\n};\n\nexport default Popover;\n","import { Placement, PositioningStrategy } from '@popperjs/core';\nimport React from 'react';\nimport Popover from '../Popover/Popover';\nimport { cn } from 'src/misc/cn';\n\ninterface TooltipProps {\n content: string | React.ReactNode;\n disabled?: boolean;\n placement?: Placement;\n offset?: [number, number];\n variant?: 'dark' | 'light';\n persistOnClick?: boolean;\n buttonContentClassName?: string;\n contentClassName?: string;\n drawShades?: boolean;\n strategy?: PositioningStrategy;\n}\n\nconst PopoverTooltip: React.FC<React.PropsWithChildren<TooltipProps>> = ({\n content,\n disabled = false,\n variant = 'dark',\n children,\n offset,\n placement,\n persistOnClick,\n buttonContentClassName,\n contentClassName,\n drawShades,\n strategy,\n}) => {\n return (\n <Popover\n placement={placement || 'top'}\n buttonContent={children}\n buttonContentClassName={buttonContentClassName}\n offset={offset || [0, 2.5]}\n contentClassName={contentClassName}\n drawShades={drawShades}\n popoverContent={\n content && (\n <div\n className={cn('p-2 rounded-lg max-w-[360px] w-full text-xs', {\n 'bg-white text-black': variant === 'light',\n 'bg-black text-primary-text': variant === 'dark',\n 'group-hover:visible group-hover:z-50': !disabled,\n })}\n >\n {content}\n </div>\n )\n }\n id=\"TooltipPopover\"\n trigger={persistOnClick ? 'click' : 'hover'}\n persistOnClick={persistOnClick}\n strategy={strategy}\n ></Popover>\n );\n};\n\nexport default PopoverTooltip;\n","interface PluralProps {\n value: number;\n one: string;\n other: string;\n }\n \n const Plural: React.FC<PluralProps> = ({ value, one, other }) => {\n return <>{value === 1 ? one.replace('#', value.toString()) : other.replace('#', value.toString())}</>;\n };\n \n export default Plural;\n ","import React from 'react';\n\nconst InfoIcon: React.FC<React.SVGAttributes<SVGElement>> = (props) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" width=\"1em\" viewBox=\"0 0 256 256\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m-8-80V80a8 8 0 0 1 16 0v56a8 8 0 0 1-16 0m20 36a12 12 0 1 1-12-12a12 12 0 0 1 12 12\"\n ></path>\n </svg>\n );\n};\n\nexport default InfoIcon;\n","import { WalletSignTransactionError } from '@jup-ag/wallet-adapter';\nimport { useMutation } from '@tanstack/react-query';\nimport { ISwapContext, QuoteResponse } from 'src/contexts/SwapContext';\nimport { ultraSwapService } from 'src/data/UltraSwapService';\nimport { Buffer } from 'buffer';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { TransactionError } from 'src/entity/TransactionError';\n\ninterface UltraSwapMutationProps {\n fromTokenInfo: Asset;\n toTokenInfo: Asset;\n setTxStatus: (status: ISwapContext['swapping']['txStatus']) => void;\n setLastSwapResult: (result: ISwapContext['lastSwapResult']) => void;\n quoteResponseMeta: QuoteResponse;\n}\n\nenum UltraSwapErrorType {\n REJECTED = 'REJECTED',\n FAILED = 'FAILED',\n WALLET_SIGNING_FAILED = 'WALLET_SIGNING_FAILED',\n}\n\nclass UltraSwapError extends Error {\n type: UltraSwapErrorType;\n txid?: string;\n constructor(message: string, type: UltraSwapErrorType, txid?: string) {\n super(message);\n this.type = type;\n this.txid = txid;\n }\n}\n\nexport function useUltraSwapMutation() {\n const { wallet, signTransaction } = useWalletPassThrough();\n return useMutation({\n mutationFn: async ({\n setTxStatus,\n setLastSwapResult,\n fromTokenInfo,\n toTokenInfo,\n quoteResponseMeta,\n }: UltraSwapMutationProps) => {\n const publicKey = wallet?.adapter.publicKey;\n if (!signTransaction || !publicKey) {\n throw new UltraSwapError(\n 'Wallet not connected, or missing wallet functions',\n UltraSwapErrorType.WALLET_SIGNING_FAILED,\n );\n }\n\n setTxStatus({\n txid: '',\n status: 'pending-approval',\n });\n\n const selectedQuote = quoteResponseMeta.original;\n\n const { transaction, requestId } = selectedQuote;\n\n if (!transaction) throw new Error('Missing transaction');\n const based64tx = Buffer.from(transaction, 'base64');\n\n const versionedTransaction = VersionedTransaction.deserialize(new Uint8Array(based64tx));\n\n const signedTransaction = await signTransaction(versionedTransaction);\n const serializedTransaction = Buffer.from(signedTransaction.serialize()).toString('base64');\n\n setTxStatus({\n txid: '',\n status: 'sending',\n });\n\n const response = await ultraSwapService.submitSwap(serializedTransaction, requestId);\n\n const { signature, status } = response;\n\n if (status === 'Failed') {\n throw new UltraSwapError(response.error, UltraSwapErrorType.FAILED, signature);\n }\n\n const { inputAmountResult, outputAmountResult } = response;\n\n setTxStatus({\n txid: signature,\n status: 'success',\n });\n setLastSwapResult({\n swapResult: {\n txid: signature,\n inputAddress: new PublicKey(fromTokenInfo.id),\n outputAddress: new PublicKey(toTokenInfo.id),\n inputAmount: Number(inputAmountResult),\n outputAmount: Number(outputAmountResult),\n },\n quoteReponse: quoteResponseMeta,\n });\n return signature;\n },\n onError: async (error, variables) => {\n const { setTxStatus, setLastSwapResult, quoteResponseMeta } = variables;\n if (error instanceof WalletSignTransactionError) {\n const message = error.message || error.error || 'Transaction cancelled';\n setLastSwapResult({\n swapResult: {\n error: new TransactionError(message),\n },\n quoteReponse: quoteResponseMeta,\n });\n return;\n }\n\n if (error instanceof Error) {\n setLastSwapResult({\n swapResult: {\n error: new TransactionError(error.message),\n },\n quoteReponse: quoteResponseMeta,\n });\n return;\n }\n\n if ('json' in (error as any)) {\n const json = (await (error as any).json()) as {\n txid: string;\n signature: string;\n error: string;\n status: string;\n };\n\n setLastSwapResult({\n swapResult: {\n error: new TransactionError(json.error || 'Unknown error'),\n },\n quoteReponse: quoteResponseMeta,\n });\n\n setTxStatus({\n txid: json.txid || '',\n status: 'fail',\n });\n }\n },\n });\n}\n","export class TransactionError extends Error {\n txid?: string;\n code?: number;\n programIds?: string[];\n serializedTx?: string;\n \n constructor(\n message: string,\n txid?: string,\n code?: number,\n programIds?: string[],\n serializedTx?: string\n ) {\n super(message);\n this.name = 'TransactionError';\n this.txid = txid;\n this.code = code;\n this.programIds = programIds;\n this.serializedTx = serializedTx;\n }\n}","import { cn } from 'src/misc/cn';\nimport JupButton from './JupButton';\nimport { useMemo } from 'react';\nimport { useSwapContext } from 'src/contexts/SwapContext';\n\ninterface SubmitButtonProps {\n onSubmit: VoidFunction;\n}\n\nexport const SubmitButton = ({ onSubmit }: SubmitButtonProps) => {\n const {\n quoteResponseMeta,\n loading,\n errors,\n swapping: { txStatus },\n form\n } = useSwapContext();\n const shouldButtonDisabled = useMemo(() => {\n if (\n !quoteResponseMeta ||\n loading ||\n !!errors.fromValue ||\n txStatus?.status === 'loading' ||\n txStatus?.status === 'sending' ||\n txStatus?.status === 'pending-approval'\n ) {\n return true;\n }\n return false;\n }, [quoteResponseMeta, loading, errors.fromValue, txStatus]);\n\n const buttonText = useMemo(() => {\n if (errors.fromValue) return errors.fromValue.title;\n if (quoteResponseMeta?.quoteResponse?.errorMessage) return quoteResponseMeta.quoteResponse.errorMessage; \n if (loading) return 'Loading';\n if (txStatus?.status === 'sending') return 'Sending';\n if (txStatus?.status === 'pending-approval') return 'Pending Approval';\n return 'Swap';\n }, [txStatus, errors.fromValue, loading,quoteResponseMeta]);\n\n return (\n <JupButton\n size=\"lg\"\n className={cn('w-full mt-4 disabled:opacity-50 !text-uiv2-text/75 !bg-primary ')}\n onClick={onSubmit}\n disabled={shouldButtonDisabled}\n >\n <span>{buttonText}</span>\n </JupButton>\n );\n};\n","import React, { createRef, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { FixedSizeList, ListChildComponentProps, areEqual } from 'react-window';\nimport LeftArrowIcon from 'src/icons/LeftArrowIcon';\nimport SearchIcon from 'src/icons/SearchIcon';\nimport debounce from 'lodash.debounce';\nimport FormPairRow from './FormPairRow';\nimport { cn } from 'src/misc/cn';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { useSearch } from 'src/hooks/useSearch';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { sortByUserBalance } from 'src/misc/utils';\n\nexport const PAIR_ROW_HEIGHT = 72;\nconst SEARCH_BOX_HEIGHT = 56;\n\n// eslint-disable-next-line react/display-name\nconst rowRenderer = memo((props: ListChildComponentProps) => {\n const { data, index, style } = props;\n const item = data.searchResult[index];\n return <FormPairRow key={item.address} item={item} style={style} onSubmit={data.onSubmit} />;\n}, areEqual);\n\ninterface IFormPairSelector {\n onSubmit: (value: Asset) => void;\n onClose: () => void;\n}\nconst FormPairSelector = ({ onSubmit, onClose }: IFormPairSelector) => {\n const [search, setSearch] = useState<string>('');\n const { data: balances = {} } = useBalances();\n\n // empty query returns all blue chip tokens\n const { data: blueChipTokens = [] } = useSearch([]);\n const { data: searchTokens = [], isLoading } = useSearch([search], { staleTime: 5 * 60 * 1000 });\n const { data: userBalanceTokens = [] } = useSearch([Object.keys(balances).join(',')]);\n\n const searchResult = useMemo(() => {\n // if no search, return user balance tokens and blue chip tokens\n if (!search) {\n return sortByUserBalance([...userBalanceTokens, ...blueChipTokens], balances);\n } else {\n return sortByUserBalance(searchTokens, balances);\n }\n }, [blueChipTokens, balances, searchTokens, search, userBalanceTokens]);\n\n // Update triggerSearch to use cached user balance tokens\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const triggerSearch = useCallback(\n debounce(async (value: string) => {\n setSearch(value);\n }, 200),\n [blueChipTokens],\n );\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch('');\n triggerSearch(e.target.value);\n },\n [triggerSearch],\n );\n\n const listRef = createRef<FixedSizeList>();\n const inputRef = createRef<HTMLInputElement>();\n useEffect(() => inputRef.current?.focus(), [inputRef]);\n\n return (\n <div className=\"flex flex-col h-full w-full py-4 px-2 bg-black\">\n <div className=\"flex w-full justify-between\">\n <div className=\"text-primary-text fill-current w-6 h-6 cursor-pointer\" onClick={onClose}>\n <LeftArrowIcon width={24} height={24} />\n </div>\n\n <div className=\"text-primary-text\">Select Token</div>\n\n <div className=\" w-6 h-6\" />\n </div>\n\n <div\n className=\"flex px-5 mt-4 w-[98%] rounded-xl bg-module\"\n style={{ height: SEARCH_BOX_HEIGHT, maxHeight: SEARCH_BOX_HEIGHT }}\n >\n <SearchIcon />\n\n <input\n autoComplete=\"off\"\n className=\"w-full rounded-xl ml-4 truncate bg-transparent text-primary-text placeholder:text-primary-text/50\"\n placeholder={`Search`}\n onChange={(e) => onChange(e)}\n ref={inputRef}\n />\n </div>\n\n <div className=\"mt-2\" style={{ flexGrow: 1 }}>\n {searchResult && searchResult.length > 0 && (\n <AutoSizer>\n {({ height, width }: { height: number; width: number }) => {\n return (\n <FixedSizeList\n ref={listRef}\n height={height}\n itemCount={searchResult.length}\n itemSize={PAIR_ROW_HEIGHT}\n width={width - 2} // -2 for scrollbar\n itemData={{\n searchResult,\n onSubmit,\n }}\n className={cn('overflow-y-scroll mr-1 min-h-[12rem] px-5 webkit-scrollbar')}\n >\n {rowRenderer}\n </FixedSizeList>\n );\n }}\n </AutoSizer>\n )}\n\n {isLoading ? (\n <div className=\"mt-4 mb-4 text-center text-primary-text/50\">\n <span>Loading...</span>\n </div>\n ) : searchResult && searchResult.length === 0 ? (\n <div className=\"mt-4 mb-4 text-center text-primary-text/50\">\n <span>No tokens found</span>\n </div>\n ) : (\n <></>\n )}\n </div>\n </div>\n );\n};\n\nexport default FormPairSelector;\n","import * as React from 'react';\n\nconst LeftArrowIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = '12', height = '12' }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 53 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M17.3336 23.8334H43.7062V28.1667H17.3336L28.9555 39.7887L25.8919 42.8524L9.03955 26L25.8919 9.14771L28.9555 12.2114L17.3336 23.8334Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default LeftArrowIcon;\n","const SearchIcon = () => {\n return (\n <div className=\"flex items-center text-primary-text fill-current\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"inherit\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.30327 14.6058C8.75327 14.6074 10.1705 14.1746 11.3729 13.3637L15.5971 17.5871C16.1463 18.1371 17.0377 18.1371 17.5877 17.5871C18.1377 17.0371 18.1377 16.1457 17.5877 15.5964L13.3643 11.3722C14.5823 9.55661 14.9229 7.28943 14.2909 5.19563C13.6596 3.10183 12.1229 1.40183 10.1033 0.56283C8.08365 -0.276231 5.79385 -0.16607 3.86505 0.86283C1.93537 1.89251 0.569053 3.73243 0.140853 5.87683C-0.286487 8.02143 0.269759 10.2448 1.65725 11.9354C3.04397 13.6261 5.11665 14.6064 7.30325 14.6058H7.30327ZM7.30327 1.68943C8.79233 1.68865 10.2197 2.28005 11.2729 3.33319C12.3252 4.38631 12.9166 5.81359 12.9166 7.30279C12.9166 8.79199 12.3252 10.2192 11.2729 11.2724C10.2198 12.3247 8.79247 12.9162 7.30327 12.9162C5.81407 12.9162 4.38687 12.3247 3.33367 11.2724C2.28133 10.2193 1.68913 8.79199 1.68991 7.30279C1.69148 5.81451 2.28287 4.38719 3.33523 3.33479C4.38759 2.28239 5.81483 1.69103 7.30323 1.68947L7.30327 1.68943Z\"\n fill=\"inherit\"\n fillOpacity=\"0.25\"\n />\n </svg>\n </div>\n );\n};\n\nexport default SearchIcon;\n","import React, { CSSProperties, useEffect, useMemo, useRef } from 'react';\nimport Decimal from 'decimal.js';\nimport { WRAPPED_SOL_MINT } from 'src/constants';\nimport { checkIsStrictOrVerified, checkIsToken2022 } from 'src/misc/tokenTags';\nimport { formatNumber, hasNumericValue } from 'src/misc/utils';\nimport TokenIcon from './TokenIcon';\nimport TokenLink from './TokenLink';\nimport CoinBalance from './Coinbalance';\nimport CheckedBadge from './CheckedBadge';\nimport { useLstApyFetcher } from 'src/queries/useLstApy';\nimport { useBalances } from 'src/hooks/useBalances';\nimport { Asset } from 'src/entity/SearchResponse';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { ASSET_QUERY_KEY } from 'src/hooks/useAsset';\n\nexport const PAIR_ROW_HEIGHT = 72;\n\nexport interface IPairRow {\n usdValue?: Decimal;\n item: Asset;\n style: CSSProperties;\n onSubmit(item: Asset): void;\n suppressCloseModal?: boolean;\n showExplorer?: boolean;\n enableUnknownTokenWarning?: boolean;\n isLST?: boolean;\n}\n\ninterface IMultiTag {\n isVerified: boolean;\n isLST: boolean;\n // isUnknown: boolean;\n isToken2022: boolean;\n isFrozen: boolean;\n}\n\nconst LSTTag: React.FC<{ mintAddress: string }> = ({ mintAddress }) => {\n const { data: lstApy } = useLstApyFetcher();\n\n const apy = useMemo(() => {\n if (!lstApy) return;\n\n const value = lstApy.apys[mintAddress];\n if (value && hasNumericValue(value)) {\n return new Decimal(value).mul(100).toDP(2).toString();\n }\n return;\n }, [lstApy, mintAddress]);\n\n return (\n <p className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 text-primary/50 border border-primary/50 font-semibold\">\n LST {apy ? `${apy}%` : ''}\n </p>\n );\n};\n\nconst MultiTags: React.FC<IPairRow> = ({ item }) => {\n const { data: balances } = useBalances();\n const isLoading = useRef<boolean>(false);\n const isLoaded = useRef<boolean>(false);\n // It's cheaper to slightly delay and rendering once, than rendering everything all the time\n const [renderedTag, setRenderedTag] = React.useState<IMultiTag>({\n isVerified: false,\n isLST: false,\n // isUnknown: false,\n isToken2022: false,\n isFrozen: false,\n });\n\n useEffect(() => {\n if (isLoaded.current || isLoading.current) return;\n\n isLoading.current = true;\n setTimeout(() => {\n const result = {\n isVerified: checkIsStrictOrVerified(item),\n isLST: Boolean(item.tags?.includes('lst')),\n // isUnknown: checkIsUnknownToken(item),\n isToken2022: Boolean(checkIsToken2022(item)),\n isFrozen: balances?.[item.id]?.isFrozen || false,\n };\n setRenderedTag(result);\n isLoading.current = false;\n isLoaded.current = true;\n }, 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const remainingTags: string[] = []; // we use to show 'pump'\n\n if (!renderedTag) return null;\n\n const { isToken2022, isFrozen, isLST } = renderedTag;\n\n return (\n <div className=\"flex justify-end gap-x-1\">\n {isFrozen && (\n <p className=\"border rounded-md text-xxs leading-none transition-all py-0.5 px-1 border-warning/50 text-warning/50\">\n Frozen\n </p>\n )}\n\n {isToken2022 && (\n <p className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 bg-black/10 font-semibold text-primary-text/20\">\n Token2022\n </p>\n )}\n {remainingTags?.map((tag, idx) => (\n <div\n key={idx}\n className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 bg-black/10 font-semibold text-primary-text/20\"\n >\n {tag}\n </div>\n ))}\n\n {isLST && <LSTTag mintAddress={item.id} />}\n </div>\n );\n};\n\nconst FormPairRow = (props: IPairRow) => {\n const {\n item,\n style,\n onSubmit,\n suppressCloseModal,\n showExplorer = true,\n enableUnknownTokenWarning = true,\n } = props;\n const queryClient = useQueryClient();\n const onClick = React.useCallback(() => {\n // Optimistically update for useAsset hook\n queryClient.setQueryData([...ASSET_QUERY_KEY, item.id], [item]);\n onSubmit(item);\n\n if (suppressCloseModal) return;\n }, [onSubmit, item, suppressCloseModal, queryClient]);\n const { data: balances } = useBalances();\n const balance = balances?.[item.id]?.uiAmount;\n const usdValue = balance ? new Decimal(balance).mul(item.usdPrice || 0) : undefined;\n const usdValueDisplay =\n usdValue && usdValue.gte(0.01) // If smaller than 0.01 cents, dont show\n ? `$${formatNumber.format(usdValue, 2)}` // USD value can hardcode to 2\n : '';\n\n return (\n <li\n className={`rounded cursor-pointer px-5 my-1 list-none flex w-full items-center bg-interactive hover:bg-interactive/80`}\n style={{ maxHeight: PAIR_ROW_HEIGHT - 4, height: PAIR_ROW_HEIGHT - 4, ...style }}\n onClick={onClick}\n translate=\"no\"\n >\n <div className=\"flex h-full w-full items-center space-x-4\">\n <div className=\"flex-shrink-0\">\n <div className=\"bg-gray-200 rounded-full\">\n <TokenIcon info={item} width={36} height={36} enableUnknownTokenWarning={enableUnknownTokenWarning} />\n </div>\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-col gap-y-px\">\n <div className=\"flex items-center\">\n <p className=\"text-sm font-medium text-primary-text truncate\">{item.symbol}</p>\n\n {checkIsStrictOrVerified(item) && (\n <p className=\"rounded-md text-xxs leading-none transition-all py-0.5 px-1 text-primary\">\n <CheckedBadge width={18} height={18} />\n </p>\n )}\n </div>\n\n <p className=\"text-xs text-primary-text/50 dark:text-primary-text-35 truncate\">\n {item.id === WRAPPED_SOL_MINT.toBase58() ? 'Solana' : item.name}\n </p>\n\n {/* Intentionally higher z to be clickable */}\n {showExplorer ? (\n <div className=\"-ml-1 z-10 w-fit\" onClick={(e) => e.stopPropagation()}>\n <TokenLink tokenInfo={item} />\n </div>\n ) : null}\n </div>\n </div>\n\n <div className=\"text-xs text-primary-text/50 text-right h-full flex flex-col justify-evenly\">\n <CoinBalance mintAddress={item.id} hideZeroBalance />\n {usdValueDisplay ? <p>{usdValueDisplay}</p> : null}\n <MultiTags {...props} />\n </div>\n </div>\n </li>\n );\n};\n\nexport default FormPairRow;\n","import React, { createContext, ReactNode, useCallback, useContext, useMemo, useState } from 'react';\nimport { Cluster } from '@solana/web3.js';\nimport { DEFAULT_EXPLORER, IInit } from 'src/types';\n\nexport const AVAILABLE_EXPLORER: {\n name: DEFAULT_EXPLORER;\n url: string;\n get: (txid: string, cluster?: Cluster) => string;\n getToken: (mint: string, cluster?: Cluster) => string;\n}[] = [\n {\n name: 'Solana Explorer',\n url: 'https://explorer.solana.com/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://explorer.solana.com/tx/${txid}?cluster=${cluster}`;\n return `https://explorer.solana.com/tx/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://explorer.solana.com/address/${mint}?cluster=${cluster}`;\n return `https://explorer.solana.com/address/${mint}`;\n },\n },\n {\n name: 'Solscan',\n url: 'https://solscan.io/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solscan.io/tx/${txid}?cluster=${cluster}`;\n return `https://solscan.io/tx/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solscan.io/token/${mint}?cluster=${cluster}`;\n return `https://solscan.io/token/${mint}`;\n },\n },\n {\n name: 'Solana Beach',\n url: 'https://solanabeach.io/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solanabeach.io/transaction/${txid}?cluster=${cluster}`;\n return `https://solanabeach.io/transaction/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster !== 'mainnet-beta') return `https://solanabeach.io/address/${mint}?cluster=${cluster}`;\n return `https://solanabeach.io/address/${mint}`;\n },\n },\n {\n name: 'SolanaFM',\n url: 'https://solana.fm/',\n get: (txid: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster === 'devnet') return `https://solana.fm/tx/${txid}?cluster=devnet-solana`;\n if (cluster === 'testnet') return `https://solana.fm/tx/${txid}?cluster=testnet-qn1`;\n return `https://solana.fm/tx/${txid}`;\n },\n getToken: (mint: string, cluster: Cluster = 'mainnet-beta') => {\n if (cluster === 'devnet') return `https://solana.fm/address/${mint}?cluster=devnet-solana`;\n if (cluster === 'testnet') return `https://solana.fm/address/${mint}?cluster=testnet-qn1`;\n return `https://solana.fm/address/${mint}`;\n },\n },\n ];\n\nexport interface PreferredExplorer {\n name: string;\n url: string;\n get: (txid: string, cluster?: Cluster) => string;\n}\n\nconst PreferredExplorerContext = createContext<{\n explorer: string;\n getExplorer: (txid: string, cluster?: Cluster) => string;\n getTokenExplorer: (mint: string, cluster?: Cluster) => string;\n setExplorer: (explorer: DEFAULT_EXPLORER) => void;\n}>({\n explorer: AVAILABLE_EXPLORER[0].name,\n getExplorer: (txid: string, cluster?: Cluster) => '',\n getTokenExplorer: (mint: string, cluster?: Cluster) => '',\n setExplorer: (explorer: DEFAULT_EXPLORER) => { },\n});\n\nconst PreferredExplorerProvider = ({\n defaultExplorer,\n children,\n}: {\n defaultExplorer: IInit['defaultExplorer'];\n children: ReactNode;\n}) => {\n const [explorer, setExplorer] = useState(defaultExplorer ?? AVAILABLE_EXPLORER[0].name);\n\n const explorerObject = useMemo(() => {\n return AVAILABLE_EXPLORER.find((e) => e.name === explorer) || AVAILABLE_EXPLORER[0];\n }, [explorer]);\n\n const getExplorer = useCallback(\n (txid: string, cluster?: Cluster) => explorerObject.get(txid, cluster),\n [explorerObject],\n );\n const getTokenExplorer = useCallback(\n (mint: string, cluster?: Cluster) => explorerObject.getToken(mint, cluster),\n [explorerObject],\n );\n\n return (\n <PreferredExplorerContext.Provider\n value={{ explorer, getExplorer, getTokenExplorer, setExplorer: (explorer: DEFAULT_EXPLORER) => setExplorer(explorer) }}\n >\n {children}\n </PreferredExplorerContext.Provider>\n );\n};\n\nfunction usePreferredExplorer() {\n const context = useContext(PreferredExplorerContext);\n return context;\n}\n\nexport { PreferredExplorerProvider, usePreferredExplorer };\n","const ExternalIcon = () => (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M4 2V3H1.5V8.5H7V6H8V9C8 9.13261 7.94732 9.25979 7.85355 9.35355C7.75979 9.44732 7.63261 9.5 7.5 9.5H1C0.867392 9.5 0.740215 9.44732 0.646447 9.35355C0.552678 9.25979 0.5 9.13261 0.5 9V2.5C0.5 2.36739 0.552678 2.24021 0.646447 2.14645C0.740215 2.05268 0.867392 2 1 2H4ZM9.5 0.5V4.5H8.5V2.2065L4.6035 6.1035L3.8965 5.3965L7.7925 1.5H5.5V0.5H9.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport default ExternalIcon;\n","\nimport { usePreferredExplorer } from 'src/contexts/preferredExplorer';\nimport ExternalIcon from 'src/icons/ExternalIcon';\nimport { cn } from 'src/misc/cn';\nimport { shortenAddress } from 'src/misc/utils';\nimport { Asset } from 'src/entity/SearchResponse';\n\ninterface TokenLinkProps {\n tokenInfo: Asset;\n className?: string;\n}\n\nconst TokenLink: React.FC<TokenLinkProps> = ({ tokenInfo, className }) => {\n const { getTokenExplorer } = usePreferredExplorer();\n\n return (\n <a\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(\n 'flex items-center bg-black/25 text-primary-text/75 px-2 py-0.5 space-x-1 rounded cursor-pointer',\n className,\n )}\n href={getTokenExplorer(tokenInfo.id)}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"text-xxs\">{shortenAddress(tokenInfo.id)}</div>\n <ExternalIcon />\n </a>\n );\n};\nTokenLink.displayName = 'TokenLink';\n\nexport default TokenLink;\n","import React from 'react';\n\nconst CheckedBadge: React.FC<{ width?: number; height?: number }> = ({ width = 24, height = 24 }) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.8179 4.54512L13.6275 4.27845C12.8298 3.16176 11.1702 3.16176 10.3725 4.27845L10.1821 4.54512C9.76092 5.13471 9.05384 5.45043 8.33373 5.37041L7.48471 5.27608C6.21088 5.13454 5.13454 6.21088 5.27608 7.48471L5.37041 8.33373C5.45043 9.05384 5.13471 9.76092 4.54512 10.1821L4.27845 10.3725C3.16176 11.1702 3.16176 12.8298 4.27845 13.6275L4.54512 13.8179C5.13471 14.2391 5.45043 14.9462 5.37041 15.6663L5.27608 16.5153C5.13454 17.7891 6.21088 18.8655 7.48471 18.7239L8.33373 18.6296C9.05384 18.5496 9.76092 18.8653 10.1821 19.4549L10.3725 19.7215C11.1702 20.8382 12.8298 20.8382 13.6275 19.7215L13.8179 19.4549C14.2391 18.8653 14.9462 18.5496 15.6663 18.6296L16.5153 18.7239C17.7891 18.8655 18.8655 17.7891 18.7239 16.5153L18.6296 15.6663C18.5496 14.9462 18.8653 14.2391 19.4549 13.8179L19.7215 13.6275C20.8382 12.8298 20.8382 11.1702 19.7215 10.3725L19.4549 10.1821C18.8653 9.76092 18.5496 9.05384 18.6296 8.33373L18.7239 7.48471C18.8655 6.21088 17.7891 5.13454 16.5153 5.27608L15.6663 5.37041C14.9462 5.45043 14.2391 5.13471 13.8179 4.54512Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 12L10.8189 13.8189V13.8189C10.9189 13.9189 11.0811 13.9189 11.1811 13.8189V13.8189L15 10\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default CheckedBadge;\n","import { keepPreviousData, useQuery } from '@tanstack/react-query';\n\nexport interface LstApy {\n apys: Record<string, number>;\n}\n\nexport function useLstApyFetcher() {\n return useQuery({\n queryKey: ['lst-apy'],\n queryFn: async () => {\n const lstApy = await fetch(`https://worker.jup.ag/lst-apys`);\n const apyResult: LstApy = await lstApy.json();\n\n return apyResult;\n },\n retry: 3,\n placeholderData: keepPreviousData,\n staleTime: 300_000, // 5m\n });\n}\n","import { useMemo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { searchService } from 'src/contexts/SearchService';\nimport { SearchResponse } from 'src/entity/SearchResponse';\n\ninterface SearchOptions {\n enabled?: boolean;\n staleTime?: number;\n}\n\nconst CHUNK_SIZE = 100;\n\nexport const useSearch = (mintAddresses: string[], options: SearchOptions = {}) => {\n\n const mintAddressesString = useMemo(() => mintAddresses.join(','), [mintAddresses]);\n \n return useQuery({\n queryKey:['search',mintAddressesString],\n queryFn: async () => {\n\n if (mintAddresses.length === 0) {\n return searchService.search('');\n }\n\n // Split into chunks of 100\n const chunks: string[][] = [];\n for (let i = 0; i < mintAddresses.length; i += CHUNK_SIZE) {\n chunks.push(mintAddresses.slice(i, i + CHUNK_SIZE));\n }\n\n // Make requests for each chunk\n const chunkPromises = chunks.map(chunk => \n searchService.search(chunk.join(','))\n );\n\n // Wait for all requests to complete\n const results = await Promise.allSettled(chunkPromises);\n\n return results.flatMap(result => result.status === 'fulfilled' ? result.value : []);\n },\n enabled: options.enabled ?? true,\n staleTime: options.staleTime ?? Infinity,\n });\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useSwapContext } from 'src/contexts/SwapContext';\nimport JupButton from '../JupButton';\nimport SuccessIcon from 'src/icons/SuccessIcon';\nimport PriceInfo from '../PriceInfo/index';\nimport { readableValue } from 'src/misc/utils';\nimport { usePreferredExplorer } from 'src/contexts/preferredExplorer';\n\nconst ErrorIcon = () => {\n return (\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_7547_116874)\">\n <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#F04A44\" />\n <path\n d=\"M19.8444 25.4321C18.6773 25.4332 17.7205 24.5092 17.6793 23.3431L17.1718 9.04107C17.1507 8.45326 17.3706 7.88344 17.7786 7.46056C18.1867 7.03768 18.7492 6.7998 19.337 6.7998H20.3519C20.9397 6.7998 21.5021 7.03768 21.9102 7.46056C22.3183 7.88344 22.5382 8.45329 22.5171 9.04107L22.0096 23.3431C21.9684 24.5092 21.0116 25.4332 19.8444 25.4321Z\"\n fill=\"white\"\n />\n <path\n d=\"M22.8893 30.4989C22.8893 32.1809 21.5266 33.5436 19.8446 33.5436C18.1626 33.5436 16.7998 32.1809 16.7998 30.4989C16.7998 28.8169 18.1626 27.4541 19.8446 27.4541C21.5266 27.4541 22.8893 28.8169 22.8893 30.4989Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_7547_116874\">\n <rect width=\"40\" height=\"40\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nconst SwappingScreen = () => {\n const {\n displayMode,\n lastSwapResult,\n reset,\n swapping: { txStatus },\n fromTokenInfo,\n toTokenInfo,\n refresh,\n } = useSwapContext();\n const { screen, setScreen } = useScreenState();\n\n const [errorMessage, setErrorMessage] = useState('');\n\n const onSwapMore = () => {\n reset();\n setErrorMessage('');\n setScreen('Initial');\n refresh();\n };\n\n const onGoBack = () => {\n reset({ resetValues: false });\n setErrorMessage('');\n setScreen('Initial');\n refresh();\n };\n\n useEffect(() => {\n if (screen !== 'Swapping') return;\n\n if (lastSwapResult?.swapResult && 'error' in lastSwapResult?.swapResult) {\n setErrorMessage(lastSwapResult?.swapResult?.error?.message || '');\n\n if (window.Jupiter.onSwapError) {\n window.Jupiter.onSwapError({\n error: lastSwapResult?.swapResult?.error,\n quoteResponseMeta: lastSwapResult?.quoteReponse,\n });\n }\n return;\n } else if (lastSwapResult?.swapResult && 'txid' in lastSwapResult?.swapResult) {\n if (window.Jupiter.onSuccess) {\n window.Jupiter.onSuccess({\n txid: lastSwapResult?.swapResult?.txid,\n swapResult: lastSwapResult?.swapResult,\n quoteResponseMeta: lastSwapResult?.quoteReponse,\n });\n }\n return;\n }\n }, [lastSwapResult, screen]);\n\n const onClose = () => {\n if (!displayMode || displayMode === 'modal') {\n window.Jupiter.close();\n }\n\n reset();\n setScreen('Initial');\n };\n\n const { explorer, getExplorer } = usePreferredExplorer();\n\n const SuccessContent = () => {\n const { inputAmount, outputAmount, explorerLink } = useMemo(() => {\n return {\n inputAmount:\n lastSwapResult?.swapResult && 'inputAmount' in lastSwapResult?.swapResult\n ? lastSwapResult?.swapResult.inputAmount\n : 0,\n outputAmount:\n lastSwapResult?.swapResult && 'outputAmount' in lastSwapResult?.swapResult\n ? lastSwapResult?.swapResult.outputAmount\n : 0,\n explorerLink:\n lastSwapResult?.swapResult && 'txid' in lastSwapResult?.swapResult\n ? getExplorer(lastSwapResult?.swapResult.txid)\n : '',\n };\n }, []);\n\n if (!fromTokenInfo || !toTokenInfo || !lastSwapResult?.quoteReponse) {\n return null;\n }\n\n return (\n <>\n <div className=\"flex justify-center mt-8\">\n <div className=\" flex justify-center relative items-center\">\n <div className='bg-success bg-opacity-[15%] animate-pulse h-[60px] w-[60px] rounded-full'/>\n <div className=\"rounded-full absolute justify-center\">\n <SuccessIcon className=\"text-success\" height={56} width={56} />\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col justify-center items-center gap-y-2\">\n <div className=\"mt-2 flex flex-col items-center justify-center text-center px-4\">\n <p className=\"text-xs font-semibold text-primary-text\">\n Swapped {readableValue(inputAmount, fromTokenInfo.decimals)} {fromTokenInfo.symbol} to\n </p>\n <p className=\"text-2xl font-semibold text-primary-text\">\n {readableValue(outputAmount, toTokenInfo.decimals)} {toTokenInfo.symbol}\n </p>\n </div>\n\n <div className=\" bg-module rounded-xl overflow-y-auto w-full webkit-scrollbar py-3 max-h-[260px] px-3\">\n <PriceInfo\n quoteResponse={lastSwapResult?.quoteReponse}\n fromTokenInfo={fromTokenInfo}\n toTokenInfo={toTokenInfo}\n loading={false} \n containerClassName=\" border-none mt-0\"\n />\n {explorerLink && (\n <div className=\"flex items-center justify-between text-xs text-primary-text/50 mt-4\">\n <div>\n <span>Transaction</span>\n </div>\n <a\n href={explorerLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"cursor-pointer text-primary-text ml-2 text-xs hover:underline\"\n >\n View on {explorer}\n </a>\n </div>\n )}\n </div>\n </div>\n\n <div className=\"pb-4 flex space-x-2\">\n <JupButton\n size=\"lg\"\n className=\"w-full mt-4 disabled:opacity-50 !text-uiv2-text/75 leading-none !max-h-14 bg-primary\"\n onClick={onSwapMore}\n >\n <span>\n <span className=\"text-sm\">Swap More</span>\n </span>\n </JupButton>\n\n {displayMode !== 'integrated' ? (\n <JupButton\n size=\"lg\"\n className=\"w-full mt-4 disabled:opacity-50 leading-none !max-h-14 text-primary-text bg-interactive\"\n onClick={onClose}\n >\n <span className=\"text-sm\">Close</span>\n </JupButton>\n ) : null}\n </div>\n </>\n );\n };\n\n return (\n <div className=\"flex flex-col h-full w-full px-2\">\n {errorMessage || txStatus?.status === 'fail' ? (\n <div>\n <div className=\"flex flex-col items-center justify-center text-center mt-12\">\n <ErrorIcon />\n\n <p className=\"text-primary-text mt-2\">Swap Failed</p>\n <p className=\"text-primary-text/50 text-xs mt-2\">We were unable to complete the swap, please try again.</p>\n {errorMessage ? <p className=\"text-primary-text/50 text-xs mt-2 break-all\">{errorMessage}</p> : ''}\n\n <JupButton\n size=\"lg\"\n className=\"w-full mt-6 disabled:opacity-50 !text-uiv2-text/75 leading-none !max-h-14 bg-primary\"\n onClick={onGoBack}\n >\n <span>Retry</span>\n </JupButton>\n </div>\n </div>\n ) : null}\n\n {!errorMessage && txStatus?.status === 'timeout' ? (\n <div className=\"flex justify-center\">\n <div className=\"flex flex-col items-center justify-center text-center mt-12\">\n <ErrorIcon />\n\n <p className=\"text-primary-text mt-2\">Transaction timed-out</p>\n <p className=\"text-primary-text/50 text-xs mt-2\">We were unable to complete the swap, please try again.</p>\n {errorMessage ? <p className=\"text-primary-text/50 text-xs mt-2\">{errorMessage}</p> : ''}\n\n <JupButton\n size=\"lg\"\n className=\"w-full mt-6 disabled:opacity-50 !text-uiv2-text/75 leading-none !max-h-14 bg-primary\"\n onClick={onGoBack}\n >\n <span>Retry</span>\n </JupButton>\n </div>\n </div>\n ) : null}\n {!errorMessage && txStatus?.status === 'success' ? <SuccessContent /> : null}\n </div>\n );\n};\n\nexport default SwappingScreen;\n","import React, { SVGProps } from 'react';\n\nconst SuccessIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m45.66 85.66l-56 56a8 8 0 0 1-11.32 0l-24-24a8 8 0 0 1 11.32-11.32L112 148.69l50.34-50.35a8 8 0 0 1 11.32 11.32\"\n />\n </svg>\n );\n};\n\nexport default SuccessIcon;\n","import { useUnifiedWalletContext, Wallet } from '@jup-ag/wallet-adapter';\nimport { MouseEvent, useEffect, useMemo, useState } from 'react';\nimport { useScreenState } from 'src/contexts/ScreenProvider';\nimport { useWalletPassThrough } from 'src/contexts/WalletPassthroughProvider';\nimport CloseIcon from 'src/icons/CloseIcon';\n\nconst WalletScreen = () => {\n const { setScreen } = useScreenState();\n const { handleConnectClick } = useUnifiedWalletContext();\n\n const { wallets } = useWalletPassThrough();\n\n const handleConnect = async (event: MouseEvent<HTMLElement>, wallet: Wallet) => {\n try {\n await handleConnectClick(event, wallet.adapter);\n } catch (error) {\n console.error('Failed to connect wallet:', error);\n } finally {\n setScreen('Initial');\n }\n };\n\n const numberOfWallets = useMemo(() => {\n return wallets?.length;\n }, [wallets]);\n\n const hasWallet = useMemo(() => {\n return numberOfWallets > 0;\n }, [numberOfWallets]);\n\n return (\n <div className=\"text-primary-text p-2\">\n <div className=\"flex justify-between items-center mb-2 h-[28px] \">\n <h1 className=\"text-sm font-bold\">Available Wallets ({numberOfWallets})</h1>\n <button\n onClick={() => setScreen('Initial')}\n className=\"text-primary-text hover:text-primary-text/50 transition-colors bg-interactive rounded-full p-1\"\n >\n <CloseIcon width={15} height={15} />\n </button>\n </div>\n {!hasWallet && (\n <div className=\"text-sm font-medium text-primary-text flex items-center justify-center h-full py-4\">\n No wallet found\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-2\">\n {wallets?.map((wallet) => (\n <button\n key={wallet.adapter.name}\n onClick={(e) => handleConnect(e, wallet)}\n className={`w-full text-left bg-interactive p-4 rounded-lg transition-colors ${'hover:bg-interactive/80 cursor-pointer'}`}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {wallet.adapter.icon && (\n <img src={wallet.adapter.icon} alt={`${wallet.adapter.name} icon`} className=\"w-8 h-8\" />\n )}\n <div>\n <h2 className=\"text-sm font-medium\">{wallet.adapter.name}</h2>\n </div>\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n );\n};\n\nexport default WalletScreen;\n","import React from 'react';\n\nconst CloseIcon: React.FC<React.SVGAttributes<SVGElement>> = ({ width = 20, height = 20 }) => {\n return (\n <svg width={width} height={height} viewBox=\"0 0 20 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2.0336 16.2126L8.2336 10.0126L2.0336 3.81263C1.7961 3.57903 1.66172 3.25951 1.66016 2.92669C1.65938 2.59309 1.79141 2.27357 2.02734 2.03763C2.26328 1.80247 2.5828 1.67045 2.9164 1.67201C3.25 1.67357 3.56874 1.80795 3.80234 2.04623L9.99994 8.24623L16.1999 2.04623C16.4335 1.80795 16.7523 1.67357 17.0859 1.67201C17.4187 1.67045 17.739 1.80248 17.9749 2.03763C18.2109 2.27357 18.3429 2.59309 18.3413 2.92669C18.3406 3.25951 18.2062 3.57903 17.9687 3.81263L11.7663 10.0126L17.9663 16.2126C18.2038 16.4462 18.3382 16.7658 18.3397 17.0986C18.3405 17.4322 18.2085 17.7517 17.9725 17.9876C17.7366 18.2228 17.4171 18.3548 17.0835 18.3533C16.7499 18.3517 16.4311 18.2173 16.1975 17.979L9.99994 11.779L3.79994 17.979C3.31088 18.4611 2.52494 18.4579 2.039 17.9736C1.55384 17.4884 1.54994 16.7025 2.03119 16.2126L2.0336 16.2126Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default CloseIcon;\n","import { SVGProps } from 'react';\n\nexport const JupiterLogoV2 = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"128\" viewBox=\"0 0 33 32\" fill=\"none\" {...props}>\n <g clipPath=\"url(#clip0_11565_169621)\">\n <g filter=\"url(#filter0_d_11565_169621)\">\n <path\n d=\"M3.09074 25.1666C4.44267 27.0471 6.17683 28.6205 8.1795 29.7838C10.1822 30.947 12.4081 31.6738 14.7114 31.9165C13.5264 30.1333 11.8039 28.4928 9.65354 27.2438C7.50318 25.9948 5.22592 25.3125 3.09074 25.1666Z\"\n fill=\"url(#paint0_linear_11565_169621)\"\n />\n <path\n d=\"M12.543 22.2705C8.40015 19.8636 3.91612 19.2502 0.707663 20.3338C1.0174 21.3575 1.42589 22.3487 1.92738 23.2934C4.71498 23.2288 7.75856 23.9859 10.5906 25.6308C13.4227 27.2757 15.5888 29.5459 16.9143 32C17.9839 31.9672 19.0479 31.8309 20.0913 31.5932C19.4426 28.2698 16.6849 24.6779 12.543 22.2705Z\"\n fill=\"url(#paint1_linear_11565_169621)\"\n />\n <path\n d=\"M32.2852 12.5009C31.7585 10.3584 30.8054 8.34403 29.4829 6.57804C28.1604 4.81205 26.4956 3.33067 24.5879 2.22235C22.6802 1.11403 20.5687 0.401504 18.3796 0.127309C16.1904 -0.146885 13.9684 0.0228794 11.8463 0.626465C15.3915 1.06033 19.3267 2.39122 23.1859 4.63324C27.0452 6.87525 30.1533 9.63411 32.2852 12.5009Z\"\n fill=\"url(#paint2_linear_11565_169621)\"\n />\n <path\n d=\"M27.1271 20.3583C25.3124 17.3446 22.2038 14.4588 18.3743 12.2342C14.5449 10.0095 10.4991 8.7388 6.98531 8.65474C3.894 8.58152 1.57389 9.48017 0.621548 11.1197C0.616125 11.1294 0.608532 11.1386 0.602566 11.1484C0.516877 11.4559 0.44312 11.7639 0.37587 12.0731C1.70568 11.5481 3.24645 11.2558 4.95969 11.2232C8.76959 11.1517 13.0334 12.3703 16.9681 14.6562C20.9027 16.9422 24.0759 20.0438 25.9003 23.3878C26.7182 24.8944 27.2285 26.3777 27.4308 27.7948C27.6662 27.5844 27.8972 27.3669 28.1212 27.1408C28.1272 27.1305 28.131 27.1196 28.1369 27.1088C29.0893 25.4677 28.721 23.0076 27.1271 20.3583Z\"\n fill=\"url(#paint3_linear_11565_169621)\"\n />\n <path\n d=\"M15.4609 17.2485C9.59662 13.8416 3.11626 13.3079 0 15.6855C0.00612096 16.4297 0.0630166 17.1726 0.170292 17.9091C1.08699 17.6312 2.03177 17.4562 2.98718 17.3874C6.46952 17.1254 10.3087 18.0957 13.7927 20.1207C17.2766 22.1458 20.023 25.0018 21.5209 28.1543C21.935 29.018 22.2508 29.9254 22.4624 30.8595C23.1555 30.5878 23.8294 30.2694 24.4794 29.9066C25.0011 26.0213 21.3268 20.656 15.4609 17.2485Z\"\n fill=\"url(#paint4_linear_11565_169621)\"\n />\n <path\n d=\"M30.1434 15.3141C28.3082 12.3036 25.1724 9.40969 21.3158 7.17039C17.4593 4.93109 13.3977 3.64033 9.87257 3.53674C7.1853 3.45919 5.10382 4.11053 4.02457 5.34109C8.50588 4.58182 14.4168 5.85794 20.146 9.18625C25.8753 12.5146 29.9135 17.0181 31.4722 21.2868C32.0064 19.7406 31.5416 17.6098 30.1434 15.3141Z\"\n fill=\"url(#paint5_linear_11565_169621)\"\n />\n </g>\n </g>\n <defs>\n <filter\n id=\"filter0_d_11565_169621\"\n x=\"-22.7449\"\n y=\"-20.4704\"\n width=\"77.7749\"\n height=\"77.4898\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"2.27449\" />\n <feGaussianBlur stdDeviation=\"11.3724\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_11565_169621\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_11565_169621\" result=\"shape\" />\n </filter>\n <linearGradient\n id=\"paint0_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint4_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <linearGradient\n id=\"paint5_linear_11565_169621\"\n x1=\"21.5\"\n y1=\"6.5\"\n x2=\"6.66667\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.0001\" stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" />\n </linearGradient>\n <clipPath id=\"clip0_11565_169621\">\n <rect width=\"32.2852\" height=\"32\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\nexport default JupiterLogoV2;\n","import { useScreenState } from 'src/contexts/ScreenProvider';\nimport { SwapContextProvider } from 'src/contexts/SwapContext';\nimport { IInit } from 'src/types';\n\nimport Header from '../components/Header';\nimport InitialScreen from './screens/InitialScreen';\nimport SwappingScreen from './screens/SwappingScreen';\nimport WalletScreen from './screens/WalletScreen';\nimport JupiterLogoV2 from 'src/icons/JupiterLogoV2';\nimport { BrandingProvider } from 'src/contexts/BrandingProvider';\n\nconst Content = () => {\n const { screen } = useScreenState();\n\n // ID is required for scoped preflight by tailwind to work\n return (\n <div id=\"jupiter-plugin\" className=\" h-full bg-background relative flex flex-col justify-between\">\n <div>\n {screen === 'Initial' ? (\n <>\n <Header />\n <InitialScreen />\n </>\n ) : null}\n {screen === 'Swapping' ? <SwappingScreen /> : null}\n {screen === 'Wallet' ? <WalletScreen /> : null}\n </div>\n <span className=\"text-primary-text/50 text-xs p-2 flex-row flex gap-1 justify-center\">\n Powered by\n <a href={'https://jup.ag'} target={'_blank'} rel=\"noreferrer noopener\" className=\"flex items-center gap-1 \">\n <JupiterLogoV2 className=\"text-primary-text/50\" width={15} height={15} />\n Jupiter\n </a>\n </span>\n </div>\n );\n};\n\nconst JupiterApp = (props: IInit) => {\n return (\n <SwapContextProvider {...props}>\n <BrandingProvider {...props}>\n <Content />\n </BrandingProvider>\n </SwapContextProvider>\n );\n};\n\nexport default JupiterApp;\n","import { UnifiedWalletProvider } from '@jup-ag/wallet-adapter';\nimport React, { PropsWithChildren, useState } from 'react';\n\nimport { ReactNode, useMemo } from 'react';\nimport { IInit } from 'src/types';\nimport { PreferredExplorerProvider } from './preferredExplorer';\nimport { IWalletNotification } from '@jup-ag/wallet-adapter/dist/types/contexts/WalletConnectionProvider';\n\nconst noop = () => {};\nconst WalletContextProvider: React.FC<PropsWithChildren<IInit>> = ({\n autoConnect,\n children,\n}) => {\n const enableWalletPassthrough = (() => {\n if (typeof window === 'undefined') return undefined;\n return window.Jupiter.enableWalletPassthrough;\n })();\n\n const wallets = useMemo(() => {\n if (enableWalletPassthrough) {\n return [];\n }\n\n return [];\n }, [enableWalletPassthrough]);\n\n const [showWalletStatus, setShowWalletStatus] = useState<{\n show: boolean;\n message: ReactNode;\n }>({\n show: false,\n message: '',\n });\n\n const ShouldWrapWalletProvider = useMemo(() => {\n return enableWalletPassthrough\n ? React.Fragment\n : ({ children }: { children: ReactNode }) => (\n <UnifiedWalletProvider\n wallets={wallets}\n config={{\n env: 'mainnet-beta',\n autoConnect: typeof autoConnect !== 'undefined' ? autoConnect : true,\n metadata: {\n name: 'Jupiter Plugin',\n url: 'https://plugin.jup.ag',\n description:\n 'An open-sourced, lite version of Jupiter that provides end-to-end swap flow by linking it in your HTML. Check out the visual demo for the various integration modes below. ',\n iconUrls: [],\n },\n hardcodedWallets: [],\n walletPrecedence: [],\n notificationCallback: {\n onConnect: noop,\n onConnecting: noop,\n onDisconnect: noop,\n onNotInstalled: ({ walletName, metadata }: IWalletNotification) => {\n setShowWalletStatus({\n show: true,\n message: (\n <p className=\"space-y-1\">\n {walletName} is not installed.\n <p className=\"space-x-1\">\n <a\n className=\"underline font-semibold\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={metadata.url}\n >\n Visit {walletName} website\n </a>\n <span>to install it.</span>\n </p>\n </p>\n ),\n });\n\n setTimeout(() => {\n setShowWalletStatus({\n show: false,\n message: '',\n });\n }, 5_000);\n },\n },\n theme: 'jupiter',\n }}\n >\n {children}\n </UnifiedWalletProvider>\n );\n }, [autoConnect, enableWalletPassthrough, wallets]);\n\n return (\n <>\n <ShouldWrapWalletProvider>{children}</ShouldWrapWalletProvider>\n {showWalletStatus.show && showWalletStatus.message ? (\n <div className=\"absolute bottom-2 w-full px-2\">\n <div className=\"w-full h-full bg-white/10 rounded-lg p-2 text-warning text-xs\">\n {showWalletStatus.message}\n </div>\n </div>\n ) : null}\n </>\n );\n};\n\nexport const ContextProvider: React.FC<PropsWithChildren<IInit>> = (props) => {\n return (\n <>\n <WalletContextProvider {...props}>\n <PreferredExplorerProvider defaultExplorer={props.defaultExplorer}>\n {props.children}\n </PreferredExplorerProvider>\n </WalletContextProvider>\n\n </>\n );\n};\n"],"mappings":"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","names":["exports","module","init","import_jotai","import_react","import_jsx_runtime","_a","store","import_jsx_runtime","import_jsx_runtime","_a","type","instance","RenderJupiter","_b","_c","_d","_e","import_jotai","import_react","import_jsx_runtime","screen","import_decimal","import_jsbi","import_react","import_web3","import_react","_a","numberFormatter","Decimal","Decimal","_a","import_jotai","import_react","import_jsx_runtime","_a","atom","import_web3","JSBI","import_superstruct","import_react_query","import_react","import_react_query","import_jsx_runtime","_a","scriptDomain","screen","Decimal","JSBI","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","_a","import_jsx_runtime","screen","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","React","import_jsx_runtime","import_react","import_jsx_runtime","React","React","import_jsx_runtime","import_jsx_runtime","_a","import_jsx_runtime","import_decimal","import_react","import_jsx_runtime","Decimal","import_decimal","import_jsbi","import_react","import_decimal","React","import_decimal","import_jsx_runtime","Decimal","import_jsx_runtime","Decimal","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","JSBI","Decimal","import_jsx_runtime","import_decimal","import_react_query","import_react","import_react","import_jsx_runtime","attributes","debounce","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","warning","data","import_wallet_adapter","import_react_query","import_web3","type","import_react","import_jsx_runtime","_a","import_jsx_runtime","form","Decimal","import_react","import_jsx_runtime","import_jsx_runtime","import_lodash","import_react","import_decimal","import_react","import_jsx_runtime","explorer","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_query","import_react_query","import_jsx_runtime","Decimal","React","_a","import_react","import_react_query","_a","import_jsx_runtime","PAIR_ROW_HEIGHT","debounce","_a","AutoSizer","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","screen","_a","import_wallet_adapter","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","screen","import_wallet_adapter","import_react","import_jsx_runtime","React","children","import_react_query","import_react","import_jsx_runtime","init"]}
|