@orderly.network/onramper-plugin 0.0.2-alpha.0

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.
Files changed (81) hide show
  1. package/README.md +113 -0
  2. package/dist/chunk-QKQ47GQZ.js +11 -0
  3. package/dist/chunk-QKQ47GQZ.js.map +1 -0
  4. package/dist/chunk-XNMUIY72.mjs +9 -0
  5. package/dist/chunk-XNMUIY72.mjs.map +1 -0
  6. package/dist/de-GYR62SPI.js +36 -0
  7. package/dist/de-GYR62SPI.js.map +1 -0
  8. package/dist/de-XNITMI2B.mjs +34 -0
  9. package/dist/de-XNITMI2B.mjs.map +1 -0
  10. package/dist/en-IAAY2CDT.js +36 -0
  11. package/dist/en-IAAY2CDT.js.map +1 -0
  12. package/dist/en-UCLS4WAV.mjs +34 -0
  13. package/dist/en-UCLS4WAV.mjs.map +1 -0
  14. package/dist/es-76I5JYOI.mjs +34 -0
  15. package/dist/es-76I5JYOI.mjs.map +1 -0
  16. package/dist/es-B7VYU5TQ.js +36 -0
  17. package/dist/es-B7VYU5TQ.js.map +1 -0
  18. package/dist/fr-5G5K3WZB.js +36 -0
  19. package/dist/fr-5G5K3WZB.js.map +1 -0
  20. package/dist/fr-YBDFJ5YI.mjs +34 -0
  21. package/dist/fr-YBDFJ5YI.mjs.map +1 -0
  22. package/dist/id-RPSFROFO.js +36 -0
  23. package/dist/id-RPSFROFO.js.map +1 -0
  24. package/dist/id-TWEEXYGV.mjs +34 -0
  25. package/dist/id-TWEEXYGV.mjs.map +1 -0
  26. package/dist/index.d.mts +158 -0
  27. package/dist/index.d.ts +158 -0
  28. package/dist/index.js +1863 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/index.mjs +1851 -0
  31. package/dist/index.mjs.map +1 -0
  32. package/dist/it-64LYBKQP.js +36 -0
  33. package/dist/it-64LYBKQP.js.map +1 -0
  34. package/dist/it-ESHQ6ZEW.mjs +34 -0
  35. package/dist/it-ESHQ6ZEW.mjs.map +1 -0
  36. package/dist/ja-AMRP6CIA.js +36 -0
  37. package/dist/ja-AMRP6CIA.js.map +1 -0
  38. package/dist/ja-TTBR7X25.mjs +34 -0
  39. package/dist/ja-TTBR7X25.mjs.map +1 -0
  40. package/dist/ko-BTMZAQ7J.js +36 -0
  41. package/dist/ko-BTMZAQ7J.js.map +1 -0
  42. package/dist/ko-PUJOVSVE.mjs +34 -0
  43. package/dist/ko-PUJOVSVE.mjs.map +1 -0
  44. package/dist/nl-BZB2BRQ7.js +36 -0
  45. package/dist/nl-BZB2BRQ7.js.map +1 -0
  46. package/dist/nl-SENDBWKK.mjs +34 -0
  47. package/dist/nl-SENDBWKK.mjs.map +1 -0
  48. package/dist/pl-GGYFSVAJ.mjs +34 -0
  49. package/dist/pl-GGYFSVAJ.mjs.map +1 -0
  50. package/dist/pl-ORAYIBD7.js +36 -0
  51. package/dist/pl-ORAYIBD7.js.map +1 -0
  52. package/dist/pt-RWI3GBG6.js +36 -0
  53. package/dist/pt-RWI3GBG6.js.map +1 -0
  54. package/dist/pt-S4FOVI3A.mjs +34 -0
  55. package/dist/pt-S4FOVI3A.mjs.map +1 -0
  56. package/dist/ru-AP7GWUPY.js +36 -0
  57. package/dist/ru-AP7GWUPY.js.map +1 -0
  58. package/dist/ru-ZF4FQ3S2.mjs +34 -0
  59. package/dist/ru-ZF4FQ3S2.mjs.map +1 -0
  60. package/dist/styles.css +1 -0
  61. package/dist/tc-RZ4GC2Z6.js +36 -0
  62. package/dist/tc-RZ4GC2Z6.js.map +1 -0
  63. package/dist/tc-TQ4TWJLG.mjs +34 -0
  64. package/dist/tc-TQ4TWJLG.mjs.map +1 -0
  65. package/dist/tr-E6HTGNQA.js +36 -0
  66. package/dist/tr-E6HTGNQA.js.map +1 -0
  67. package/dist/tr-RM566BKR.mjs +34 -0
  68. package/dist/tr-RM566BKR.mjs.map +1 -0
  69. package/dist/uk-6FVT4QXK.js +36 -0
  70. package/dist/uk-6FVT4QXK.js.map +1 -0
  71. package/dist/uk-K25BMMM3.mjs +34 -0
  72. package/dist/uk-K25BMMM3.mjs.map +1 -0
  73. package/dist/vi-KGVGSDIB.js +36 -0
  74. package/dist/vi-KGVGSDIB.js.map +1 -0
  75. package/dist/vi-MTEYJND7.mjs +34 -0
  76. package/dist/vi-MTEYJND7.mjs.map +1 -0
  77. package/dist/zh-A3GFFBKX.js +36 -0
  78. package/dist/zh-A3GFFBKX.js.map +1 -0
  79. package/dist/zh-JDOWM3XW.mjs +34 -0
  80. package/dist/zh-JDOWM3XW.mjs.map +1 -0
  81. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants.ts","../src/components/icons/ExchangeIcon.tsx","../src/components/icons/ArrowDownIcon.tsx","../src/components/icons/BuyCryptoIcon.tsx","../src/components/chainSelect/index.tsx","../src/components/exchangeDivider/index.tsx","../src/components/historyDropdown/index.tsx","../src/components/partnerSelect/index.tsx","../src/components/paymentMethodSelect/index.tsx","../src/components/quantityInput/index.tsx","../src/components/quoteCountdown/index.tsx","../src/components/onrampForm/onrampForm.ui.tsx","../src/context/OnrampConfigContext.tsx","../src/utils/signOnramperUrl.ts","../src/utils/buildOnramperUrl.ts","../src/hooks/useOnrampCheckout.ts","../src/hooks/useOnrampQuote.ts","../src/hooks/useOnrampTransactionStatus.ts","../src/hooks/usePartnerPaymentSelection.ts","../src/hooks/useReceiveDisplay.ts","../src/hooks/useSpendAmount.ts","../src/hooks/useWalletAddress.ts","../src/components/chainSelect/useChainSelect.ts","../src/components/onrampForm/onrampForm.script.tsx","../src/components/onrampForm/onrampForm.widget.tsx","../src/i18n/module.ts","../src/i18n/provider.tsx","../src/plugin.tsx"],"names":["jsx","useState","useTranslation","Flex","Text","ChainIcon","Spinner","jsxs","cn","Badge","Box","DropdownMenuRoot","DropdownMenuTrigger","DropdownMenuPortal","DropdownMenuContent","ScrollArea","CaretDownIcon","DropdownMenuItem","useRef","Fragment","Input","value","inputFormatter","TokenIcon","useCallback","useSyncExternalStore","textVariants","WalletIcon","Button","DialogPortal","createContext","useContext","computeHmac","useMemo","toast","useSWR","useEffect","getPaymentMethodsForPartner","useWalletConnector","useAccount","ABSTRACT_CHAIN_ID_MAP","useConfig","useLocalStorage","useChains","praseChainIdToNumber","int2hex","preloadDefaultResource","ExternalLocaleProvider","i18n","createInterceptor","props"],"mappings":"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","file":"index.js","sourcesContent":["// --- Fiat currencies ---\n\nexport const FIAT_CURRENCIES = [\n \"USD\",\n \"EUR\",\n \"CNY\",\n \"HKD\",\n \"TWD\",\n \"KRW\",\n \"JPY\",\n] as const;\n\nexport type FiatCurrency = (typeof FIAT_CURRENCIES)[number];\n\n// --- Preset spend amounts per fiat currency ---\n\nexport const PRESET_AMOUNTS: Record<FiatCurrency, readonly number[]> = {\n USD: [100, 500, 1000, 5000],\n EUR: [100, 500, 1000, 5000],\n CNY: [1000, 5000, 10000, 50000],\n HKD: [1000, 5000, 10000, 50000],\n TWD: [5000, 20000, 50000, 200000],\n KRW: [200000, 500000, 1000000, 5000000],\n JPY: [20000, 50000, 100000, 500000],\n};\n\n// --- Onramper widget base URL ---\n\nexport const ONRAMPER_WIDGET_BASE = \"https://buy.onramper.com\";\n\n// --- Formatting helpers ---\n\nexport function formatCompact(n: number): string {\n const suffixes: [number, string][] = [\n [1_000_000_000, \"B\"],\n [1_000_000, \"M\"],\n [1_000, \"K\"],\n ];\n for (const [threshold, suffix] of suffixes) {\n if (n >= threshold) {\n const val = n / threshold;\n return (val % 1 === 0 ? val.toString() : val.toFixed(1)) + suffix;\n }\n }\n return n.toLocaleString();\n}\n","import { FC, SVGProps } from \"react\";\n\nexport const ExchangeIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M10.997 8.004a.5.5 0 0 0-.14-.36l-1.86-1.843-.703.703.984 1h-7.28a.5.5 0 0 0 0 1h7.28l-.984 1 .703.703 1.86-1.844a.5.5 0 0 0 .14-.36m-.5-4a.5.5 0 0 0-.5-.5H2.716l.984-1-.703-.703-1.859 1.843a.515.515 0 0 0 0 .719l1.86 1.844.702-.703-.984-1h7.281a.5.5 0 0 0 .5-.5\" />\n </svg>\n);\n","import { FC, SVGProps } from \"react\";\n\nexport const ArrowDownIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"20\"\n height=\"21\"\n viewBox=\"0 0 20 21\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M9.994 5.51a.83.83 0 0 0-.832.833v6.295l-2.498-2.471-1.17 1.17 3.902 3.929a.84.84 0 0 0 .599.244.84.84 0 0 0 .597-.244l3.903-3.928-1.171-1.171-2.498 2.471V6.343a.83.83 0 0 0-.832-.833\" />\n </svg>\n);\n","import { FC, SVGProps } from \"react\";\n\nexport const BuyCryptoIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"11\"\n height=\"11\"\n viewBox=\"0 0 11 11\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 2.33333C0 1.04475 1.04475 0 2.33333 0H8.16667C9.45525 0 10.5 1.04475 10.5 2.33333V8.16667C10.5 9.45525 9.45525 10.5 8.16667 10.5H2.33333C1.04475 10.5 0 9.45525 0 8.16667V2.33333ZM7 5.83333H5.83333V7C5.83333 7.322 5.572 7.58333 5.25 7.58333C4.928 7.58333 4.66667 7.322 4.66667 7V5.83333H3.5C3.178 5.83333 2.91667 5.572 2.91667 5.25C2.91667 4.928 3.178 4.66667 3.5 4.66667H4.66667V3.5C4.66667 3.178 4.928 2.91667 5.25 2.91667C5.572 2.91667 5.83333 3.178 5.83333 3.5V4.66667H7C7.322 4.66667 7.58333 4.928 7.58333 5.25C7.58333 5.572 7.322 5.83333 7 5.83333Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API } from \"@orderly.network/types\";\nimport {\n Badge,\n Box,\n ChainIcon,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../icons\";\nimport { CurrentChain } from \"./useChainSelect\";\n\nexport type ChainSelectProps = {\n chains: API.NetworkInfos[];\n value: CurrentChain;\n onValueChange: (chain: API.NetworkInfos) => Promise<void>;\n wrongNetwork?: boolean;\n loading?: boolean;\n disabled?: boolean;\n className?: string;\n};\n\nexport const ChainSelect: React.FC<ChainSelectProps> = (props) => {\n const { chains, value, wrongNetwork, loading, disabled } = props;\n const [open, setOpen] = useState(false);\n const { t } = useTranslation();\n\n const selectable = wrongNetwork || chains?.length > 1;\n\n const chainIcon = wrongNetwork ? (\n <Flex\n width={18}\n height={18}\n intensity={100}\n r=\"full\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Text size=\"2xs\" intensity={80}>\n U\n </Text>\n </Flex>\n ) : (\n <ChainIcon className=\"oui-size-[18px]\" chainId={value?.id} />\n );\n\n const chainName = wrongNetwork\n ? t(\"onramp.unknownNetwork\")\n : value?.info?.network_infos?.name;\n\n const currentChain = chains.find((chain) => chain.chain_id === value?.id);\n const extendedCurrentChain = currentChain as API.NetworkInfos & {\n isSupported?: boolean;\n };\n const isCurrentChainSupported =\n !currentChain || extendedCurrentChain?.isSupported !== false;\n\n const renderRightIcon = () => {\n if (loading) {\n return <Spinner size=\"sm\" />;\n }\n if (selectable) {\n return <ExchangeIcon className=\"oui-text-base-contrast-54\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-b-sm oui-rounded-t-xl oui-border oui-border-line\",\n disabled\n ? \"oui-cursor-not-allowed\"\n : selectable\n ? \"oui-cursor-pointer\"\n : \"oui-cursor-auto\",\n props.className,\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"center\"\n className=\"oui-gap-0\"\n >\n <Flex className=\"oui-h-[16px] oui-items-center\">\n <Text size=\"2xs\" intensity={54}>\n {t(\"transfer.network\")}\n </Text>\n </Flex>\n <Flex gapX={1} itemAlign=\"center\" className=\"oui-mt-0.5 oui-h-[20px]\">\n {chainIcon}\n <Text size=\"sm\" intensity={80} className=\"oui-leading-none\">\n {chainName}\n </Text>\n {!isCurrentChainSupported && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.notSupported\")}\n </Badge>\n )}\n </Flex>\n </Flex>\n {renderRightIcon()}\n </Flex>\n );\n\n const content = chains.map((chain, index) => {\n const extendedChain = chain as API.NetworkInfos & {\n isSupported?: boolean;\n };\n const isActive = chain.chain_id === value?.id;\n const isSupported = extendedChain.isSupported !== false;\n return (\n <Flex\n key={chain.chain_id}\n px={2}\n r=\"base\"\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-deposit-network-select-item\",\n \"oui-h-[30px]\",\n isSupported\n ? \"oui-cursor-pointer hover:oui-bg-base-5\"\n : \"oui-cursor-not-allowed\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={async () => {\n if (!isSupported) return;\n setOpen(false);\n await props.onValueChange(chain);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n <ChainIcon\n className={cn(\"oui-size-[18px]\", !isSupported && \"oui-opacity-50\")}\n chainId={chain.chain_id}\n />\n <Text size=\"2xs\" intensity={isSupported ? 54 : 36}>\n {chain.name}\n </Text>\n {!isSupported && (\n <Badge color=\"danger\" size=\"xs\">\n {t(\"common.notSupported\")}\n </Badge>\n )}\n </Flex>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-deposit-network-select-active-dot oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger disabled={disabled} asChild>\n {trigger}\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-deposit-token-select-dropdown-menu-content\",\n \"oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[110px]\">{content}</div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { FC, ReactNode } from \"react\";\nimport { Flex } from \"@orderly.network/ui\";\nimport { ArrowDownIcon } from \"../icons\";\n\ntype ExchangeDividerProps = {\n icon?: ReactNode;\n};\n\nexport const ExchangeDivider: FC<ExchangeDividerProps> = ({ icon }) => {\n return (\n <Flex height={40} gapX={3} className=\"oui-w-full\">\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n {icon || <ArrowDownIcon className=\"oui-text-primary-light\" />}\n <Flex height={1} className=\"oui-flex-1 oui-bg-base-contrast-12\"></Flex>\n </Flex>\n );\n};\n","import { FC, RefObject } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n CaretDownIcon,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { WebhookEvent } from \"../../hooks/useOnrampTransactionStatus\";\n\nexport type HistoryDropdownProps = {\n transactions: WebhookEvent[];\n pendingTransactions: WebhookEvent[];\n containerRef?: RefObject<HTMLElement | null>;\n};\n\nexport const HistoryDropdown: FC<HistoryDropdownProps> = ({\n transactions,\n pendingTransactions,\n containerRef,\n}) => {\n const { t } = useTranslation();\n if (transactions.length === 0) {\n return (\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-w-full\">\n <Text size=\"sm\" intensity={98} weight=\"semibold\">\n {t(\"onramp.youSpend\")}\n </Text>\n </Flex>\n );\n }\n\n return (\n <DropdownMenuRoot>\n <Flex justify=\"between\" itemAlign=\"center\" className=\"oui-w-full\">\n <Text size=\"sm\" intensity={98}>\n {t(\"onramp.youSpend\")}\n </Text>\n <DropdownMenuTrigger asChild>\n <Flex\n gap={1}\n itemAlign=\"center\"\n className=\"oui-group oui-cursor-pointer\"\n >\n {pendingTransactions.length > 0 ? (\n <Flex itemAlign=\"center\" className=\"oui-gap-1.5\">\n <Spinner size=\"sm\" className=\"oui-text-primaryLight\" />\n <Text size=\"2xs\" intensity={54}>\n {pendingTransactions.length === 1\n ? t(\"onramp.pendingPurchase\", {\n count: pendingTransactions.length,\n })\n : t(\"onramp.pendingPurchases\", {\n count: pendingTransactions.length,\n })}\n </Text>\n </Flex>\n ) : (\n <Text size=\"xs\" intensity={54}>\n {t(\"onramp.history\")}\n </Text>\n )}\n <CaretDownIcon\n size={10}\n className=\"oui-text-base-contrast-54 oui-transition-transform group-data-[state=open]:oui-rotate-180\"\n opacity={1}\n />\n </Flex>\n </DropdownMenuTrigger>\n </Flex>\n <DropdownMenuPortal>\n <DropdownMenuContent\n align=\"end\"\n className=\"oui-text-semibold oui-custom-scrollbar oui-z-50 oui-max-h-[105px] oui-overflow-y-auto oui-rounded-lg oui-border oui-border-line-12 oui-bg-base-8 oui-p-1 oui-shadow-lg\"\n style={\n containerRef?.current\n ? { width: containerRef.current.offsetWidth }\n : undefined\n }\n >\n <Flex direction=\"column\" gap={1}>\n {transactions.map((tx) => (\n <DropdownMenuItem\n key={tx.transactionId}\n className=\"oui-flex oui-w-full oui-cursor-default oui-items-start oui-justify-between oui-rounded-md oui-px-2 oui-py-0.5 oui-outline-none focus:oui-bg-base-6 data-[disabled]:oui-pointer-events-none data-[disabled]:oui-opacity-50\"\n >\n <div className=\"oui-grid oui-w-full oui-grid-cols-[0.5fr_1fr_1fr_1.2fr_minmax(auto,max-content)] oui-items-center oui-gap-1\">\n <Text\n size=\"xs\"\n weight=\"semibold\"\n className=\"oui-truncate oui-whitespace-nowrap oui-uppercase oui-text-base-contrast-80\"\n >\n {tx.sourceCurrency}\n </Text>\n <Text\n size=\"xs\"\n weight=\"semibold\"\n className=\"oui-truncate oui-whitespace-nowrap\"\n >\n {tx.inAmount}\n </Text>\n <Text\n size=\"xs\"\n intensity={54}\n className=\"oui-truncate oui-whitespace-nowrap oui-capitalize\"\n >\n {tx.onramp}\n </Text>\n <Text\n size=\"xs\"\n weight=\"semibold\"\n className={cn(\n \"oui-truncate oui-whitespace-nowrap oui-capitalize\",\n tx.status === \"failed\" || tx.status === \"canceled\"\n ? \"oui-text-danger\"\n : tx.status === \"pending\" || tx.status === \"new\"\n ? \"oui-text-warning\"\n : \"oui-text-success\",\n )}\n >\n {tx.status === \"paid\"\n ? t(\"onramp.statusCompleted\")\n : tx.status}\n </Text>\n <Text\n size=\"xs\"\n intensity={36}\n className=\"oui-whitespace-nowrap oui-text-right\"\n >\n {new Date(tx.statusDate).toLocaleString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </Text>\n </div>\n </DropdownMenuItem>\n ))}\n </Flex>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { FC, RefObject, useRef, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n CaretDownIcon,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Text,\n cn,\n} from \"@orderly.network/ui\";\n\nexport type OnrampPartner = {\n id: string;\n name: string;\n rate: number;\n payout: number;\n recommendations?: string[];\n};\n\ntype PartnerSelectProps = {\n partners: OnrampPartner[];\n value: OnrampPartner;\n onValueChange: (partner: OnrampPartner) => void;\n containerRef?: RefObject<HTMLElement | null>;\n};\n\nexport const PartnerSelect: FC<PartnerSelectProps> = ({\n partners,\n value,\n onValueChange,\n containerRef,\n}) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const selectable = partners.length > 1;\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const getAlignOffset = () => {\n if (!containerRef?.current || !triggerRef.current) return 0;\n const containerRect = containerRef.current.getBoundingClientRect();\n const triggerRect = triggerRef.current.getBoundingClientRect();\n return triggerRect.right - containerRect.right;\n };\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger>\n <Flex\n ref={triggerRef}\n itemAlign=\"center\"\n gap={1}\n className=\"oui-cursor-pointer oui-select-none\"\n >\n <Text size=\"2xs\" intensity={54} weight=\"semibold\">\n {t(\"onramp.by\")}\n </Text>\n <img\n alt={value.name}\n src={`https://cdn.onramper.com/icons/onramps/${value.id.toLowerCase()}-colored.svg`}\n className=\"oui-size-4 oui-rounded-full oui-object-cover\"\n />\n <Text size=\"2xs\" intensity={54} weight=\"semibold\">\n {value.name}\n </Text>\n {selectable && (\n <CaretDownIcon\n size={10}\n className=\"oui-text-base-contrast-54\"\n opacity={1}\n />\n )}\n </Flex>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e: Event) => e.preventDefault()}\n align=\"end\"\n sideOffset={10}\n alignOffset={getAlignOffset()}\n className={cn(\n \"oui-z-50 oui-bg-base-8 oui-p-1\",\n \"oui-min-w-[270px] oui-select-none oui-rounded-[6px]\",\n \"oui-border oui-border-line-6\",\n )}\n style={\n containerRef?.current\n ? { width: containerRef.current.offsetWidth }\n : undefined\n }\n >\n <ScrollArea>\n <div className=\"oui-flex oui-max-h-[220px] oui-flex-col oui-gap-1\">\n {partners.map((partner) => {\n const isActive = partner.id === value.id;\n const diffPercentage =\n value.payout === 0\n ? 0\n : ((partner.payout - value.payout) / value.payout) * 100;\n\n return (\n <Flex\n key={partner.id}\n p={2}\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-min-h-[56px] oui-cursor-pointer oui-rounded-[4px] oui-transition-colors hover:oui-bg-base-6\",\n isActive ? \"oui-bg-base-5\" : \"oui-bg-transparent\",\n )}\n onClick={() => {\n onValueChange(partner);\n setOpen(false);\n }}\n >\n {/* Left side */}\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"center\"\n gap={1}\n className=\"oui-flex-[3]\"\n >\n <Flex gap={1} itemAlign=\"center\">\n <img\n alt={partner.name}\n src={`https://cdn.onramper.com/icons/onramps/${partner.id.toLowerCase()}-colored.svg`}\n className=\"oui-size-4 oui-rounded-full oui-object-cover\"\n onError={(e) => {\n (e.target as HTMLImageElement).src =\n \"https://cdn.onramper.com/icons/tokens/usdc.svg\";\n }}\n />\n <Text\n size=\"sm\"\n intensity={54}\n weight=\"semibold\"\n className=\"oui-leading-5 oui-tracking-[0.42px]\"\n >\n {partner.name}\n </Text>\n </Flex>\n {partner.recommendations &&\n partner.recommendations.length > 0 && (\n <Box>\n <Flex className=\"oui-flex-wrap oui-gap-1\">\n {partner.recommendations.map((rec, i) => (\n <Flex\n key={i}\n px={1}\n py={1}\n className={cn(\n \"oui-rounded-[4px] oui-bg-gradient-to-r\",\n \"oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)]\",\n \"oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)]\",\n )}\n >\n <Text.gradient\n size=\"3xs\"\n weight=\"semibold\"\n color=\"brand\"\n className=\"oui-leading-[10px] oui-tracking-[0.3px]\"\n >\n {rec}\n </Text.gradient>\n </Flex>\n ))}\n </Flex>\n </Box>\n )}\n </Flex>\n\n {/* Right side */}\n <Flex\n direction=\"column\"\n itemAlign=\"end\"\n justify=\"center\"\n gap={1}\n className=\"oui-flex-[2] oui-text-xs oui-font-semibold oui-tracking-[0.36px]\"\n >\n {isActive ? (\n <>\n <Text\n intensity={36}\n className=\"oui-text-right oui-leading-[15px]\"\n >\n {t(\"onramp.youReceive\")}\n </Text>\n <Text intensity={98} className=\"oui-leading-[15px]\">\n {partner.payout.toFixed(2)} USDC\n </Text>\n </>\n ) : (\n <>\n <Text intensity={54} className=\"oui-leading-[15px]\">\n {partner.payout.toFixed(2)} USDC\n </Text>\n <Text\n className={cn(\n \"oui-text-right oui-leading-[15px]\",\n diffPercentage < 0\n ? \"oui-text-danger\"\n : diffPercentage > 0\n ? \"oui-text-success\"\n : \"oui-text-base-contrast-54\",\n )}\n >\n {diffPercentage > 0 ? \"+\" : \"\"}\n {diffPercentage.toFixed(2)}%\n </Text>\n </>\n )}\n </Flex>\n </Flex>\n );\n })}\n </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Flex,\n ScrollArea,\n Spinner,\n Text,\n cn,\n} from \"@orderly.network/ui\";\nimport { ExchangeIcon } from \"../icons\";\n\nexport type PaymentMethod = {\n id: string;\n name: string;\n icon?: string;\n};\n\ntype PaymentMethodSelectProps = {\n methods: PaymentMethod[];\n value: PaymentMethod;\n onValueChange: (method: PaymentMethod) => void;\n disabled?: boolean;\n loading?: boolean;\n className?: string;\n};\n\nexport const PaymentMethodSelect: React.FC<PaymentMethodSelectProps> = (\n props,\n) => {\n const { t } = useTranslation();\n const { methods, value, disabled, loading } = props;\n const [open, setOpen] = useState(false);\n\n const selectable = methods.length > 1;\n\n const renderRightIcon = () => {\n if (selectable) {\n return <ExchangeIcon className=\"oui-text-base-contrast-54\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n className={cn(\n \"oui-rounded-[4px] oui-rounded-t-xl oui-border oui-border-line\",\n disabled\n ? \"oui-cursor-not-allowed\"\n : selectable\n ? \"oui-cursor-pointer\"\n : \"oui-cursor-auto\",\n props.className,\n )}\n height={54}\n px={3}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <div>\n <Flex>\n <Text size=\"2xs\" intensity={54}>\n {t(\"onramp.payWith\")}\n </Text>\n </Flex>\n <Flex gapX={1} itemAlign=\"center\">\n {loading ? (\n <Spinner size=\"sm\" />\n ) : (\n <>\n {value.icon && (\n <img\n src={value.icon}\n alt={value.name}\n width={16}\n height={16}\n className=\"oui-rounded-lg oui-bg-secondary oui-object-contain oui-p-px\"\n />\n )}\n <Text size=\"sm\" intensity={80}>\n {value.name}\n </Text>\n </>\n )}\n </Flex>\n </div>\n {renderRightIcon()}\n </Flex>\n );\n\n const content = methods.map((method, index) => {\n const isActive = method.id === value.id;\n return (\n <Flex\n key={method.id}\n px={2}\n r=\"base\"\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-h-[30px] oui-cursor-pointer hover:oui-bg-base-5\",\n isActive && \"oui-bg-base-5\",\n index !== 0 && \"oui-mt-[2px]\",\n )}\n onClick={() => {\n setOpen(false);\n props.onValueChange(method);\n }}\n >\n <Flex gapX={1} itemAlign=\"center\">\n {method.icon && (\n <img\n src={method.icon}\n alt={method.name}\n width={14}\n height={14}\n className=\"oui-rounded-lg oui-bg-secondary oui-object-contain oui-p-px\"\n />\n )}\n <Text size=\"2xs\" intensity={isActive ? 80 : 54}>\n {method.name}\n </Text>\n </Flex>\n {isActive && (\n <Box\n width={4}\n height={4}\n r=\"full\"\n className=\"oui-bg-[linear-gradient(270deg,#59B0FE_0%,#26FEFE_100%)]\"\n />\n )}\n </Flex>\n );\n });\n\n return (\n <DropdownMenuRoot open={selectable ? open : false} onOpenChange={setOpen}>\n <DropdownMenuTrigger disabled={disabled} asChild>\n {trigger}\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={2}\n className={cn(\n \"oui-z-50 oui-bg-base-8 oui-p-1\",\n \"oui-w-[var(--radix-dropdown-menu-trigger-width)]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[145px]\">{content}</div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { FC, ReactNode, useRef, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Input,\n InputProps,\n cn,\n Box,\n Text,\n Flex,\n inputFormatter,\n Spinner,\n CaretDownIcon,\n TokenIcon,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n ScrollArea,\n} from \"@orderly.network/ui\";\n\nexport type QuantityInputProps = {\n label?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n loading?: boolean;\n suffix?: ReactNode;\n /** Error message shown below the input; triggers danger border when non-empty. */\n error?: string;\n classNames?: {\n root?: string;\n input?: string;\n };\n} & Omit<InputProps, \"onClear\" | \"suffix\" | \"prefix\" | \"onValueChange\">;\n\nexport const QuantityInput: FC<QuantityInputProps> = (props) => {\n const { t } = useTranslation();\n const {\n classNames,\n label,\n value,\n onValueChange,\n loading,\n placeholder,\n suffix,\n error,\n ...rest\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const hasError = !!error;\n\n const prefix = (\n <Box>\n <Box className=\"oui-absolute oui-top-1.5\">\n <Text size=\"2xs\" intensity={54}>\n {label || t(\"onramp.quantity\")}\n </Text>\n </Box>\n {loading && (\n <Box className=\"oui-absolute oui-bottom-1\">\n <Spinner size=\"sm\" />\n </Box>\n )}\n </Box>\n );\n\n const _placeholder = placeholder ?? (loading ? \"\" : \"0\");\n\n return (\n <Box>\n <Input\n ref={inputRef}\n autoComplete=\"off\"\n placeholder={_placeholder}\n color={hasError ? \"danger\" : \"default\"}\n prefix={prefix}\n suffix={suffix}\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value);\n }}\n formatters={[\n inputFormatter.numberFormatter,\n inputFormatter.dpFormatter(2),\n inputFormatter.currencyFormatter,\n ]}\n {...rest}\n classNames={{\n ...classNames,\n root: cn(\n \"oui-relative oui-h-[54px] oui-px-3\",\n \"oui-rounded-lg oui-border oui-border-line\",\n props.readOnly\n ? \"oui-border-none oui-bg-base-6 focus-within:oui-outline-0\"\n : \"oui-bg-base-5\",\n classNames?.root,\n ),\n input: cn(\n \"oui-absolute oui-top-[25px] oui-h-[20px]\",\n classNames?.input,\n ),\n }}\n />\n {hasError && (\n <Text size=\"2xs\" className=\"oui-mt-1 oui-px-1 oui-text-danger\">\n {error}\n </Text>\n )}\n </Box>\n );\n};\n\n// ─── Currency suffix with dropdown ───────────────────────────────────────────\n\ntype CurrencySuffixProps = {\n currencies: readonly string[];\n selected: string;\n onSelect: (currency: string) => void;\n};\n\nexport const CurrencySuffix: FC<CurrencySuffixProps> = ({\n currencies,\n selected,\n onSelect,\n}) => {\n const [open, setOpen] = useState(false);\n const selectable = currencies.length > 1;\n\n const trigger = (\n <Flex\n itemAlign=\"center\"\n gap={1}\n className={cn(selectable && \"oui-cursor-pointer\")}\n >\n <img\n src={`https://cdn.onramper.com/icons/tokens/${selected.toLowerCase()}.svg`}\n alt={selected}\n className=\"oui-size-4 oui-rounded-full\"\n />\n <Text size=\"sm\" intensity={80} weight=\"semibold\">\n {selected}\n </Text>\n {selectable && (\n <CaretDownIcon\n size={10}\n className=\"oui-text-base-contrast-54\"\n opacity={1}\n />\n )}\n </Flex>\n );\n\n return (\n <div className=\"oui-absolute oui-right-3 oui-flex oui-h-[20px] oui-items-center\">\n {selectable ? (\n <DropdownMenuRoot open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"end\"\n sideOffset={2}\n className={cn(\n \"oui-z-50 oui-bg-base-8 oui-p-1\",\n \"oui-min-w-[80px]\",\n \"oui-select-none oui-rounded-md\",\n )}\n >\n <ScrollArea>\n <div className=\"oui-max-h-[110px]\">\n {currencies.map((currency) => {\n const isActive = currency === selected;\n return (\n <Flex\n key={currency}\n px={2}\n r=\"base\"\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-h-[30px] oui-cursor-pointer hover:oui-bg-base-5\",\n isActive && \"oui-bg-base-5\",\n \"oui-mt-[2px]\",\n )}\n onClick={() => {\n setOpen(false);\n onSelect(currency);\n }}\n >\n <Flex gap={2} itemAlign=\"center\">\n <img\n src={`https://cdn.onramper.com/icons/tokens/${currency.toLowerCase()}.svg`}\n alt={currency}\n className=\"oui-size-4 oui-rounded-full\"\n />\n <Text size=\"2xs\" intensity={isActive ? 80 : 54}>\n {currency}\n </Text>\n </Flex>\n </Flex>\n );\n })}\n </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n ) : (\n trigger\n )}\n </div>\n );\n};\n\n// ─── Token suffix (read-only, no dropdown) ───────────────────────────────────\n\ntype TokenSuffixProps = {\n symbol: string;\n};\n\nexport const TokenSuffix: FC<TokenSuffixProps> = ({ symbol }) => {\n return (\n <div className=\"oui-absolute oui-right-3 oui-flex oui-h-[20px] oui-items-center\">\n <Flex itemAlign=\"center\" gap={1}>\n <TokenIcon name={symbol} size=\"xs\" />\n <Text size=\"sm\" intensity={80} weight=\"semibold\">\n {symbol}\n </Text>\n </Flex>\n </div>\n );\n};\n","import { FC, useCallback, useRef, useSyncExternalStore } from \"react\";\n\nconst RADIUS = 6;\nconst TRACK_STROKE = 1.5;\nconst ARC_STROKE = 2;\nconst SIZE = (RADIUS + ARC_STROKE) * 2;\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS;\n\ntype QuoteCountdownProps = {\n duration?: number;\n isValidating?: boolean;\n};\n\nfunction createTickStore(duration: number) {\n let elapsed = 0;\n const listeners = new Set<() => void>();\n let timer: ReturnType<typeof setInterval> | null = null;\n\n function start() {\n stop();\n elapsed = 0;\n timer = setInterval(() => {\n elapsed += 1;\n if (elapsed >= duration) stop();\n listeners.forEach((l) => l());\n }, 1000);\n }\n\n function stop() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n\n return {\n getSnapshot: () => elapsed,\n subscribe: (cb: () => void) => {\n listeners.add(cb);\n if (listeners.size === 1) start();\n return () => {\n listeners.delete(cb);\n if (listeners.size === 0) stop();\n };\n },\n reset: () => start(),\n };\n}\n\nconst store = createTickStore(30);\n\nexport const QuoteCountdown: FC<QuoteCountdownProps> = ({\n duration = 30,\n isValidating = false,\n}) => {\n const prevValidatingRef = useRef(isValidating);\n if (prevValidatingRef.current && !isValidating) {\n store.reset();\n }\n prevValidatingRef.current = isValidating;\n\n const subscribe = useCallback((cb: () => void) => store.subscribe(cb), []);\n const getSnapshot = useCallback(() => store.getSnapshot(), []);\n\n const elapsed = useSyncExternalStore(subscribe, getSnapshot);\n\n const prevElapsedRef = useRef(elapsed);\n const isResetting = elapsed < prevElapsedRef.current;\n prevElapsedRef.current = elapsed;\n\n const finished = elapsed >= duration;\n const progress = finished ? 1 : elapsed / duration;\n const dashOffset = CIRCUMFERENCE * (1 - progress);\n const transitionDuration = isResetting ? \"0.6s\" : \"0.2s\";\n\n return (\n <svg\n width={SIZE}\n height={SIZE}\n viewBox={`0 0 ${SIZE} ${SIZE}`}\n className=\"oui-shrink-0\"\n style={{ transform: \"rotate(-90deg)\" }}\n >\n <circle\n cx={SIZE / 2}\n cy={SIZE / 2}\n r={RADIUS}\n fill=\"none\"\n stroke=\"rgba(255,255,255,0.1)\"\n strokeWidth={TRACK_STROKE}\n />\n <circle\n cx={SIZE / 2}\n cy={SIZE / 2}\n r={RADIUS}\n fill=\"none\"\n stroke=\"rgb(var(--oui-color-primary-light))\"\n strokeWidth={ARC_STROKE}\n strokeLinecap=\"round\"\n strokeDasharray={CIRCUMFERENCE}\n strokeDashoffset={dashOffset}\n style={{\n transition: `stroke-dashoffset ${transitionDuration} ease-in-out`,\n }}\n />\n </svg>\n );\n};\n","import { FC, useRef } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Flex,\n Text,\n Button,\n cn,\n textVariants,\n WalletIcon,\n Spinner,\n DialogPortal,\n} from \"@orderly.network/ui\";\nimport { formatCompact } from \"../../constants\";\nimport { ChainSelect } from \"../chainSelect\";\nimport { ExchangeDivider } from \"../exchangeDivider\";\nimport { HistoryDropdown } from \"../historyDropdown\";\nimport { PartnerSelect } from \"../partnerSelect\";\nimport { PaymentMethodSelect } from \"../paymentMethodSelect\";\nimport { QuantityInput, CurrencySuffix, TokenSuffix } from \"../quantityInput\";\nimport { QuoteCountdown } from \"../quoteCountdown\";\nimport { OnrampFormState } from \"./onrampForm.script\";\n\nexport type OnrampFormProps = OnrampFormState & {\n close?: () => void;\n};\n\nexport const OnrampFormUI: FC<OnrampFormProps> = (props) => {\n const { t } = useTranslation();\n const {\n paymentMethods,\n selectedPaymentMethod,\n onPaymentMethodChange,\n fiatCurrencies,\n selectedCurrency,\n onCurrencyChange,\n spendAmount,\n onSpendAmountChange,\n presetAmounts,\n chains,\n selectedChain,\n onChainChange,\n wallet,\n address,\n receiveQuantity,\n receiveQuantityPlaceholder,\n partners,\n selectedPartner,\n onPartnerChange,\n exchangeRateText,\n isQuoteLoading,\n onContinue,\n isContinueDisabled,\n iframeDialogOpen,\n onramperIframeUrl,\n quoteIsValidating,\n spendAmountError,\n transactions,\n pendingTransactions,\n } = props;\n const formRef = useRef<HTMLDivElement>(null);\n\n return (\n <Box id=\"oui-onramp-form\" className={textVariants({ weight: \"semibold\" })}>\n <Flex\n ref={formRef}\n direction=\"column\"\n className=\"oui-w-full oui-tracking-[0.03em]\"\n >\n {/* ════════════════ YOU SPEND ════════════════ */}\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-full\"\n gap={3}\n >\n <HistoryDropdown\n transactions={transactions}\n pendingTransactions={pendingTransactions}\n containerRef={formRef}\n />\n\n <Flex direction=\"column\" className=\"oui-w-full\" gap={2}>\n {/* Stacked: PaymentMethodSelect (top) + QuantityInput (bottom) */}\n <Box className=\"oui-w-full\">\n <PaymentMethodSelect\n methods={selectedPaymentMethod ? paymentMethods : []}\n value={\n selectedPaymentMethod ?? {\n id: \"_\",\n name: t(\"onramp.noPaymentMethod\"),\n }\n }\n onValueChange={onPaymentMethodChange}\n disabled={!selectedPaymentMethod}\n loading={isQuoteLoading && !selectedPaymentMethod}\n />\n <QuantityInput\n value={spendAmount}\n onValueChange={onSpendAmountChange}\n placeholder={presetAmounts[0].toString()}\n error={spendAmountError}\n suffix={\n <CurrencySuffix\n currencies={fiatCurrencies}\n selected={selectedCurrency}\n onSelect={(c) => onCurrencyChange(c as any)}\n />\n }\n classNames={{\n root: \"oui-mt-1 oui-rounded-t-[4px] oui-rounded-b-xl\",\n }}\n />\n </Box>\n\n {/* Preset amount buttons */}\n <Flex gap={3} className=\"oui-w-full\">\n {presetAmounts.map((amount) => (\n <Flex\n key={amount}\n justify=\"center\"\n itemAlign=\"center\"\n className={cn(\n \"oui-h-6 oui-flex-1 oui-cursor-pointer oui-rounded\",\n \"oui-bg-base-6 oui-transition-colors hover:oui-bg-base-5\",\n )}\n onClick={() => onSpendAmountChange(amount.toString())}\n >\n <Text size=\"2xs\" intensity={36} weight=\"semibold\">\n {formatCompact(amount)}\n </Text>\n </Flex>\n ))}\n </Flex>\n </Flex>\n </Flex>\n\n <ExchangeDivider />\n\n {/* ════════════════ YOU RECEIVE ════════════════ */}\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n className=\"oui-w-full\"\n gap={3}\n >\n <Flex justify=\"between\" className=\"oui-w-full\">\n <Text size=\"sm\" intensity={98} weight=\"semibold\">\n {t(\"onramp.youReceive\")}\n </Text>\n\n <Flex gapX={1}>\n <WalletIcon size={\"2xs\"} name={wallet?.label ?? \"\"} />\n <Text.formatted size=\"sm\" intensity={54} rule=\"address\">\n {address}\n </Text.formatted>\n </Flex>\n </Flex>\n\n <Flex direction=\"column\" className=\"oui-w-full\" gap={1}>\n {/* Row 1: ChainSelect (left) + Read-only Quantity (right) */}\n <Flex className=\"oui-w-full\" gap={1}>\n <Box className=\"oui-min-w-0 oui-flex-1\">\n <ChainSelect\n chains={chains}\n value={selectedChain!}\n onValueChange={onChainChange}\n wrongNetwork={!selectedChain}\n className=\"oui-w-full oui-rounded-[4px] oui-rounded-tl-xl\"\n />\n </Box>\n <Box className=\"oui-min-w-0 oui-flex-1\">\n <QuantityInput\n readOnly\n loading={isQuoteLoading}\n value={isQuoteLoading ? \"\" : receiveQuantity}\n placeholder={isQuoteLoading ? \"\" : receiveQuantityPlaceholder}\n suffix={<TokenSuffix symbol=\"USDC\" />}\n classNames={{\n root: cn(\n \"oui-rounded-[4px] oui-rounded-b-sm oui-rounded-tr-xl\",\n \"oui-border-none oui-bg-base-6 focus-within:oui-outline-0\",\n ),\n }}\n />\n </Box>\n </Flex>\n\n {/* Row 2: Exchange rate + Partner dropdown */}\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n className={cn(\n \"oui-w-full oui-rounded-b-xl oui-rounded-t-[4px]\",\n \"oui-bg-base-6 oui-px-3 oui-py-2\",\n )}\n >\n <Flex itemAlign=\"center\" gap={1}>\n {exchangeRateText && (\n <QuoteCountdown\n duration={30}\n isValidating={quoteIsValidating}\n />\n )}\n <Text size=\"2xs\" intensity={54} weight=\"semibold\">\n {exchangeRateText || \"—\"}\n </Text>\n </Flex>\n {selectedPartner ? (\n <PartnerSelect\n partners={partners}\n value={selectedPartner}\n onValueChange={onPartnerChange}\n containerRef={formRef}\n />\n ) : isQuoteLoading ? (\n <Spinner size=\"sm\" />\n ) : (\n <Text size=\"2xs\" intensity={36}>\n {t(\"onramp.noPartner\")}\n </Text>\n )}\n </Flex>\n </Flex>\n </Flex>\n\n {/* ════════════════ CONTINUE BUTTONS ════════════════ */}\n <Flex justify=\"center\" className=\"oui-w-full oui-pt-7\">\n <Box className=\"oui-w-full lg:oui-w-auto lg:oui-min-w-[184px]\">\n <Button\n fullWidth\n size={{ initial: \"md\", lg: \"lg\" }}\n onClick={onContinue}\n disabled={isContinueDisabled}\n >\n {t(\"onramp.continue\")}\n </Button>\n </Box>\n </Flex>\n </Flex>\n\n {/* ════════════════ ONRAMPER IFRAME FULLSCREEN ════════════════ */}\n {iframeDialogOpen && (\n <DialogPortal>\n <div className=\"oui-fixed oui-inset-0 oui-z-50 oui-flex oui-flex-col oui-bg-black/80\">\n <iframe\n src={onramperIframeUrl}\n title={t(\"onramp.iframeTitle\")}\n allow=\"accelerometer; autoplay; camera; gyroscope; payment; microphone\"\n className=\"oui-w-full oui-flex-1 oui-border-none\"\n />\n </div>\n </DialogPortal>\n )}\n </Box>\n );\n};\n","import React, { createContext, useContext } from \"react\";\n\nexport interface OnrampConfig {\n apiKey: string;\n secretKey: string;\n workerUrl?: string;\n}\n\nconst OnrampConfigContext = createContext<OnrampConfig | null>(null);\n\nexport function OnrampConfigProvider({\n config,\n children,\n}: {\n config: OnrampConfig;\n children: React.ReactNode;\n}) {\n return (\n <OnrampConfigContext.Provider value={config}>\n {children}\n </OnrampConfigContext.Provider>\n );\n}\n\nexport function useOnrampConfig(): OnrampConfig {\n const config = useContext(OnrampConfigContext);\n if (!config) {\n throw new Error(\"useOnrampConfig must be used within OnrampConfigProvider\");\n }\n return config;\n}\n","/**\n * Onramper widget URL signing utilities.\n *\n * Per https://docs.onramper.com/docs/signing-widget-url.md the `wallets`,\n * `networkWallets` and `walletAddressTags` parameters must be HMAC-SHA256\n * signed and the resulting hex digest appended as a `signature` query param.\n *\n * Uses ethers.js `computeHmac` (already a project dependency) for synchronous\n * HMAC-SHA256 — no extra deps needed.\n */\nimport { computeHmac } from \"ethers\";\n\n/**\n * Sort the sensitive-param string alphabetically at both the top-level key\n * level and the nested `key:value` level, as required by the Onramper spec.\n *\n * Input example:\n * \"wallets=eth:0xABC,btc:0xDEF&networkWallets=ethereum:0x1,bitcoin:0x2\"\n *\n * Output:\n * \"networkWallets=bitcoin:0x2,ethereum:0x1&wallets=btc:0xDEF,eth:0xABC\"\n */\nexport function arrangeStringAlphabetically(inputString: string): string {\n const inputObject: Record<string, Record<string, string>> = {};\n\n inputString.split(\"&\").forEach((pair) => {\n const [key, value] = pair.split(\"=\");\n const nestedPairs = value.split(\",\");\n inputObject[key] = {};\n nestedPairs.forEach((nestedPair) => {\n const [nestedKey, nestedValue] = nestedPair.split(\":\");\n inputObject[key][nestedKey] = nestedValue;\n });\n });\n\n // Sort nested keys alphabetically\n for (const key in inputObject) {\n inputObject[key] = Object.fromEntries(\n Object.entries(inputObject[key]).sort(),\n );\n }\n\n // Sort top-level keys alphabetically and reconstruct\n const sortedKeys = Object.keys(inputObject).sort();\n const parts: string[] = [];\n for (const key of sortedKeys) {\n const nested = Object.entries(inputObject[key])\n .map(([k, v]) => `${k}:${v}`)\n .join(\",\");\n parts.push(`${key}=${nested}`);\n }\n return parts.join(\"&\");\n}\n\n/**\n * Generate an HMAC-SHA256 signature (hex, without 0x prefix) using ethers.js.\n */\nexport function generateOnramperSignature(\n secretKey: string,\n data: string,\n): string {\n const encoder = new TextEncoder();\n const sig = computeHmac(\n \"sha256\",\n encoder.encode(secretKey),\n encoder.encode(data),\n );\n // computeHmac returns \"0x...\" prefixed hex — strip the prefix\n return sig.startsWith(\"0x\") ? sig.slice(2) : sig;\n}\n","import type { OnrampPartner } from \"../components/partnerSelect\";\nimport type { PaymentMethod } from \"../components/paymentMethodSelect\";\nimport type { FiatCurrency } from \"../constants\";\nimport { ONRAMPER_WIDGET_BASE } from \"../constants\";\nimport {\n arrangeStringAlphabetically,\n generateOnramperSignature,\n} from \"./signOnramperUrl\";\n\nexport type BuildOnramperUrlParams = {\n spendAmount: string;\n selectedCurrency: FiatCurrency;\n onramperToken: string | undefined;\n selectedPaymentMethod: PaymentMethod | null;\n selectedPartner: OnrampPartner | null;\n address: string | undefined;\n apiKey: string;\n secretKey: string;\n};\n\n/**\n * Builds the Onramper widget iframe URL from the given form selections.\n * Signs the `wallets` parameter with HMAC-SHA256 when a secret key is configured.\n */\nexport function buildOnramperIframeUrl({\n spendAmount,\n selectedCurrency,\n onramperToken,\n selectedPaymentMethod,\n selectedPartner,\n address,\n apiKey,\n secretKey,\n}: BuildOnramperUrlParams): string {\n const params = new URLSearchParams();\n params.set(\"themeName\", \"dark\");\n params.set(\"apiKey\", apiKey);\n params.set(\"mode\", \"buy\");\n params.set(\"skipTransactionScreen\", \"true\");\n params.set(\"txnRedirect\", \"true\");\n\n if (spendAmount) params.set(\"txnAmount\", spendAmount);\n if (selectedCurrency) params.set(\"txnFiat\", selectedCurrency.toLowerCase());\n if (onramperToken) params.set(\"txnCrypto\", onramperToken);\n if (selectedPaymentMethod)\n params.set(\"txnPaymentMethod\", selectedPaymentMethod.id);\n if (selectedPartner) params.set(\"txnOnramp\", selectedPartner.id);\n\n // Wallets param: lowercased per Onramper spec, then HMAC-SHA256 signed\n if (address && onramperToken) {\n const walletsValue = `${onramperToken}:${address}`.toLowerCase();\n params.set(\"wallets\", walletsValue);\n\n if (secretKey) {\n const signContent = arrangeStringAlphabetically(\n `wallets=${walletsValue}`,\n );\n const signature = generateOnramperSignature(secretKey, signContent);\n params.set(\"signature\", signature);\n }\n }\n\n return `${ONRAMPER_WIDGET_BASE}?${params.toString()}`;\n}\n","import { useState, useMemo, useCallback } from \"react\";\nimport { toast } from \"@orderly.network/ui\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { OnrampPartner } from \"../components/partnerSelect\";\nimport type { PaymentMethod } from \"../components/paymentMethodSelect\";\nimport type { FiatCurrency } from \"../constants\";\nimport { useOnrampConfig } from \"../context/OnrampConfigContext\";\nimport { buildOnramperIframeUrl } from \"../utils/buildOnramperUrl\";\n\n/**\n * Manages the onramper checkout flow:\n * iframe URL construction, dialog open state, continue button state, and submit handler.\n */\nexport function useOnrampCheckout({\n spendAmount,\n selectedCurrency,\n spendAmountError,\n onramperToken,\n selectedPartner,\n selectedPaymentMethod,\n address,\n isLoading,\n}: {\n spendAmount: string;\n selectedCurrency: FiatCurrency;\n spendAmountError: string;\n onramperToken: string | undefined;\n selectedPartner: OnrampPartner | null;\n selectedPaymentMethod: PaymentMethod | null;\n address: string | undefined;\n isLoading: boolean;\n}) {\n const { t } = useTranslation();\n const { apiKey, secretKey } = useOnrampConfig();\n const [iframeDialogOpen, setIframeDialogOpen] = useState(false);\n\n const onramperIframeUrl = useMemo(\n () =>\n buildOnramperIframeUrl({\n spendAmount,\n selectedCurrency,\n onramperToken,\n selectedPaymentMethod,\n selectedPartner,\n address,\n apiKey,\n secretKey,\n }),\n [\n spendAmount,\n selectedCurrency,\n onramperToken,\n selectedPaymentMethod,\n selectedPartner,\n address,\n apiKey,\n secretKey,\n ],\n );\n\n const isContinueDisabled = useMemo(\n () =>\n !spendAmount ||\n isNaN(parseFloat(spendAmount)) ||\n parseFloat(spendAmount) <= 0 ||\n !selectedCurrency ||\n !onramperToken ||\n !selectedPartner ||\n !selectedPaymentMethod ||\n !address ||\n isLoading ||\n !!spendAmountError,\n [\n spendAmount,\n selectedCurrency,\n spendAmountError,\n onramperToken,\n selectedPartner,\n selectedPaymentMethod,\n address,\n isLoading,\n ],\n );\n\n const onContinue = useCallback(() => {\n const missing: string[] = [];\n const num = parseFloat(spendAmount);\n if (!spendAmount || isNaN(num) || num <= 0)\n missing.push(t(\"onramp.missing.spendAmount\"));\n if (!selectedCurrency)\n missing.push(t(\"onramp.missing.currency\"));\n if (!onramperToken)\n missing.push(t(\"onramp.missing.network\"));\n if (!selectedPartner)\n missing.push(t(\"onramp.missing.partner\"));\n if (!selectedPaymentMethod)\n missing.push(t(\"onramp.missing.paymentMethod\"));\n if (!address)\n missing.push(t(\"onramp.missing.address\"));\n\n if (missing.length > 0) {\n const msg = t(\"onramp.missingRequiredInfo\", {\n list: missing.join(\", \"),\n });\n toast.error(msg);\n console.error(\"[Onramp] Cannot continue –\", msg);\n return;\n }\n setIframeDialogOpen(true);\n }, [\n spendAmount,\n selectedCurrency,\n onramperToken,\n selectedPartner,\n selectedPaymentMethod,\n address,\n t,\n ]);\n\n return {\n onramperIframeUrl,\n iframeDialogOpen,\n setIframeDialogOpen,\n isContinueDisabled,\n onContinue,\n };\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSWR } from \"@orderly.network/hooks\";\nimport type { OnrampPartner } from \"../components/partnerSelect\";\nimport type { PaymentMethod } from \"../components/paymentMethodSelect\";\nimport { useOnrampConfig } from \"../context/OnrampConfigContext\";\n\nconst ONRAMPER_BASE = \"https://api.onramper.com/quotes\";\n\n/** Maps chain IDs to Onramper USDC token identifiers. */\nconst CHAIN_TO_ONRAMPER_TOKEN: Record<number, string> = {\n 1: \"usdc_ethereum\", // Ethereum\n 10: \"usdc_optimism\", // Optimism\n 56: \"usdc_bsc\", // BNB Smart Chain\n 100: \"usdc_gnosis\", // Gnosis\n 137: \"usdc_polygon\", // Polygon\n 143: \"usdc_monad\", // Monad Mainnet\n 324: \"usdc_zksync\", // zkSync Era\n 2020: \"usdc_ronin\", // Ronin\n 8453: \"usdc_base\", // Base\n 42161: \"usdc_arbitrum\", // Arbitrum One\n 42220: \"usdc_celo\", // Celo\n 43114: \"usdc_avaxc\", // Avalanche C-Chain\n 57073: \"usdc_ink\", // Ink\n 59144: \"usdc_linea\", // Linea\n 900900900: \"usdc_solana\", // Solana Mainnet\n};\n\nexport const ONRAMP_SUPPORTED_CHAIN_IDS = new Set(\n Object.keys(CHAIN_TO_ONRAMPER_TOKEN).map(Number),\n);\n\nexport function getOnramperToken(chainId: number): string | undefined {\n return CHAIN_TO_ONRAMPER_TOKEN[chainId];\n}\n\nexport type OnrampQuotePaymentMethod = {\n paymentTypeId: string;\n name: string;\n icon: string;\n details: {\n currencyStatus: string;\n limits: Record<string, { min: number; max: number }>;\n };\n};\n\nexport type OnrampQuoteError = {\n type: string;\n errorId: number;\n message: string;\n onramp?: string;\n parameter?: string;\n value?: string;\n name: string;\n};\n\nexport type OnrampQuoteItem = {\n rate?: number;\n networkFee?: number;\n transactionFee?: number;\n payout?: number;\n availablePaymentMethods?: OnrampQuotePaymentMethod[];\n ramp: string;\n paymentMethod?: string;\n quoteId: string;\n errors?: OnrampQuoteError[];\n recommendations?: string[];\n};\n\nconst onrampFetcher = async (\n url: string,\n apiKey: string,\n): Promise<OnrampQuoteItem[]> => {\n const res = await fetch(url, {\n headers: {\n accept: \"application/json\",\n Authorization: apiKey,\n },\n });\n if (!res.ok) {\n throw new Error(`Onramper API error: ${res.status}`);\n }\n return res.json();\n};\n\nconst buildQuoteUrl = (\n currency: string,\n amount: number | string,\n onramperToken: string,\n): string =>\n `${ONRAMPER_BASE}/${currency.toLowerCase()}/${onramperToken}?amount=${amount}`;\n\nfunction filterValidRamps(items: OnrampQuoteItem[]): OnrampQuoteItem[] {\n return items.filter((item) => !item.errors);\n}\n\nfunction toPartners(items: OnrampQuoteItem[]): OnrampPartner[] {\n return items.map((item) => ({\n id: item.ramp,\n name: item.ramp.charAt(0).toUpperCase() + item.ramp.slice(1),\n rate: item.rate ?? 0,\n payout: item.payout ?? 0,\n recommendations: item.recommendations ?? [],\n }));\n}\n\nfunction toPaymentMethods(items: OnrampQuoteItem[]): PaymentMethod[] {\n const seen = new Set<string>();\n const methods: PaymentMethod[] = [];\n for (const item of items) {\n if (!item.availablePaymentMethods) continue;\n for (const pm of item.availablePaymentMethods) {\n if (!seen.has(pm.paymentTypeId)) {\n seen.add(pm.paymentTypeId);\n methods.push({\n id: pm.paymentTypeId,\n name: pm.name,\n icon: pm.icon,\n });\n }\n }\n }\n return methods;\n}\n\nfunction getPaymentMethodsForPartner(\n items: OnrampQuoteItem[],\n partnerId: string,\n): PaymentMethod[] {\n const item = items.find((i) => i.ramp === partnerId);\n if (!item?.availablePaymentMethods) return [];\n return item.availablePaymentMethods.map((pm) => ({\n id: pm.paymentTypeId,\n name: pm.name,\n icon: pm.icon,\n }));\n}\n\n/** paymentMethodId → { min, max } (from aggregatedLimit) */\nexport type PaymentMethodLimitsMap = Record<\n string,\n { min: number; max: number }\n>;\n\nfunction extractAllLimits(items: OnrampQuoteItem[]): PaymentMethodLimitsMap {\n const result: PaymentMethodLimitsMap = {};\n for (const item of items) {\n if (!item.availablePaymentMethods) continue;\n for (const pm of item.availablePaymentMethods) {\n const agg = pm.details?.limits?.aggregatedLimit;\n if (agg && !result[pm.paymentTypeId]) {\n result[pm.paymentTypeId] = agg;\n }\n }\n }\n return result;\n}\n\nconst DEFAULT_AMOUNT = 100;\nexport function useOnrampQuotes(\n currency: string,\n amount?: string,\n onramperToken?: string,\n) {\n const { apiKey } = useOnrampConfig();\n const token = onramperToken || \"\";\n const num = amount ? parseFloat(amount) : NaN;\n const effectiveAmount = !isNaN(num) && num > 0 ? num : DEFAULT_AMOUNT;\n const url = buildQuoteUrl(currency, effectiveAmount, token);\n\n const { data, error, isLoading, isValidating } = useSWR<OnrampQuoteItem[]>(\n `onramp-quote-${currency.toLowerCase()}-${effectiveAmount}-${token}`,\n () => onrampFetcher(url, apiKey),\n {\n refreshInterval: 30_000,\n revalidateOnFocus: false,\n dedupingInterval: 1_000,\n keepPreviousData: true,\n },\n );\n\n const validRamps = useMemo(\n () => (data ? filterValidRamps(data) : []),\n [data],\n );\n\n const isAvailable = validRamps.length > 0 && !error;\n\n const partners = useMemo(() => toPartners(validRamps), [validRamps]);\n const paymentMethods = useMemo(\n () => toPaymentMethods(validRamps),\n [validRamps],\n );\n const latestLimits = useMemo(\n () => extractAllLimits(validRamps),\n [validRamps],\n );\n\n // Accumulate limits across fetches so they persist even when we stop querying\n const [accumulatedLimits, setAccumulatedLimits] =\n useState<PaymentMethodLimitsMap>({});\n\n useEffect(() => {\n if (Object.keys(latestLimits).length > 0) {\n setAccumulatedLimits((prev) => ({ ...prev, ...latestLimits }));\n }\n }, [latestLimits]);\n\n return {\n isAvailable,\n partners,\n paymentMethods,\n paymentMethodLimits: accumulatedLimits,\n isLoading,\n error,\n validRamps,\n isValidating,\n getPaymentMethodsForPartner: (partnerId: string) =>\n getPaymentMethodsForPartner(validRamps, partnerId),\n };\n}\n\nexport function useOnrampAvailability(currency: string) {\n return useOnrampQuotes(currency);\n}\n","import { useMemo } from \"react\";\nimport { useSWR } from \"@orderly.network/hooks\";\nimport { useOnrampConfig } from \"../context/OnrampConfigContext\";\n\nexport type OnrampTransactionStatus =\n | \"new\"\n | \"pending\"\n | \"completed\"\n | \"failed\"\n | \"paid\"\n | \"canceled\";\n\nexport type WebhookEvent = {\n transactionId: string;\n status: OnrampTransactionStatus;\n outAmount?: number;\n inAmount?: number;\n statusReason?: string;\n targetCurrency: string;\n sourceCurrency: string;\n onramp: string;\n statusDate: string;\n};\n\nconst PENDING_STATUSES = new Set<OnrampTransactionStatus>([\"pending\", \"new\"]);\n\nexport function useOnrampTransactionStatus(walletAddress: string | null) {\n const { workerUrl } = useOnrampConfig();\n const { data, error } = useSWR<WebhookEvent[] | null>(\n walletAddress && workerUrl\n ? `${workerUrl}?walletAddress=${walletAddress}`\n : null,\n async (url) => {\n const res = await fetch(url);\n if (!res.ok) {\n if (res.status === 404) return []; // Transaction not found yet\n throw new Error(\"Failed to fetch transaction status\");\n }\n return res.json();\n },\n {\n refreshInterval: (latestData: WebhookEvent[] | null | undefined) => {\n if (!walletAddress) return 0;\n if (\n latestData &&\n latestData.some((tx) => PENDING_STATUSES.has(tx.status))\n ) {\n return 10000;\n }\n return 30000;\n },\n revalidateOnFocus: true,\n },\n );\n\n const transactions = useMemo(() => data || [], [data]);\n\n const pendingTransactions = useMemo(\n () => transactions.filter((tx) => PENDING_STATUSES.has(tx.status)),\n [transactions],\n );\n\n const historyTransactions = useMemo(\n () => transactions.filter((tx) => !PENDING_STATUSES.has(tx.status)),\n [transactions],\n );\n\n return {\n transactions,\n pendingTransactions,\n historyTransactions,\n error,\n isLoading: !data && !error && !!walletAddress,\n };\n}\n","import { useState, useMemo, useCallback } from \"react\";\nimport type { OnrampPartner } from \"../components/partnerSelect\";\nimport type { PaymentMethod } from \"../components/paymentMethodSelect\";\n\n/**\n * Manages partner and payment method selection state.\n * Auto-falls back to the first available option when the stored ID is no longer\n * present in the current list (e.g. after a quote refresh).\n */\nexport function usePartnerPaymentSelection(\n partners: OnrampPartner[],\n getPaymentMethodsForPartner: (partnerId: string) => PaymentMethod[],\n) {\n const [selectedPartnerId, setSelectedPartnerId] = useState<string | null>(\n null,\n );\n const [selectedPaymentMethodId, setSelectedPaymentMethodId] = useState<\n string | null\n >(null);\n\n const selectedPartner = useMemo<OnrampPartner | null>(() => {\n if (partners.length === 0) return null;\n if (selectedPartnerId) {\n const found = partners.find((p) => p.id === selectedPartnerId);\n if (found) return found;\n }\n return partners[0];\n }, [partners, selectedPartnerId]);\n\n const onPartnerChange = useCallback((partner: OnrampPartner) => {\n setSelectedPartnerId(partner.id);\n // Reset payment method selection when switching partner\n setSelectedPaymentMethodId(null);\n }, []);\n\n const paymentMethods = useMemo<PaymentMethod[]>(() => {\n if (!selectedPartner) return [];\n return getPaymentMethodsForPartner(selectedPartner.id);\n }, [selectedPartner, getPaymentMethodsForPartner]);\n\n const selectedPaymentMethod = useMemo<PaymentMethod | null>(() => {\n if (paymentMethods.length === 0) return null;\n if (selectedPaymentMethodId) {\n const found = paymentMethods.find(\n (m) => m.id === selectedPaymentMethodId,\n );\n if (found) return found;\n }\n return paymentMethods[0];\n }, [paymentMethods, selectedPaymentMethodId]);\n\n const onPaymentMethodChange = useCallback((method: PaymentMethod) => {\n setSelectedPaymentMethodId(method.id);\n }, []);\n\n return {\n selectedPartner,\n onPartnerChange,\n paymentMethods,\n selectedPaymentMethod,\n onPaymentMethodChange,\n };\n}\n","import { useMemo } from \"react\";\nimport type { OnrampPartner } from \"../components/partnerSelect\";\nimport type { FiatCurrency } from \"../constants\";\n\n/**\n * Derives the \"You Receive\" section display values from spend + selection state.\n * Encapsulates receiveQuantity, receiveQuantityPlaceholder, and exchangeRateText.\n */\nexport function useReceiveDisplay({\n spendAmount,\n spendAmountError,\n selectedPartner,\n selectedCurrency,\n effectiveSpendAmountForQuote,\n}: {\n spendAmount: string;\n spendAmountError: string;\n selectedPartner: OnrampPartner | null;\n selectedCurrency: FiatCurrency;\n effectiveSpendAmountForQuote: string;\n}) {\n const receiveQuantity = useMemo(() => {\n if (spendAmountError) return \"\";\n const num = parseFloat(spendAmount);\n if (isNaN(num) || num <= 0 || !selectedPartner) return \"\";\n if (selectedPartner.payout > 0) return selectedPartner.payout.toFixed(2);\n return \"0\";\n }, [spendAmount, spendAmountError, selectedPartner]);\n\n const receiveQuantityPlaceholder = useMemo(() => {\n if (!selectedPartner) return \"\";\n if (selectedPartner.payout > 0) return selectedPartner.payout.toFixed(2);\n if (!selectedPartner.rate) return \"\";\n const num = parseFloat(effectiveSpendAmountForQuote);\n if (!isNaN(num) && num > 0) return (num / selectedPartner.rate).toFixed(2);\n return \"\";\n }, [selectedPartner, effectiveSpendAmountForQuote]);\n\n const exchangeRateText = useMemo(() => {\n if (!selectedPartner?.rate) return \"\";\n return `1 USDC ≈ ${selectedPartner.rate.toFixed(4)} ${selectedCurrency}`;\n }, [selectedPartner, selectedCurrency]);\n\n return { receiveQuantity, receiveQuantityPlaceholder, exchangeRateText };\n}\n","import { useState, useMemo, useEffect } from \"react\";\nimport { FIAT_CURRENCIES, PRESET_AMOUNTS } from \"../constants\";\nimport type { FiatCurrency } from \"../constants\";\n\n/**\n * Manages the \"You Spend\" section state:\n * - Selected fiat currency and raw amount input\n * - 500ms debounce before propagating the amount to quote fetching\n * - `effectiveSpendAmountForQuote`: the debounced amount passed to the quotes\n * hook, falling back to the first preset when the input is empty/invalid\n *\n * Spend amount validation (min/max limits) is computed in the orchestrator\n * because the limits come from the same quotes hook that needs this amount.\n */\nexport function useSpendAmount() {\n const [selectedCurrency, setSelectedCurrency] = useState<FiatCurrency>(\"USD\");\n const [spendAmount, setSpendAmount] = useState<string>(\"\");\n const [debouncedSpendAmount, setDebouncedSpendAmount] = useState<string>(\n PRESET_AMOUNTS[\"USD\"][0].toString(),\n );\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedSpendAmount(spendAmount);\n }, 500);\n return () => clearTimeout(handler);\n }, [spendAmount]);\n\n // When the input is empty or invalid, fall back to the first preset so the\n // quotes hook always has a meaningful amount to fetch with\n const effectiveSpendAmountForQuote = useMemo(() => {\n const num = parseFloat(debouncedSpendAmount);\n if (!isNaN(num) && num > 0) return debouncedSpendAmount;\n return PRESET_AMOUNTS[selectedCurrency][0].toString();\n }, [debouncedSpendAmount, selectedCurrency]);\n\n const onCurrencyChange = (currency: FiatCurrency) => {\n setSelectedCurrency(currency);\n setSpendAmount(\"\");\n setDebouncedSpendAmount(PRESET_AMOUNTS[currency][0].toString());\n };\n\n return {\n fiatCurrencies: FIAT_CURRENCIES,\n selectedCurrency,\n onCurrencyChange,\n spendAmount,\n onSpendAmountChange: setSpendAmount,\n presetAmounts: PRESET_AMOUNTS[selectedCurrency],\n effectiveSpendAmountForQuote,\n };\n}\n","import { useMemo } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\nimport { ABSTRACT_CHAIN_ID_MAP } from \"@orderly.network/types\";\n\n/**\n * Resolves the user's wallet address, handling Abstract Global Wallet (AGW)\n * chains which use a separate AGWAddress rather than the connected EOA address.\n */\nexport function useWalletAddress(): {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wallet: any;\n address: string | undefined;\n} {\n const { wallet, connectedChain } = useWalletConnector();\n const { state: accountState, account } = useAccount();\n\n const address = useMemo(() => {\n let addr = accountState.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain.id as string))\n ) {\n addr = account.getAdditionalInfo()?.AGWAddress;\n }\n return addr;\n }, [accountState, account, connectedChain]);\n\n return { wallet, address };\n}\n","import { useCallback, useMemo } from \"react\";\nimport {\n Chain,\n ConnectedChain,\n useChains,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { API, NetworkId } from \"@orderly.network/types\";\nimport { toast } from \"@orderly.network/ui\";\nimport { int2hex, praseChainIdToNumber } from \"@orderly.network/utils\";\nimport { ONRAMP_SUPPORTED_CHAIN_IDS } from \"../../hooks/useOnrampQuote\";\n\nexport type CurrentChain = Pick<ConnectedChain, \"namespace\"> & {\n id: number;\n info?: Chain;\n};\n\nexport function useChainSelect() {\n const { t } = useTranslation();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [linkDeviceStorage] = useLocalStorage(\"orderly_link_device\", {});\n\n const { connectedChain, settingChain, setChain } = useWalletConnector();\n\n const [allChains, { findByChainId }] = useChains(networkId, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n // Only keep chains that have USDC on Onramper\n const chains = useMemo(\n () => allChains.filter((c) => ONRAMP_SUPPORTED_CHAIN_IDS.has(c.chain_id)),\n [allChains],\n );\n\n const currentChain = useMemo(() => {\n const chainId = connectedChain\n ? praseChainIdToNumber(connectedChain.id)\n : parseInt(linkDeviceStorage?.chainId);\n\n if (!chainId) return null;\n\n const chain = findByChainId(chainId);\n\n return {\n ...connectedChain,\n id: chainId,\n info: chain!,\n } as CurrentChain;\n }, [findByChainId, connectedChain, linkDeviceStorage]);\n\n const onChainChange = useCallback(\n async (chain: API.NetworkInfos) => {\n const chainInfo = findByChainId(chain.chain_id);\n\n if (!connectedChain) {\n return;\n }\n\n const currentChainId = praseChainIdToNumber(connectedChain.id);\n\n if (!chainInfo || chainInfo.network_infos?.chain_id === currentChainId) {\n return Promise.resolve();\n }\n\n return setChain({\n chainId: int2hex(Number(chainInfo.network_infos?.chain_id)),\n })\n .then((switched) => {\n if (switched) {\n toast.success(t(\"connector.networkSwitched\"));\n } else {\n toast.error(t(\"connector.switchChain.failed\"));\n }\n })\n .catch((error) => {\n if (error && error.message) {\n toast.error(\n `${t(\"connector.switchChain.failed\")}: ${error.message}`,\n );\n }\n });\n },\n [connectedChain, setChain, findByChainId, t],\n );\n\n return {\n chains,\n currentChain,\n settingChain,\n onChainChange,\n };\n}\n","import { useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport type { API } from \"@orderly.network/types\";\nimport type { FiatCurrency } from \"../../constants\";\nimport { useOnrampCheckout } from \"../../hooks/useOnrampCheckout\";\nimport { useOnrampQuotes, getOnramperToken } from \"../../hooks/useOnrampQuote\";\nimport { useOnrampTransactionStatus } from \"../../hooks/useOnrampTransactionStatus\";\nimport type { WebhookEvent } from \"../../hooks/useOnrampTransactionStatus\";\nimport { usePartnerPaymentSelection } from \"../../hooks/usePartnerPaymentSelection\";\nimport { useReceiveDisplay } from \"../../hooks/useReceiveDisplay\";\nimport { useSpendAmount } from \"../../hooks/useSpendAmount\";\nimport { useWalletAddress } from \"../../hooks/useWalletAddress\";\nimport { useChainSelect } from \"../chainSelect/useChainSelect\";\nimport type { CurrentChain } from \"../chainSelect/useChainSelect\";\nimport type { OnrampPartner } from \"../partnerSelect\";\nimport type { PaymentMethod } from \"../paymentMethodSelect\";\n\n// --- State Return Type ---\n\nexport type OnrampFormState = {\n // \"You Spend\" section\n paymentMethods: PaymentMethod[];\n selectedPaymentMethod: PaymentMethod | null;\n onPaymentMethodChange: (method: PaymentMethod) => void;\n\n fiatCurrencies: readonly string[];\n selectedCurrency: FiatCurrency;\n onCurrencyChange: (currency: FiatCurrency) => void;\n\n spendAmount: string;\n onSpendAmountChange: (value: string) => void;\n presetAmounts: readonly number[];\n\n // \"You Receive\" section\n chains: API.NetworkInfos[];\n selectedChain: CurrentChain | null;\n onChainChange: (chain: API.NetworkInfos) => Promise<void>;\n\n wallet: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n address?: string;\n\n receiveQuantity: string;\n receiveQuantityPlaceholder: string;\n\n partners: OnrampPartner[];\n selectedPartner: OnrampPartner | null;\n onPartnerChange: (partner: OnrampPartner) => void;\n\n exchangeRateText: string;\n\n /** True while SWR is fetching/revalidating (for countdown reset). */\n quoteIsValidating: boolean;\n\n // Availability\n isAvailable: boolean;\n isQuoteLoading: boolean;\n\n /** Error message when spend amount is outside min/max limits. */\n spendAmountError: string;\n\n // Onramper checkout (iframe)\n onContinue: () => void;\n isContinueDisabled: boolean;\n // Iframe dialog checkout\n iframeDialogOpen: boolean;\n setIframeDialogOpen: (open: boolean) => void;\n onramperIframeUrl: string;\n\n // Transaction Status\n statusData: WebhookEvent | null | undefined;\n transactions: WebhookEvent[];\n pendingTransactions: WebhookEvent[];\n historyTransactions: WebhookEvent[];\n isStatusLoading: boolean;\n};\n\n// --- Hook ---\n\nexport const useOnrampFormScript = (): OnrampFormState => {\n const { t } = useTranslation();\n // \"You Spend\" section\n const spend = useSpendAmount();\n\n // \"You Receive\" — chain + network token\n const { chains, currentChain, onChainChange } = useChainSelect();\n const onramperToken = useMemo(\n () => (currentChain ? getOnramperToken(currentChain.id) : undefined),\n [currentChain],\n );\n\n // Quote fetching (paymentMethodLimits accumulated across fetches)\n const {\n isAvailable,\n partners,\n isLoading,\n getPaymentMethodsForPartner,\n paymentMethodLimits,\n isValidating,\n } = useOnrampQuotes(\n spend.selectedCurrency,\n spend.effectiveSpendAmountForQuote,\n onramperToken,\n );\n\n // Partner + payment method selection (auto-fallback to first available)\n const selection = usePartnerPaymentSelection(\n partners,\n getPaymentMethodsForPartner,\n );\n\n // Spend amount validation against accumulated payment method limits\n const spendAmountError = useMemo(() => {\n if (!spend.spendAmount || !selection.selectedPaymentMethod) return \"\";\n const num = parseFloat(spend.spendAmount);\n if (isNaN(num) || num <= 0) return \"\";\n const limits = paymentMethodLimits[selection.selectedPaymentMethod.id];\n if (!limits) return \"\";\n if (num < limits.min || num > limits.max) {\n return t(\"onramp.amountBetween\", {\n currency: spend.selectedCurrency,\n min: limits.min,\n max: limits.max,\n });\n }\n return \"\";\n }, [\n spend.spendAmount,\n spend.selectedCurrency,\n selection.selectedPaymentMethod,\n paymentMethodLimits,\n t,\n ]);\n\n // Wallet address (handles AGW chain special case)\n const { wallet, address } = useWalletAddress();\n\n // Transaction history + polling\n const {\n transactions,\n pendingTransactions,\n historyTransactions,\n isLoading: isStatusLoading,\n } = useOnrampTransactionStatus(address ?? null);\n\n // Display values for \"You Receive\" section\n const { receiveQuantity, receiveQuantityPlaceholder, exchangeRateText } =\n useReceiveDisplay({\n spendAmount: spend.spendAmount,\n spendAmountError,\n selectedPartner: selection.selectedPartner,\n selectedCurrency: spend.selectedCurrency,\n effectiveSpendAmountForQuote: spend.effectiveSpendAmountForQuote,\n });\n\n // Checkout flow (iframe URL, dialog, continue button)\n const checkout = useOnrampCheckout({\n spendAmount: spend.spendAmount,\n selectedCurrency: spend.selectedCurrency,\n spendAmountError,\n onramperToken,\n selectedPartner: selection.selectedPartner,\n selectedPaymentMethod: selection.selectedPaymentMethod,\n address,\n isLoading,\n });\n\n return {\n paymentMethods: selection.paymentMethods,\n selectedPaymentMethod: selection.selectedPaymentMethod,\n onPaymentMethodChange: selection.onPaymentMethodChange,\n\n fiatCurrencies: spend.fiatCurrencies,\n selectedCurrency: spend.selectedCurrency,\n onCurrencyChange: spend.onCurrencyChange,\n\n spendAmount: spend.spendAmount,\n onSpendAmountChange: spend.onSpendAmountChange,\n presetAmounts: spend.presetAmounts,\n\n chains,\n selectedChain: currentChain,\n onChainChange,\n\n wallet,\n address,\n\n receiveQuantity,\n receiveQuantityPlaceholder,\n\n partners,\n selectedPartner: selection.selectedPartner,\n onPartnerChange: selection.onPartnerChange,\n\n exchangeRateText,\n quoteIsValidating: isValidating,\n\n isAvailable,\n isQuoteLoading: isLoading,\n spendAmountError,\n\n ...checkout,\n\n statusData:\n pendingTransactions.length > 0\n ? pendingTransactions[0]\n : historyTransactions.length > 0\n ? historyTransactions[0]\n : null,\n transactions,\n pendingTransactions,\n historyTransactions,\n isStatusLoading,\n };\n};\n","import { FC } from \"react\";\nimport { useOnrampFormScript } from \"./onrampForm.script\";\nimport { OnrampFormUI } from \"./onrampForm.ui\";\n\nexport type OnrampFormWidgetProps = {\n close?: () => void;\n};\n\nexport const OnrampForm: FC<OnrampFormWidgetProps> = (props) => {\n const state = useOnrampFormScript();\n return <OnrampFormUI {...state} {...props} />;\n};\n","export const OnrampLocales = {\n \"onramp.pluginName\": \"Buy Crypto (Onramper)\",\n \"onramp.tabTitle\": \"Buy Crypto\",\n\n \"onramp.noPaymentMethod\": \"No available payment method\",\n \"onramp.youReceive\": \"You receive\",\n \"onramp.youSpend\": \"You spend\",\n \"onramp.noPartner\": \"No available partner\",\n \"onramp.continue\": \"Continue\",\n \"onramp.iframeTitle\": \"Onramper Widget\",\n\n \"onramp.amountBetween\":\n \"Amount should be in between {{currency}} {{min}} and {{currency}} {{max}}\",\n\n \"onramp.by\": \"by\",\n \"onramp.payWith\": \"Pay with\",\n \"onramp.history\": \"History\",\n \"onramp.pendingPurchase\": \"{{count}} pending purchase\",\n \"onramp.pendingPurchases\": \"{{count}} pending purchases\",\n \"onramp.statusCompleted\": \"completed\",\n \"onramp.quantity\": \"Quantity\",\n \"onramp.unknownNetwork\": \"Unknown\",\n\n \"onramp.missingRequiredInfo\": \"Missing required info: {{list}}\",\n \"onramp.missing.spendAmount\": \"spend amount\",\n \"onramp.missing.currency\": \"fiat currency\",\n \"onramp.missing.network\": \"network (chain)\",\n \"onramp.missing.partner\": \"partner\",\n \"onramp.missing.paymentMethod\": \"payment method\",\n \"onramp.missing.address\": \"wallet address\",\n};\n\nexport type TOnrampLocales = typeof OnrampLocales;\n","import { FC, PropsWithChildren } from \"react\";\nimport {\n preloadDefaultResource,\n ExternalLocaleProvider,\n LocaleCode,\n} from \"@orderly.network/i18n\";\nimport { OnrampLocales, TOnrampLocales } from \"./module\";\n\npreloadDefaultResource(OnrampLocales);\n\nconst resources = (lang: LocaleCode) => {\n return import(`./locales/${lang}.json`).then(\n (res) => res.default as TOnrampLocales\n );\n};\n\nexport const OnrampLocaleProvider: FC<PropsWithChildren> = (props) => {\n return (\n <ExternalLocaleProvider resources={resources}>\n {props.children}\n </ExternalLocaleProvider>\n );\n};\n","import React from \"react\";\nimport { createInterceptor } from \"@orderly.network/plugin-core\";\nimport type { OrderlySDK } from \"@orderly.network/plugin-core\";\nimport { BuyCryptoIcon } from \"./components/icons\";\nimport { OnrampForm } from \"./components/onrampForm\";\nimport { OnrampConfigProvider } from \"./context/OnrampConfigContext\";\nimport { OnrampLocaleProvider } from \"./i18n\";\nimport { i18n } from \"@orderly.network/i18n\";\n\nexport interface OnrampPluginOptions {\n title?: string;\n icon?: React.ReactNode;\n apiKey: string;\n secretKey: string;\n workerUrl?: string;\n}\n\nconst defaultIcon = (\n <div className=\"oui-flex oui-items-center oui-justify-center\">\n <BuyCryptoIcon width={11} height={11} className=\"oui-mt-0.5 oui-ml-0.5\" />\n </div>\n);\n\nexport function registerOnrampPlugin(options: OnrampPluginOptions) {\n return (SDK: OrderlySDK) => {\n SDK.registerPlugin({\n id: \"orderly-onramp\",\n name: i18n.t(\"onramp.pluginName\"),\n version: \"1.0.0\",\n interceptors: [\n createInterceptor(\"Transfer.DepositAndWithdraw\", (Original, props) => {\n if (!options.apiKey || !options.secretKey) {\n return <Original {...props} />;\n }\n\n const onrampTab = {\n id: \"onramp\",\n title: options.title ?? i18n.t(\"onramp.tabTitle\"),\n icon: options.icon ?? defaultIcon,\n component: (props: any) => (\n <OnrampConfigProvider\n config={{\n apiKey: options.apiKey,\n secretKey: options.secretKey,\n workerUrl: options.workerUrl,\n }}\n >\n <OnrampForm {...props} />\n </OnrampConfigProvider>\n ),\n order: 30,\n };\n const extraTabs = [\n ...(Array.isArray(props.extraTabs) ? props.extraTabs : []),\n onrampTab,\n ];\n return (\n <OnrampLocaleProvider>\n <Original {...props} extraTabs={extraTabs} />\n </OnrampLocaleProvider>\n );\n }),\n ],\n });\n };\n}\n"]}