@miden-npm/react 0.0.1 → 0.0.2

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/index.cjs CHANGED
@@ -1834,10 +1834,10 @@ function BzpCheckoutCard({
1834
1834
  /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("p", { className: "text-body-2xs font-regular text-sub-copy text-right", children: [
1835
1835
  "Pay:",
1836
1836
  " ",
1837
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "text-orange-500 font-extrabold", children: [
1838
- currencySign(paymentObject.currency),
1839
- " 100,051.00"
1840
- ] })
1837
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "text-orange-500 font-extrabold", children: formatAmount(
1838
+ paymentObject.amount,
1839
+ paymentObject.currency
1840
+ ) })
1841
1841
  ] })
1842
1842
  ] })
1843
1843
  ] }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/provider.tsx","../src/hooks.ts","../src/buzapay-checkout/checkout-button.tsx","../src/utils/object.util.ts","../src/utils/api.util.ts","../src/utils/string.util.ts","../src/utils/input.util.ts","../src/apis/checkout.api.ts","../src/components/base/input-error.tsx","../src/components/icons/icon-loader.tsx","../src/components/icons/icon-chevron-left.tsx","../src/components/icons/icon-buzapay-icon.tsx","../src/components/icons/icon-check-circle.tsx","../src/components/icons/icon-copy-success.tsx","../src/components/icons/icon-chevron-up.tsx","../src/components/icons/icon-chevron-down.tsx","../src/components/icons/icon-usdt.tsx","../src/components/icons/icon-usdc.tsx","../src/components/icons/icon-arrow-swap.tsx","../src/components/base/button.tsx","../src/components/base/back.tsx","../src/components/base/card.tsx","../src/components/base/radio-group.tsx","../src/components/base/image.tsx","../src/components/base/copy.tsx","../src/components/base/label-info.tsx","../src/components/base/success.tsx","../src/components/base/hint.tsx","../src/components/base/select.tsx","../src/components/base/currency-amount.tsx","../src/buzapay-checkout/checkout-iframe.tsx","../src/buzapay-checkout/checkout-card.tsx","../src/components/pay-by-card.tsx","../src/components/base/input.tsx","../src/components/pay-by-transfer.tsx","../src/components/pay-by-stable-coin.tsx"],"sourcesContent":["export * from \"./types/types\";\nexport * from \"./client\";\nexport * from \"./provider\";\nexport * from \"./hooks\";\nexport * from \"./buzapay-checkout/checkout-button\";\nexport * from \"./buzapay-checkout/checkout-iframe\";\nexport * from \"./buzapay-checkout/checkout-card\";\n","import type {\n MidenPGConfig,\n CreatePaymentIntentParams,\n PaymentIntent,\n ConfirmCardPaymentParams,\n} from \"./types/types\";\n\nexport class MidenPGClient {\n private readonly base: string;\n constructor(private readonly cfg: MidenPGConfig) {\n this.base = cfg.apiBaseUrl ?? \"https://api.buzapay.com\"; // change to real base\n }\n\n async createPaymentIntent(\n params: CreatePaymentIntentParams\n ): Promise<PaymentIntent> {\n const res = await fetch(`${this.base}/v1/payment_intents`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to create PI: ${res.status}`);\n return res.json();\n }\n\n async confirmCardPayment(\n params: ConfirmCardPaymentParams\n ): Promise<{ status: PaymentIntent[\"status\"]; id: string }> {\n const res = await fetch(`${this.base}/v1/payment_intents/confirm`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to confirm: ${res.status}`);\n return res.json();\n }\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { MidenPGConfig } from \"./types/types\";\nimport { MidenPGClient } from \"./client\";\n\nconst Ctx = createContext<MidenPGClient | null>(null);\n\nexport const MidenPGProvider: React.FC<\n React.PropsWithChildren<{ config: MidenPGConfig }>\n> = ({ config, children }) => {\n const client = useMemo(\n () => new MidenPGClient(config),\n [config.publishableKey, config.apiBaseUrl]\n );\n return <Ctx.Provider value={client}>{children}</Ctx.Provider>;\n};\n\nexport const useMidenPGClient = () => {\n const ctx = useContext(Ctx);\n if (!ctx)\n throw new Error(\"useMidenPGClient must be used within MidenPGProvider\");\n return ctx;\n};\n","import { useCallback } from \"react\";\nimport { useMidenPGClient } from \"./provider\";\nimport type {\n ConfirmCardPaymentParams,\n CreatePaymentIntentParams,\n} from \"./types/types\";\n\nexport function usePaymentIntents() {\n const client = useMidenPGClient();\n\n const create = useCallback(\n (p: CreatePaymentIntentParams) => client.createPaymentIntent(p),\n [client]\n );\n const confirm = useCallback(\n (p: ConfirmCardPaymentParams) => client.confirmCardPayment(p),\n [client]\n );\n\n return { create, confirm };\n}\n","import { useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { BaseButton, BaseInputError } from \"../components/base\";\nimport { BzpCheckoutIframe } from \"./checkout-iframe\";\n\ninterface IBzpCheckoutButtonProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n mode?: \"redirect\" | \"iframe\";\n}\n\nexport function BzpCheckoutButton({\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n mode = \"redirect\",\n}: IBzpCheckoutButtonProps) {\n const [message, setMessage] = useState(\"\");\n const [launchUrl, setLaunchUrl] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const generatePaymentLinkHandler = async () => {\n if (!secretKey) {\n setMessage(\"Secret key is required.\");\n return;\n }\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n setMessage(\"Kindly ensure you are passing all the required data.\");\n return;\n }\n\n setLoading(true);\n setMessage(\"\");\n try {\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n\n if (response?.isSuccessful && response.launchUrl) {\n setLaunchUrl(response.launchUrl);\n setMessage(\"Payment link created successfully\");\n\n if (mode === \"redirect\") {\n // Use the URL from the response, not the (stale) state.\n window.open(response.launchUrl, \"_blank\", \"noopener,noreferrer\");\n }\n } else {\n setMessage(\"Failed to create payment link\");\n }\n } catch (e: any) {\n setMessage(e?.message || \"Failed to create payment link\");\n } finally {\n setLoading(false);\n }\n };\n\n return launchUrl && mode === \"iframe\" ? (\n <BzpCheckoutIframe\n url={launchUrl}\n secretKey={secretKey}\n environment={environment}\n />\n ) : (\n <div>\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n loading={loading}\n onClick={generatePaymentLinkHandler}\n />\n <BaseInputError errorMessage={message} />\n </div>\n );\n}\n","export const checkObjectTruthy = <T extends object>(obj: T): boolean => {\n if (obj == null || typeof obj !== \"object\") return false;\n return Object.values(obj as Record<string, unknown>).every(Boolean);\n};\n","export const getBaseUrl = (mode: string): string => {\n return mode === \"sandbox\"\n ? \"https://sandbox-api.midencards.io/payment-gateway-api\"\n : \"\";\n};\n","export const currencySign = (currency: string): string => {\n if (currency === \"USD\") return \"$\";\n if (currency === \"NGN\") return \"₦\";\n if (currency === \"EUR\") return \"€\";\n if (currency === \"GBP\") return \"£\";\n if (currency === \"JPY\") return \"¥\";\n if (currency === \"CNY\") return \"¥\";\n if (currency === \"USDC\" || currency === \"usdc\") return \"$⧫\";\n if (currency === \"USDT\" || currency === \"usdt\") return \"₮\";\n return \"$\";\n};\n\nexport const formatAmount = (\n value: number | string,\n currency?: string\n): string => {\n const num = typeof value === \"string\" ? parseFloat(value) : value;\n if (isNaN(num)) return \"0\";\n return `${currency ? currencySign(currency) : \"\"} ${num?.toLocaleString(\n \"en-US\"\n )}`;\n};\n\nexport const truncateString = (str: string, num: number): string => {\n if (str.length <= num) {\n return str;\n }\n return str.slice(0, num) + \"...\";\n};\n","export const restrictToNumericKeys = (event: KeyboardEvent): void => {\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n \"Home\",\n \"End\",\n \".\",\n ];\n\n if (\n (event.ctrlKey || event.metaKey) &&\n [\"a\", \"c\", \"v\", \"x\"].includes(event.key.toLowerCase())\n ) {\n return; // allow copy/paste/select\n }\n\n // Prevent non-numeric keys\n if (!allowedKeys.includes(event.key) && !/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n\n // Prevent multiple decimals\n if (\n event.key === \".\" &&\n (event.target as HTMLInputElement).value.includes(\".\")\n ) {\n event.preventDefault();\n }\n};\n","import { IPaymentObject } from \"../types\";\nimport { getBaseUrl } from \"../utils\";\n\nexport async function createPaymentLink(\n paymentObject: IPaymentObject,\n environment: string,\n secretKey: string\n): Promise<any> {\n try {\n const baseUrl = getBaseUrl(environment);\n const res = await fetch(\n `${baseUrl}/api/v1/checkout/generate-payment-link2`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n merchantId: secretKey,\n },\n body: JSON.stringify({\n ...paymentObject,\n LinkName: `${Date.now()}-Link`,\n }),\n }\n );\n return await res.json();\n } catch (error) {}\n}\n","interface IBaseInputErrorProps {\n errorMessage: string;\n}\n\nexport function BaseInputError({ errorMessage }: IBaseInputErrorProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-normal text-red-500\">\n {errorMessage}\n </p>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n size?: number | string;\n color?: string;\n className?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconLoader({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}: IIconProps) {\n return (\n <svg\n className={`animate-spin ${className}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role=\"img\"\n aria-label=\"loading\"\n {...props}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth={4}\n />\n <path\n className=\"opacity-75\"\n fill={color}\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronLeft({\n width = 17,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 14.28C10.3734 14.28 10.2467 14.2333 10.1467 14.1333L5.80002 9.78668C5.09335 9.08001 5.09335 7.92001 5.80002 7.21335L10.1467 2.86668C10.34 2.67335 10.66 2.67335 10.8534 2.86668C11.0467 3.06001 11.0467 3.38001 10.8534 3.57335L6.50669 7.92001C6.18669 8.24001 6.18669 8.76001 6.50669 9.08001L10.8534 13.4267C11.0467 13.62 11.0467 13.94 10.8534 14.1333C10.7534 14.2267 10.6267 14.28 10.5 14.28Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconBuzapayIcon({\n width = 15,\n height = 13,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 15 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M9.97919 0.5C10.8854 0.5 11.6276 0.585938 12.2057 0.757812C12.7891 0.924479 13.2188 1.22396 13.4948 1.65625C13.7761 2.08333 13.9167 2.6901 13.9167 3.47656C13.9167 4.1849 13.7526 4.77083 13.4245 5.23438C13.0964 5.69792 12.5938 5.95312 11.9167 6C12.8021 6.08854 13.4401 6.40625 13.8307 6.95312C14.2214 7.49479 14.4167 8.17708 14.4167 9C14.4167 9.71354 14.3334 10.2995 14.1667 10.7578C14.0052 11.2161 13.7318 11.5729 13.3464 11.8281C12.961 12.0781 12.4375 12.2526 11.7761 12.3516C11.1198 12.4505 10.2995 12.5 9.31512 12.5H0.416687V0.5H9.97919ZM2.91669 7.77344H5.97235V11.167L10.2497 5.22754H7.19501V1.83398L2.91669 7.77344ZM5.97235 6.07617H8.2702L7.19501 7.57324V6.9248H4.89716L5.97235 5.42676V6.07617Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCheckCircle({\n width = 67,\n height = 67,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M33.6705 0.0820312C15.2758 0.0820312 0.36377 14.9941 0.36377 33.3888C0.36377 51.7846 15.2758 66.6956 33.6705 66.6956C52.0663 66.6956 66.9773 51.7846 66.9773 33.3888C66.9773 14.9941 52.0663 0.0820312 33.6705 0.0820312ZM33.6705 62.5978C17.6011 62.5978 4.52712 49.4583 4.52712 33.3887C4.52712 17.3192 17.6011 4.24525 33.6705 4.24525C49.74 4.24525 62.814 17.3193 62.814 33.3887C62.814 49.4581 49.74 62.5978 33.6705 62.5978ZM46.9631 21.2016L27.4213 40.8662L18.621 32.0659C17.8081 31.253 16.4904 31.253 15.6765 32.0659C14.8636 32.8788 14.8636 34.1965 15.6765 35.0094L25.9797 45.3137C26.7926 46.1255 28.1103 46.1255 28.9243 45.3137C29.0179 45.22 29.0981 45.1179 29.171 45.0118L49.9086 24.1461C50.7205 23.3332 50.7205 22.0155 49.9086 21.2016C49.0947 20.3888 47.777 20.3888 46.9631 21.2016Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCopySuccess({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M11.4002 1.6875H8.60016C5.9935 1.6875 4.8335 2.8475 4.8335 5.45417V6.1875C4.8335 6.46083 5.06016 6.6875 5.3335 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V11.5208C10.1668 11.7942 10.3935 12.0208 10.6668 12.0208H11.4002C14.0068 12.0208 15.1668 10.8608 15.1668 8.25417V5.45417C15.1668 2.8475 14.0068 1.6875 11.4002 1.6875ZM5.8335 5.6875V5.45417C5.8335 3.3875 6.5335 2.6875 8.60016 2.6875H11.4002C13.4668 2.6875 14.1668 3.3875 14.1668 5.45417V8.25417C14.1668 10.3208 13.4668 11.0208 11.4002 11.0208H11.1668V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875H5.8335Z\"\n fill={color}\n />\n <path\n d=\"M7.40016 5.6875H4.60016C1.9935 5.6875 0.833496 6.8475 0.833496 9.45417V12.2542C0.833496 14.8608 1.9935 16.0208 4.60016 16.0208H7.40016C10.0068 16.0208 11.1668 14.8608 11.1668 12.2542V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875ZM4.60016 15.0208C2.5335 15.0208 1.8335 14.3208 1.8335 12.2542V9.45417C1.8335 7.3875 2.5335 6.6875 4.60016 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V12.2542C10.1668 14.3208 9.46683 15.0208 7.40016 15.0208H4.60016Z\"\n fill={color}\n />\n <path\n d=\"M5.35302 12.6542C5.22635 12.6542 5.09969 12.6075 4.99969 12.5075L3.69969 11.2075C3.50635 11.0142 3.50635 10.6942 3.69969 10.5008C3.89302 10.3075 4.21302 10.3075 4.40635 10.5008L5.35302 11.4475L7.59302 9.2075C7.78635 9.01417 8.10635 9.01417 8.29969 9.2075C8.49302 9.40083 8.49302 9.72083 8.29969 9.91417L5.69969 12.5075C5.60635 12.6008 5.47969 12.6542 5.35302 12.6542Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronUp({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.7\">\n <path\n d=\"M2.73508 9.73495L7.73508 4.73495C7.80539 4.66473 7.9007 4.62528 8.00008 4.62528C8.09945 4.62528 8.19476 4.66473 8.26508 4.73495L13.2651 9.73495C13.3313 9.80604 13.3674 9.90006 13.3657 9.99722C13.364 10.0944 13.3246 10.1871 13.2559 10.2558C13.1872 10.3245 13.0945 10.3638 12.9973 10.3655C12.9002 10.3673 12.8062 10.3312 12.7351 10.265L8.00008 5.53058L3.26508 10.265C3.19399 10.3312 3.09997 10.3673 3.00282 10.3655C2.90566 10.3638 2.81297 10.3245 2.74427 10.2558C2.67556 10.1871 2.6362 10.0944 2.63449 9.99722C2.63277 9.90006 2.66884 9.80604 2.73508 9.73495Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronDown({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.6\">\n <path\n d=\"M16.5813 7.83128L10.3313 14.0813C10.2434 14.1691 10.1242 14.2184 10 14.2184C9.87581 14.2184 9.75667 14.1691 9.66878 14.0813L3.41878 7.83128C3.33598 7.74242 3.2909 7.62489 3.29304 7.50345C3.29518 7.38201 3.34438 7.26615 3.43026 7.18026C3.51615 7.09438 3.63201 7.04518 3.75345 7.04304C3.87489 7.0409 3.99242 7.08598 4.08128 7.16878L10 13.0867L15.9188 7.16878C16.0076 7.08598 16.1252 7.0409 16.2466 7.04304C16.368 7.04518 16.4839 7.09438 16.5698 7.18026C16.6557 7.26615 16.7049 7.38201 16.707 7.50345C16.7092 7.62489 16.6641 7.74242 16.5813 7.83128Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdt({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387045)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28ZM15.6818 12.0689V9.99863H20.419V6.84162H7.52063V9.99863H12.2579V12.068C8.40787 12.2447 5.5125 13.0077 5.5125 13.9212C5.5125 14.8347 8.40787 15.5969 12.2579 15.7745V22.4088H15.6818V15.7727C19.5256 15.596 22.414 14.8339 22.414 13.9212C22.414 13.0086 19.5256 12.2465 15.6818 12.0689ZM15.6818 15.2101V15.2084C15.5855 15.2154 15.0894 15.2451 13.9825 15.2451C13.0987 15.2451 12.4766 15.2189 12.2579 15.2084V15.211C8.85587 15.0614 6.31662 14.469 6.31662 13.7602C6.31662 13.0524 8.85587 12.46 12.2579 12.3077V14.6212C12.4801 14.637 13.1171 14.6746 13.9974 14.6746C15.0535 14.6746 15.5829 14.6309 15.6818 14.6221V12.3095C19.0768 12.4609 21.6099 13.0532 21.6099 13.7602C21.6099 14.469 19.0768 15.0596 15.6818 15.2101Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387045\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdc({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387048)\">\n <path\n d=\"M14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0ZM16.933 4.865C16.7195 4.76 16.506 4.865 16.4535 5.07762C16.4001 5.131 16.4001 5.18438 16.4001 5.29025V6.034L16.4089 6.125C16.4546 6.30501 16.5652 6.46177 16.7195 6.56512C20.8792 8.05262 23.0125 12.6726 21.4655 16.7615C20.6657 18.9928 18.9061 20.6911 16.7195 21.4883C16.506 21.5941 16.4001 21.7534 16.4001 22.0194V22.7631L16.4045 22.8401C16.4128 22.9241 16.4479 23.0033 16.5047 23.0658C16.5614 23.1284 16.6367 23.171 16.7195 23.1875C16.7729 23.1875 16.8796 23.1875 16.933 23.135C18.1331 22.7602 19.2473 22.1517 20.2113 21.3446C21.1753 20.5375 21.9701 19.5476 22.5499 18.432C23.1298 17.3164 23.4833 16.0972 23.59 14.8444C23.6967 13.5917 23.5546 12.3302 23.1718 11.1326C22.2128 8.10512 19.866 5.8205 16.933 4.865ZM11.2805 4.8125C11.2271 4.8125 11.1204 4.8125 11.067 4.865C9.86688 5.23978 8.75274 5.84826 7.78874 6.6554C6.82475 7.46254 6.02993 8.4524 5.45006 9.56797C4.87019 10.6836 4.51673 11.9028 4.41001 13.1556C4.30329 14.4083 4.44543 15.6698 4.82825 16.8674C5.78725 19.8424 8.08062 22.1261 11.067 23.0816C11.2805 23.1875 11.494 23.0816 11.5465 22.869C11.5999 22.8165 11.5999 22.7622 11.5999 22.6564V21.9126L11.5911 21.8426C11.5544 21.6947 11.417 21.5259 11.2805 21.4349C7.12075 19.9474 4.9875 15.3274 6.5345 11.2385C7.33425 9.00725 9.09388 7.30887 11.2805 6.51175C11.494 6.40587 11.5999 6.24663 11.5999 5.98063V5.23688L11.5955 5.15987C11.5872 5.07585 11.5521 4.99673 11.4954 4.93418C11.4386 4.87163 11.3633 4.82898 11.2805 4.8125ZM14.3736 7.574H13.573L13.496 7.581C13.321 7.616 13.1933 7.7665 13.146 7.99925V9.22075L12.9649 9.24875C11.4704 9.51475 10.5341 10.5464 10.5341 11.823C10.5341 13.5748 11.5999 14.2651 13.8399 14.5311C15.3335 14.7963 15.813 15.1156 15.813 15.9653C15.813 16.814 15.0666 17.3985 14.0534 17.3985C12.6665 17.3985 12.187 16.8149 12.0269 16.0177C11.9744 15.806 11.8134 15.6992 11.6532 15.6992H10.7467L10.6776 15.7054C10.5913 15.7193 10.513 15.7641 10.4572 15.8313C10.4014 15.8985 10.3718 15.9838 10.374 16.0711V16.1236L10.4029 16.2811C10.6566 17.5271 11.5106 18.4187 13.2003 18.6734V19.9483L13.2072 20.0252C13.2422 20.1985 13.3936 20.3263 13.6273 20.3726H14.427L14.504 20.3656C14.679 20.3306 14.8067 20.1801 14.854 19.9483V18.6725L15.0351 18.6375C16.534 18.3207 17.5201 17.2366 17.5201 15.8576C17.5201 13.9991 16.4001 13.3621 14.1601 13.0961C12.5598 12.8835 12.2404 12.4591 12.2404 11.7154C12.2404 10.9716 12.7741 10.4939 13.8399 10.4939C14.7998 10.4939 15.3335 10.8124 15.5995 11.6095C15.6272 11.6866 15.6779 11.7533 15.7447 11.8007C15.8115 11.8481 15.8912 11.8739 15.9731 11.8746H16.8262L16.8954 11.8694C16.982 11.8556 17.0606 11.8108 17.1166 11.7434C17.1726 11.6759 17.2022 11.5904 17.1999 11.5027V11.4503L17.1675 11.2989C17.0361 10.755 16.7366 10.2664 16.3115 9.90255C15.8864 9.53872 15.3574 9.31821 14.7997 9.27238V7.99925L14.7928 7.92225C14.7578 7.74812 14.6073 7.62038 14.3736 7.574Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387048\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconArrowSwap({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.3265 14.1948C10.1998 14.1948 10.0731 14.1481 9.97313 14.0481C9.77979 13.8548 9.77979 13.5348 9.97313 13.3414L13.3131 10.0014C13.5065 9.80811 13.8265 9.80811 14.0198 10.0014C14.2131 10.1948 14.2131 10.5148 14.0198 10.7081L10.6798 14.0481C10.5798 14.1414 10.4531 14.1948 10.3265 14.1948Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 10.8477H2.3335C2.06016 10.8477 1.8335 10.621 1.8335 10.3477C1.8335 10.0743 2.06016 9.84766 2.3335 9.84766H13.6668C13.9402 9.84766 14.1668 10.0743 14.1668 10.3477C14.1668 10.621 13.9402 10.8477 13.6668 10.8477Z\"\n fill={color}\n />\n <path\n d=\"M2.33329 6.86079C2.20663 6.86079 2.07996 6.81413 1.97996 6.71413C1.78663 6.52079 1.78663 6.20079 1.97996 6.00746L5.31996 2.66746C5.51329 2.47413 5.83329 2.47413 6.02663 2.66746C6.21996 2.86079 6.21996 3.18079 6.02663 3.37413L2.68663 6.71413C2.59329 6.80746 2.45996 6.86079 2.33329 6.86079Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 6.86133H2.3335C2.06016 6.86133 1.8335 6.63466 1.8335 6.36133C1.8335 6.08799 2.06016 5.86133 2.3335 5.86133H13.6668C13.9402 5.86133 14.1668 6.08799 14.1668 6.36133C14.1668 6.63466 13.9402 6.86133 13.6668 6.86133Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import { IconLoader } from \"../icons\";\n\ninterface IBaseButtonProps {\n label: string;\n type?: string;\n size?: string;\n paddingClassX?: string;\n disabled?: boolean;\n loading?: boolean;\n customClass?: string;\n onClick?: () => void;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\n/** === Angular getters ported to React === */\nfunction getButtonBgClass(type: string, disabled?: boolean) {\n if (disabled)\n return \"bg-gray-200 text-gray-400 cursor-not-allowed border-gray-200\";\n switch (type) {\n case \"primary\":\n return \"bg-primary text-white hover:bg-primary-black hover:border-primary-black border-primary\";\n case \"secondary\":\n return \"bg-gray-200 border-gray-200 hover:bg-gray-300 text-heading-text\";\n case \"danger\":\n return \"bg-red-500 border-red-500 text-white hover:bg-red-600\";\n case \"neutral\":\n default:\n return \"bg-off-white border-grey-border hover:bg-gray-100\";\n }\n}\n\nfunction getButtonSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n return \"h-68px rounded-xl\";\n case \"md\":\n return \"h-42px rounded-lg\";\n case \"sm\":\n return \"h-32px rounded-md\";\n default:\n return \"h-68px rounded-xl\";\n }\n}\n\nfunction getLabelSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n case \"md\":\n case \"sm\":\n return \"text-body-2xs font-normal\";\n default:\n return \"text-body-xs font-normal\";\n }\n}\n\nexport function BaseButton({\n label,\n type = \"neutral\",\n size = \"de\",\n paddingClassX = \"px-8\",\n disabled = false,\n loading = false,\n customClass,\n onClick,\n prefix,\n suffix,\n children,\n}: React.PropsWithChildren<IBaseButtonProps>) {\n const isDisabled = disabled || loading;\n\n // Angular’s clickHandler -> emit only when not disabled\n const handleClick = () => {\n if (!isDisabled) onClick?.();\n };\n\n return (\n <button\n className={`flex items-center justify-center gap-2 py-3 border font-normal text-input-grey transition-colors duration-300 ease-in-out ${getButtonBgClass(\n type,\n isDisabled\n )} ${getButtonSizeClass(size)} ${paddingClassX} ${customClass}`}\n type=\"button\"\n disabled={isDisabled}\n onClick={handleClick}\n >\n {prefix}\n\n {loading ? (\n <IconLoader></IconLoader>\n ) : (\n <div>\n {label ? (\n <p className={`mb-0 ${getLabelSizeClass(size)}`}>{label}</p>\n ) : (\n <>{children}</>\n )}\n </div>\n )}\n\n {suffix}\n </button>\n );\n}\n","import { IconChevronLeft } from \"../icons\";\n\ninterface IBaseBackProps {\n back: () => void;\n}\n\nexport function BaseBack({ back }: IBaseBackProps) {\n return (\n <div className=\"flex items-center gap-2 cursor-pointer\" onClick={back}>\n <IconChevronLeft></IconChevronLeft>\n <p className=\"mb-0 text-body-xs font-normal\">Back</p>\n </div>\n );\n}\n","import { IconBuzapayIcon } from \"../icons\";\nimport { BaseBack } from \"./back\";\n\ninterface IBaseCardProps {\n showBackButton?: boolean;\n onBack?: () => void;\n children?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function BaseCard({\n showBackButton = false,\n onBack,\n children,\n onClose,\n}: IBaseCardProps) {\n return (\n <div className=\"checkout-card w-full h-screen flex flex-col items-center justify-center text-white\">\n <div className=\"flex w-1/2\">\n {showBackButton && <BaseBack back={() => onBack?.()} />}\n\n <div className=\"flex gap-2 w-full\">\n <div className=\"flex flex-col gap-8 w-full\">\n <div className=\"bg-off-white rounded-xl\">{children}</div>\n\n <div className=\"flex items-center gap-2 justify-center\">\n <p className=\"text-light-white-100 text-body-2xs font-regular\">\n Powered by Buzapay\n </p>\n <IconBuzapayIcon color=\"#E8F4FF\" />\n </div>\n </div>\n\n {/* Close Icon */}\n <div\n onClick={onClose}\n className=\"close-icon flex flex-col items-center justify-center self-start cursor-pointer hover:bg-gray-500\"\n >\n <p className=\"text-white\">x</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\n\ninterface IBaseRadioGroupProps {\n options: { label: string; value: string }[];\n type?: \"vertical\" | \"horizontal\";\n value?: string;\n defaultValue?: string;\n selectedChange?: (value: string) => void;\n className?: string;\n}\n\nexport const BaseRadioGroup = ({\n options,\n type = \"vertical\",\n value,\n defaultValue,\n selectedChange,\n className = \"\",\n}: IBaseRadioGroupProps) => {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<string>(\"\");\n\n useEffect(() => {\n if (isControlled) return;\n const initial =\n defaultValue ?? (options.length > 0 ? options[0].value : \"\");\n setInternal(initial);\n selectedChange?.(initial);\n }, [isControlled, defaultValue, options]);\n\n const selected = isControlled ? value! : internal;\n\n const setSelected = (v: string) => {\n if (!isControlled) setInternal(v);\n selectedChange?.(v);\n };\n\n const containerLayout =\n type === \"horizontal\" ? \"flex-row gap-5\" : \"flex-col gap-6\";\n\n return (\n <div\n className={`flex ${containerLayout} ${className}`}\n role=\"radiogroup\"\n aria-orientation={type === \"horizontal\" ? \"horizontal\" : \"vertical\"}\n tabIndex={0}\n >\n {options.map((option) => {\n const isActive = selected === option.value;\n return (\n <div\n key={option.value}\n role=\"radio\"\n aria-checked={isActive}\n tabIndex={-1}\n onClick={() => setSelected(option.value)}\n className=\"flex items-center gap-2 cursor-pointer transition-colors duration-200\"\n >\n <div\n className={[\n \"w-4 h-4 rounded-full border flex items-center justify-center\",\n isActive\n ? \"bg-orange-500 border-orange-500\"\n : \"bg-white border-grey-200\",\n ].join(\" \")}\n >\n {isActive && <div className=\"bg-white w-2 h-2 rounded-full\" />}\n </div>\n <p className=\"mb-0 text-body-2xs font-medium text-heading-text\">\n {option.label}\n </p>\n </div>\n );\n })}\n </div>\n );\n};\n","interface IBaseImageProps {\n src: string;\n height?: number | string;\n width?: number | string;\n alt?: string;\n customClass?: string;\n isFullWidth?: boolean;\n onClick?: () => void;\n}\n\nexport function BaseImage({\n src,\n height = 50,\n width = 50,\n alt = \"Image\",\n customClass,\n isFullWidth,\n onClick,\n}: IBaseImageProps) {\n return (\n <img\n src={src}\n height={height}\n alt={alt}\n className={`${customClass} ${isFullWidth ? \"w-full\" : \"\"}`}\n style={{ width: isFullWidth ? \"100%\" : `${width}px` }}\n onClick={onClick}\n />\n );\n}\n","import { IconCopySuccess } from \"../icons\";\n\ninterface IBaseCopyProps {\n copyText: string;\n color?: string;\n}\n\nexport function BaseCopy({ copyText, color }: IBaseCopyProps) {\n const copyToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = () => {\n copyToClipboard(copyText)\n .then(() => {})\n .catch((err: any) => {});\n };\n\n return (\n <IconCopySuccess\n className=\"cursor-pointer\"\n color={color}\n onClick={() => copyHandler()}\n />\n );\n}\n","import { BaseImage } from \".\";\nimport { truncateString } from \"../../utils\";\nimport { BaseCopy } from \"./copy\";\n\ninterface IBaseLabelInfoProps {\n type?: \"vertical\" | \"horizontal\";\n label?: string;\n labelCustomClass?: string;\n valueImageSrc?: string;\n valueImageCustomClass?: string;\n valueImagePosition?: \"prefix\" | \"suffix\";\n hasValueCopy?: boolean;\n value?: string;\n valueCustomClass?: string;\n alignRight?: boolean;\n}\n\nexport const BaseLabelInfo = ({\n type = \"vertical\",\n label = \"\",\n labelCustomClass = \"text-body-4xs font-medium text-light-copy\",\n valueImageSrc = \"\",\n valueImageCustomClass = \"\",\n valueImagePosition = \"prefix\",\n hasValueCopy = false,\n value = \"\",\n valueCustomClass = \"text-body-2xs font-medium text-sub-copy\",\n alignRight = false,\n}: IBaseLabelInfoProps) => {\n const showPrefixImg = valueImageSrc && valueImagePosition === \"prefix\";\n const showSuffixImg = valueImageSrc && valueImagePosition === \"suffix\";\n\n if (type === \"vertical\") {\n return (\n <div\n className={`flex flex-col gap-1 ${\n alignRight ? \"text-right items-end\" : \"\"\n }`}\n >\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n {!hasValueCopy ? (\n <p className={valueCustomClass}>{value}</p>\n ) : (\n <p className={`${valueCustomClass} truncate`}>\n {truncateString(value, 40)}\n </p>\n )}\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n }\n\n // horizontal\n return (\n <div className=\"flex items-center justify-between\">\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n <p className={valueCustomClass}>{value}</p>\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n};\n","import { BaseButton, BaseLabelInfo } from \".\";\nimport { IconCheckCircle } from \"../icons\";\n\ninterface IBaseSuccessProps {}\n\nexport const BaseSuccess = ({}: IBaseSuccessProps) => {\n return (\n <div className=\"flex flex-col gap-8 p-16\">\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex flex-col gap-8\">\n <IconCheckCircle color=\"#F47A1F\" className=\"mx-auto\" />\n\n <div className=\"flex flex-col text-center\" style={{ gap: \"2px\" }}>\n <p className=\"text-heading-text font-medium text-header-2xl\">\n ₦2,500.00\n </p>\n <p className=\"text-sub-copy font-regular text-body-3xs\">\n Has been paid successfully\n </p>\n </div>\n </div>\n\n <div className=\"flex flex-col\">\n <div className=\"py-4 border-b border-grey-100\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Order ID\"\n value=\"9900009000-8890-8829hd7\"\n />\n </div>\n\n <div className=\"py-4\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Payment date\"\n value=\"July 24, 2025\"\n />\n </div>\n </div>\n </div>\n\n <div className=\"mx-auto\" style={{ width: \"80%\" }}>\n <BaseButton\n label=\"Return to Merchant Website\"\n type=\"secondary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n );\n};\n","interface IBaseHintProps {\n hint: string;\n}\n\nexport function BaseHint({ hint }: IBaseHintProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-medium text-orange-500\">{hint}</p>\n );\n}\n","import React from \"react\";\nimport { IconChevronDown, IconChevronUp } from \"../icons\";\nimport { BaseHint } from \"./hint\";\nimport { BaseInputError } from \"./input-error\";\nimport { BaseImage } from \"./image\";\n\ntype ImageType = \"country\" | \"bank\" | null;\n\nexport interface SelectOption {\n label: string;\n value: string;\n countryCode?: string; // e.g. \"NG\"\n bankCode?: string;\n}\n\ninterface IBaseSelectProps {\n options: SelectOption[];\n value?: string; // controlled value\n defaultValue?: string; // uncontrolled initial value\n onChange?: (value: string) => void;\n\n placeholder?: string; // \"Select an option\" by default\n hasSearch?: boolean;\n disabled?: boolean;\n loading?: boolean;\n validationError?: string;\n label?: string;\n hint?: string;\n required?: boolean;\n itemImageType?: ImageType;\n\n prefix?: React.ReactNode; // slot before text in trigger\n\n className?: string;\n}\n\nexport const BaseSelect = ({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = \"Select an option\",\n hasSearch = true,\n disabled = false,\n loading = false,\n validationError = \"\",\n label = \"\",\n hint = \"\",\n required = false,\n itemImageType = null,\n prefix,\n className = \"\",\n}: IBaseSelectProps) => {\n const isControlled = value !== undefined;\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [filtered, setFiltered] = React.useState<SelectOption[]>(options);\n const [activeIndex, setActiveIndex] = React.useState<number>(-1);\n\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n // Keep internal state in sync for controlled usage\n React.useEffect(() => {\n if (isControlled) setInternalValue(value ?? \"\");\n }, [isControlled, value]);\n\n // Reset filtered list whenever options change\n React.useEffect(() => {\n setFiltered(options);\n }, [options]);\n\n const selected = React.useMemo(\n () =>\n options.find((o) => o.value === (isControlled ? value : internalValue)) ||\n null,\n [options, value, internalValue, isControlled]\n );\n\n const displayText =\n selected?.label ||\n placeholder ||\n (label ? `Select ${label}` : \"Select an option\");\n\n // Open/close helpers\n const openMenu = React.useCallback(() => {\n if (disabled || open) return;\n setFiltered(options);\n // set active index to current selection or first\n const idx = selected\n ? Math.max(\n 0,\n options.findIndex((o) => o.value === selected.value)\n )\n : 0;\n setActiveIndex(idx);\n setOpen(true);\n // focus search if enabled\n setTimeout(() => {\n if (hasSearch && searchRef.current) {\n searchRef.current.focus();\n searchRef.current.select();\n }\n });\n }, [disabled, open, options, selected, hasSearch]);\n\n const closeMenu = React.useCallback(() => {\n if (!open) return;\n setOpen(false);\n setActiveIndex(-1);\n }, [open]);\n\n const toggleMenu = React.useCallback(() => {\n if (disabled) return;\n open ? closeMenu() : openMenu();\n }, [open, disabled, openMenu, closeMenu]);\n\n // Outside click\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as Node;\n const tri = triggerRef.current;\n const menu = menuRef.current;\n if (tri && !tri.contains(t) && menu && !menu.contains(t)) closeMenu();\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, closeMenu]);\n\n // Selection\n const commit = (val: string) => {\n if (!isControlled) setInternalValue(val);\n onChange?.(val);\n closeMenu();\n };\n\n // Search\n const onSearchInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const q = e.target.value.toLowerCase();\n const list = options.filter((o) => o.label.toLowerCase().includes(q));\n setFiltered(list);\n setActiveIndex(list.length ? 0 : -1);\n };\n\n // Keyboard on trigger\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case \"Enter\":\n case \" \":\n case \"Spacebar\":\n case \"ArrowDown\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(-1);\n break;\n case \"Escape\":\n if (open) {\n e.preventDefault();\n closeMenu();\n }\n break;\n }\n };\n\n // Keyboard in menu\n const onMenuKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveActive(-1);\n break;\n case \"Home\":\n e.preventDefault();\n setActiveIndex(filtered.length ? 0 : -1);\n scrollActiveIntoView(0);\n break;\n case \"End\":\n e.preventDefault();\n setActiveIndex(filtered.length - 1);\n scrollActiveIntoView(filtered.length - 1);\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeIndex >= 0) {\n const opt = filtered[activeIndex];\n if (opt) commit(opt.value);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n closeMenu();\n break;\n case \"Tab\":\n closeMenu();\n break;\n }\n };\n\n const moveActive = (delta: number) => {\n if (!filtered.length) return;\n const max = filtered.length - 1;\n const next =\n activeIndex < 0 ? 0 : Math.min(max, Math.max(0, activeIndex + delta));\n setActiveIndex(next);\n scrollActiveIntoView(next);\n };\n\n const scrollActiveIntoView = (index: number) => {\n const menu = menuRef.current;\n if (!menu) return;\n const items = menu.querySelectorAll<HTMLElement>(\"[data-option]\");\n if (index >= 0 && index < items.length) {\n items[index]?.scrollIntoView({ block: \"nearest\" });\n }\n };\n\n // UI helpers\n const containerBg = disabled ? \"bg-grey-100 cursor-not-allowed\" : \"bg-white\";\n const containerBorder = validationError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100 bg-white\";\n\n return (\n <div className={`flex flex-col gap-2 relative ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n {/* Trigger */}\n <div\n ref={triggerRef}\n className={`border-c rounded-md flex items-center justify-between h-12 cursor-pointer px-3 py-2 ${containerBg} ${containerBorder}`}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? \"select-menu\" : undefined}\n aria-disabled={disabled || undefined}\n aria-activedescendant={\n open && activeIndex >= 0 ? `option-${activeIndex}` : undefined\n }\n tabIndex={0}\n onClick={toggleMenu}\n onKeyDown={onTriggerKeyDown}\n >\n <div className=\"flex items-center gap-2\">\n {prefix}\n\n <div className=\"flex items-center gap-2\">\n {selected &&\n itemImageType === \"country\" &&\n selected.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${selected.countryCode.toLowerCase()}.png`}\n alt={selected.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* Bank logos could be handled similarly here */}\n\n <p\n className={`text-body-2xs font-normal mb-0 ${\n selected?.label ? \"text-sub-copy\" : \"text-grey-500\"\n }`}\n >\n {displayText}\n </p>\n </div>\n </div>\n\n {loading ? (\n // Loader (replace with your own IconLoader if you have one)\n <span className=\"inline-block h-4 w-4 border-2 border-current border-t-transparent rounded-full animate-spin\" />\n ) : open ? (\n <IconChevronUp color=\"#8FAECA\" />\n ) : (\n <IconChevronDown color=\"#8FAECA\" />\n )}\n </div>\n\n {/* Menu */}\n {open && (\n <div\n ref={menuRef}\n id=\"select-menu\"\n className=\"border-c bg-white rounded-md border-grey-border text-body-xs font-normal text-input-grey w-full mt-2 max-h-22rem overflow-y-auto\"\n role=\"listbox\"\n aria-label={label || \"Options\"}\n style={{ position: \"absolute\", top: \"100%\", zIndex: 10 }}\n onKeyDown={onMenuKeyDown}\n >\n {hasSearch && (\n <div className=\"px-4 pt-2 pb-1\">\n <input\n ref={searchRef}\n type=\"text\"\n onChange={onSearchInput}\n placeholder={`Search ${label || \"options\"}`}\n className=\"bg-transparent outline-none border-b pb-2 w-full focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal\"\n />\n </div>\n )}\n\n {filtered.map((opt, i) => {\n const selectedOpt = selected?.value === opt.value;\n return (\n <div\n key={opt.value}\n onClick={() => commit(opt.value)}\n id={`option-${i}`}\n data-option\n role=\"option\"\n aria-selected={selectedOpt}\n className={`px-4 py-3 first:pt-0 hover:bg-gray-100 flex items-center gap-2 cursor-pointer ${\n i === activeIndex ? \"bg-gray-100\" : \"\"\n }`}\n >\n {itemImageType === \"country\" && opt.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${opt.countryCode.toLowerCase()}.png`}\n alt={opt.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* If you later add bank logos:\n {itemImageType === \"bank\" && (\n <img src={bankLogoHandler(opt.bankCode || opt.value)} alt={opt.value} width={28} className=\"rounded-lg\" />\n )} */}\n\n <p className=\"mb-0 text-body-2xs font-medium\">{opt.label}</p>\n </div>\n );\n })}\n </div>\n )}\n\n {hint && <BaseHint hint={hint} />}\n {validationError && <BaseInputError errorMessage={validationError} />}\n </div>\n );\n};\n","import { formatAmount } from \"../../utils\";\nimport { IconUsdc, IconUsdt } from \"../icons\";\n\ninterface IBaseCurrencyAmountProps {\n currency: string;\n amount: number | string;\n textClass?: string;\n iconColorClass?: string;\n iconWidth?: number | string;\n iconHeight?: number | string;\n}\n\nexport const BaseCurrencyAmount = ({\n currency,\n amount,\n textClass = \"\",\n iconColorClass = \"\",\n iconWidth = 16,\n iconHeight = 16,\n}: IBaseCurrencyAmountProps) => {\n const cur = currency?.toUpperCase();\n\n if (cur !== \"USDT\" && cur !== \"USDC\") {\n return <p className={textClass}>{formatAmount(amount, cur)}</p>;\n }\n\n return (\n <div className=\"flex items-center gap-1\">\n {cur === \"USDT\" && (\n <IconUsdt\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n {cur === \"USDC\" && (\n <IconUsdc\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n <p className={textClass}>{formatAmount(amount)}</p>\n </div>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { IconLoader } from \"../components/icons\";\n\ninterface IIframeStyle {\n width?: string;\n height?: string;\n border?: string;\n borderRadius?: string;\n overflow?: string;\n}\n\ninterface IBzpCheckoutIframeProps {\n style?: IIframeStyle;\n url?: string;\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject?: IPaymentObject;\n}\n\nexport function BzpCheckoutIframe({\n style = {\n width: \"100%\",\n height: \"100vh\",\n border: \"0\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n },\n url,\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutIframeProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n\n const [message, setMessage] = useState<string>(\"\");\n const [launchUrl, setLaunchUrl] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const launchIframe = useCallback(\n (url: string) => {\n // remove prior iframe if any\n if (iframeRef.current && iframeRef.current.parentNode) {\n iframeRef.current.parentNode.removeChild(iframeRef.current);\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n\n if (style.width) iframe.style.width = style.width;\n if (style.height) iframe.style.height = style.height;\n if (style.border) iframe.style.border = style.border;\n if (style.borderRadius) iframe.style.borderRadius = style.borderRadius;\n if (style.overflow) iframe.style.overflow = style.overflow;\n\n containerRef.current?.appendChild(iframe);\n iframeRef.current = iframe;\n },\n [style]\n );\n\n const generatePaymentLinkHandler = async () => {\n if (url) {\n launchIframe(url);\n return;\n }\n\n if (!secretKey) {\n return setMessage(\"Secret key is required.\");\n }\n\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n return setMessage(\"Secret key is required.\");\n }\n\n setLoading(true);\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n if (response?.isSuccessful) {\n setLaunchUrl(response.launchUrl ?? \"\");\n setMessage(\"Payment link created successfully\");\n if (response.launchUrl) {\n setLoading(false);\n launchIframe(response.launchUrl);\n }\n } else {\n setLoading(false);\n setMessage(\"Failed to create payment link\");\n }\n };\n\n useEffect(() => {\n if (!containerRef.current) return; // only run if div is mounted\n generatePaymentLinkHandler();\n }, []);\n\n return (\n <div className=\"relative\" style={style}>\n <div ref={containerRef} className=\"w-full h-full\"></div>\n {loading && (\n <div className=\"absolute inset-0 grid place-items-center bg-white/60\">\n <IconLoader></IconLoader>\n </div>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { BaseCard } from \"../components/base/card\";\nimport { BaseImage, BaseRadioGroup, BaseSuccess } from \"../components/base\";\nimport { PayByCard } from \"../components/pay-by-card\";\nimport { PayByTransfer } from \"../components/pay-by-transfer\";\nimport { PayByStableCoin } from \"../components/pay-by-stable-coin\";\nimport { IPaymentObject, ISelectOption } from \"../types\";\nimport { currencySign } from \"../utils\";\n\nexport interface CheckoutIframeStyle {\n [cssProp: string]: string | number;\n}\n\nexport interface CheckoutCardOptions {\n imageUrl?: string;\n numberPlaceholder?: string;\n expiryPlaceholder?: string;\n cvcPlaceholder?: string;\n styles?: {\n base?: CheckoutIframeStyle;\n invalid?: CheckoutIframeStyle;\n focus?: CheckoutIframeStyle;\n };\n}\n\ninterface IBzpCheckoutCardProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n options?: CheckoutCardOptions;\n}\n\nexport function BzpCheckoutCard({\n options,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutCardProps) {\n const [checkoutState, setCheckoutState] = useState<\n \"STABLE_COIN_PAYMENT\" | \"PAYMENT\" | \"SUCCESS\"\n >(\"PAYMENT\");\n\n const paymentTypeOptions: ISelectOption[] = [\n { label: \"Card\", value: \"CARD\" },\n { label: \"Bank Transfer\", value: \"BANK_TRANSFER\" },\n { label: \"Stable Coin\", value: \"STABLE_COIN\" },\n ];\n const [filteredPaymentTypeOptions, setFilteredPaymentTypeOptions] = useState<\n ISelectOption[]\n >([]);\n const [paymentType, setPaymentType] = useState<string>(\"\");\n\n const paymentTypeHandler = (event: string): void => {\n setPaymentType(event);\n };\n\n useEffect(() => {\n let options: ISelectOption[] = [];\n if (paymentObject.currency === \"USD\") {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"BANK_TRANSFER\"\n );\n } else {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"STABLE_COIN\"\n );\n }\n\n setFilteredPaymentTypeOptions(options);\n }, [paymentObject.currency]);\n\n useEffect(() => {\n if (filteredPaymentTypeOptions.length) {\n setPaymentType(filteredPaymentTypeOptions[0].value);\n }\n }, [filteredPaymentTypeOptions]);\n\n return (\n <BaseCard showBackButton={checkoutState === \"STABLE_COIN_PAYMENT\"}>\n <div className=\"grid grid-cols-3\">\n {checkoutState === \"PAYMENT\" && (\n <div className=\"bg-[#EFF7FF] px-6 py-8 flex flex-col gap-5 col-span-1 rounded-l-xl\">\n <p className=\"text-heading-text text-body-xs font-semibold\">\n Pay with\n </p>\n <BaseRadioGroup\n options={paymentTypeOptions}\n selectedChange={(e: string) => paymentTypeHandler(e)}\n />\n </div>\n )}\n\n <div className=\"col-span-2\">\n {(checkoutState === \"PAYMENT\" ||\n checkoutState === \"STABLE_COIN_PAYMENT\") && (\n <div>\n {checkoutState === \"PAYMENT\" && (\n <div className=\"flex items-center justify-between px-12 py-8\">\n {options?.imageUrl ? (\n <BaseImage\n src={options?.imageUrl ?? \"\"}\n alt=\"Merchant Logo\"\n width={52}\n height={52}\n customClass=\"rounded-lg\"\n />\n ) : (\n <div\n className=\"bg-heading-text rounded flex flex-col justify-center\"\n style={{ width: \"52px\", height: \"52px\" }}\n >\n <p className=\"text-white text-center text-body-2xs font-medium\">\n Logo\n </p>\n </div>\n )}\n\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Raymahni Merchant LLC\n </p>\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Pay:{\" \"}\n <span className=\"text-orange-500 font-extrabold\">\n {currencySign(paymentObject.currency)} 100,051.00\n </span>\n </p>\n </div>\n </div>\n )}\n\n <div className=\"overflow-y-scroll px-10 pb-10 pt-2\">\n {paymentType === \"CARD\" ? (\n <PayByCard />\n ) : paymentType === \"BANK_TRANSFER\" ? (\n <PayByTransfer />\n ) : (\n <PayByStableCoin\n onProceedToPay={() =>\n setCheckoutState(\"STABLE_COIN_PAYMENT\")\n }\n />\n )}\n </div>\n </div>\n )}\n\n {checkoutState === \"SUCCESS\" && <BaseSuccess />}\n </div>\n </div>\n </BaseCard>\n );\n}\n","import { useState } from \"react\";\nimport { BaseInput } from \"./base/input\";\nimport { BaseButton, BaseSelect } from \"./base\";\n\ninterface IPayByCardProps {}\n\nexport function PayByCard({}: IPayByCardProps) {\n const [formIndex, setFormIndex] = useState(0);\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <div className=\"grid grid-cols-2 gap-6 overflow-y-auto\">\n <BaseInput label=\"First Name\" required={true} />\n <BaseInput label=\"Last Name\" required={true} />\n <BaseInput label=\"Email\" required={true} />\n <BaseInput label=\"Phone Number\" required={true} />\n <BaseSelect\n label=\"Select Country\"\n required={true}\n options={[\n { label: \"United States\", value: \"US\" },\n { label: \"Canada\", value: \"CA\" },\n { label: \"United Kingdom\", value: \"UK\" },\n ]}\n />\n <BaseSelect\n label=\"Select State\"\n required={true}\n options={[\n { label: \"California\", value: \"CA\" },\n { label: \"Texas\", value: \"TX\" },\n { label: \"New York\", value: \"NY\" },\n ]}\n />\n <BaseInput label=\"City\" required={true} />\n <BaseInput label=\"Postal Code\" required={true} />\n <div className=\"col-span-2\">\n <BaseInput label=\"Street Address\" required={true} />\n </div>\n </div>\n )}\n\n {formIndex === 1 && (\n <div\n className=\"grid grid-cols-2 gap-6 overflow-y-auto\"\n style={{ maxHeight: \"320px\" }}\n >\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Name\" required={true} />\n </div>\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Number\" required={true} />\n </div>\n <BaseInput label=\"Expiry Date\" required={true} />\n <BaseInput label=\"CVV\" required={true} />\n </div>\n )}\n\n <BaseButton\n label={formIndex === 0 ? \"Proceed\" : \"Pay\"}\n type=\"primary\"\n customClass=\"w-full\"\n onClick={formIndex === 0 ? () => setFormIndex(1) : undefined}\n />\n </div>\n );\n}\n","import React from \"react\";\nimport { formatAmount, restrictToNumericKeys } from \"../../utils\";\nimport { BaseImage } from \"./image\";\n\ntype Rule = \"numeric\";\n\nexport interface IBaseInputProps {\n label?: string;\n type?: React.HTMLInputTypeAttribute; // 'text' by default\n placeholder?: string;\n validationError?: string;\n hint?: string;\n mask?: string; // (not implemented here)\n rules?: Rule[]; // e.g. ['numeric']\n isAmountInput?: boolean;\n required?: boolean;\n disabled?: boolean;\n loading?: boolean;\n showCopyIcon?: boolean;\n\n // Controlled/uncontrolled\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n\n // “Slots”\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n\n className?: string;\n}\n\nexport const BaseInput = ({\n label = \"\",\n type = \"text\",\n placeholder,\n validationError = \"\",\n hint = \"\",\n rules = [],\n isAmountInput = false,\n required = false,\n disabled = false,\n loading = false,\n showCopyIcon = false,\n\n value,\n defaultValue,\n onChange,\n onBlur,\n\n prefix,\n suffix,\n\n className = \"\",\n}: IBaseInputProps) => {\n const isControlled = value !== undefined;\n const [rawValue, setRawValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [localHint, setLocalHint] = React.useState<string>(\"\");\n const [localError, setLocalError] = React.useState<string>(\"\");\n\n // keep internal in sync with controlled value\n React.useEffect(() => {\n if (isControlled) setRawValue(value ?? \"\");\n }, [isControlled, value]);\n\n const formattedValue = isAmountInput\n ? formatAmount(rawValue.replace(/,/g, \"\"))\n : rawValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const incoming = e.target.value.replace(/,/g, \"\"); // strip commas before storing\n if (!isControlled) setRawValue(incoming);\n onChange?.(incoming);\n\n // Move caret to end after React updates (formatting can jump cursor)\n setTimeout(() => {\n const el = e.target;\n el.selectionStart = el.selectionEnd = el.value.length;\n });\n };\n\n const handleBlur = () => {\n onBlur?.(rawValue);\n };\n\n const handleKeyDown = (e: any) => {\n if (rules.includes(\"numeric\")) restrictToNumericKeys(e);\n };\n\n const containerBg = disabled ? \"bg-grey-50 cursor-not-allowed\" : \"bg-white\";\n const containerBorder =\n validationError || localError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100\";\n\n const copyToClipboard = (text: string): Promise<void> => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = (): void => {\n copyToClipboard(rawValue)\n .then(() => {\n setLocalHint(\"Text copied to clipboard\");\n })\n .catch((err) => {\n setLocalError(\"Failed to copy text to clipboard\");\n });\n };\n\n return (\n <div className={`flex flex-col gap-2 ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n <div\n className={`border-c px-3 py-2 flex items-center justify-between rounded-md h-12 ${containerBg} ${containerBorder}`}\n >\n {prefix}\n\n <input\n type={type}\n value={formattedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={\n placeholder ?? (label ? `Enter ${label.toLowerCase()}` : undefined)\n }\n inputMode={isAmountInput ? \"decimal\" : undefined}\n className=\"search-input bg-transparent outline-none border-none focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal w-full\"\n />\n\n {!loading ? (\n <>\n {suffix}\n\n {showCopyIcon && rawValue && rawValue.trim() !== \"\" && (\n <BaseImage\n src=\"assets/images/copyIcon.svg\"\n alt=\"copy\"\n width={16}\n height={16}\n customClass=\"cursor-pointer hover:opacity-70 transition-opacity\"\n onClick={copyHandler}\n />\n )}\n </>\n ) : (\n // Simple loader placeholder; swap for your icon component if desired\n <div className=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\" />\n )}\n </div>\n\n {(hint || localHint) && (\n <p className=\"text-body-3xs text-light-copy\">{localHint || hint}</p>\n )}\n\n {(validationError || localError) && (\n <p className=\"text-body-3xs text-red-500\">\n {localError || validationError}\n </p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { BaseButton, BaseCopy, BaseLabelInfo } from \"./base\";\n\ninterface IPayByTransferProps {\n amountDisplay?: string;\n bankName?: string;\n accountNumber?: string;\n initialSeconds?: number;\n onConfirmPaid?: () => void;\n onCancel?: () => void;\n}\n\nexport const PayByTransfer = ({\n amountDisplay = \"NGN 200,500.00\",\n bankName = \"Teerus MFB\",\n accountNumber = \"0001928940\",\n initialSeconds = 30 * 60,\n onConfirmPaid,\n onCancel,\n}: IPayByTransferProps) => {\n const [remaining, setRemaining] = useState<number>(initialSeconds);\n const intervalRef = useRef<number | null>(null);\n\n // format mm:ss\n const countDownTime = useMemo(() => {\n const clamped = Math.max(0, remaining);\n const m = Math.floor(clamped / 60);\n const s = clamped % 60;\n return `${String(m).padStart(2, \"0\")}:${String(s).padStart(2, \"0\")}`;\n }, [remaining]);\n\n useEffect(() => {\n // start timer\n intervalRef.current = window.setInterval(() => {\n setRemaining((prev) => prev - 1);\n }, 1000);\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n };\n }, []);\n\n // stop at zero\n useEffect(() => {\n if (remaining < 0 && intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, [remaining]);\n\n return (\n <div className=\"flex flex-col gap-10\">\n <p className=\"text-sub-copy text-sm font-semibold text-center\">\n Amount to Pay {amountDisplay}\n </p>\n\n <div className=\"bg-[#EFF7FF] p-4 rounded-lg flex flex-col gap-6\">\n <BaseLabelInfo label=\"Bank Name\" value={bankName} type=\"horizontal\" />\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Account Number\"\n value={accountNumber}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={accountNumber} />\n </div>\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Amount\"\n value={amountDisplay}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={amountDisplay} />\n </div>\n </div>\n\n <p className=\"w-2/3 mx-auto text-center text-body-2xs font-medium text-sub-copy\">\n This account is for this transaction only and expires in{\" \"}\n <span className=\"text-orange-500\">\n {remaining >= 0 ? countDownTime : \"00:00\"}\n </span>\n </p>\n\n <div className=\"flex flex-col gap-4\">\n <BaseButton\n label=\"I have paid the money\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={onConfirmPaid}\n />\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"text-heading-text text-body-2xs font-medium text-center py-2 cursor-pointer\"\n >\n Cancel Payment\n </button>\n </div>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n BaseButton,\n BaseCopy,\n BaseCurrencyAmount,\n BaseImage,\n BaseSelect,\n} from \"./base\";\nimport { IconArrowSwap } from \"./icons\";\n\ninterface IPayByStableCoinProps {\n onProceedToPay?: () => void; // fires when user clicks \"Pay\"\n}\n\nexport const PayByStableCoin = ({ onProceedToPay }: IPayByStableCoinProps) => {\n const [formIndex, setFormIndex] = useState<number>(0);\n\n const payHandler = () => {\n setFormIndex(1);\n onProceedToPay?.();\n };\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <>\n <div className=\"grid grid-cols-1 gap-6\">\n <BaseSelect\n label=\"Select Crypto\"\n required\n options={[\n { label: \"USDT\", value: \"USDT\" },\n { label: \"USDC\", value: \"USDC\" },\n { label: \"BUSD\", value: \"BUSD\" },\n ]}\n />\n\n <BaseSelect\n label=\"Select Network\"\n required\n options={[\n { label: \"Ethereum\", value: \"ETH\" },\n { label: \"Binance Smart Chain\", value: \"BSC\" },\n { label: \"Polygon\", value: \"MATIC\" },\n ]}\n />\n </div>\n\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={payHandler}\n />\n </>\n )}\n\n {formIndex === 1 && (\n <div className=\"flex flex-col gap-6\">\n <div className=\"mx-auto\">\n <BaseImage\n src=\"../../../assets/images/stable-coin-qr-code.png\"\n alt=\"QR Code\"\n width={122}\n height={122}\n customClass=\"mb-1\"\n />\n <p className=\"mb-0 text-body-4xs text-light-copy font-normal text-center\">\n USDC\n </p>\n </div>\n\n <div className=\"flex flex-col gap-6 border-c border-grey-100 p-4 rounded-2xl bg-light-white-50\">\n <div className=\"border-b border-grey-border pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Network\n </p>\n\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col gap-1\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy\">\n BNB Smart Chain (BEP20)\n </p>\n\n <div className=\"flex items-center gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n *Est. arrival = 3 mins\n </p>\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n |\n </p>\n\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={10}\n textClass=\"mb-0 text-body-3xs text-light-copy font-normal\"\n iconColorClass=\"#557591\"\n iconWidth={12}\n iconHeight={12}\n />\n </div>\n </div>\n\n <IconArrowSwap />\n </div>\n </div>\n\n <div className=\"pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Deposit Address &gt;\n </p>\n\n <div className=\"flex justify-between\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy w-2/3 break-words\">\n 0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\n </p>\n\n <BaseCopy copyText=\"0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\" />\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between border-b border-grey-border py-3\">\n <p className=\"mb-0 text-body-2xs font-medium text-primary-black\">\n Network fee\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={12}\n textClass=\"mb-0 text-body-2xs font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n />\n </div>\n\n <div className=\"flex items-center justify-between py-4\">\n <p className=\"mb-0 text-body-lg font-semibold text-primary-black\">\n Pay\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={15}\n textClass=\"mb-0 text-body-lg font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n iconWidth={20}\n iconHeight={20}\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-6\">\n <BaseButton\n label=\"Confirm Payment\"\n type=\"primary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","url","import_jsx_runtime","import_react","import_react","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","options"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/provider.tsx","../src/hooks.ts","../src/buzapay-checkout/checkout-button.tsx","../src/utils/object.util.ts","../src/utils/api.util.ts","../src/utils/string.util.ts","../src/utils/input.util.ts","../src/apis/checkout.api.ts","../src/components/base/input-error.tsx","../src/components/icons/icon-loader.tsx","../src/components/icons/icon-chevron-left.tsx","../src/components/icons/icon-buzapay-icon.tsx","../src/components/icons/icon-check-circle.tsx","../src/components/icons/icon-copy-success.tsx","../src/components/icons/icon-chevron-up.tsx","../src/components/icons/icon-chevron-down.tsx","../src/components/icons/icon-usdt.tsx","../src/components/icons/icon-usdc.tsx","../src/components/icons/icon-arrow-swap.tsx","../src/components/base/button.tsx","../src/components/base/back.tsx","../src/components/base/card.tsx","../src/components/base/radio-group.tsx","../src/components/base/image.tsx","../src/components/base/copy.tsx","../src/components/base/label-info.tsx","../src/components/base/success.tsx","../src/components/base/hint.tsx","../src/components/base/select.tsx","../src/components/base/currency-amount.tsx","../src/buzapay-checkout/checkout-iframe.tsx","../src/buzapay-checkout/checkout-card.tsx","../src/components/pay-by-card.tsx","../src/components/base/input.tsx","../src/components/pay-by-transfer.tsx","../src/components/pay-by-stable-coin.tsx"],"sourcesContent":["export * from \"./types/types\";\nexport * from \"./client\";\nexport * from \"./provider\";\nexport * from \"./hooks\";\nexport * from \"./buzapay-checkout/checkout-button\";\nexport * from \"./buzapay-checkout/checkout-iframe\";\nexport * from \"./buzapay-checkout/checkout-card\";\n","import type {\n MidenPGConfig,\n CreatePaymentIntentParams,\n PaymentIntent,\n ConfirmCardPaymentParams,\n} from \"./types/types\";\n\nexport class MidenPGClient {\n private readonly base: string;\n constructor(private readonly cfg: MidenPGConfig) {\n this.base = cfg.apiBaseUrl ?? \"https://api.buzapay.com\"; // change to real base\n }\n\n async createPaymentIntent(\n params: CreatePaymentIntentParams\n ): Promise<PaymentIntent> {\n const res = await fetch(`${this.base}/v1/payment_intents`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to create PI: ${res.status}`);\n return res.json();\n }\n\n async confirmCardPayment(\n params: ConfirmCardPaymentParams\n ): Promise<{ status: PaymentIntent[\"status\"]; id: string }> {\n const res = await fetch(`${this.base}/v1/payment_intents/confirm`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to confirm: ${res.status}`);\n return res.json();\n }\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { MidenPGConfig } from \"./types/types\";\nimport { MidenPGClient } from \"./client\";\n\nconst Ctx = createContext<MidenPGClient | null>(null);\n\nexport const MidenPGProvider: React.FC<\n React.PropsWithChildren<{ config: MidenPGConfig }>\n> = ({ config, children }) => {\n const client = useMemo(\n () => new MidenPGClient(config),\n [config.publishableKey, config.apiBaseUrl]\n );\n return <Ctx.Provider value={client}>{children}</Ctx.Provider>;\n};\n\nexport const useMidenPGClient = () => {\n const ctx = useContext(Ctx);\n if (!ctx)\n throw new Error(\"useMidenPGClient must be used within MidenPGProvider\");\n return ctx;\n};\n","import { useCallback } from \"react\";\nimport { useMidenPGClient } from \"./provider\";\nimport type {\n ConfirmCardPaymentParams,\n CreatePaymentIntentParams,\n} from \"./types/types\";\n\nexport function usePaymentIntents() {\n const client = useMidenPGClient();\n\n const create = useCallback(\n (p: CreatePaymentIntentParams) => client.createPaymentIntent(p),\n [client]\n );\n const confirm = useCallback(\n (p: ConfirmCardPaymentParams) => client.confirmCardPayment(p),\n [client]\n );\n\n return { create, confirm };\n}\n","import { useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { BaseButton, BaseInputError } from \"../components/base\";\nimport { BzpCheckoutIframe } from \"./checkout-iframe\";\n\ninterface IBzpCheckoutButtonProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n mode?: \"redirect\" | \"iframe\";\n}\n\nexport function BzpCheckoutButton({\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n mode = \"redirect\",\n}: IBzpCheckoutButtonProps) {\n const [message, setMessage] = useState(\"\");\n const [launchUrl, setLaunchUrl] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const generatePaymentLinkHandler = async () => {\n if (!secretKey) {\n setMessage(\"Secret key is required.\");\n return;\n }\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n setMessage(\"Kindly ensure you are passing all the required data.\");\n return;\n }\n\n setLoading(true);\n setMessage(\"\");\n try {\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n\n if (response?.isSuccessful && response.launchUrl) {\n setLaunchUrl(response.launchUrl);\n setMessage(\"Payment link created successfully\");\n\n if (mode === \"redirect\") {\n // Use the URL from the response, not the (stale) state.\n window.open(response.launchUrl, \"_blank\", \"noopener,noreferrer\");\n }\n } else {\n setMessage(\"Failed to create payment link\");\n }\n } catch (e: any) {\n setMessage(e?.message || \"Failed to create payment link\");\n } finally {\n setLoading(false);\n }\n };\n\n return launchUrl && mode === \"iframe\" ? (\n <BzpCheckoutIframe\n url={launchUrl}\n secretKey={secretKey}\n environment={environment}\n />\n ) : (\n <div>\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n loading={loading}\n onClick={generatePaymentLinkHandler}\n />\n <BaseInputError errorMessage={message} />\n </div>\n );\n}\n","export const checkObjectTruthy = <T extends object>(obj: T): boolean => {\n if (obj == null || typeof obj !== \"object\") return false;\n return Object.values(obj as Record<string, unknown>).every(Boolean);\n};\n","export const getBaseUrl = (mode: string): string => {\n return mode === \"sandbox\"\n ? \"https://sandbox-api.midencards.io/payment-gateway-api\"\n : \"\";\n};\n","export const currencySign = (currency: string): string => {\n if (currency === \"USD\") return \"$\";\n if (currency === \"NGN\") return \"₦\";\n if (currency === \"EUR\") return \"€\";\n if (currency === \"GBP\") return \"£\";\n if (currency === \"JPY\") return \"¥\";\n if (currency === \"CNY\") return \"¥\";\n if (currency === \"USDC\" || currency === \"usdc\") return \"$⧫\";\n if (currency === \"USDT\" || currency === \"usdt\") return \"₮\";\n return \"$\";\n};\n\nexport const formatAmount = (\n value: number | string,\n currency?: string\n): string => {\n const num = typeof value === \"string\" ? parseFloat(value) : value;\n if (isNaN(num)) return \"0\";\n return `${currency ? currencySign(currency) : \"\"} ${num?.toLocaleString(\n \"en-US\"\n )}`;\n};\n\nexport const truncateString = (str: string, num: number): string => {\n if (str.length <= num) {\n return str;\n }\n return str.slice(0, num) + \"...\";\n};\n","export const restrictToNumericKeys = (event: KeyboardEvent): void => {\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n \"Home\",\n \"End\",\n \".\",\n ];\n\n if (\n (event.ctrlKey || event.metaKey) &&\n [\"a\", \"c\", \"v\", \"x\"].includes(event.key.toLowerCase())\n ) {\n return; // allow copy/paste/select\n }\n\n // Prevent non-numeric keys\n if (!allowedKeys.includes(event.key) && !/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n\n // Prevent multiple decimals\n if (\n event.key === \".\" &&\n (event.target as HTMLInputElement).value.includes(\".\")\n ) {\n event.preventDefault();\n }\n};\n","import { IPaymentObject } from \"../types\";\nimport { getBaseUrl } from \"../utils\";\n\nexport async function createPaymentLink(\n paymentObject: IPaymentObject,\n environment: string,\n secretKey: string\n): Promise<any> {\n try {\n const baseUrl = getBaseUrl(environment);\n const res = await fetch(\n `${baseUrl}/api/v1/checkout/generate-payment-link2`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n merchantId: secretKey,\n },\n body: JSON.stringify({\n ...paymentObject,\n LinkName: `${Date.now()}-Link`,\n }),\n }\n );\n return await res.json();\n } catch (error) {}\n}\n","interface IBaseInputErrorProps {\n errorMessage: string;\n}\n\nexport function BaseInputError({ errorMessage }: IBaseInputErrorProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-normal text-red-500\">\n {errorMessage}\n </p>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n size?: number | string;\n color?: string;\n className?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconLoader({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}: IIconProps) {\n return (\n <svg\n className={`animate-spin ${className}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role=\"img\"\n aria-label=\"loading\"\n {...props}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth={4}\n />\n <path\n className=\"opacity-75\"\n fill={color}\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronLeft({\n width = 17,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 14.28C10.3734 14.28 10.2467 14.2333 10.1467 14.1333L5.80002 9.78668C5.09335 9.08001 5.09335 7.92001 5.80002 7.21335L10.1467 2.86668C10.34 2.67335 10.66 2.67335 10.8534 2.86668C11.0467 3.06001 11.0467 3.38001 10.8534 3.57335L6.50669 7.92001C6.18669 8.24001 6.18669 8.76001 6.50669 9.08001L10.8534 13.4267C11.0467 13.62 11.0467 13.94 10.8534 14.1333C10.7534 14.2267 10.6267 14.28 10.5 14.28Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconBuzapayIcon({\n width = 15,\n height = 13,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 15 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M9.97919 0.5C10.8854 0.5 11.6276 0.585938 12.2057 0.757812C12.7891 0.924479 13.2188 1.22396 13.4948 1.65625C13.7761 2.08333 13.9167 2.6901 13.9167 3.47656C13.9167 4.1849 13.7526 4.77083 13.4245 5.23438C13.0964 5.69792 12.5938 5.95312 11.9167 6C12.8021 6.08854 13.4401 6.40625 13.8307 6.95312C14.2214 7.49479 14.4167 8.17708 14.4167 9C14.4167 9.71354 14.3334 10.2995 14.1667 10.7578C14.0052 11.2161 13.7318 11.5729 13.3464 11.8281C12.961 12.0781 12.4375 12.2526 11.7761 12.3516C11.1198 12.4505 10.2995 12.5 9.31512 12.5H0.416687V0.5H9.97919ZM2.91669 7.77344H5.97235V11.167L10.2497 5.22754H7.19501V1.83398L2.91669 7.77344ZM5.97235 6.07617H8.2702L7.19501 7.57324V6.9248H4.89716L5.97235 5.42676V6.07617Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCheckCircle({\n width = 67,\n height = 67,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M33.6705 0.0820312C15.2758 0.0820312 0.36377 14.9941 0.36377 33.3888C0.36377 51.7846 15.2758 66.6956 33.6705 66.6956C52.0663 66.6956 66.9773 51.7846 66.9773 33.3888C66.9773 14.9941 52.0663 0.0820312 33.6705 0.0820312ZM33.6705 62.5978C17.6011 62.5978 4.52712 49.4583 4.52712 33.3887C4.52712 17.3192 17.6011 4.24525 33.6705 4.24525C49.74 4.24525 62.814 17.3193 62.814 33.3887C62.814 49.4581 49.74 62.5978 33.6705 62.5978ZM46.9631 21.2016L27.4213 40.8662L18.621 32.0659C17.8081 31.253 16.4904 31.253 15.6765 32.0659C14.8636 32.8788 14.8636 34.1965 15.6765 35.0094L25.9797 45.3137C26.7926 46.1255 28.1103 46.1255 28.9243 45.3137C29.0179 45.22 29.0981 45.1179 29.171 45.0118L49.9086 24.1461C50.7205 23.3332 50.7205 22.0155 49.9086 21.2016C49.0947 20.3888 47.777 20.3888 46.9631 21.2016Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCopySuccess({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M11.4002 1.6875H8.60016C5.9935 1.6875 4.8335 2.8475 4.8335 5.45417V6.1875C4.8335 6.46083 5.06016 6.6875 5.3335 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V11.5208C10.1668 11.7942 10.3935 12.0208 10.6668 12.0208H11.4002C14.0068 12.0208 15.1668 10.8608 15.1668 8.25417V5.45417C15.1668 2.8475 14.0068 1.6875 11.4002 1.6875ZM5.8335 5.6875V5.45417C5.8335 3.3875 6.5335 2.6875 8.60016 2.6875H11.4002C13.4668 2.6875 14.1668 3.3875 14.1668 5.45417V8.25417C14.1668 10.3208 13.4668 11.0208 11.4002 11.0208H11.1668V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875H5.8335Z\"\n fill={color}\n />\n <path\n d=\"M7.40016 5.6875H4.60016C1.9935 5.6875 0.833496 6.8475 0.833496 9.45417V12.2542C0.833496 14.8608 1.9935 16.0208 4.60016 16.0208H7.40016C10.0068 16.0208 11.1668 14.8608 11.1668 12.2542V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875ZM4.60016 15.0208C2.5335 15.0208 1.8335 14.3208 1.8335 12.2542V9.45417C1.8335 7.3875 2.5335 6.6875 4.60016 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V12.2542C10.1668 14.3208 9.46683 15.0208 7.40016 15.0208H4.60016Z\"\n fill={color}\n />\n <path\n d=\"M5.35302 12.6542C5.22635 12.6542 5.09969 12.6075 4.99969 12.5075L3.69969 11.2075C3.50635 11.0142 3.50635 10.6942 3.69969 10.5008C3.89302 10.3075 4.21302 10.3075 4.40635 10.5008L5.35302 11.4475L7.59302 9.2075C7.78635 9.01417 8.10635 9.01417 8.29969 9.2075C8.49302 9.40083 8.49302 9.72083 8.29969 9.91417L5.69969 12.5075C5.60635 12.6008 5.47969 12.6542 5.35302 12.6542Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronUp({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.7\">\n <path\n d=\"M2.73508 9.73495L7.73508 4.73495C7.80539 4.66473 7.9007 4.62528 8.00008 4.62528C8.09945 4.62528 8.19476 4.66473 8.26508 4.73495L13.2651 9.73495C13.3313 9.80604 13.3674 9.90006 13.3657 9.99722C13.364 10.0944 13.3246 10.1871 13.2559 10.2558C13.1872 10.3245 13.0945 10.3638 12.9973 10.3655C12.9002 10.3673 12.8062 10.3312 12.7351 10.265L8.00008 5.53058L3.26508 10.265C3.19399 10.3312 3.09997 10.3673 3.00282 10.3655C2.90566 10.3638 2.81297 10.3245 2.74427 10.2558C2.67556 10.1871 2.6362 10.0944 2.63449 9.99722C2.63277 9.90006 2.66884 9.80604 2.73508 9.73495Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronDown({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.6\">\n <path\n d=\"M16.5813 7.83128L10.3313 14.0813C10.2434 14.1691 10.1242 14.2184 10 14.2184C9.87581 14.2184 9.75667 14.1691 9.66878 14.0813L3.41878 7.83128C3.33598 7.74242 3.2909 7.62489 3.29304 7.50345C3.29518 7.38201 3.34438 7.26615 3.43026 7.18026C3.51615 7.09438 3.63201 7.04518 3.75345 7.04304C3.87489 7.0409 3.99242 7.08598 4.08128 7.16878L10 13.0867L15.9188 7.16878C16.0076 7.08598 16.1252 7.0409 16.2466 7.04304C16.368 7.04518 16.4839 7.09438 16.5698 7.18026C16.6557 7.26615 16.7049 7.38201 16.707 7.50345C16.7092 7.62489 16.6641 7.74242 16.5813 7.83128Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdt({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387045)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28ZM15.6818 12.0689V9.99863H20.419V6.84162H7.52063V9.99863H12.2579V12.068C8.40787 12.2447 5.5125 13.0077 5.5125 13.9212C5.5125 14.8347 8.40787 15.5969 12.2579 15.7745V22.4088H15.6818V15.7727C19.5256 15.596 22.414 14.8339 22.414 13.9212C22.414 13.0086 19.5256 12.2465 15.6818 12.0689ZM15.6818 15.2101V15.2084C15.5855 15.2154 15.0894 15.2451 13.9825 15.2451C13.0987 15.2451 12.4766 15.2189 12.2579 15.2084V15.211C8.85587 15.0614 6.31662 14.469 6.31662 13.7602C6.31662 13.0524 8.85587 12.46 12.2579 12.3077V14.6212C12.4801 14.637 13.1171 14.6746 13.9974 14.6746C15.0535 14.6746 15.5829 14.6309 15.6818 14.6221V12.3095C19.0768 12.4609 21.6099 13.0532 21.6099 13.7602C21.6099 14.469 19.0768 15.0596 15.6818 15.2101Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387045\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdc({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387048)\">\n <path\n d=\"M14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0ZM16.933 4.865C16.7195 4.76 16.506 4.865 16.4535 5.07762C16.4001 5.131 16.4001 5.18438 16.4001 5.29025V6.034L16.4089 6.125C16.4546 6.30501 16.5652 6.46177 16.7195 6.56512C20.8792 8.05262 23.0125 12.6726 21.4655 16.7615C20.6657 18.9928 18.9061 20.6911 16.7195 21.4883C16.506 21.5941 16.4001 21.7534 16.4001 22.0194V22.7631L16.4045 22.8401C16.4128 22.9241 16.4479 23.0033 16.5047 23.0658C16.5614 23.1284 16.6367 23.171 16.7195 23.1875C16.7729 23.1875 16.8796 23.1875 16.933 23.135C18.1331 22.7602 19.2473 22.1517 20.2113 21.3446C21.1753 20.5375 21.9701 19.5476 22.5499 18.432C23.1298 17.3164 23.4833 16.0972 23.59 14.8444C23.6967 13.5917 23.5546 12.3302 23.1718 11.1326C22.2128 8.10512 19.866 5.8205 16.933 4.865ZM11.2805 4.8125C11.2271 4.8125 11.1204 4.8125 11.067 4.865C9.86688 5.23978 8.75274 5.84826 7.78874 6.6554C6.82475 7.46254 6.02993 8.4524 5.45006 9.56797C4.87019 10.6836 4.51673 11.9028 4.41001 13.1556C4.30329 14.4083 4.44543 15.6698 4.82825 16.8674C5.78725 19.8424 8.08062 22.1261 11.067 23.0816C11.2805 23.1875 11.494 23.0816 11.5465 22.869C11.5999 22.8165 11.5999 22.7622 11.5999 22.6564V21.9126L11.5911 21.8426C11.5544 21.6947 11.417 21.5259 11.2805 21.4349C7.12075 19.9474 4.9875 15.3274 6.5345 11.2385C7.33425 9.00725 9.09388 7.30887 11.2805 6.51175C11.494 6.40587 11.5999 6.24663 11.5999 5.98063V5.23688L11.5955 5.15987C11.5872 5.07585 11.5521 4.99673 11.4954 4.93418C11.4386 4.87163 11.3633 4.82898 11.2805 4.8125ZM14.3736 7.574H13.573L13.496 7.581C13.321 7.616 13.1933 7.7665 13.146 7.99925V9.22075L12.9649 9.24875C11.4704 9.51475 10.5341 10.5464 10.5341 11.823C10.5341 13.5748 11.5999 14.2651 13.8399 14.5311C15.3335 14.7963 15.813 15.1156 15.813 15.9653C15.813 16.814 15.0666 17.3985 14.0534 17.3985C12.6665 17.3985 12.187 16.8149 12.0269 16.0177C11.9744 15.806 11.8134 15.6992 11.6532 15.6992H10.7467L10.6776 15.7054C10.5913 15.7193 10.513 15.7641 10.4572 15.8313C10.4014 15.8985 10.3718 15.9838 10.374 16.0711V16.1236L10.4029 16.2811C10.6566 17.5271 11.5106 18.4187 13.2003 18.6734V19.9483L13.2072 20.0252C13.2422 20.1985 13.3936 20.3263 13.6273 20.3726H14.427L14.504 20.3656C14.679 20.3306 14.8067 20.1801 14.854 19.9483V18.6725L15.0351 18.6375C16.534 18.3207 17.5201 17.2366 17.5201 15.8576C17.5201 13.9991 16.4001 13.3621 14.1601 13.0961C12.5598 12.8835 12.2404 12.4591 12.2404 11.7154C12.2404 10.9716 12.7741 10.4939 13.8399 10.4939C14.7998 10.4939 15.3335 10.8124 15.5995 11.6095C15.6272 11.6866 15.6779 11.7533 15.7447 11.8007C15.8115 11.8481 15.8912 11.8739 15.9731 11.8746H16.8262L16.8954 11.8694C16.982 11.8556 17.0606 11.8108 17.1166 11.7434C17.1726 11.6759 17.2022 11.5904 17.1999 11.5027V11.4503L17.1675 11.2989C17.0361 10.755 16.7366 10.2664 16.3115 9.90255C15.8864 9.53872 15.3574 9.31821 14.7997 9.27238V7.99925L14.7928 7.92225C14.7578 7.74812 14.6073 7.62038 14.3736 7.574Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387048\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconArrowSwap({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.3265 14.1948C10.1998 14.1948 10.0731 14.1481 9.97313 14.0481C9.77979 13.8548 9.77979 13.5348 9.97313 13.3414L13.3131 10.0014C13.5065 9.80811 13.8265 9.80811 14.0198 10.0014C14.2131 10.1948 14.2131 10.5148 14.0198 10.7081L10.6798 14.0481C10.5798 14.1414 10.4531 14.1948 10.3265 14.1948Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 10.8477H2.3335C2.06016 10.8477 1.8335 10.621 1.8335 10.3477C1.8335 10.0743 2.06016 9.84766 2.3335 9.84766H13.6668C13.9402 9.84766 14.1668 10.0743 14.1668 10.3477C14.1668 10.621 13.9402 10.8477 13.6668 10.8477Z\"\n fill={color}\n />\n <path\n d=\"M2.33329 6.86079C2.20663 6.86079 2.07996 6.81413 1.97996 6.71413C1.78663 6.52079 1.78663 6.20079 1.97996 6.00746L5.31996 2.66746C5.51329 2.47413 5.83329 2.47413 6.02663 2.66746C6.21996 2.86079 6.21996 3.18079 6.02663 3.37413L2.68663 6.71413C2.59329 6.80746 2.45996 6.86079 2.33329 6.86079Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 6.86133H2.3335C2.06016 6.86133 1.8335 6.63466 1.8335 6.36133C1.8335 6.08799 2.06016 5.86133 2.3335 5.86133H13.6668C13.9402 5.86133 14.1668 6.08799 14.1668 6.36133C14.1668 6.63466 13.9402 6.86133 13.6668 6.86133Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import { IconLoader } from \"../icons\";\n\ninterface IBaseButtonProps {\n label: string;\n type?: string;\n size?: string;\n paddingClassX?: string;\n disabled?: boolean;\n loading?: boolean;\n customClass?: string;\n onClick?: () => void;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\n/** === Angular getters ported to React === */\nfunction getButtonBgClass(type: string, disabled?: boolean) {\n if (disabled)\n return \"bg-gray-200 text-gray-400 cursor-not-allowed border-gray-200\";\n switch (type) {\n case \"primary\":\n return \"bg-primary text-white hover:bg-primary-black hover:border-primary-black border-primary\";\n case \"secondary\":\n return \"bg-gray-200 border-gray-200 hover:bg-gray-300 text-heading-text\";\n case \"danger\":\n return \"bg-red-500 border-red-500 text-white hover:bg-red-600\";\n case \"neutral\":\n default:\n return \"bg-off-white border-grey-border hover:bg-gray-100\";\n }\n}\n\nfunction getButtonSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n return \"h-68px rounded-xl\";\n case \"md\":\n return \"h-42px rounded-lg\";\n case \"sm\":\n return \"h-32px rounded-md\";\n default:\n return \"h-68px rounded-xl\";\n }\n}\n\nfunction getLabelSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n case \"md\":\n case \"sm\":\n return \"text-body-2xs font-normal\";\n default:\n return \"text-body-xs font-normal\";\n }\n}\n\nexport function BaseButton({\n label,\n type = \"neutral\",\n size = \"de\",\n paddingClassX = \"px-8\",\n disabled = false,\n loading = false,\n customClass,\n onClick,\n prefix,\n suffix,\n children,\n}: React.PropsWithChildren<IBaseButtonProps>) {\n const isDisabled = disabled || loading;\n\n // Angular’s clickHandler -> emit only when not disabled\n const handleClick = () => {\n if (!isDisabled) onClick?.();\n };\n\n return (\n <button\n className={`flex items-center justify-center gap-2 py-3 border font-normal text-input-grey transition-colors duration-300 ease-in-out ${getButtonBgClass(\n type,\n isDisabled\n )} ${getButtonSizeClass(size)} ${paddingClassX} ${customClass}`}\n type=\"button\"\n disabled={isDisabled}\n onClick={handleClick}\n >\n {prefix}\n\n {loading ? (\n <IconLoader></IconLoader>\n ) : (\n <div>\n {label ? (\n <p className={`mb-0 ${getLabelSizeClass(size)}`}>{label}</p>\n ) : (\n <>{children}</>\n )}\n </div>\n )}\n\n {suffix}\n </button>\n );\n}\n","import { IconChevronLeft } from \"../icons\";\n\ninterface IBaseBackProps {\n back: () => void;\n}\n\nexport function BaseBack({ back }: IBaseBackProps) {\n return (\n <div className=\"flex items-center gap-2 cursor-pointer\" onClick={back}>\n <IconChevronLeft></IconChevronLeft>\n <p className=\"mb-0 text-body-xs font-normal\">Back</p>\n </div>\n );\n}\n","import { IconBuzapayIcon } from \"../icons\";\nimport { BaseBack } from \"./back\";\n\ninterface IBaseCardProps {\n showBackButton?: boolean;\n onBack?: () => void;\n children?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function BaseCard({\n showBackButton = false,\n onBack,\n children,\n onClose,\n}: IBaseCardProps) {\n return (\n <div className=\"checkout-card w-full h-screen flex flex-col items-center justify-center text-white\">\n <div className=\"flex w-1/2\">\n {showBackButton && <BaseBack back={() => onBack?.()} />}\n\n <div className=\"flex gap-2 w-full\">\n <div className=\"flex flex-col gap-8 w-full\">\n <div className=\"bg-off-white rounded-xl\">{children}</div>\n\n <div className=\"flex items-center gap-2 justify-center\">\n <p className=\"text-light-white-100 text-body-2xs font-regular\">\n Powered by Buzapay\n </p>\n <IconBuzapayIcon color=\"#E8F4FF\" />\n </div>\n </div>\n\n {/* Close Icon */}\n <div\n onClick={onClose}\n className=\"close-icon flex flex-col items-center justify-center self-start cursor-pointer hover:bg-gray-500\"\n >\n <p className=\"text-white\">x</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\n\ninterface IBaseRadioGroupProps {\n options: { label: string; value: string }[];\n type?: \"vertical\" | \"horizontal\";\n value?: string;\n defaultValue?: string;\n selectedChange?: (value: string) => void;\n className?: string;\n}\n\nexport const BaseRadioGroup = ({\n options,\n type = \"vertical\",\n value,\n defaultValue,\n selectedChange,\n className = \"\",\n}: IBaseRadioGroupProps) => {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<string>(\"\");\n\n useEffect(() => {\n if (isControlled) return;\n const initial =\n defaultValue ?? (options.length > 0 ? options[0].value : \"\");\n setInternal(initial);\n selectedChange?.(initial);\n }, [isControlled, defaultValue, options]);\n\n const selected = isControlled ? value! : internal;\n\n const setSelected = (v: string) => {\n if (!isControlled) setInternal(v);\n selectedChange?.(v);\n };\n\n const containerLayout =\n type === \"horizontal\" ? \"flex-row gap-5\" : \"flex-col gap-6\";\n\n return (\n <div\n className={`flex ${containerLayout} ${className}`}\n role=\"radiogroup\"\n aria-orientation={type === \"horizontal\" ? \"horizontal\" : \"vertical\"}\n tabIndex={0}\n >\n {options.map((option) => {\n const isActive = selected === option.value;\n return (\n <div\n key={option.value}\n role=\"radio\"\n aria-checked={isActive}\n tabIndex={-1}\n onClick={() => setSelected(option.value)}\n className=\"flex items-center gap-2 cursor-pointer transition-colors duration-200\"\n >\n <div\n className={[\n \"w-4 h-4 rounded-full border flex items-center justify-center\",\n isActive\n ? \"bg-orange-500 border-orange-500\"\n : \"bg-white border-grey-200\",\n ].join(\" \")}\n >\n {isActive && <div className=\"bg-white w-2 h-2 rounded-full\" />}\n </div>\n <p className=\"mb-0 text-body-2xs font-medium text-heading-text\">\n {option.label}\n </p>\n </div>\n );\n })}\n </div>\n );\n};\n","interface IBaseImageProps {\n src: string;\n height?: number | string;\n width?: number | string;\n alt?: string;\n customClass?: string;\n isFullWidth?: boolean;\n onClick?: () => void;\n}\n\nexport function BaseImage({\n src,\n height = 50,\n width = 50,\n alt = \"Image\",\n customClass,\n isFullWidth,\n onClick,\n}: IBaseImageProps) {\n return (\n <img\n src={src}\n height={height}\n alt={alt}\n className={`${customClass} ${isFullWidth ? \"w-full\" : \"\"}`}\n style={{ width: isFullWidth ? \"100%\" : `${width}px` }}\n onClick={onClick}\n />\n );\n}\n","import { IconCopySuccess } from \"../icons\";\n\ninterface IBaseCopyProps {\n copyText: string;\n color?: string;\n}\n\nexport function BaseCopy({ copyText, color }: IBaseCopyProps) {\n const copyToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = () => {\n copyToClipboard(copyText)\n .then(() => {})\n .catch((err: any) => {});\n };\n\n return (\n <IconCopySuccess\n className=\"cursor-pointer\"\n color={color}\n onClick={() => copyHandler()}\n />\n );\n}\n","import { BaseImage } from \".\";\nimport { truncateString } from \"../../utils\";\nimport { BaseCopy } from \"./copy\";\n\ninterface IBaseLabelInfoProps {\n type?: \"vertical\" | \"horizontal\";\n label?: string;\n labelCustomClass?: string;\n valueImageSrc?: string;\n valueImageCustomClass?: string;\n valueImagePosition?: \"prefix\" | \"suffix\";\n hasValueCopy?: boolean;\n value?: string;\n valueCustomClass?: string;\n alignRight?: boolean;\n}\n\nexport const BaseLabelInfo = ({\n type = \"vertical\",\n label = \"\",\n labelCustomClass = \"text-body-4xs font-medium text-light-copy\",\n valueImageSrc = \"\",\n valueImageCustomClass = \"\",\n valueImagePosition = \"prefix\",\n hasValueCopy = false,\n value = \"\",\n valueCustomClass = \"text-body-2xs font-medium text-sub-copy\",\n alignRight = false,\n}: IBaseLabelInfoProps) => {\n const showPrefixImg = valueImageSrc && valueImagePosition === \"prefix\";\n const showSuffixImg = valueImageSrc && valueImagePosition === \"suffix\";\n\n if (type === \"vertical\") {\n return (\n <div\n className={`flex flex-col gap-1 ${\n alignRight ? \"text-right items-end\" : \"\"\n }`}\n >\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n {!hasValueCopy ? (\n <p className={valueCustomClass}>{value}</p>\n ) : (\n <p className={`${valueCustomClass} truncate`}>\n {truncateString(value, 40)}\n </p>\n )}\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n }\n\n // horizontal\n return (\n <div className=\"flex items-center justify-between\">\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n <p className={valueCustomClass}>{value}</p>\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n};\n","import { BaseButton, BaseLabelInfo } from \".\";\nimport { IconCheckCircle } from \"../icons\";\n\ninterface IBaseSuccessProps {}\n\nexport const BaseSuccess = ({}: IBaseSuccessProps) => {\n return (\n <div className=\"flex flex-col gap-8 p-16\">\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex flex-col gap-8\">\n <IconCheckCircle color=\"#F47A1F\" className=\"mx-auto\" />\n\n <div className=\"flex flex-col text-center\" style={{ gap: \"2px\" }}>\n <p className=\"text-heading-text font-medium text-header-2xl\">\n ₦2,500.00\n </p>\n <p className=\"text-sub-copy font-regular text-body-3xs\">\n Has been paid successfully\n </p>\n </div>\n </div>\n\n <div className=\"flex flex-col\">\n <div className=\"py-4 border-b border-grey-100\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Order ID\"\n value=\"9900009000-8890-8829hd7\"\n />\n </div>\n\n <div className=\"py-4\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Payment date\"\n value=\"July 24, 2025\"\n />\n </div>\n </div>\n </div>\n\n <div className=\"mx-auto\" style={{ width: \"80%\" }}>\n <BaseButton\n label=\"Return to Merchant Website\"\n type=\"secondary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n );\n};\n","interface IBaseHintProps {\n hint: string;\n}\n\nexport function BaseHint({ hint }: IBaseHintProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-medium text-orange-500\">{hint}</p>\n );\n}\n","import React from \"react\";\nimport { IconChevronDown, IconChevronUp } from \"../icons\";\nimport { BaseHint } from \"./hint\";\nimport { BaseInputError } from \"./input-error\";\nimport { BaseImage } from \"./image\";\n\ntype ImageType = \"country\" | \"bank\" | null;\n\nexport interface SelectOption {\n label: string;\n value: string;\n countryCode?: string; // e.g. \"NG\"\n bankCode?: string;\n}\n\ninterface IBaseSelectProps {\n options: SelectOption[];\n value?: string; // controlled value\n defaultValue?: string; // uncontrolled initial value\n onChange?: (value: string) => void;\n\n placeholder?: string; // \"Select an option\" by default\n hasSearch?: boolean;\n disabled?: boolean;\n loading?: boolean;\n validationError?: string;\n label?: string;\n hint?: string;\n required?: boolean;\n itemImageType?: ImageType;\n\n prefix?: React.ReactNode; // slot before text in trigger\n\n className?: string;\n}\n\nexport const BaseSelect = ({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = \"Select an option\",\n hasSearch = true,\n disabled = false,\n loading = false,\n validationError = \"\",\n label = \"\",\n hint = \"\",\n required = false,\n itemImageType = null,\n prefix,\n className = \"\",\n}: IBaseSelectProps) => {\n const isControlled = value !== undefined;\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [filtered, setFiltered] = React.useState<SelectOption[]>(options);\n const [activeIndex, setActiveIndex] = React.useState<number>(-1);\n\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n // Keep internal state in sync for controlled usage\n React.useEffect(() => {\n if (isControlled) setInternalValue(value ?? \"\");\n }, [isControlled, value]);\n\n // Reset filtered list whenever options change\n React.useEffect(() => {\n setFiltered(options);\n }, [options]);\n\n const selected = React.useMemo(\n () =>\n options.find((o) => o.value === (isControlled ? value : internalValue)) ||\n null,\n [options, value, internalValue, isControlled]\n );\n\n const displayText =\n selected?.label ||\n placeholder ||\n (label ? `Select ${label}` : \"Select an option\");\n\n // Open/close helpers\n const openMenu = React.useCallback(() => {\n if (disabled || open) return;\n setFiltered(options);\n // set active index to current selection or first\n const idx = selected\n ? Math.max(\n 0,\n options.findIndex((o) => o.value === selected.value)\n )\n : 0;\n setActiveIndex(idx);\n setOpen(true);\n // focus search if enabled\n setTimeout(() => {\n if (hasSearch && searchRef.current) {\n searchRef.current.focus();\n searchRef.current.select();\n }\n });\n }, [disabled, open, options, selected, hasSearch]);\n\n const closeMenu = React.useCallback(() => {\n if (!open) return;\n setOpen(false);\n setActiveIndex(-1);\n }, [open]);\n\n const toggleMenu = React.useCallback(() => {\n if (disabled) return;\n open ? closeMenu() : openMenu();\n }, [open, disabled, openMenu, closeMenu]);\n\n // Outside click\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as Node;\n const tri = triggerRef.current;\n const menu = menuRef.current;\n if (tri && !tri.contains(t) && menu && !menu.contains(t)) closeMenu();\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, closeMenu]);\n\n // Selection\n const commit = (val: string) => {\n if (!isControlled) setInternalValue(val);\n onChange?.(val);\n closeMenu();\n };\n\n // Search\n const onSearchInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const q = e.target.value.toLowerCase();\n const list = options.filter((o) => o.label.toLowerCase().includes(q));\n setFiltered(list);\n setActiveIndex(list.length ? 0 : -1);\n };\n\n // Keyboard on trigger\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case \"Enter\":\n case \" \":\n case \"Spacebar\":\n case \"ArrowDown\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(-1);\n break;\n case \"Escape\":\n if (open) {\n e.preventDefault();\n closeMenu();\n }\n break;\n }\n };\n\n // Keyboard in menu\n const onMenuKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveActive(-1);\n break;\n case \"Home\":\n e.preventDefault();\n setActiveIndex(filtered.length ? 0 : -1);\n scrollActiveIntoView(0);\n break;\n case \"End\":\n e.preventDefault();\n setActiveIndex(filtered.length - 1);\n scrollActiveIntoView(filtered.length - 1);\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeIndex >= 0) {\n const opt = filtered[activeIndex];\n if (opt) commit(opt.value);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n closeMenu();\n break;\n case \"Tab\":\n closeMenu();\n break;\n }\n };\n\n const moveActive = (delta: number) => {\n if (!filtered.length) return;\n const max = filtered.length - 1;\n const next =\n activeIndex < 0 ? 0 : Math.min(max, Math.max(0, activeIndex + delta));\n setActiveIndex(next);\n scrollActiveIntoView(next);\n };\n\n const scrollActiveIntoView = (index: number) => {\n const menu = menuRef.current;\n if (!menu) return;\n const items = menu.querySelectorAll<HTMLElement>(\"[data-option]\");\n if (index >= 0 && index < items.length) {\n items[index]?.scrollIntoView({ block: \"nearest\" });\n }\n };\n\n // UI helpers\n const containerBg = disabled ? \"bg-grey-100 cursor-not-allowed\" : \"bg-white\";\n const containerBorder = validationError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100 bg-white\";\n\n return (\n <div className={`flex flex-col gap-2 relative ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n {/* Trigger */}\n <div\n ref={triggerRef}\n className={`border-c rounded-md flex items-center justify-between h-12 cursor-pointer px-3 py-2 ${containerBg} ${containerBorder}`}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? \"select-menu\" : undefined}\n aria-disabled={disabled || undefined}\n aria-activedescendant={\n open && activeIndex >= 0 ? `option-${activeIndex}` : undefined\n }\n tabIndex={0}\n onClick={toggleMenu}\n onKeyDown={onTriggerKeyDown}\n >\n <div className=\"flex items-center gap-2\">\n {prefix}\n\n <div className=\"flex items-center gap-2\">\n {selected &&\n itemImageType === \"country\" &&\n selected.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${selected.countryCode.toLowerCase()}.png`}\n alt={selected.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* Bank logos could be handled similarly here */}\n\n <p\n className={`text-body-2xs font-normal mb-0 ${\n selected?.label ? \"text-sub-copy\" : \"text-grey-500\"\n }`}\n >\n {displayText}\n </p>\n </div>\n </div>\n\n {loading ? (\n // Loader (replace with your own IconLoader if you have one)\n <span className=\"inline-block h-4 w-4 border-2 border-current border-t-transparent rounded-full animate-spin\" />\n ) : open ? (\n <IconChevronUp color=\"#8FAECA\" />\n ) : (\n <IconChevronDown color=\"#8FAECA\" />\n )}\n </div>\n\n {/* Menu */}\n {open && (\n <div\n ref={menuRef}\n id=\"select-menu\"\n className=\"border-c bg-white rounded-md border-grey-border text-body-xs font-normal text-input-grey w-full mt-2 max-h-22rem overflow-y-auto\"\n role=\"listbox\"\n aria-label={label || \"Options\"}\n style={{ position: \"absolute\", top: \"100%\", zIndex: 10 }}\n onKeyDown={onMenuKeyDown}\n >\n {hasSearch && (\n <div className=\"px-4 pt-2 pb-1\">\n <input\n ref={searchRef}\n type=\"text\"\n onChange={onSearchInput}\n placeholder={`Search ${label || \"options\"}`}\n className=\"bg-transparent outline-none border-b pb-2 w-full focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal\"\n />\n </div>\n )}\n\n {filtered.map((opt, i) => {\n const selectedOpt = selected?.value === opt.value;\n return (\n <div\n key={opt.value}\n onClick={() => commit(opt.value)}\n id={`option-${i}`}\n data-option\n role=\"option\"\n aria-selected={selectedOpt}\n className={`px-4 py-3 first:pt-0 hover:bg-gray-100 flex items-center gap-2 cursor-pointer ${\n i === activeIndex ? \"bg-gray-100\" : \"\"\n }`}\n >\n {itemImageType === \"country\" && opt.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${opt.countryCode.toLowerCase()}.png`}\n alt={opt.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* If you later add bank logos:\n {itemImageType === \"bank\" && (\n <img src={bankLogoHandler(opt.bankCode || opt.value)} alt={opt.value} width={28} className=\"rounded-lg\" />\n )} */}\n\n <p className=\"mb-0 text-body-2xs font-medium\">{opt.label}</p>\n </div>\n );\n })}\n </div>\n )}\n\n {hint && <BaseHint hint={hint} />}\n {validationError && <BaseInputError errorMessage={validationError} />}\n </div>\n );\n};\n","import { formatAmount } from \"../../utils\";\nimport { IconUsdc, IconUsdt } from \"../icons\";\n\ninterface IBaseCurrencyAmountProps {\n currency: string;\n amount: number | string;\n textClass?: string;\n iconColorClass?: string;\n iconWidth?: number | string;\n iconHeight?: number | string;\n}\n\nexport const BaseCurrencyAmount = ({\n currency,\n amount,\n textClass = \"\",\n iconColorClass = \"\",\n iconWidth = 16,\n iconHeight = 16,\n}: IBaseCurrencyAmountProps) => {\n const cur = currency?.toUpperCase();\n\n if (cur !== \"USDT\" && cur !== \"USDC\") {\n return <p className={textClass}>{formatAmount(amount, cur)}</p>;\n }\n\n return (\n <div className=\"flex items-center gap-1\">\n {cur === \"USDT\" && (\n <IconUsdt\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n {cur === \"USDC\" && (\n <IconUsdc\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n <p className={textClass}>{formatAmount(amount)}</p>\n </div>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { IconLoader } from \"../components/icons\";\n\ninterface IIframeStyle {\n width?: string;\n height?: string;\n border?: string;\n borderRadius?: string;\n overflow?: string;\n}\n\ninterface IBzpCheckoutIframeProps {\n style?: IIframeStyle;\n url?: string;\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject?: IPaymentObject;\n}\n\nexport function BzpCheckoutIframe({\n style = {\n width: \"100%\",\n height: \"100vh\",\n border: \"0\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n },\n url,\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutIframeProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n\n const [message, setMessage] = useState<string>(\"\");\n const [launchUrl, setLaunchUrl] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const launchIframe = useCallback(\n (url: string) => {\n // remove prior iframe if any\n if (iframeRef.current && iframeRef.current.parentNode) {\n iframeRef.current.parentNode.removeChild(iframeRef.current);\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n\n if (style.width) iframe.style.width = style.width;\n if (style.height) iframe.style.height = style.height;\n if (style.border) iframe.style.border = style.border;\n if (style.borderRadius) iframe.style.borderRadius = style.borderRadius;\n if (style.overflow) iframe.style.overflow = style.overflow;\n\n containerRef.current?.appendChild(iframe);\n iframeRef.current = iframe;\n },\n [style]\n );\n\n const generatePaymentLinkHandler = async () => {\n if (url) {\n launchIframe(url);\n return;\n }\n\n if (!secretKey) {\n return setMessage(\"Secret key is required.\");\n }\n\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n return setMessage(\"Secret key is required.\");\n }\n\n setLoading(true);\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n if (response?.isSuccessful) {\n setLaunchUrl(response.launchUrl ?? \"\");\n setMessage(\"Payment link created successfully\");\n if (response.launchUrl) {\n setLoading(false);\n launchIframe(response.launchUrl);\n }\n } else {\n setLoading(false);\n setMessage(\"Failed to create payment link\");\n }\n };\n\n useEffect(() => {\n if (!containerRef.current) return; // only run if div is mounted\n generatePaymentLinkHandler();\n }, []);\n\n return (\n <div className=\"relative\" style={style}>\n <div ref={containerRef} className=\"w-full h-full\"></div>\n {loading && (\n <div className=\"absolute inset-0 grid place-items-center bg-white/60\">\n <IconLoader></IconLoader>\n </div>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { BaseCard } from \"../components/base/card\";\nimport { BaseImage, BaseRadioGroup, BaseSuccess } from \"../components/base\";\nimport { PayByCard } from \"../components/pay-by-card\";\nimport { PayByTransfer } from \"../components/pay-by-transfer\";\nimport { PayByStableCoin } from \"../components/pay-by-stable-coin\";\nimport { IPaymentObject, ISelectOption } from \"../types\";\nimport { currencySign, formatAmount } from \"../utils\";\n\nexport interface CheckoutIframeStyle {\n [cssProp: string]: string | number;\n}\n\nexport interface CheckoutCardOptions {\n imageUrl?: string;\n numberPlaceholder?: string;\n expiryPlaceholder?: string;\n cvcPlaceholder?: string;\n styles?: {\n base?: CheckoutIframeStyle;\n invalid?: CheckoutIframeStyle;\n focus?: CheckoutIframeStyle;\n };\n}\n\ninterface IBzpCheckoutCardProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n options?: CheckoutCardOptions;\n}\n\nexport function BzpCheckoutCard({\n options,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutCardProps) {\n const [checkoutState, setCheckoutState] = useState<\n \"STABLE_COIN_PAYMENT\" | \"PAYMENT\" | \"SUCCESS\"\n >(\"PAYMENT\");\n\n const paymentTypeOptions: ISelectOption[] = [\n { label: \"Card\", value: \"CARD\" },\n { label: \"Bank Transfer\", value: \"BANK_TRANSFER\" },\n { label: \"Stable Coin\", value: \"STABLE_COIN\" },\n ];\n const [filteredPaymentTypeOptions, setFilteredPaymentTypeOptions] = useState<\n ISelectOption[]\n >([]);\n const [paymentType, setPaymentType] = useState<string>(\"\");\n\n const paymentTypeHandler = (event: string): void => {\n setPaymentType(event);\n };\n\n useEffect(() => {\n let options: ISelectOption[] = [];\n if (paymentObject.currency === \"USD\") {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"BANK_TRANSFER\"\n );\n } else {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"STABLE_COIN\"\n );\n }\n\n setFilteredPaymentTypeOptions(options);\n }, [paymentObject.currency]);\n\n useEffect(() => {\n if (filteredPaymentTypeOptions.length) {\n setPaymentType(filteredPaymentTypeOptions[0].value);\n }\n }, [filteredPaymentTypeOptions]);\n\n return (\n <BaseCard showBackButton={checkoutState === \"STABLE_COIN_PAYMENT\"}>\n <div className=\"grid grid-cols-3\">\n {checkoutState === \"PAYMENT\" && (\n <div className=\"bg-[#EFF7FF] px-6 py-8 flex flex-col gap-5 col-span-1 rounded-l-xl\">\n <p className=\"text-heading-text text-body-xs font-semibold\">\n Pay with\n </p>\n <BaseRadioGroup\n options={paymentTypeOptions}\n selectedChange={(e: string) => paymentTypeHandler(e)}\n />\n </div>\n )}\n\n <div className=\"col-span-2\">\n {(checkoutState === \"PAYMENT\" ||\n checkoutState === \"STABLE_COIN_PAYMENT\") && (\n <div>\n {checkoutState === \"PAYMENT\" && (\n <div className=\"flex items-center justify-between px-12 py-8\">\n {options?.imageUrl ? (\n <BaseImage\n src={options?.imageUrl ?? \"\"}\n alt=\"Merchant Logo\"\n width={52}\n height={52}\n customClass=\"rounded-lg\"\n />\n ) : (\n <div\n className=\"bg-heading-text rounded flex flex-col justify-center\"\n style={{ width: \"52px\", height: \"52px\" }}\n >\n <p className=\"text-white text-center text-body-2xs font-medium\">\n Logo\n </p>\n </div>\n )}\n\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Raymahni Merchant LLC\n </p>\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Pay:{\" \"}\n <span className=\"text-orange-500 font-extrabold\">\n {formatAmount(\n paymentObject.amount,\n paymentObject.currency\n )}\n </span>\n </p>\n </div>\n </div>\n )}\n\n <div className=\"overflow-y-scroll px-10 pb-10 pt-2\">\n {paymentType === \"CARD\" ? (\n <PayByCard />\n ) : paymentType === \"BANK_TRANSFER\" ? (\n <PayByTransfer />\n ) : (\n <PayByStableCoin\n onProceedToPay={() =>\n setCheckoutState(\"STABLE_COIN_PAYMENT\")\n }\n />\n )}\n </div>\n </div>\n )}\n\n {checkoutState === \"SUCCESS\" && <BaseSuccess />}\n </div>\n </div>\n </BaseCard>\n );\n}\n","import { useState } from \"react\";\nimport { BaseInput } from \"./base/input\";\nimport { BaseButton, BaseSelect } from \"./base\";\n\ninterface IPayByCardProps {}\n\nexport function PayByCard({}: IPayByCardProps) {\n const [formIndex, setFormIndex] = useState(0);\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <div className=\"grid grid-cols-2 gap-6 overflow-y-auto\">\n <BaseInput label=\"First Name\" required={true} />\n <BaseInput label=\"Last Name\" required={true} />\n <BaseInput label=\"Email\" required={true} />\n <BaseInput label=\"Phone Number\" required={true} />\n <BaseSelect\n label=\"Select Country\"\n required={true}\n options={[\n { label: \"United States\", value: \"US\" },\n { label: \"Canada\", value: \"CA\" },\n { label: \"United Kingdom\", value: \"UK\" },\n ]}\n />\n <BaseSelect\n label=\"Select State\"\n required={true}\n options={[\n { label: \"California\", value: \"CA\" },\n { label: \"Texas\", value: \"TX\" },\n { label: \"New York\", value: \"NY\" },\n ]}\n />\n <BaseInput label=\"City\" required={true} />\n <BaseInput label=\"Postal Code\" required={true} />\n <div className=\"col-span-2\">\n <BaseInput label=\"Street Address\" required={true} />\n </div>\n </div>\n )}\n\n {formIndex === 1 && (\n <div\n className=\"grid grid-cols-2 gap-6 overflow-y-auto\"\n style={{ maxHeight: \"320px\" }}\n >\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Name\" required={true} />\n </div>\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Number\" required={true} />\n </div>\n <BaseInput label=\"Expiry Date\" required={true} />\n <BaseInput label=\"CVV\" required={true} />\n </div>\n )}\n\n <BaseButton\n label={formIndex === 0 ? \"Proceed\" : \"Pay\"}\n type=\"primary\"\n customClass=\"w-full\"\n onClick={formIndex === 0 ? () => setFormIndex(1) : undefined}\n />\n </div>\n );\n}\n","import React from \"react\";\nimport { formatAmount, restrictToNumericKeys } from \"../../utils\";\nimport { BaseImage } from \"./image\";\n\ntype Rule = \"numeric\";\n\nexport interface IBaseInputProps {\n label?: string;\n type?: React.HTMLInputTypeAttribute; // 'text' by default\n placeholder?: string;\n validationError?: string;\n hint?: string;\n mask?: string; // (not implemented here)\n rules?: Rule[]; // e.g. ['numeric']\n isAmountInput?: boolean;\n required?: boolean;\n disabled?: boolean;\n loading?: boolean;\n showCopyIcon?: boolean;\n\n // Controlled/uncontrolled\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n\n // “Slots”\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n\n className?: string;\n}\n\nexport const BaseInput = ({\n label = \"\",\n type = \"text\",\n placeholder,\n validationError = \"\",\n hint = \"\",\n rules = [],\n isAmountInput = false,\n required = false,\n disabled = false,\n loading = false,\n showCopyIcon = false,\n\n value,\n defaultValue,\n onChange,\n onBlur,\n\n prefix,\n suffix,\n\n className = \"\",\n}: IBaseInputProps) => {\n const isControlled = value !== undefined;\n const [rawValue, setRawValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [localHint, setLocalHint] = React.useState<string>(\"\");\n const [localError, setLocalError] = React.useState<string>(\"\");\n\n // keep internal in sync with controlled value\n React.useEffect(() => {\n if (isControlled) setRawValue(value ?? \"\");\n }, [isControlled, value]);\n\n const formattedValue = isAmountInput\n ? formatAmount(rawValue.replace(/,/g, \"\"))\n : rawValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const incoming = e.target.value.replace(/,/g, \"\"); // strip commas before storing\n if (!isControlled) setRawValue(incoming);\n onChange?.(incoming);\n\n // Move caret to end after React updates (formatting can jump cursor)\n setTimeout(() => {\n const el = e.target;\n el.selectionStart = el.selectionEnd = el.value.length;\n });\n };\n\n const handleBlur = () => {\n onBlur?.(rawValue);\n };\n\n const handleKeyDown = (e: any) => {\n if (rules.includes(\"numeric\")) restrictToNumericKeys(e);\n };\n\n const containerBg = disabled ? \"bg-grey-50 cursor-not-allowed\" : \"bg-white\";\n const containerBorder =\n validationError || localError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100\";\n\n const copyToClipboard = (text: string): Promise<void> => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = (): void => {\n copyToClipboard(rawValue)\n .then(() => {\n setLocalHint(\"Text copied to clipboard\");\n })\n .catch((err) => {\n setLocalError(\"Failed to copy text to clipboard\");\n });\n };\n\n return (\n <div className={`flex flex-col gap-2 ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n <div\n className={`border-c px-3 py-2 flex items-center justify-between rounded-md h-12 ${containerBg} ${containerBorder}`}\n >\n {prefix}\n\n <input\n type={type}\n value={formattedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={\n placeholder ?? (label ? `Enter ${label.toLowerCase()}` : undefined)\n }\n inputMode={isAmountInput ? \"decimal\" : undefined}\n className=\"search-input bg-transparent outline-none border-none focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal w-full\"\n />\n\n {!loading ? (\n <>\n {suffix}\n\n {showCopyIcon && rawValue && rawValue.trim() !== \"\" && (\n <BaseImage\n src=\"assets/images/copyIcon.svg\"\n alt=\"copy\"\n width={16}\n height={16}\n customClass=\"cursor-pointer hover:opacity-70 transition-opacity\"\n onClick={copyHandler}\n />\n )}\n </>\n ) : (\n // Simple loader placeholder; swap for your icon component if desired\n <div className=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\" />\n )}\n </div>\n\n {(hint || localHint) && (\n <p className=\"text-body-3xs text-light-copy\">{localHint || hint}</p>\n )}\n\n {(validationError || localError) && (\n <p className=\"text-body-3xs text-red-500\">\n {localError || validationError}\n </p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { BaseButton, BaseCopy, BaseLabelInfo } from \"./base\";\n\ninterface IPayByTransferProps {\n amountDisplay?: string;\n bankName?: string;\n accountNumber?: string;\n initialSeconds?: number;\n onConfirmPaid?: () => void;\n onCancel?: () => void;\n}\n\nexport const PayByTransfer = ({\n amountDisplay = \"NGN 200,500.00\",\n bankName = \"Teerus MFB\",\n accountNumber = \"0001928940\",\n initialSeconds = 30 * 60,\n onConfirmPaid,\n onCancel,\n}: IPayByTransferProps) => {\n const [remaining, setRemaining] = useState<number>(initialSeconds);\n const intervalRef = useRef<number | null>(null);\n\n // format mm:ss\n const countDownTime = useMemo(() => {\n const clamped = Math.max(0, remaining);\n const m = Math.floor(clamped / 60);\n const s = clamped % 60;\n return `${String(m).padStart(2, \"0\")}:${String(s).padStart(2, \"0\")}`;\n }, [remaining]);\n\n useEffect(() => {\n // start timer\n intervalRef.current = window.setInterval(() => {\n setRemaining((prev) => prev - 1);\n }, 1000);\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n };\n }, []);\n\n // stop at zero\n useEffect(() => {\n if (remaining < 0 && intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, [remaining]);\n\n return (\n <div className=\"flex flex-col gap-10\">\n <p className=\"text-sub-copy text-sm font-semibold text-center\">\n Amount to Pay {amountDisplay}\n </p>\n\n <div className=\"bg-[#EFF7FF] p-4 rounded-lg flex flex-col gap-6\">\n <BaseLabelInfo label=\"Bank Name\" value={bankName} type=\"horizontal\" />\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Account Number\"\n value={accountNumber}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={accountNumber} />\n </div>\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Amount\"\n value={amountDisplay}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={amountDisplay} />\n </div>\n </div>\n\n <p className=\"w-2/3 mx-auto text-center text-body-2xs font-medium text-sub-copy\">\n This account is for this transaction only and expires in{\" \"}\n <span className=\"text-orange-500\">\n {remaining >= 0 ? countDownTime : \"00:00\"}\n </span>\n </p>\n\n <div className=\"flex flex-col gap-4\">\n <BaseButton\n label=\"I have paid the money\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={onConfirmPaid}\n />\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"text-heading-text text-body-2xs font-medium text-center py-2 cursor-pointer\"\n >\n Cancel Payment\n </button>\n </div>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n BaseButton,\n BaseCopy,\n BaseCurrencyAmount,\n BaseImage,\n BaseSelect,\n} from \"./base\";\nimport { IconArrowSwap } from \"./icons\";\n\ninterface IPayByStableCoinProps {\n onProceedToPay?: () => void; // fires when user clicks \"Pay\"\n}\n\nexport const PayByStableCoin = ({ onProceedToPay }: IPayByStableCoinProps) => {\n const [formIndex, setFormIndex] = useState<number>(0);\n\n const payHandler = () => {\n setFormIndex(1);\n onProceedToPay?.();\n };\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <>\n <div className=\"grid grid-cols-1 gap-6\">\n <BaseSelect\n label=\"Select Crypto\"\n required\n options={[\n { label: \"USDT\", value: \"USDT\" },\n { label: \"USDC\", value: \"USDC\" },\n { label: \"BUSD\", value: \"BUSD\" },\n ]}\n />\n\n <BaseSelect\n label=\"Select Network\"\n required\n options={[\n { label: \"Ethereum\", value: \"ETH\" },\n { label: \"Binance Smart Chain\", value: \"BSC\" },\n { label: \"Polygon\", value: \"MATIC\" },\n ]}\n />\n </div>\n\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={payHandler}\n />\n </>\n )}\n\n {formIndex === 1 && (\n <div className=\"flex flex-col gap-6\">\n <div className=\"mx-auto\">\n <BaseImage\n src=\"../../../assets/images/stable-coin-qr-code.png\"\n alt=\"QR Code\"\n width={122}\n height={122}\n customClass=\"mb-1\"\n />\n <p className=\"mb-0 text-body-4xs text-light-copy font-normal text-center\">\n USDC\n </p>\n </div>\n\n <div className=\"flex flex-col gap-6 border-c border-grey-100 p-4 rounded-2xl bg-light-white-50\">\n <div className=\"border-b border-grey-border pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Network\n </p>\n\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col gap-1\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy\">\n BNB Smart Chain (BEP20)\n </p>\n\n <div className=\"flex items-center gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n *Est. arrival = 3 mins\n </p>\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n |\n </p>\n\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={10}\n textClass=\"mb-0 text-body-3xs text-light-copy font-normal\"\n iconColorClass=\"#557591\"\n iconWidth={12}\n iconHeight={12}\n />\n </div>\n </div>\n\n <IconArrowSwap />\n </div>\n </div>\n\n <div className=\"pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Deposit Address &gt;\n </p>\n\n <div className=\"flex justify-between\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy w-2/3 break-words\">\n 0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\n </p>\n\n <BaseCopy copyText=\"0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\" />\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between border-b border-grey-border py-3\">\n <p className=\"mb-0 text-body-2xs font-medium text-primary-black\">\n Network fee\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={12}\n textClass=\"mb-0 text-body-2xs font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n />\n </div>\n\n <div className=\"flex items-center justify-between py-4\">\n <p className=\"mb-0 text-body-lg font-semibold text-primary-black\">\n Pay\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={15}\n textClass=\"mb-0 text-body-lg font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n iconWidth={20}\n iconHeight={20}\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-6\">\n <BaseButton\n label=\"Confirm Payment\"\n type=\"primary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","url","import_jsx_runtime","import_react","import_react","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","options"]}
package/dist/index.js CHANGED
@@ -1792,10 +1792,10 @@ function BzpCheckoutCard({
1792
1792
  /* @__PURE__ */ jsxs20("p", { className: "text-body-2xs font-regular text-sub-copy text-right", children: [
1793
1793
  "Pay:",
1794
1794
  " ",
1795
- /* @__PURE__ */ jsxs20("span", { className: "text-orange-500 font-extrabold", children: [
1796
- currencySign(paymentObject.currency),
1797
- " 100,051.00"
1798
- ] })
1795
+ /* @__PURE__ */ jsx30("span", { className: "text-orange-500 font-extrabold", children: formatAmount(
1796
+ paymentObject.amount,
1797
+ paymentObject.currency
1798
+ ) })
1799
1799
  ] })
1800
1800
  ] })
1801
1801
  ] }),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/provider.tsx","../src/hooks.ts","../src/buzapay-checkout/checkout-button.tsx","../src/utils/object.util.ts","../src/utils/api.util.ts","../src/utils/string.util.ts","../src/utils/input.util.ts","../src/apis/checkout.api.ts","../src/components/base/input-error.tsx","../src/components/icons/icon-loader.tsx","../src/components/icons/icon-chevron-left.tsx","../src/components/icons/icon-buzapay-icon.tsx","../src/components/icons/icon-check-circle.tsx","../src/components/icons/icon-copy-success.tsx","../src/components/icons/icon-chevron-up.tsx","../src/components/icons/icon-chevron-down.tsx","../src/components/icons/icon-usdt.tsx","../src/components/icons/icon-usdc.tsx","../src/components/icons/icon-arrow-swap.tsx","../src/components/base/button.tsx","../src/components/base/back.tsx","../src/components/base/card.tsx","../src/components/base/radio-group.tsx","../src/components/base/image.tsx","../src/components/base/copy.tsx","../src/components/base/label-info.tsx","../src/components/base/success.tsx","../src/components/base/hint.tsx","../src/components/base/select.tsx","../src/components/base/currency-amount.tsx","../src/buzapay-checkout/checkout-iframe.tsx","../src/buzapay-checkout/checkout-card.tsx","../src/components/pay-by-card.tsx","../src/components/base/input.tsx","../src/components/pay-by-transfer.tsx","../src/components/pay-by-stable-coin.tsx"],"sourcesContent":["import type {\n MidenPGConfig,\n CreatePaymentIntentParams,\n PaymentIntent,\n ConfirmCardPaymentParams,\n} from \"./types/types\";\n\nexport class MidenPGClient {\n private readonly base: string;\n constructor(private readonly cfg: MidenPGConfig) {\n this.base = cfg.apiBaseUrl ?? \"https://api.buzapay.com\"; // change to real base\n }\n\n async createPaymentIntent(\n params: CreatePaymentIntentParams\n ): Promise<PaymentIntent> {\n const res = await fetch(`${this.base}/v1/payment_intents`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to create PI: ${res.status}`);\n return res.json();\n }\n\n async confirmCardPayment(\n params: ConfirmCardPaymentParams\n ): Promise<{ status: PaymentIntent[\"status\"]; id: string }> {\n const res = await fetch(`${this.base}/v1/payment_intents/confirm`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to confirm: ${res.status}`);\n return res.json();\n }\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { MidenPGConfig } from \"./types/types\";\nimport { MidenPGClient } from \"./client\";\n\nconst Ctx = createContext<MidenPGClient | null>(null);\n\nexport const MidenPGProvider: React.FC<\n React.PropsWithChildren<{ config: MidenPGConfig }>\n> = ({ config, children }) => {\n const client = useMemo(\n () => new MidenPGClient(config),\n [config.publishableKey, config.apiBaseUrl]\n );\n return <Ctx.Provider value={client}>{children}</Ctx.Provider>;\n};\n\nexport const useMidenPGClient = () => {\n const ctx = useContext(Ctx);\n if (!ctx)\n throw new Error(\"useMidenPGClient must be used within MidenPGProvider\");\n return ctx;\n};\n","import { useCallback } from \"react\";\nimport { useMidenPGClient } from \"./provider\";\nimport type {\n ConfirmCardPaymentParams,\n CreatePaymentIntentParams,\n} from \"./types/types\";\n\nexport function usePaymentIntents() {\n const client = useMidenPGClient();\n\n const create = useCallback(\n (p: CreatePaymentIntentParams) => client.createPaymentIntent(p),\n [client]\n );\n const confirm = useCallback(\n (p: ConfirmCardPaymentParams) => client.confirmCardPayment(p),\n [client]\n );\n\n return { create, confirm };\n}\n","import { useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { BaseButton, BaseInputError } from \"../components/base\";\nimport { BzpCheckoutIframe } from \"./checkout-iframe\";\n\ninterface IBzpCheckoutButtonProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n mode?: \"redirect\" | \"iframe\";\n}\n\nexport function BzpCheckoutButton({\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n mode = \"redirect\",\n}: IBzpCheckoutButtonProps) {\n const [message, setMessage] = useState(\"\");\n const [launchUrl, setLaunchUrl] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const generatePaymentLinkHandler = async () => {\n if (!secretKey) {\n setMessage(\"Secret key is required.\");\n return;\n }\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n setMessage(\"Kindly ensure you are passing all the required data.\");\n return;\n }\n\n setLoading(true);\n setMessage(\"\");\n try {\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n\n if (response?.isSuccessful && response.launchUrl) {\n setLaunchUrl(response.launchUrl);\n setMessage(\"Payment link created successfully\");\n\n if (mode === \"redirect\") {\n // Use the URL from the response, not the (stale) state.\n window.open(response.launchUrl, \"_blank\", \"noopener,noreferrer\");\n }\n } else {\n setMessage(\"Failed to create payment link\");\n }\n } catch (e: any) {\n setMessage(e?.message || \"Failed to create payment link\");\n } finally {\n setLoading(false);\n }\n };\n\n return launchUrl && mode === \"iframe\" ? (\n <BzpCheckoutIframe\n url={launchUrl}\n secretKey={secretKey}\n environment={environment}\n />\n ) : (\n <div>\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n loading={loading}\n onClick={generatePaymentLinkHandler}\n />\n <BaseInputError errorMessage={message} />\n </div>\n );\n}\n","export const checkObjectTruthy = <T extends object>(obj: T): boolean => {\n if (obj == null || typeof obj !== \"object\") return false;\n return Object.values(obj as Record<string, unknown>).every(Boolean);\n};\n","export const getBaseUrl = (mode: string): string => {\n return mode === \"sandbox\"\n ? \"https://sandbox-api.midencards.io/payment-gateway-api\"\n : \"\";\n};\n","export const currencySign = (currency: string): string => {\n if (currency === \"USD\") return \"$\";\n if (currency === \"NGN\") return \"₦\";\n if (currency === \"EUR\") return \"€\";\n if (currency === \"GBP\") return \"£\";\n if (currency === \"JPY\") return \"¥\";\n if (currency === \"CNY\") return \"¥\";\n if (currency === \"USDC\" || currency === \"usdc\") return \"$⧫\";\n if (currency === \"USDT\" || currency === \"usdt\") return \"₮\";\n return \"$\";\n};\n\nexport const formatAmount = (\n value: number | string,\n currency?: string\n): string => {\n const num = typeof value === \"string\" ? parseFloat(value) : value;\n if (isNaN(num)) return \"0\";\n return `${currency ? currencySign(currency) : \"\"} ${num?.toLocaleString(\n \"en-US\"\n )}`;\n};\n\nexport const truncateString = (str: string, num: number): string => {\n if (str.length <= num) {\n return str;\n }\n return str.slice(0, num) + \"...\";\n};\n","export const restrictToNumericKeys = (event: KeyboardEvent): void => {\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n \"Home\",\n \"End\",\n \".\",\n ];\n\n if (\n (event.ctrlKey || event.metaKey) &&\n [\"a\", \"c\", \"v\", \"x\"].includes(event.key.toLowerCase())\n ) {\n return; // allow copy/paste/select\n }\n\n // Prevent non-numeric keys\n if (!allowedKeys.includes(event.key) && !/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n\n // Prevent multiple decimals\n if (\n event.key === \".\" &&\n (event.target as HTMLInputElement).value.includes(\".\")\n ) {\n event.preventDefault();\n }\n};\n","import { IPaymentObject } from \"../types\";\nimport { getBaseUrl } from \"../utils\";\n\nexport async function createPaymentLink(\n paymentObject: IPaymentObject,\n environment: string,\n secretKey: string\n): Promise<any> {\n try {\n const baseUrl = getBaseUrl(environment);\n const res = await fetch(\n `${baseUrl}/api/v1/checkout/generate-payment-link2`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n merchantId: secretKey,\n },\n body: JSON.stringify({\n ...paymentObject,\n LinkName: `${Date.now()}-Link`,\n }),\n }\n );\n return await res.json();\n } catch (error) {}\n}\n","interface IBaseInputErrorProps {\n errorMessage: string;\n}\n\nexport function BaseInputError({ errorMessage }: IBaseInputErrorProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-normal text-red-500\">\n {errorMessage}\n </p>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n size?: number | string;\n color?: string;\n className?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconLoader({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}: IIconProps) {\n return (\n <svg\n className={`animate-spin ${className}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role=\"img\"\n aria-label=\"loading\"\n {...props}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth={4}\n />\n <path\n className=\"opacity-75\"\n fill={color}\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronLeft({\n width = 17,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 14.28C10.3734 14.28 10.2467 14.2333 10.1467 14.1333L5.80002 9.78668C5.09335 9.08001 5.09335 7.92001 5.80002 7.21335L10.1467 2.86668C10.34 2.67335 10.66 2.67335 10.8534 2.86668C11.0467 3.06001 11.0467 3.38001 10.8534 3.57335L6.50669 7.92001C6.18669 8.24001 6.18669 8.76001 6.50669 9.08001L10.8534 13.4267C11.0467 13.62 11.0467 13.94 10.8534 14.1333C10.7534 14.2267 10.6267 14.28 10.5 14.28Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconBuzapayIcon({\n width = 15,\n height = 13,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 15 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M9.97919 0.5C10.8854 0.5 11.6276 0.585938 12.2057 0.757812C12.7891 0.924479 13.2188 1.22396 13.4948 1.65625C13.7761 2.08333 13.9167 2.6901 13.9167 3.47656C13.9167 4.1849 13.7526 4.77083 13.4245 5.23438C13.0964 5.69792 12.5938 5.95312 11.9167 6C12.8021 6.08854 13.4401 6.40625 13.8307 6.95312C14.2214 7.49479 14.4167 8.17708 14.4167 9C14.4167 9.71354 14.3334 10.2995 14.1667 10.7578C14.0052 11.2161 13.7318 11.5729 13.3464 11.8281C12.961 12.0781 12.4375 12.2526 11.7761 12.3516C11.1198 12.4505 10.2995 12.5 9.31512 12.5H0.416687V0.5H9.97919ZM2.91669 7.77344H5.97235V11.167L10.2497 5.22754H7.19501V1.83398L2.91669 7.77344ZM5.97235 6.07617H8.2702L7.19501 7.57324V6.9248H4.89716L5.97235 5.42676V6.07617Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCheckCircle({\n width = 67,\n height = 67,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M33.6705 0.0820312C15.2758 0.0820312 0.36377 14.9941 0.36377 33.3888C0.36377 51.7846 15.2758 66.6956 33.6705 66.6956C52.0663 66.6956 66.9773 51.7846 66.9773 33.3888C66.9773 14.9941 52.0663 0.0820312 33.6705 0.0820312ZM33.6705 62.5978C17.6011 62.5978 4.52712 49.4583 4.52712 33.3887C4.52712 17.3192 17.6011 4.24525 33.6705 4.24525C49.74 4.24525 62.814 17.3193 62.814 33.3887C62.814 49.4581 49.74 62.5978 33.6705 62.5978ZM46.9631 21.2016L27.4213 40.8662L18.621 32.0659C17.8081 31.253 16.4904 31.253 15.6765 32.0659C14.8636 32.8788 14.8636 34.1965 15.6765 35.0094L25.9797 45.3137C26.7926 46.1255 28.1103 46.1255 28.9243 45.3137C29.0179 45.22 29.0981 45.1179 29.171 45.0118L49.9086 24.1461C50.7205 23.3332 50.7205 22.0155 49.9086 21.2016C49.0947 20.3888 47.777 20.3888 46.9631 21.2016Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCopySuccess({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M11.4002 1.6875H8.60016C5.9935 1.6875 4.8335 2.8475 4.8335 5.45417V6.1875C4.8335 6.46083 5.06016 6.6875 5.3335 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V11.5208C10.1668 11.7942 10.3935 12.0208 10.6668 12.0208H11.4002C14.0068 12.0208 15.1668 10.8608 15.1668 8.25417V5.45417C15.1668 2.8475 14.0068 1.6875 11.4002 1.6875ZM5.8335 5.6875V5.45417C5.8335 3.3875 6.5335 2.6875 8.60016 2.6875H11.4002C13.4668 2.6875 14.1668 3.3875 14.1668 5.45417V8.25417C14.1668 10.3208 13.4668 11.0208 11.4002 11.0208H11.1668V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875H5.8335Z\"\n fill={color}\n />\n <path\n d=\"M7.40016 5.6875H4.60016C1.9935 5.6875 0.833496 6.8475 0.833496 9.45417V12.2542C0.833496 14.8608 1.9935 16.0208 4.60016 16.0208H7.40016C10.0068 16.0208 11.1668 14.8608 11.1668 12.2542V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875ZM4.60016 15.0208C2.5335 15.0208 1.8335 14.3208 1.8335 12.2542V9.45417C1.8335 7.3875 2.5335 6.6875 4.60016 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V12.2542C10.1668 14.3208 9.46683 15.0208 7.40016 15.0208H4.60016Z\"\n fill={color}\n />\n <path\n d=\"M5.35302 12.6542C5.22635 12.6542 5.09969 12.6075 4.99969 12.5075L3.69969 11.2075C3.50635 11.0142 3.50635 10.6942 3.69969 10.5008C3.89302 10.3075 4.21302 10.3075 4.40635 10.5008L5.35302 11.4475L7.59302 9.2075C7.78635 9.01417 8.10635 9.01417 8.29969 9.2075C8.49302 9.40083 8.49302 9.72083 8.29969 9.91417L5.69969 12.5075C5.60635 12.6008 5.47969 12.6542 5.35302 12.6542Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronUp({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.7\">\n <path\n d=\"M2.73508 9.73495L7.73508 4.73495C7.80539 4.66473 7.9007 4.62528 8.00008 4.62528C8.09945 4.62528 8.19476 4.66473 8.26508 4.73495L13.2651 9.73495C13.3313 9.80604 13.3674 9.90006 13.3657 9.99722C13.364 10.0944 13.3246 10.1871 13.2559 10.2558C13.1872 10.3245 13.0945 10.3638 12.9973 10.3655C12.9002 10.3673 12.8062 10.3312 12.7351 10.265L8.00008 5.53058L3.26508 10.265C3.19399 10.3312 3.09997 10.3673 3.00282 10.3655C2.90566 10.3638 2.81297 10.3245 2.74427 10.2558C2.67556 10.1871 2.6362 10.0944 2.63449 9.99722C2.63277 9.90006 2.66884 9.80604 2.73508 9.73495Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronDown({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.6\">\n <path\n d=\"M16.5813 7.83128L10.3313 14.0813C10.2434 14.1691 10.1242 14.2184 10 14.2184C9.87581 14.2184 9.75667 14.1691 9.66878 14.0813L3.41878 7.83128C3.33598 7.74242 3.2909 7.62489 3.29304 7.50345C3.29518 7.38201 3.34438 7.26615 3.43026 7.18026C3.51615 7.09438 3.63201 7.04518 3.75345 7.04304C3.87489 7.0409 3.99242 7.08598 4.08128 7.16878L10 13.0867L15.9188 7.16878C16.0076 7.08598 16.1252 7.0409 16.2466 7.04304C16.368 7.04518 16.4839 7.09438 16.5698 7.18026C16.6557 7.26615 16.7049 7.38201 16.707 7.50345C16.7092 7.62489 16.6641 7.74242 16.5813 7.83128Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdt({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387045)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28ZM15.6818 12.0689V9.99863H20.419V6.84162H7.52063V9.99863H12.2579V12.068C8.40787 12.2447 5.5125 13.0077 5.5125 13.9212C5.5125 14.8347 8.40787 15.5969 12.2579 15.7745V22.4088H15.6818V15.7727C19.5256 15.596 22.414 14.8339 22.414 13.9212C22.414 13.0086 19.5256 12.2465 15.6818 12.0689ZM15.6818 15.2101V15.2084C15.5855 15.2154 15.0894 15.2451 13.9825 15.2451C13.0987 15.2451 12.4766 15.2189 12.2579 15.2084V15.211C8.85587 15.0614 6.31662 14.469 6.31662 13.7602C6.31662 13.0524 8.85587 12.46 12.2579 12.3077V14.6212C12.4801 14.637 13.1171 14.6746 13.9974 14.6746C15.0535 14.6746 15.5829 14.6309 15.6818 14.6221V12.3095C19.0768 12.4609 21.6099 13.0532 21.6099 13.7602C21.6099 14.469 19.0768 15.0596 15.6818 15.2101Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387045\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdc({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387048)\">\n <path\n d=\"M14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0ZM16.933 4.865C16.7195 4.76 16.506 4.865 16.4535 5.07762C16.4001 5.131 16.4001 5.18438 16.4001 5.29025V6.034L16.4089 6.125C16.4546 6.30501 16.5652 6.46177 16.7195 6.56512C20.8792 8.05262 23.0125 12.6726 21.4655 16.7615C20.6657 18.9928 18.9061 20.6911 16.7195 21.4883C16.506 21.5941 16.4001 21.7534 16.4001 22.0194V22.7631L16.4045 22.8401C16.4128 22.9241 16.4479 23.0033 16.5047 23.0658C16.5614 23.1284 16.6367 23.171 16.7195 23.1875C16.7729 23.1875 16.8796 23.1875 16.933 23.135C18.1331 22.7602 19.2473 22.1517 20.2113 21.3446C21.1753 20.5375 21.9701 19.5476 22.5499 18.432C23.1298 17.3164 23.4833 16.0972 23.59 14.8444C23.6967 13.5917 23.5546 12.3302 23.1718 11.1326C22.2128 8.10512 19.866 5.8205 16.933 4.865ZM11.2805 4.8125C11.2271 4.8125 11.1204 4.8125 11.067 4.865C9.86688 5.23978 8.75274 5.84826 7.78874 6.6554C6.82475 7.46254 6.02993 8.4524 5.45006 9.56797C4.87019 10.6836 4.51673 11.9028 4.41001 13.1556C4.30329 14.4083 4.44543 15.6698 4.82825 16.8674C5.78725 19.8424 8.08062 22.1261 11.067 23.0816C11.2805 23.1875 11.494 23.0816 11.5465 22.869C11.5999 22.8165 11.5999 22.7622 11.5999 22.6564V21.9126L11.5911 21.8426C11.5544 21.6947 11.417 21.5259 11.2805 21.4349C7.12075 19.9474 4.9875 15.3274 6.5345 11.2385C7.33425 9.00725 9.09388 7.30887 11.2805 6.51175C11.494 6.40587 11.5999 6.24663 11.5999 5.98063V5.23688L11.5955 5.15987C11.5872 5.07585 11.5521 4.99673 11.4954 4.93418C11.4386 4.87163 11.3633 4.82898 11.2805 4.8125ZM14.3736 7.574H13.573L13.496 7.581C13.321 7.616 13.1933 7.7665 13.146 7.99925V9.22075L12.9649 9.24875C11.4704 9.51475 10.5341 10.5464 10.5341 11.823C10.5341 13.5748 11.5999 14.2651 13.8399 14.5311C15.3335 14.7963 15.813 15.1156 15.813 15.9653C15.813 16.814 15.0666 17.3985 14.0534 17.3985C12.6665 17.3985 12.187 16.8149 12.0269 16.0177C11.9744 15.806 11.8134 15.6992 11.6532 15.6992H10.7467L10.6776 15.7054C10.5913 15.7193 10.513 15.7641 10.4572 15.8313C10.4014 15.8985 10.3718 15.9838 10.374 16.0711V16.1236L10.4029 16.2811C10.6566 17.5271 11.5106 18.4187 13.2003 18.6734V19.9483L13.2072 20.0252C13.2422 20.1985 13.3936 20.3263 13.6273 20.3726H14.427L14.504 20.3656C14.679 20.3306 14.8067 20.1801 14.854 19.9483V18.6725L15.0351 18.6375C16.534 18.3207 17.5201 17.2366 17.5201 15.8576C17.5201 13.9991 16.4001 13.3621 14.1601 13.0961C12.5598 12.8835 12.2404 12.4591 12.2404 11.7154C12.2404 10.9716 12.7741 10.4939 13.8399 10.4939C14.7998 10.4939 15.3335 10.8124 15.5995 11.6095C15.6272 11.6866 15.6779 11.7533 15.7447 11.8007C15.8115 11.8481 15.8912 11.8739 15.9731 11.8746H16.8262L16.8954 11.8694C16.982 11.8556 17.0606 11.8108 17.1166 11.7434C17.1726 11.6759 17.2022 11.5904 17.1999 11.5027V11.4503L17.1675 11.2989C17.0361 10.755 16.7366 10.2664 16.3115 9.90255C15.8864 9.53872 15.3574 9.31821 14.7997 9.27238V7.99925L14.7928 7.92225C14.7578 7.74812 14.6073 7.62038 14.3736 7.574Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387048\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconArrowSwap({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.3265 14.1948C10.1998 14.1948 10.0731 14.1481 9.97313 14.0481C9.77979 13.8548 9.77979 13.5348 9.97313 13.3414L13.3131 10.0014C13.5065 9.80811 13.8265 9.80811 14.0198 10.0014C14.2131 10.1948 14.2131 10.5148 14.0198 10.7081L10.6798 14.0481C10.5798 14.1414 10.4531 14.1948 10.3265 14.1948Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 10.8477H2.3335C2.06016 10.8477 1.8335 10.621 1.8335 10.3477C1.8335 10.0743 2.06016 9.84766 2.3335 9.84766H13.6668C13.9402 9.84766 14.1668 10.0743 14.1668 10.3477C14.1668 10.621 13.9402 10.8477 13.6668 10.8477Z\"\n fill={color}\n />\n <path\n d=\"M2.33329 6.86079C2.20663 6.86079 2.07996 6.81413 1.97996 6.71413C1.78663 6.52079 1.78663 6.20079 1.97996 6.00746L5.31996 2.66746C5.51329 2.47413 5.83329 2.47413 6.02663 2.66746C6.21996 2.86079 6.21996 3.18079 6.02663 3.37413L2.68663 6.71413C2.59329 6.80746 2.45996 6.86079 2.33329 6.86079Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 6.86133H2.3335C2.06016 6.86133 1.8335 6.63466 1.8335 6.36133C1.8335 6.08799 2.06016 5.86133 2.3335 5.86133H13.6668C13.9402 5.86133 14.1668 6.08799 14.1668 6.36133C14.1668 6.63466 13.9402 6.86133 13.6668 6.86133Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import { IconLoader } from \"../icons\";\n\ninterface IBaseButtonProps {\n label: string;\n type?: string;\n size?: string;\n paddingClassX?: string;\n disabled?: boolean;\n loading?: boolean;\n customClass?: string;\n onClick?: () => void;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\n/** === Angular getters ported to React === */\nfunction getButtonBgClass(type: string, disabled?: boolean) {\n if (disabled)\n return \"bg-gray-200 text-gray-400 cursor-not-allowed border-gray-200\";\n switch (type) {\n case \"primary\":\n return \"bg-primary text-white hover:bg-primary-black hover:border-primary-black border-primary\";\n case \"secondary\":\n return \"bg-gray-200 border-gray-200 hover:bg-gray-300 text-heading-text\";\n case \"danger\":\n return \"bg-red-500 border-red-500 text-white hover:bg-red-600\";\n case \"neutral\":\n default:\n return \"bg-off-white border-grey-border hover:bg-gray-100\";\n }\n}\n\nfunction getButtonSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n return \"h-68px rounded-xl\";\n case \"md\":\n return \"h-42px rounded-lg\";\n case \"sm\":\n return \"h-32px rounded-md\";\n default:\n return \"h-68px rounded-xl\";\n }\n}\n\nfunction getLabelSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n case \"md\":\n case \"sm\":\n return \"text-body-2xs font-normal\";\n default:\n return \"text-body-xs font-normal\";\n }\n}\n\nexport function BaseButton({\n label,\n type = \"neutral\",\n size = \"de\",\n paddingClassX = \"px-8\",\n disabled = false,\n loading = false,\n customClass,\n onClick,\n prefix,\n suffix,\n children,\n}: React.PropsWithChildren<IBaseButtonProps>) {\n const isDisabled = disabled || loading;\n\n // Angular’s clickHandler -> emit only when not disabled\n const handleClick = () => {\n if (!isDisabled) onClick?.();\n };\n\n return (\n <button\n className={`flex items-center justify-center gap-2 py-3 border font-normal text-input-grey transition-colors duration-300 ease-in-out ${getButtonBgClass(\n type,\n isDisabled\n )} ${getButtonSizeClass(size)} ${paddingClassX} ${customClass}`}\n type=\"button\"\n disabled={isDisabled}\n onClick={handleClick}\n >\n {prefix}\n\n {loading ? (\n <IconLoader></IconLoader>\n ) : (\n <div>\n {label ? (\n <p className={`mb-0 ${getLabelSizeClass(size)}`}>{label}</p>\n ) : (\n <>{children}</>\n )}\n </div>\n )}\n\n {suffix}\n </button>\n );\n}\n","import { IconChevronLeft } from \"../icons\";\n\ninterface IBaseBackProps {\n back: () => void;\n}\n\nexport function BaseBack({ back }: IBaseBackProps) {\n return (\n <div className=\"flex items-center gap-2 cursor-pointer\" onClick={back}>\n <IconChevronLeft></IconChevronLeft>\n <p className=\"mb-0 text-body-xs font-normal\">Back</p>\n </div>\n );\n}\n","import { IconBuzapayIcon } from \"../icons\";\nimport { BaseBack } from \"./back\";\n\ninterface IBaseCardProps {\n showBackButton?: boolean;\n onBack?: () => void;\n children?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function BaseCard({\n showBackButton = false,\n onBack,\n children,\n onClose,\n}: IBaseCardProps) {\n return (\n <div className=\"checkout-card w-full h-screen flex flex-col items-center justify-center text-white\">\n <div className=\"flex w-1/2\">\n {showBackButton && <BaseBack back={() => onBack?.()} />}\n\n <div className=\"flex gap-2 w-full\">\n <div className=\"flex flex-col gap-8 w-full\">\n <div className=\"bg-off-white rounded-xl\">{children}</div>\n\n <div className=\"flex items-center gap-2 justify-center\">\n <p className=\"text-light-white-100 text-body-2xs font-regular\">\n Powered by Buzapay\n </p>\n <IconBuzapayIcon color=\"#E8F4FF\" />\n </div>\n </div>\n\n {/* Close Icon */}\n <div\n onClick={onClose}\n className=\"close-icon flex flex-col items-center justify-center self-start cursor-pointer hover:bg-gray-500\"\n >\n <p className=\"text-white\">x</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\n\ninterface IBaseRadioGroupProps {\n options: { label: string; value: string }[];\n type?: \"vertical\" | \"horizontal\";\n value?: string;\n defaultValue?: string;\n selectedChange?: (value: string) => void;\n className?: string;\n}\n\nexport const BaseRadioGroup = ({\n options,\n type = \"vertical\",\n value,\n defaultValue,\n selectedChange,\n className = \"\",\n}: IBaseRadioGroupProps) => {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<string>(\"\");\n\n useEffect(() => {\n if (isControlled) return;\n const initial =\n defaultValue ?? (options.length > 0 ? options[0].value : \"\");\n setInternal(initial);\n selectedChange?.(initial);\n }, [isControlled, defaultValue, options]);\n\n const selected = isControlled ? value! : internal;\n\n const setSelected = (v: string) => {\n if (!isControlled) setInternal(v);\n selectedChange?.(v);\n };\n\n const containerLayout =\n type === \"horizontal\" ? \"flex-row gap-5\" : \"flex-col gap-6\";\n\n return (\n <div\n className={`flex ${containerLayout} ${className}`}\n role=\"radiogroup\"\n aria-orientation={type === \"horizontal\" ? \"horizontal\" : \"vertical\"}\n tabIndex={0}\n >\n {options.map((option) => {\n const isActive = selected === option.value;\n return (\n <div\n key={option.value}\n role=\"radio\"\n aria-checked={isActive}\n tabIndex={-1}\n onClick={() => setSelected(option.value)}\n className=\"flex items-center gap-2 cursor-pointer transition-colors duration-200\"\n >\n <div\n className={[\n \"w-4 h-4 rounded-full border flex items-center justify-center\",\n isActive\n ? \"bg-orange-500 border-orange-500\"\n : \"bg-white border-grey-200\",\n ].join(\" \")}\n >\n {isActive && <div className=\"bg-white w-2 h-2 rounded-full\" />}\n </div>\n <p className=\"mb-0 text-body-2xs font-medium text-heading-text\">\n {option.label}\n </p>\n </div>\n );\n })}\n </div>\n );\n};\n","interface IBaseImageProps {\n src: string;\n height?: number | string;\n width?: number | string;\n alt?: string;\n customClass?: string;\n isFullWidth?: boolean;\n onClick?: () => void;\n}\n\nexport function BaseImage({\n src,\n height = 50,\n width = 50,\n alt = \"Image\",\n customClass,\n isFullWidth,\n onClick,\n}: IBaseImageProps) {\n return (\n <img\n src={src}\n height={height}\n alt={alt}\n className={`${customClass} ${isFullWidth ? \"w-full\" : \"\"}`}\n style={{ width: isFullWidth ? \"100%\" : `${width}px` }}\n onClick={onClick}\n />\n );\n}\n","import { IconCopySuccess } from \"../icons\";\n\ninterface IBaseCopyProps {\n copyText: string;\n color?: string;\n}\n\nexport function BaseCopy({ copyText, color }: IBaseCopyProps) {\n const copyToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = () => {\n copyToClipboard(copyText)\n .then(() => {})\n .catch((err: any) => {});\n };\n\n return (\n <IconCopySuccess\n className=\"cursor-pointer\"\n color={color}\n onClick={() => copyHandler()}\n />\n );\n}\n","import { BaseImage } from \".\";\nimport { truncateString } from \"../../utils\";\nimport { BaseCopy } from \"./copy\";\n\ninterface IBaseLabelInfoProps {\n type?: \"vertical\" | \"horizontal\";\n label?: string;\n labelCustomClass?: string;\n valueImageSrc?: string;\n valueImageCustomClass?: string;\n valueImagePosition?: \"prefix\" | \"suffix\";\n hasValueCopy?: boolean;\n value?: string;\n valueCustomClass?: string;\n alignRight?: boolean;\n}\n\nexport const BaseLabelInfo = ({\n type = \"vertical\",\n label = \"\",\n labelCustomClass = \"text-body-4xs font-medium text-light-copy\",\n valueImageSrc = \"\",\n valueImageCustomClass = \"\",\n valueImagePosition = \"prefix\",\n hasValueCopy = false,\n value = \"\",\n valueCustomClass = \"text-body-2xs font-medium text-sub-copy\",\n alignRight = false,\n}: IBaseLabelInfoProps) => {\n const showPrefixImg = valueImageSrc && valueImagePosition === \"prefix\";\n const showSuffixImg = valueImageSrc && valueImagePosition === \"suffix\";\n\n if (type === \"vertical\") {\n return (\n <div\n className={`flex flex-col gap-1 ${\n alignRight ? \"text-right items-end\" : \"\"\n }`}\n >\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n {!hasValueCopy ? (\n <p className={valueCustomClass}>{value}</p>\n ) : (\n <p className={`${valueCustomClass} truncate`}>\n {truncateString(value, 40)}\n </p>\n )}\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n }\n\n // horizontal\n return (\n <div className=\"flex items-center justify-between\">\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n <p className={valueCustomClass}>{value}</p>\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n};\n","import { BaseButton, BaseLabelInfo } from \".\";\nimport { IconCheckCircle } from \"../icons\";\n\ninterface IBaseSuccessProps {}\n\nexport const BaseSuccess = ({}: IBaseSuccessProps) => {\n return (\n <div className=\"flex flex-col gap-8 p-16\">\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex flex-col gap-8\">\n <IconCheckCircle color=\"#F47A1F\" className=\"mx-auto\" />\n\n <div className=\"flex flex-col text-center\" style={{ gap: \"2px\" }}>\n <p className=\"text-heading-text font-medium text-header-2xl\">\n ₦2,500.00\n </p>\n <p className=\"text-sub-copy font-regular text-body-3xs\">\n Has been paid successfully\n </p>\n </div>\n </div>\n\n <div className=\"flex flex-col\">\n <div className=\"py-4 border-b border-grey-100\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Order ID\"\n value=\"9900009000-8890-8829hd7\"\n />\n </div>\n\n <div className=\"py-4\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Payment date\"\n value=\"July 24, 2025\"\n />\n </div>\n </div>\n </div>\n\n <div className=\"mx-auto\" style={{ width: \"80%\" }}>\n <BaseButton\n label=\"Return to Merchant Website\"\n type=\"secondary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n );\n};\n","interface IBaseHintProps {\n hint: string;\n}\n\nexport function BaseHint({ hint }: IBaseHintProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-medium text-orange-500\">{hint}</p>\n );\n}\n","import React from \"react\";\nimport { IconChevronDown, IconChevronUp } from \"../icons\";\nimport { BaseHint } from \"./hint\";\nimport { BaseInputError } from \"./input-error\";\nimport { BaseImage } from \"./image\";\n\ntype ImageType = \"country\" | \"bank\" | null;\n\nexport interface SelectOption {\n label: string;\n value: string;\n countryCode?: string; // e.g. \"NG\"\n bankCode?: string;\n}\n\ninterface IBaseSelectProps {\n options: SelectOption[];\n value?: string; // controlled value\n defaultValue?: string; // uncontrolled initial value\n onChange?: (value: string) => void;\n\n placeholder?: string; // \"Select an option\" by default\n hasSearch?: boolean;\n disabled?: boolean;\n loading?: boolean;\n validationError?: string;\n label?: string;\n hint?: string;\n required?: boolean;\n itemImageType?: ImageType;\n\n prefix?: React.ReactNode; // slot before text in trigger\n\n className?: string;\n}\n\nexport const BaseSelect = ({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = \"Select an option\",\n hasSearch = true,\n disabled = false,\n loading = false,\n validationError = \"\",\n label = \"\",\n hint = \"\",\n required = false,\n itemImageType = null,\n prefix,\n className = \"\",\n}: IBaseSelectProps) => {\n const isControlled = value !== undefined;\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [filtered, setFiltered] = React.useState<SelectOption[]>(options);\n const [activeIndex, setActiveIndex] = React.useState<number>(-1);\n\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n // Keep internal state in sync for controlled usage\n React.useEffect(() => {\n if (isControlled) setInternalValue(value ?? \"\");\n }, [isControlled, value]);\n\n // Reset filtered list whenever options change\n React.useEffect(() => {\n setFiltered(options);\n }, [options]);\n\n const selected = React.useMemo(\n () =>\n options.find((o) => o.value === (isControlled ? value : internalValue)) ||\n null,\n [options, value, internalValue, isControlled]\n );\n\n const displayText =\n selected?.label ||\n placeholder ||\n (label ? `Select ${label}` : \"Select an option\");\n\n // Open/close helpers\n const openMenu = React.useCallback(() => {\n if (disabled || open) return;\n setFiltered(options);\n // set active index to current selection or first\n const idx = selected\n ? Math.max(\n 0,\n options.findIndex((o) => o.value === selected.value)\n )\n : 0;\n setActiveIndex(idx);\n setOpen(true);\n // focus search if enabled\n setTimeout(() => {\n if (hasSearch && searchRef.current) {\n searchRef.current.focus();\n searchRef.current.select();\n }\n });\n }, [disabled, open, options, selected, hasSearch]);\n\n const closeMenu = React.useCallback(() => {\n if (!open) return;\n setOpen(false);\n setActiveIndex(-1);\n }, [open]);\n\n const toggleMenu = React.useCallback(() => {\n if (disabled) return;\n open ? closeMenu() : openMenu();\n }, [open, disabled, openMenu, closeMenu]);\n\n // Outside click\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as Node;\n const tri = triggerRef.current;\n const menu = menuRef.current;\n if (tri && !tri.contains(t) && menu && !menu.contains(t)) closeMenu();\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, closeMenu]);\n\n // Selection\n const commit = (val: string) => {\n if (!isControlled) setInternalValue(val);\n onChange?.(val);\n closeMenu();\n };\n\n // Search\n const onSearchInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const q = e.target.value.toLowerCase();\n const list = options.filter((o) => o.label.toLowerCase().includes(q));\n setFiltered(list);\n setActiveIndex(list.length ? 0 : -1);\n };\n\n // Keyboard on trigger\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case \"Enter\":\n case \" \":\n case \"Spacebar\":\n case \"ArrowDown\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(-1);\n break;\n case \"Escape\":\n if (open) {\n e.preventDefault();\n closeMenu();\n }\n break;\n }\n };\n\n // Keyboard in menu\n const onMenuKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveActive(-1);\n break;\n case \"Home\":\n e.preventDefault();\n setActiveIndex(filtered.length ? 0 : -1);\n scrollActiveIntoView(0);\n break;\n case \"End\":\n e.preventDefault();\n setActiveIndex(filtered.length - 1);\n scrollActiveIntoView(filtered.length - 1);\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeIndex >= 0) {\n const opt = filtered[activeIndex];\n if (opt) commit(opt.value);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n closeMenu();\n break;\n case \"Tab\":\n closeMenu();\n break;\n }\n };\n\n const moveActive = (delta: number) => {\n if (!filtered.length) return;\n const max = filtered.length - 1;\n const next =\n activeIndex < 0 ? 0 : Math.min(max, Math.max(0, activeIndex + delta));\n setActiveIndex(next);\n scrollActiveIntoView(next);\n };\n\n const scrollActiveIntoView = (index: number) => {\n const menu = menuRef.current;\n if (!menu) return;\n const items = menu.querySelectorAll<HTMLElement>(\"[data-option]\");\n if (index >= 0 && index < items.length) {\n items[index]?.scrollIntoView({ block: \"nearest\" });\n }\n };\n\n // UI helpers\n const containerBg = disabled ? \"bg-grey-100 cursor-not-allowed\" : \"bg-white\";\n const containerBorder = validationError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100 bg-white\";\n\n return (\n <div className={`flex flex-col gap-2 relative ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n {/* Trigger */}\n <div\n ref={triggerRef}\n className={`border-c rounded-md flex items-center justify-between h-12 cursor-pointer px-3 py-2 ${containerBg} ${containerBorder}`}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? \"select-menu\" : undefined}\n aria-disabled={disabled || undefined}\n aria-activedescendant={\n open && activeIndex >= 0 ? `option-${activeIndex}` : undefined\n }\n tabIndex={0}\n onClick={toggleMenu}\n onKeyDown={onTriggerKeyDown}\n >\n <div className=\"flex items-center gap-2\">\n {prefix}\n\n <div className=\"flex items-center gap-2\">\n {selected &&\n itemImageType === \"country\" &&\n selected.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${selected.countryCode.toLowerCase()}.png`}\n alt={selected.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* Bank logos could be handled similarly here */}\n\n <p\n className={`text-body-2xs font-normal mb-0 ${\n selected?.label ? \"text-sub-copy\" : \"text-grey-500\"\n }`}\n >\n {displayText}\n </p>\n </div>\n </div>\n\n {loading ? (\n // Loader (replace with your own IconLoader if you have one)\n <span className=\"inline-block h-4 w-4 border-2 border-current border-t-transparent rounded-full animate-spin\" />\n ) : open ? (\n <IconChevronUp color=\"#8FAECA\" />\n ) : (\n <IconChevronDown color=\"#8FAECA\" />\n )}\n </div>\n\n {/* Menu */}\n {open && (\n <div\n ref={menuRef}\n id=\"select-menu\"\n className=\"border-c bg-white rounded-md border-grey-border text-body-xs font-normal text-input-grey w-full mt-2 max-h-22rem overflow-y-auto\"\n role=\"listbox\"\n aria-label={label || \"Options\"}\n style={{ position: \"absolute\", top: \"100%\", zIndex: 10 }}\n onKeyDown={onMenuKeyDown}\n >\n {hasSearch && (\n <div className=\"px-4 pt-2 pb-1\">\n <input\n ref={searchRef}\n type=\"text\"\n onChange={onSearchInput}\n placeholder={`Search ${label || \"options\"}`}\n className=\"bg-transparent outline-none border-b pb-2 w-full focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal\"\n />\n </div>\n )}\n\n {filtered.map((opt, i) => {\n const selectedOpt = selected?.value === opt.value;\n return (\n <div\n key={opt.value}\n onClick={() => commit(opt.value)}\n id={`option-${i}`}\n data-option\n role=\"option\"\n aria-selected={selectedOpt}\n className={`px-4 py-3 first:pt-0 hover:bg-gray-100 flex items-center gap-2 cursor-pointer ${\n i === activeIndex ? \"bg-gray-100\" : \"\"\n }`}\n >\n {itemImageType === \"country\" && opt.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${opt.countryCode.toLowerCase()}.png`}\n alt={opt.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* If you later add bank logos:\n {itemImageType === \"bank\" && (\n <img src={bankLogoHandler(opt.bankCode || opt.value)} alt={opt.value} width={28} className=\"rounded-lg\" />\n )} */}\n\n <p className=\"mb-0 text-body-2xs font-medium\">{opt.label}</p>\n </div>\n );\n })}\n </div>\n )}\n\n {hint && <BaseHint hint={hint} />}\n {validationError && <BaseInputError errorMessage={validationError} />}\n </div>\n );\n};\n","import { formatAmount } from \"../../utils\";\nimport { IconUsdc, IconUsdt } from \"../icons\";\n\ninterface IBaseCurrencyAmountProps {\n currency: string;\n amount: number | string;\n textClass?: string;\n iconColorClass?: string;\n iconWidth?: number | string;\n iconHeight?: number | string;\n}\n\nexport const BaseCurrencyAmount = ({\n currency,\n amount,\n textClass = \"\",\n iconColorClass = \"\",\n iconWidth = 16,\n iconHeight = 16,\n}: IBaseCurrencyAmountProps) => {\n const cur = currency?.toUpperCase();\n\n if (cur !== \"USDT\" && cur !== \"USDC\") {\n return <p className={textClass}>{formatAmount(amount, cur)}</p>;\n }\n\n return (\n <div className=\"flex items-center gap-1\">\n {cur === \"USDT\" && (\n <IconUsdt\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n {cur === \"USDC\" && (\n <IconUsdc\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n <p className={textClass}>{formatAmount(amount)}</p>\n </div>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { IconLoader } from \"../components/icons\";\n\ninterface IIframeStyle {\n width?: string;\n height?: string;\n border?: string;\n borderRadius?: string;\n overflow?: string;\n}\n\ninterface IBzpCheckoutIframeProps {\n style?: IIframeStyle;\n url?: string;\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject?: IPaymentObject;\n}\n\nexport function BzpCheckoutIframe({\n style = {\n width: \"100%\",\n height: \"100vh\",\n border: \"0\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n },\n url,\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutIframeProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n\n const [message, setMessage] = useState<string>(\"\");\n const [launchUrl, setLaunchUrl] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const launchIframe = useCallback(\n (url: string) => {\n // remove prior iframe if any\n if (iframeRef.current && iframeRef.current.parentNode) {\n iframeRef.current.parentNode.removeChild(iframeRef.current);\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n\n if (style.width) iframe.style.width = style.width;\n if (style.height) iframe.style.height = style.height;\n if (style.border) iframe.style.border = style.border;\n if (style.borderRadius) iframe.style.borderRadius = style.borderRadius;\n if (style.overflow) iframe.style.overflow = style.overflow;\n\n containerRef.current?.appendChild(iframe);\n iframeRef.current = iframe;\n },\n [style]\n );\n\n const generatePaymentLinkHandler = async () => {\n if (url) {\n launchIframe(url);\n return;\n }\n\n if (!secretKey) {\n return setMessage(\"Secret key is required.\");\n }\n\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n return setMessage(\"Secret key is required.\");\n }\n\n setLoading(true);\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n if (response?.isSuccessful) {\n setLaunchUrl(response.launchUrl ?? \"\");\n setMessage(\"Payment link created successfully\");\n if (response.launchUrl) {\n setLoading(false);\n launchIframe(response.launchUrl);\n }\n } else {\n setLoading(false);\n setMessage(\"Failed to create payment link\");\n }\n };\n\n useEffect(() => {\n if (!containerRef.current) return; // only run if div is mounted\n generatePaymentLinkHandler();\n }, []);\n\n return (\n <div className=\"relative\" style={style}>\n <div ref={containerRef} className=\"w-full h-full\"></div>\n {loading && (\n <div className=\"absolute inset-0 grid place-items-center bg-white/60\">\n <IconLoader></IconLoader>\n </div>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { BaseCard } from \"../components/base/card\";\nimport { BaseImage, BaseRadioGroup, BaseSuccess } from \"../components/base\";\nimport { PayByCard } from \"../components/pay-by-card\";\nimport { PayByTransfer } from \"../components/pay-by-transfer\";\nimport { PayByStableCoin } from \"../components/pay-by-stable-coin\";\nimport { IPaymentObject, ISelectOption } from \"../types\";\nimport { currencySign } from \"../utils\";\n\nexport interface CheckoutIframeStyle {\n [cssProp: string]: string | number;\n}\n\nexport interface CheckoutCardOptions {\n imageUrl?: string;\n numberPlaceholder?: string;\n expiryPlaceholder?: string;\n cvcPlaceholder?: string;\n styles?: {\n base?: CheckoutIframeStyle;\n invalid?: CheckoutIframeStyle;\n focus?: CheckoutIframeStyle;\n };\n}\n\ninterface IBzpCheckoutCardProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n options?: CheckoutCardOptions;\n}\n\nexport function BzpCheckoutCard({\n options,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutCardProps) {\n const [checkoutState, setCheckoutState] = useState<\n \"STABLE_COIN_PAYMENT\" | \"PAYMENT\" | \"SUCCESS\"\n >(\"PAYMENT\");\n\n const paymentTypeOptions: ISelectOption[] = [\n { label: \"Card\", value: \"CARD\" },\n { label: \"Bank Transfer\", value: \"BANK_TRANSFER\" },\n { label: \"Stable Coin\", value: \"STABLE_COIN\" },\n ];\n const [filteredPaymentTypeOptions, setFilteredPaymentTypeOptions] = useState<\n ISelectOption[]\n >([]);\n const [paymentType, setPaymentType] = useState<string>(\"\");\n\n const paymentTypeHandler = (event: string): void => {\n setPaymentType(event);\n };\n\n useEffect(() => {\n let options: ISelectOption[] = [];\n if (paymentObject.currency === \"USD\") {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"BANK_TRANSFER\"\n );\n } else {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"STABLE_COIN\"\n );\n }\n\n setFilteredPaymentTypeOptions(options);\n }, [paymentObject.currency]);\n\n useEffect(() => {\n if (filteredPaymentTypeOptions.length) {\n setPaymentType(filteredPaymentTypeOptions[0].value);\n }\n }, [filteredPaymentTypeOptions]);\n\n return (\n <BaseCard showBackButton={checkoutState === \"STABLE_COIN_PAYMENT\"}>\n <div className=\"grid grid-cols-3\">\n {checkoutState === \"PAYMENT\" && (\n <div className=\"bg-[#EFF7FF] px-6 py-8 flex flex-col gap-5 col-span-1 rounded-l-xl\">\n <p className=\"text-heading-text text-body-xs font-semibold\">\n Pay with\n </p>\n <BaseRadioGroup\n options={paymentTypeOptions}\n selectedChange={(e: string) => paymentTypeHandler(e)}\n />\n </div>\n )}\n\n <div className=\"col-span-2\">\n {(checkoutState === \"PAYMENT\" ||\n checkoutState === \"STABLE_COIN_PAYMENT\") && (\n <div>\n {checkoutState === \"PAYMENT\" && (\n <div className=\"flex items-center justify-between px-12 py-8\">\n {options?.imageUrl ? (\n <BaseImage\n src={options?.imageUrl ?? \"\"}\n alt=\"Merchant Logo\"\n width={52}\n height={52}\n customClass=\"rounded-lg\"\n />\n ) : (\n <div\n className=\"bg-heading-text rounded flex flex-col justify-center\"\n style={{ width: \"52px\", height: \"52px\" }}\n >\n <p className=\"text-white text-center text-body-2xs font-medium\">\n Logo\n </p>\n </div>\n )}\n\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Raymahni Merchant LLC\n </p>\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Pay:{\" \"}\n <span className=\"text-orange-500 font-extrabold\">\n {currencySign(paymentObject.currency)} 100,051.00\n </span>\n </p>\n </div>\n </div>\n )}\n\n <div className=\"overflow-y-scroll px-10 pb-10 pt-2\">\n {paymentType === \"CARD\" ? (\n <PayByCard />\n ) : paymentType === \"BANK_TRANSFER\" ? (\n <PayByTransfer />\n ) : (\n <PayByStableCoin\n onProceedToPay={() =>\n setCheckoutState(\"STABLE_COIN_PAYMENT\")\n }\n />\n )}\n </div>\n </div>\n )}\n\n {checkoutState === \"SUCCESS\" && <BaseSuccess />}\n </div>\n </div>\n </BaseCard>\n );\n}\n","import { useState } from \"react\";\nimport { BaseInput } from \"./base/input\";\nimport { BaseButton, BaseSelect } from \"./base\";\n\ninterface IPayByCardProps {}\n\nexport function PayByCard({}: IPayByCardProps) {\n const [formIndex, setFormIndex] = useState(0);\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <div className=\"grid grid-cols-2 gap-6 overflow-y-auto\">\n <BaseInput label=\"First Name\" required={true} />\n <BaseInput label=\"Last Name\" required={true} />\n <BaseInput label=\"Email\" required={true} />\n <BaseInput label=\"Phone Number\" required={true} />\n <BaseSelect\n label=\"Select Country\"\n required={true}\n options={[\n { label: \"United States\", value: \"US\" },\n { label: \"Canada\", value: \"CA\" },\n { label: \"United Kingdom\", value: \"UK\" },\n ]}\n />\n <BaseSelect\n label=\"Select State\"\n required={true}\n options={[\n { label: \"California\", value: \"CA\" },\n { label: \"Texas\", value: \"TX\" },\n { label: \"New York\", value: \"NY\" },\n ]}\n />\n <BaseInput label=\"City\" required={true} />\n <BaseInput label=\"Postal Code\" required={true} />\n <div className=\"col-span-2\">\n <BaseInput label=\"Street Address\" required={true} />\n </div>\n </div>\n )}\n\n {formIndex === 1 && (\n <div\n className=\"grid grid-cols-2 gap-6 overflow-y-auto\"\n style={{ maxHeight: \"320px\" }}\n >\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Name\" required={true} />\n </div>\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Number\" required={true} />\n </div>\n <BaseInput label=\"Expiry Date\" required={true} />\n <BaseInput label=\"CVV\" required={true} />\n </div>\n )}\n\n <BaseButton\n label={formIndex === 0 ? \"Proceed\" : \"Pay\"}\n type=\"primary\"\n customClass=\"w-full\"\n onClick={formIndex === 0 ? () => setFormIndex(1) : undefined}\n />\n </div>\n );\n}\n","import React from \"react\";\nimport { formatAmount, restrictToNumericKeys } from \"../../utils\";\nimport { BaseImage } from \"./image\";\n\ntype Rule = \"numeric\";\n\nexport interface IBaseInputProps {\n label?: string;\n type?: React.HTMLInputTypeAttribute; // 'text' by default\n placeholder?: string;\n validationError?: string;\n hint?: string;\n mask?: string; // (not implemented here)\n rules?: Rule[]; // e.g. ['numeric']\n isAmountInput?: boolean;\n required?: boolean;\n disabled?: boolean;\n loading?: boolean;\n showCopyIcon?: boolean;\n\n // Controlled/uncontrolled\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n\n // “Slots”\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n\n className?: string;\n}\n\nexport const BaseInput = ({\n label = \"\",\n type = \"text\",\n placeholder,\n validationError = \"\",\n hint = \"\",\n rules = [],\n isAmountInput = false,\n required = false,\n disabled = false,\n loading = false,\n showCopyIcon = false,\n\n value,\n defaultValue,\n onChange,\n onBlur,\n\n prefix,\n suffix,\n\n className = \"\",\n}: IBaseInputProps) => {\n const isControlled = value !== undefined;\n const [rawValue, setRawValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [localHint, setLocalHint] = React.useState<string>(\"\");\n const [localError, setLocalError] = React.useState<string>(\"\");\n\n // keep internal in sync with controlled value\n React.useEffect(() => {\n if (isControlled) setRawValue(value ?? \"\");\n }, [isControlled, value]);\n\n const formattedValue = isAmountInput\n ? formatAmount(rawValue.replace(/,/g, \"\"))\n : rawValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const incoming = e.target.value.replace(/,/g, \"\"); // strip commas before storing\n if (!isControlled) setRawValue(incoming);\n onChange?.(incoming);\n\n // Move caret to end after React updates (formatting can jump cursor)\n setTimeout(() => {\n const el = e.target;\n el.selectionStart = el.selectionEnd = el.value.length;\n });\n };\n\n const handleBlur = () => {\n onBlur?.(rawValue);\n };\n\n const handleKeyDown = (e: any) => {\n if (rules.includes(\"numeric\")) restrictToNumericKeys(e);\n };\n\n const containerBg = disabled ? \"bg-grey-50 cursor-not-allowed\" : \"bg-white\";\n const containerBorder =\n validationError || localError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100\";\n\n const copyToClipboard = (text: string): Promise<void> => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = (): void => {\n copyToClipboard(rawValue)\n .then(() => {\n setLocalHint(\"Text copied to clipboard\");\n })\n .catch((err) => {\n setLocalError(\"Failed to copy text to clipboard\");\n });\n };\n\n return (\n <div className={`flex flex-col gap-2 ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n <div\n className={`border-c px-3 py-2 flex items-center justify-between rounded-md h-12 ${containerBg} ${containerBorder}`}\n >\n {prefix}\n\n <input\n type={type}\n value={formattedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={\n placeholder ?? (label ? `Enter ${label.toLowerCase()}` : undefined)\n }\n inputMode={isAmountInput ? \"decimal\" : undefined}\n className=\"search-input bg-transparent outline-none border-none focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal w-full\"\n />\n\n {!loading ? (\n <>\n {suffix}\n\n {showCopyIcon && rawValue && rawValue.trim() !== \"\" && (\n <BaseImage\n src=\"assets/images/copyIcon.svg\"\n alt=\"copy\"\n width={16}\n height={16}\n customClass=\"cursor-pointer hover:opacity-70 transition-opacity\"\n onClick={copyHandler}\n />\n )}\n </>\n ) : (\n // Simple loader placeholder; swap for your icon component if desired\n <div className=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\" />\n )}\n </div>\n\n {(hint || localHint) && (\n <p className=\"text-body-3xs text-light-copy\">{localHint || hint}</p>\n )}\n\n {(validationError || localError) && (\n <p className=\"text-body-3xs text-red-500\">\n {localError || validationError}\n </p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { BaseButton, BaseCopy, BaseLabelInfo } from \"./base\";\n\ninterface IPayByTransferProps {\n amountDisplay?: string;\n bankName?: string;\n accountNumber?: string;\n initialSeconds?: number;\n onConfirmPaid?: () => void;\n onCancel?: () => void;\n}\n\nexport const PayByTransfer = ({\n amountDisplay = \"NGN 200,500.00\",\n bankName = \"Teerus MFB\",\n accountNumber = \"0001928940\",\n initialSeconds = 30 * 60,\n onConfirmPaid,\n onCancel,\n}: IPayByTransferProps) => {\n const [remaining, setRemaining] = useState<number>(initialSeconds);\n const intervalRef = useRef<number | null>(null);\n\n // format mm:ss\n const countDownTime = useMemo(() => {\n const clamped = Math.max(0, remaining);\n const m = Math.floor(clamped / 60);\n const s = clamped % 60;\n return `${String(m).padStart(2, \"0\")}:${String(s).padStart(2, \"0\")}`;\n }, [remaining]);\n\n useEffect(() => {\n // start timer\n intervalRef.current = window.setInterval(() => {\n setRemaining((prev) => prev - 1);\n }, 1000);\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n };\n }, []);\n\n // stop at zero\n useEffect(() => {\n if (remaining < 0 && intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, [remaining]);\n\n return (\n <div className=\"flex flex-col gap-10\">\n <p className=\"text-sub-copy text-sm font-semibold text-center\">\n Amount to Pay {amountDisplay}\n </p>\n\n <div className=\"bg-[#EFF7FF] p-4 rounded-lg flex flex-col gap-6\">\n <BaseLabelInfo label=\"Bank Name\" value={bankName} type=\"horizontal\" />\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Account Number\"\n value={accountNumber}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={accountNumber} />\n </div>\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Amount\"\n value={amountDisplay}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={amountDisplay} />\n </div>\n </div>\n\n <p className=\"w-2/3 mx-auto text-center text-body-2xs font-medium text-sub-copy\">\n This account is for this transaction only and expires in{\" \"}\n <span className=\"text-orange-500\">\n {remaining >= 0 ? countDownTime : \"00:00\"}\n </span>\n </p>\n\n <div className=\"flex flex-col gap-4\">\n <BaseButton\n label=\"I have paid the money\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={onConfirmPaid}\n />\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"text-heading-text text-body-2xs font-medium text-center py-2 cursor-pointer\"\n >\n Cancel Payment\n </button>\n </div>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n BaseButton,\n BaseCopy,\n BaseCurrencyAmount,\n BaseImage,\n BaseSelect,\n} from \"./base\";\nimport { IconArrowSwap } from \"./icons\";\n\ninterface IPayByStableCoinProps {\n onProceedToPay?: () => void; // fires when user clicks \"Pay\"\n}\n\nexport const PayByStableCoin = ({ onProceedToPay }: IPayByStableCoinProps) => {\n const [formIndex, setFormIndex] = useState<number>(0);\n\n const payHandler = () => {\n setFormIndex(1);\n onProceedToPay?.();\n };\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <>\n <div className=\"grid grid-cols-1 gap-6\">\n <BaseSelect\n label=\"Select Crypto\"\n required\n options={[\n { label: \"USDT\", value: \"USDT\" },\n { label: \"USDC\", value: \"USDC\" },\n { label: \"BUSD\", value: \"BUSD\" },\n ]}\n />\n\n <BaseSelect\n label=\"Select Network\"\n required\n options={[\n { label: \"Ethereum\", value: \"ETH\" },\n { label: \"Binance Smart Chain\", value: \"BSC\" },\n { label: \"Polygon\", value: \"MATIC\" },\n ]}\n />\n </div>\n\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={payHandler}\n />\n </>\n )}\n\n {formIndex === 1 && (\n <div className=\"flex flex-col gap-6\">\n <div className=\"mx-auto\">\n <BaseImage\n src=\"../../../assets/images/stable-coin-qr-code.png\"\n alt=\"QR Code\"\n width={122}\n height={122}\n customClass=\"mb-1\"\n />\n <p className=\"mb-0 text-body-4xs text-light-copy font-normal text-center\">\n USDC\n </p>\n </div>\n\n <div className=\"flex flex-col gap-6 border-c border-grey-100 p-4 rounded-2xl bg-light-white-50\">\n <div className=\"border-b border-grey-border pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Network\n </p>\n\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col gap-1\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy\">\n BNB Smart Chain (BEP20)\n </p>\n\n <div className=\"flex items-center gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n *Est. arrival = 3 mins\n </p>\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n |\n </p>\n\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={10}\n textClass=\"mb-0 text-body-3xs text-light-copy font-normal\"\n iconColorClass=\"#557591\"\n iconWidth={12}\n iconHeight={12}\n />\n </div>\n </div>\n\n <IconArrowSwap />\n </div>\n </div>\n\n <div className=\"pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Deposit Address &gt;\n </p>\n\n <div className=\"flex justify-between\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy w-2/3 break-words\">\n 0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\n </p>\n\n <BaseCopy copyText=\"0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\" />\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between border-b border-grey-border py-3\">\n <p className=\"mb-0 text-body-2xs font-medium text-primary-black\">\n Network fee\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={12}\n textClass=\"mb-0 text-body-2xs font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n />\n </div>\n\n <div className=\"flex items-center justify-between py-4\">\n <p className=\"mb-0 text-body-lg font-semibold text-primary-black\">\n Pay\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={15}\n textClass=\"mb-0 text-body-lg font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n iconWidth={20}\n iconHeight={20}\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-6\">\n <BaseButton\n label=\"Confirm Payment\"\n type=\"primary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["useState","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","React","jsx","jsxs","React","jsx","jsxs","useCallback","useEffect","useState","jsx","jsxs","useState","useCallback","url","useEffect","jsx","jsxs","useState","useEffect","useState","useState","React","Fragment","jsx","jsxs","React","jsx","jsxs","useState","useEffect","useMemo","useRef","useState","jsx","jsxs","useState","useRef","useMemo","useEffect","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","useState","useEffect","options"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/provider.tsx","../src/hooks.ts","../src/buzapay-checkout/checkout-button.tsx","../src/utils/object.util.ts","../src/utils/api.util.ts","../src/utils/string.util.ts","../src/utils/input.util.ts","../src/apis/checkout.api.ts","../src/components/base/input-error.tsx","../src/components/icons/icon-loader.tsx","../src/components/icons/icon-chevron-left.tsx","../src/components/icons/icon-buzapay-icon.tsx","../src/components/icons/icon-check-circle.tsx","../src/components/icons/icon-copy-success.tsx","../src/components/icons/icon-chevron-up.tsx","../src/components/icons/icon-chevron-down.tsx","../src/components/icons/icon-usdt.tsx","../src/components/icons/icon-usdc.tsx","../src/components/icons/icon-arrow-swap.tsx","../src/components/base/button.tsx","../src/components/base/back.tsx","../src/components/base/card.tsx","../src/components/base/radio-group.tsx","../src/components/base/image.tsx","../src/components/base/copy.tsx","../src/components/base/label-info.tsx","../src/components/base/success.tsx","../src/components/base/hint.tsx","../src/components/base/select.tsx","../src/components/base/currency-amount.tsx","../src/buzapay-checkout/checkout-iframe.tsx","../src/buzapay-checkout/checkout-card.tsx","../src/components/pay-by-card.tsx","../src/components/base/input.tsx","../src/components/pay-by-transfer.tsx","../src/components/pay-by-stable-coin.tsx"],"sourcesContent":["import type {\n MidenPGConfig,\n CreatePaymentIntentParams,\n PaymentIntent,\n ConfirmCardPaymentParams,\n} from \"./types/types\";\n\nexport class MidenPGClient {\n private readonly base: string;\n constructor(private readonly cfg: MidenPGConfig) {\n this.base = cfg.apiBaseUrl ?? \"https://api.buzapay.com\"; // change to real base\n }\n\n async createPaymentIntent(\n params: CreatePaymentIntentParams\n ): Promise<PaymentIntent> {\n const res = await fetch(`${this.base}/v1/payment_intents`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to create PI: ${res.status}`);\n return res.json();\n }\n\n async confirmCardPayment(\n params: ConfirmCardPaymentParams\n ): Promise<{ status: PaymentIntent[\"status\"]; id: string }> {\n const res = await fetch(`${this.base}/v1/payment_intents/confirm`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Publishable-Key\": this.cfg.publishableKey,\n },\n body: JSON.stringify(params),\n });\n if (!res.ok) throw new Error(`Failed to confirm: ${res.status}`);\n return res.json();\n }\n}\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { MidenPGConfig } from \"./types/types\";\nimport { MidenPGClient } from \"./client\";\n\nconst Ctx = createContext<MidenPGClient | null>(null);\n\nexport const MidenPGProvider: React.FC<\n React.PropsWithChildren<{ config: MidenPGConfig }>\n> = ({ config, children }) => {\n const client = useMemo(\n () => new MidenPGClient(config),\n [config.publishableKey, config.apiBaseUrl]\n );\n return <Ctx.Provider value={client}>{children}</Ctx.Provider>;\n};\n\nexport const useMidenPGClient = () => {\n const ctx = useContext(Ctx);\n if (!ctx)\n throw new Error(\"useMidenPGClient must be used within MidenPGProvider\");\n return ctx;\n};\n","import { useCallback } from \"react\";\nimport { useMidenPGClient } from \"./provider\";\nimport type {\n ConfirmCardPaymentParams,\n CreatePaymentIntentParams,\n} from \"./types/types\";\n\nexport function usePaymentIntents() {\n const client = useMidenPGClient();\n\n const create = useCallback(\n (p: CreatePaymentIntentParams) => client.createPaymentIntent(p),\n [client]\n );\n const confirm = useCallback(\n (p: ConfirmCardPaymentParams) => client.confirmCardPayment(p),\n [client]\n );\n\n return { create, confirm };\n}\n","import { useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { BaseButton, BaseInputError } from \"../components/base\";\nimport { BzpCheckoutIframe } from \"./checkout-iframe\";\n\ninterface IBzpCheckoutButtonProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n mode?: \"redirect\" | \"iframe\";\n}\n\nexport function BzpCheckoutButton({\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n mode = \"redirect\",\n}: IBzpCheckoutButtonProps) {\n const [message, setMessage] = useState(\"\");\n const [launchUrl, setLaunchUrl] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const generatePaymentLinkHandler = async () => {\n if (!secretKey) {\n setMessage(\"Secret key is required.\");\n return;\n }\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n setMessage(\"Kindly ensure you are passing all the required data.\");\n return;\n }\n\n setLoading(true);\n setMessage(\"\");\n try {\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n\n if (response?.isSuccessful && response.launchUrl) {\n setLaunchUrl(response.launchUrl);\n setMessage(\"Payment link created successfully\");\n\n if (mode === \"redirect\") {\n // Use the URL from the response, not the (stale) state.\n window.open(response.launchUrl, \"_blank\", \"noopener,noreferrer\");\n }\n } else {\n setMessage(\"Failed to create payment link\");\n }\n } catch (e: any) {\n setMessage(e?.message || \"Failed to create payment link\");\n } finally {\n setLoading(false);\n }\n };\n\n return launchUrl && mode === \"iframe\" ? (\n <BzpCheckoutIframe\n url={launchUrl}\n secretKey={secretKey}\n environment={environment}\n />\n ) : (\n <div>\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n loading={loading}\n onClick={generatePaymentLinkHandler}\n />\n <BaseInputError errorMessage={message} />\n </div>\n );\n}\n","export const checkObjectTruthy = <T extends object>(obj: T): boolean => {\n if (obj == null || typeof obj !== \"object\") return false;\n return Object.values(obj as Record<string, unknown>).every(Boolean);\n};\n","export const getBaseUrl = (mode: string): string => {\n return mode === \"sandbox\"\n ? \"https://sandbox-api.midencards.io/payment-gateway-api\"\n : \"\";\n};\n","export const currencySign = (currency: string): string => {\n if (currency === \"USD\") return \"$\";\n if (currency === \"NGN\") return \"₦\";\n if (currency === \"EUR\") return \"€\";\n if (currency === \"GBP\") return \"£\";\n if (currency === \"JPY\") return \"¥\";\n if (currency === \"CNY\") return \"¥\";\n if (currency === \"USDC\" || currency === \"usdc\") return \"$⧫\";\n if (currency === \"USDT\" || currency === \"usdt\") return \"₮\";\n return \"$\";\n};\n\nexport const formatAmount = (\n value: number | string,\n currency?: string\n): string => {\n const num = typeof value === \"string\" ? parseFloat(value) : value;\n if (isNaN(num)) return \"0\";\n return `${currency ? currencySign(currency) : \"\"} ${num?.toLocaleString(\n \"en-US\"\n )}`;\n};\n\nexport const truncateString = (str: string, num: number): string => {\n if (str.length <= num) {\n return str;\n }\n return str.slice(0, num) + \"...\";\n};\n","export const restrictToNumericKeys = (event: KeyboardEvent): void => {\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n \"Home\",\n \"End\",\n \".\",\n ];\n\n if (\n (event.ctrlKey || event.metaKey) &&\n [\"a\", \"c\", \"v\", \"x\"].includes(event.key.toLowerCase())\n ) {\n return; // allow copy/paste/select\n }\n\n // Prevent non-numeric keys\n if (!allowedKeys.includes(event.key) && !/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n\n // Prevent multiple decimals\n if (\n event.key === \".\" &&\n (event.target as HTMLInputElement).value.includes(\".\")\n ) {\n event.preventDefault();\n }\n};\n","import { IPaymentObject } from \"../types\";\nimport { getBaseUrl } from \"../utils\";\n\nexport async function createPaymentLink(\n paymentObject: IPaymentObject,\n environment: string,\n secretKey: string\n): Promise<any> {\n try {\n const baseUrl = getBaseUrl(environment);\n const res = await fetch(\n `${baseUrl}/api/v1/checkout/generate-payment-link2`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n merchantId: secretKey,\n },\n body: JSON.stringify({\n ...paymentObject,\n LinkName: `${Date.now()}-Link`,\n }),\n }\n );\n return await res.json();\n } catch (error) {}\n}\n","interface IBaseInputErrorProps {\n errorMessage: string;\n}\n\nexport function BaseInputError({ errorMessage }: IBaseInputErrorProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-normal text-red-500\">\n {errorMessage}\n </p>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n size?: number | string;\n color?: string;\n className?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconLoader({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}: IIconProps) {\n return (\n <svg\n className={`animate-spin ${className}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role=\"img\"\n aria-label=\"loading\"\n {...props}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth={4}\n />\n <path\n className=\"opacity-75\"\n fill={color}\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronLeft({\n width = 17,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 14.28C10.3734 14.28 10.2467 14.2333 10.1467 14.1333L5.80002 9.78668C5.09335 9.08001 5.09335 7.92001 5.80002 7.21335L10.1467 2.86668C10.34 2.67335 10.66 2.67335 10.8534 2.86668C11.0467 3.06001 11.0467 3.38001 10.8534 3.57335L6.50669 7.92001C6.18669 8.24001 6.18669 8.76001 6.50669 9.08001L10.8534 13.4267C11.0467 13.62 11.0467 13.94 10.8534 14.1333C10.7534 14.2267 10.6267 14.28 10.5 14.28Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconBuzapayIcon({\n width = 15,\n height = 13,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 15 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M9.97919 0.5C10.8854 0.5 11.6276 0.585938 12.2057 0.757812C12.7891 0.924479 13.2188 1.22396 13.4948 1.65625C13.7761 2.08333 13.9167 2.6901 13.9167 3.47656C13.9167 4.1849 13.7526 4.77083 13.4245 5.23438C13.0964 5.69792 12.5938 5.95312 11.9167 6C12.8021 6.08854 13.4401 6.40625 13.8307 6.95312C14.2214 7.49479 14.4167 8.17708 14.4167 9C14.4167 9.71354 14.3334 10.2995 14.1667 10.7578C14.0052 11.2161 13.7318 11.5729 13.3464 11.8281C12.961 12.0781 12.4375 12.2526 11.7761 12.3516C11.1198 12.4505 10.2995 12.5 9.31512 12.5H0.416687V0.5H9.97919ZM2.91669 7.77344H5.97235V11.167L10.2497 5.22754H7.19501V1.83398L2.91669 7.77344ZM5.97235 6.07617H8.2702L7.19501 7.57324V6.9248H4.89716L5.97235 5.42676V6.07617Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCheckCircle({\n width = 67,\n height = 67,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 67 67\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M33.6705 0.0820312C15.2758 0.0820312 0.36377 14.9941 0.36377 33.3888C0.36377 51.7846 15.2758 66.6956 33.6705 66.6956C52.0663 66.6956 66.9773 51.7846 66.9773 33.3888C66.9773 14.9941 52.0663 0.0820312 33.6705 0.0820312ZM33.6705 62.5978C17.6011 62.5978 4.52712 49.4583 4.52712 33.3887C4.52712 17.3192 17.6011 4.24525 33.6705 4.24525C49.74 4.24525 62.814 17.3193 62.814 33.3887C62.814 49.4581 49.74 62.5978 33.6705 62.5978ZM46.9631 21.2016L27.4213 40.8662L18.621 32.0659C17.8081 31.253 16.4904 31.253 15.6765 32.0659C14.8636 32.8788 14.8636 34.1965 15.6765 35.0094L25.9797 45.3137C26.7926 46.1255 28.1103 46.1255 28.9243 45.3137C29.0179 45.22 29.0981 45.1179 29.171 45.0118L49.9086 24.1461C50.7205 23.3332 50.7205 22.0155 49.9086 21.2016C49.0947 20.3888 47.777 20.3888 46.9631 21.2016Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconCopySuccess({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M11.4002 1.6875H8.60016C5.9935 1.6875 4.8335 2.8475 4.8335 5.45417V6.1875C4.8335 6.46083 5.06016 6.6875 5.3335 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V11.5208C10.1668 11.7942 10.3935 12.0208 10.6668 12.0208H11.4002C14.0068 12.0208 15.1668 10.8608 15.1668 8.25417V5.45417C15.1668 2.8475 14.0068 1.6875 11.4002 1.6875ZM5.8335 5.6875V5.45417C5.8335 3.3875 6.5335 2.6875 8.60016 2.6875H11.4002C13.4668 2.6875 14.1668 3.3875 14.1668 5.45417V8.25417C14.1668 10.3208 13.4668 11.0208 11.4002 11.0208H11.1668V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875H5.8335Z\"\n fill={color}\n />\n <path\n d=\"M7.40016 5.6875H4.60016C1.9935 5.6875 0.833496 6.8475 0.833496 9.45417V12.2542C0.833496 14.8608 1.9935 16.0208 4.60016 16.0208H7.40016C10.0068 16.0208 11.1668 14.8608 11.1668 12.2542V9.45417C11.1668 6.8475 10.0068 5.6875 7.40016 5.6875ZM4.60016 15.0208C2.5335 15.0208 1.8335 14.3208 1.8335 12.2542V9.45417C1.8335 7.3875 2.5335 6.6875 4.60016 6.6875H7.40016C9.46683 6.6875 10.1668 7.3875 10.1668 9.45417V12.2542C10.1668 14.3208 9.46683 15.0208 7.40016 15.0208H4.60016Z\"\n fill={color}\n />\n <path\n d=\"M5.35302 12.6542C5.22635 12.6542 5.09969 12.6075 4.99969 12.5075L3.69969 11.2075C3.50635 11.0142 3.50635 10.6942 3.69969 10.5008C3.89302 10.3075 4.21302 10.3075 4.40635 10.5008L5.35302 11.4475L7.59302 9.2075C7.78635 9.01417 8.10635 9.01417 8.29969 9.2075C8.49302 9.40083 8.49302 9.72083 8.29969 9.91417L5.69969 12.5075C5.60635 12.6008 5.47969 12.6542 5.35302 12.6542Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronUp({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.7\">\n <path\n d=\"M2.73508 9.73495L7.73508 4.73495C7.80539 4.66473 7.9007 4.62528 8.00008 4.62528C8.09945 4.62528 8.19476 4.66473 8.26508 4.73495L13.2651 9.73495C13.3313 9.80604 13.3674 9.90006 13.3657 9.99722C13.364 10.0944 13.3246 10.1871 13.2559 10.2558C13.1872 10.3245 13.0945 10.3638 12.9973 10.3655C12.9002 10.3673 12.8062 10.3312 12.7351 10.265L8.00008 5.53058L3.26508 10.265C3.19399 10.3312 3.09997 10.3673 3.00282 10.3655C2.90566 10.3638 2.81297 10.3245 2.74427 10.2558C2.67556 10.1871 2.6362 10.0944 2.63449 9.99722C2.63277 9.90006 2.66884 9.80604 2.73508 9.73495Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconChevronDown({\n width = 24,\n height = 24,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.6\">\n <path\n d=\"M16.5813 7.83128L10.3313 14.0813C10.2434 14.1691 10.1242 14.2184 10 14.2184C9.87581 14.2184 9.75667 14.1691 9.66878 14.0813L3.41878 7.83128C3.33598 7.74242 3.2909 7.62489 3.29304 7.50345C3.29518 7.38201 3.34438 7.26615 3.43026 7.18026C3.51615 7.09438 3.63201 7.04518 3.75345 7.04304C3.87489 7.0409 3.99242 7.08598 4.08128 7.16878L10 13.0867L15.9188 7.16878C16.0076 7.08598 16.1252 7.0409 16.2466 7.04304C16.368 7.04518 16.4839 7.09438 16.5698 7.18026C16.6557 7.26615 16.7049 7.38201 16.707 7.50345C16.7092 7.62489 16.6641 7.74242 16.5813 7.83128Z\"\n fill={color}\n />\n </g>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdt({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387045)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28ZM15.6818 12.0689V9.99863H20.419V6.84162H7.52063V9.99863H12.2579V12.068C8.40787 12.2447 5.5125 13.0077 5.5125 13.9212C5.5125 14.8347 8.40787 15.5969 12.2579 15.7745V22.4088H15.6818V15.7727C19.5256 15.596 22.414 14.8339 22.414 13.9212C22.414 13.0086 19.5256 12.2465 15.6818 12.0689ZM15.6818 15.2101V15.2084C15.5855 15.2154 15.0894 15.2451 13.9825 15.2451C13.0987 15.2451 12.4766 15.2189 12.2579 15.2084V15.211C8.85587 15.0614 6.31662 14.469 6.31662 13.7602C6.31662 13.0524 8.85587 12.46 12.2579 12.3077V14.6212C12.4801 14.637 13.1171 14.6746 13.9974 14.6746C15.0535 14.6746 15.5829 14.6309 15.6818 14.6221V12.3095C19.0768 12.4609 21.6099 13.0532 21.6099 13.7602C21.6099 14.469 19.0768 15.0596 15.6818 15.2101Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387045\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconUsdc({\n width = 28,\n height = 28,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 28 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_10908_387048)\">\n <path\n d=\"M14 0C21.7324 0 28 6.26763 28 14C28 21.7324 21.7324 28 14 28C6.26763 28 0 21.7324 0 14C0 6.26763 6.26763 0 14 0ZM16.933 4.865C16.7195 4.76 16.506 4.865 16.4535 5.07762C16.4001 5.131 16.4001 5.18438 16.4001 5.29025V6.034L16.4089 6.125C16.4546 6.30501 16.5652 6.46177 16.7195 6.56512C20.8792 8.05262 23.0125 12.6726 21.4655 16.7615C20.6657 18.9928 18.9061 20.6911 16.7195 21.4883C16.506 21.5941 16.4001 21.7534 16.4001 22.0194V22.7631L16.4045 22.8401C16.4128 22.9241 16.4479 23.0033 16.5047 23.0658C16.5614 23.1284 16.6367 23.171 16.7195 23.1875C16.7729 23.1875 16.8796 23.1875 16.933 23.135C18.1331 22.7602 19.2473 22.1517 20.2113 21.3446C21.1753 20.5375 21.9701 19.5476 22.5499 18.432C23.1298 17.3164 23.4833 16.0972 23.59 14.8444C23.6967 13.5917 23.5546 12.3302 23.1718 11.1326C22.2128 8.10512 19.866 5.8205 16.933 4.865ZM11.2805 4.8125C11.2271 4.8125 11.1204 4.8125 11.067 4.865C9.86688 5.23978 8.75274 5.84826 7.78874 6.6554C6.82475 7.46254 6.02993 8.4524 5.45006 9.56797C4.87019 10.6836 4.51673 11.9028 4.41001 13.1556C4.30329 14.4083 4.44543 15.6698 4.82825 16.8674C5.78725 19.8424 8.08062 22.1261 11.067 23.0816C11.2805 23.1875 11.494 23.0816 11.5465 22.869C11.5999 22.8165 11.5999 22.7622 11.5999 22.6564V21.9126L11.5911 21.8426C11.5544 21.6947 11.417 21.5259 11.2805 21.4349C7.12075 19.9474 4.9875 15.3274 6.5345 11.2385C7.33425 9.00725 9.09388 7.30887 11.2805 6.51175C11.494 6.40587 11.5999 6.24663 11.5999 5.98063V5.23688L11.5955 5.15987C11.5872 5.07585 11.5521 4.99673 11.4954 4.93418C11.4386 4.87163 11.3633 4.82898 11.2805 4.8125ZM14.3736 7.574H13.573L13.496 7.581C13.321 7.616 13.1933 7.7665 13.146 7.99925V9.22075L12.9649 9.24875C11.4704 9.51475 10.5341 10.5464 10.5341 11.823C10.5341 13.5748 11.5999 14.2651 13.8399 14.5311C15.3335 14.7963 15.813 15.1156 15.813 15.9653C15.813 16.814 15.0666 17.3985 14.0534 17.3985C12.6665 17.3985 12.187 16.8149 12.0269 16.0177C11.9744 15.806 11.8134 15.6992 11.6532 15.6992H10.7467L10.6776 15.7054C10.5913 15.7193 10.513 15.7641 10.4572 15.8313C10.4014 15.8985 10.3718 15.9838 10.374 16.0711V16.1236L10.4029 16.2811C10.6566 17.5271 11.5106 18.4187 13.2003 18.6734V19.9483L13.2072 20.0252C13.2422 20.1985 13.3936 20.3263 13.6273 20.3726H14.427L14.504 20.3656C14.679 20.3306 14.8067 20.1801 14.854 19.9483V18.6725L15.0351 18.6375C16.534 18.3207 17.5201 17.2366 17.5201 15.8576C17.5201 13.9991 16.4001 13.3621 14.1601 13.0961C12.5598 12.8835 12.2404 12.4591 12.2404 11.7154C12.2404 10.9716 12.7741 10.4939 13.8399 10.4939C14.7998 10.4939 15.3335 10.8124 15.5995 11.6095C15.6272 11.6866 15.6779 11.7533 15.7447 11.8007C15.8115 11.8481 15.8912 11.8739 15.9731 11.8746H16.8262L16.8954 11.8694C16.982 11.8556 17.0606 11.8108 17.1166 11.7434C17.1726 11.6759 17.2022 11.5904 17.1999 11.5027V11.4503L17.1675 11.2989C17.0361 10.755 16.7366 10.2664 16.3115 9.90255C15.8864 9.53872 15.3574 9.31821 14.7997 9.27238V7.99925L14.7928 7.92225C14.7578 7.74812 14.6073 7.62038 14.3736 7.574Z\"\n fill={color}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_10908_387048\">\n <rect width=\"28\" height=\"28\" fill={color} />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from \"react\";\n\ntype IIconProps = {\n width?: number | string;\n height?: number | string;\n color?: string;\n} & React.SVGProps<SVGSVGElement>;\n\nexport function IconArrowSwap({\n width = 16,\n height = 17,\n color = \"currentColor\",\n ...props\n}: IIconProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 16 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.3265 14.1948C10.1998 14.1948 10.0731 14.1481 9.97313 14.0481C9.77979 13.8548 9.77979 13.5348 9.97313 13.3414L13.3131 10.0014C13.5065 9.80811 13.8265 9.80811 14.0198 10.0014C14.2131 10.1948 14.2131 10.5148 14.0198 10.7081L10.6798 14.0481C10.5798 14.1414 10.4531 14.1948 10.3265 14.1948Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 10.8477H2.3335C2.06016 10.8477 1.8335 10.621 1.8335 10.3477C1.8335 10.0743 2.06016 9.84766 2.3335 9.84766H13.6668C13.9402 9.84766 14.1668 10.0743 14.1668 10.3477C14.1668 10.621 13.9402 10.8477 13.6668 10.8477Z\"\n fill={color}\n />\n <path\n d=\"M2.33329 6.86079C2.20663 6.86079 2.07996 6.81413 1.97996 6.71413C1.78663 6.52079 1.78663 6.20079 1.97996 6.00746L5.31996 2.66746C5.51329 2.47413 5.83329 2.47413 6.02663 2.66746C6.21996 2.86079 6.21996 3.18079 6.02663 3.37413L2.68663 6.71413C2.59329 6.80746 2.45996 6.86079 2.33329 6.86079Z\"\n fill={color}\n />\n <path\n d=\"M13.6668 6.86133H2.3335C2.06016 6.86133 1.8335 6.63466 1.8335 6.36133C1.8335 6.08799 2.06016 5.86133 2.3335 5.86133H13.6668C13.9402 5.86133 14.1668 6.08799 14.1668 6.36133C14.1668 6.63466 13.9402 6.86133 13.6668 6.86133Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import { IconLoader } from \"../icons\";\n\ninterface IBaseButtonProps {\n label: string;\n type?: string;\n size?: string;\n paddingClassX?: string;\n disabled?: boolean;\n loading?: boolean;\n customClass?: string;\n onClick?: () => void;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\n/** === Angular getters ported to React === */\nfunction getButtonBgClass(type: string, disabled?: boolean) {\n if (disabled)\n return \"bg-gray-200 text-gray-400 cursor-not-allowed border-gray-200\";\n switch (type) {\n case \"primary\":\n return \"bg-primary text-white hover:bg-primary-black hover:border-primary-black border-primary\";\n case \"secondary\":\n return \"bg-gray-200 border-gray-200 hover:bg-gray-300 text-heading-text\";\n case \"danger\":\n return \"bg-red-500 border-red-500 text-white hover:bg-red-600\";\n case \"neutral\":\n default:\n return \"bg-off-white border-grey-border hover:bg-gray-100\";\n }\n}\n\nfunction getButtonSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n return \"h-68px rounded-xl\";\n case \"md\":\n return \"h-42px rounded-lg\";\n case \"sm\":\n return \"h-32px rounded-md\";\n default:\n return \"h-68px rounded-xl\";\n }\n}\n\nfunction getLabelSizeClass(size?: string) {\n switch (size) {\n case \"de\":\n case \"md\":\n case \"sm\":\n return \"text-body-2xs font-normal\";\n default:\n return \"text-body-xs font-normal\";\n }\n}\n\nexport function BaseButton({\n label,\n type = \"neutral\",\n size = \"de\",\n paddingClassX = \"px-8\",\n disabled = false,\n loading = false,\n customClass,\n onClick,\n prefix,\n suffix,\n children,\n}: React.PropsWithChildren<IBaseButtonProps>) {\n const isDisabled = disabled || loading;\n\n // Angular’s clickHandler -> emit only when not disabled\n const handleClick = () => {\n if (!isDisabled) onClick?.();\n };\n\n return (\n <button\n className={`flex items-center justify-center gap-2 py-3 border font-normal text-input-grey transition-colors duration-300 ease-in-out ${getButtonBgClass(\n type,\n isDisabled\n )} ${getButtonSizeClass(size)} ${paddingClassX} ${customClass}`}\n type=\"button\"\n disabled={isDisabled}\n onClick={handleClick}\n >\n {prefix}\n\n {loading ? (\n <IconLoader></IconLoader>\n ) : (\n <div>\n {label ? (\n <p className={`mb-0 ${getLabelSizeClass(size)}`}>{label}</p>\n ) : (\n <>{children}</>\n )}\n </div>\n )}\n\n {suffix}\n </button>\n );\n}\n","import { IconChevronLeft } from \"../icons\";\n\ninterface IBaseBackProps {\n back: () => void;\n}\n\nexport function BaseBack({ back }: IBaseBackProps) {\n return (\n <div className=\"flex items-center gap-2 cursor-pointer\" onClick={back}>\n <IconChevronLeft></IconChevronLeft>\n <p className=\"mb-0 text-body-xs font-normal\">Back</p>\n </div>\n );\n}\n","import { IconBuzapayIcon } from \"../icons\";\nimport { BaseBack } from \"./back\";\n\ninterface IBaseCardProps {\n showBackButton?: boolean;\n onBack?: () => void;\n children?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function BaseCard({\n showBackButton = false,\n onBack,\n children,\n onClose,\n}: IBaseCardProps) {\n return (\n <div className=\"checkout-card w-full h-screen flex flex-col items-center justify-center text-white\">\n <div className=\"flex w-1/2\">\n {showBackButton && <BaseBack back={() => onBack?.()} />}\n\n <div className=\"flex gap-2 w-full\">\n <div className=\"flex flex-col gap-8 w-full\">\n <div className=\"bg-off-white rounded-xl\">{children}</div>\n\n <div className=\"flex items-center gap-2 justify-center\">\n <p className=\"text-light-white-100 text-body-2xs font-regular\">\n Powered by Buzapay\n </p>\n <IconBuzapayIcon color=\"#E8F4FF\" />\n </div>\n </div>\n\n {/* Close Icon */}\n <div\n onClick={onClose}\n className=\"close-icon flex flex-col items-center justify-center self-start cursor-pointer hover:bg-gray-500\"\n >\n <p className=\"text-white\">x</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\n\ninterface IBaseRadioGroupProps {\n options: { label: string; value: string }[];\n type?: \"vertical\" | \"horizontal\";\n value?: string;\n defaultValue?: string;\n selectedChange?: (value: string) => void;\n className?: string;\n}\n\nexport const BaseRadioGroup = ({\n options,\n type = \"vertical\",\n value,\n defaultValue,\n selectedChange,\n className = \"\",\n}: IBaseRadioGroupProps) => {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<string>(\"\");\n\n useEffect(() => {\n if (isControlled) return;\n const initial =\n defaultValue ?? (options.length > 0 ? options[0].value : \"\");\n setInternal(initial);\n selectedChange?.(initial);\n }, [isControlled, defaultValue, options]);\n\n const selected = isControlled ? value! : internal;\n\n const setSelected = (v: string) => {\n if (!isControlled) setInternal(v);\n selectedChange?.(v);\n };\n\n const containerLayout =\n type === \"horizontal\" ? \"flex-row gap-5\" : \"flex-col gap-6\";\n\n return (\n <div\n className={`flex ${containerLayout} ${className}`}\n role=\"radiogroup\"\n aria-orientation={type === \"horizontal\" ? \"horizontal\" : \"vertical\"}\n tabIndex={0}\n >\n {options.map((option) => {\n const isActive = selected === option.value;\n return (\n <div\n key={option.value}\n role=\"radio\"\n aria-checked={isActive}\n tabIndex={-1}\n onClick={() => setSelected(option.value)}\n className=\"flex items-center gap-2 cursor-pointer transition-colors duration-200\"\n >\n <div\n className={[\n \"w-4 h-4 rounded-full border flex items-center justify-center\",\n isActive\n ? \"bg-orange-500 border-orange-500\"\n : \"bg-white border-grey-200\",\n ].join(\" \")}\n >\n {isActive && <div className=\"bg-white w-2 h-2 rounded-full\" />}\n </div>\n <p className=\"mb-0 text-body-2xs font-medium text-heading-text\">\n {option.label}\n </p>\n </div>\n );\n })}\n </div>\n );\n};\n","interface IBaseImageProps {\n src: string;\n height?: number | string;\n width?: number | string;\n alt?: string;\n customClass?: string;\n isFullWidth?: boolean;\n onClick?: () => void;\n}\n\nexport function BaseImage({\n src,\n height = 50,\n width = 50,\n alt = \"Image\",\n customClass,\n isFullWidth,\n onClick,\n}: IBaseImageProps) {\n return (\n <img\n src={src}\n height={height}\n alt={alt}\n className={`${customClass} ${isFullWidth ? \"w-full\" : \"\"}`}\n style={{ width: isFullWidth ? \"100%\" : `${width}px` }}\n onClick={onClick}\n />\n );\n}\n","import { IconCopySuccess } from \"../icons\";\n\ninterface IBaseCopyProps {\n copyText: string;\n color?: string;\n}\n\nexport function BaseCopy({ copyText, color }: IBaseCopyProps) {\n const copyToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = () => {\n copyToClipboard(copyText)\n .then(() => {})\n .catch((err: any) => {});\n };\n\n return (\n <IconCopySuccess\n className=\"cursor-pointer\"\n color={color}\n onClick={() => copyHandler()}\n />\n );\n}\n","import { BaseImage } from \".\";\nimport { truncateString } from \"../../utils\";\nimport { BaseCopy } from \"./copy\";\n\ninterface IBaseLabelInfoProps {\n type?: \"vertical\" | \"horizontal\";\n label?: string;\n labelCustomClass?: string;\n valueImageSrc?: string;\n valueImageCustomClass?: string;\n valueImagePosition?: \"prefix\" | \"suffix\";\n hasValueCopy?: boolean;\n value?: string;\n valueCustomClass?: string;\n alignRight?: boolean;\n}\n\nexport const BaseLabelInfo = ({\n type = \"vertical\",\n label = \"\",\n labelCustomClass = \"text-body-4xs font-medium text-light-copy\",\n valueImageSrc = \"\",\n valueImageCustomClass = \"\",\n valueImagePosition = \"prefix\",\n hasValueCopy = false,\n value = \"\",\n valueCustomClass = \"text-body-2xs font-medium text-sub-copy\",\n alignRight = false,\n}: IBaseLabelInfoProps) => {\n const showPrefixImg = valueImageSrc && valueImagePosition === \"prefix\";\n const showSuffixImg = valueImageSrc && valueImagePosition === \"suffix\";\n\n if (type === \"vertical\") {\n return (\n <div\n className={`flex flex-col gap-1 ${\n alignRight ? \"text-right items-end\" : \"\"\n }`}\n >\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n {!hasValueCopy ? (\n <p className={valueCustomClass}>{value}</p>\n ) : (\n <p className={`${valueCustomClass} truncate`}>\n {truncateString(value, 40)}\n </p>\n )}\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n }\n\n // horizontal\n return (\n <div className=\"flex items-center justify-between\">\n <p className={labelCustomClass}>{label.toUpperCase()}</p>\n\n <div className=\"flex items-center gap-1\">\n {showPrefixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n\n <p className={valueCustomClass}>{value}</p>\n\n {hasValueCopy && <BaseCopy copyText={value} color=\"#9DBFDE\" />}\n\n {showSuffixImg && (\n <BaseImage\n src={valueImageSrc}\n alt={value}\n width={22}\n customClass={valueImageCustomClass}\n />\n )}\n </div>\n </div>\n );\n};\n","import { BaseButton, BaseLabelInfo } from \".\";\nimport { IconCheckCircle } from \"../icons\";\n\ninterface IBaseSuccessProps {}\n\nexport const BaseSuccess = ({}: IBaseSuccessProps) => {\n return (\n <div className=\"flex flex-col gap-8 p-16\">\n <div className=\"flex flex-col gap-8\">\n <div className=\"flex flex-col gap-8\">\n <IconCheckCircle color=\"#F47A1F\" className=\"mx-auto\" />\n\n <div className=\"flex flex-col text-center\" style={{ gap: \"2px\" }}>\n <p className=\"text-heading-text font-medium text-header-2xl\">\n ₦2,500.00\n </p>\n <p className=\"text-sub-copy font-regular text-body-3xs\">\n Has been paid successfully\n </p>\n </div>\n </div>\n\n <div className=\"flex flex-col\">\n <div className=\"py-4 border-b border-grey-100\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Order ID\"\n value=\"9900009000-8890-8829hd7\"\n />\n </div>\n\n <div className=\"py-4\">\n <BaseLabelInfo\n type=\"horizontal\"\n label=\"Payment date\"\n value=\"July 24, 2025\"\n />\n </div>\n </div>\n </div>\n\n <div className=\"mx-auto\" style={{ width: \"80%\" }}>\n <BaseButton\n label=\"Return to Merchant Website\"\n type=\"secondary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n );\n};\n","interface IBaseHintProps {\n hint: string;\n}\n\nexport function BaseHint({ hint }: IBaseHintProps) {\n return (\n <p className=\"mb-0 text-body-3xs font-medium text-orange-500\">{hint}</p>\n );\n}\n","import React from \"react\";\nimport { IconChevronDown, IconChevronUp } from \"../icons\";\nimport { BaseHint } from \"./hint\";\nimport { BaseInputError } from \"./input-error\";\nimport { BaseImage } from \"./image\";\n\ntype ImageType = \"country\" | \"bank\" | null;\n\nexport interface SelectOption {\n label: string;\n value: string;\n countryCode?: string; // e.g. \"NG\"\n bankCode?: string;\n}\n\ninterface IBaseSelectProps {\n options: SelectOption[];\n value?: string; // controlled value\n defaultValue?: string; // uncontrolled initial value\n onChange?: (value: string) => void;\n\n placeholder?: string; // \"Select an option\" by default\n hasSearch?: boolean;\n disabled?: boolean;\n loading?: boolean;\n validationError?: string;\n label?: string;\n hint?: string;\n required?: boolean;\n itemImageType?: ImageType;\n\n prefix?: React.ReactNode; // slot before text in trigger\n\n className?: string;\n}\n\nexport const BaseSelect = ({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = \"Select an option\",\n hasSearch = true,\n disabled = false,\n loading = false,\n validationError = \"\",\n label = \"\",\n hint = \"\",\n required = false,\n itemImageType = null,\n prefix,\n className = \"\",\n}: IBaseSelectProps) => {\n const isControlled = value !== undefined;\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [filtered, setFiltered] = React.useState<SelectOption[]>(options);\n const [activeIndex, setActiveIndex] = React.useState<number>(-1);\n\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n // Keep internal state in sync for controlled usage\n React.useEffect(() => {\n if (isControlled) setInternalValue(value ?? \"\");\n }, [isControlled, value]);\n\n // Reset filtered list whenever options change\n React.useEffect(() => {\n setFiltered(options);\n }, [options]);\n\n const selected = React.useMemo(\n () =>\n options.find((o) => o.value === (isControlled ? value : internalValue)) ||\n null,\n [options, value, internalValue, isControlled]\n );\n\n const displayText =\n selected?.label ||\n placeholder ||\n (label ? `Select ${label}` : \"Select an option\");\n\n // Open/close helpers\n const openMenu = React.useCallback(() => {\n if (disabled || open) return;\n setFiltered(options);\n // set active index to current selection or first\n const idx = selected\n ? Math.max(\n 0,\n options.findIndex((o) => o.value === selected.value)\n )\n : 0;\n setActiveIndex(idx);\n setOpen(true);\n // focus search if enabled\n setTimeout(() => {\n if (hasSearch && searchRef.current) {\n searchRef.current.focus();\n searchRef.current.select();\n }\n });\n }, [disabled, open, options, selected, hasSearch]);\n\n const closeMenu = React.useCallback(() => {\n if (!open) return;\n setOpen(false);\n setActiveIndex(-1);\n }, [open]);\n\n const toggleMenu = React.useCallback(() => {\n if (disabled) return;\n open ? closeMenu() : openMenu();\n }, [open, disabled, openMenu, closeMenu]);\n\n // Outside click\n React.useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as Node;\n const tri = triggerRef.current;\n const menu = menuRef.current;\n if (tri && !tri.contains(t) && menu && !menu.contains(t)) closeMenu();\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, closeMenu]);\n\n // Selection\n const commit = (val: string) => {\n if (!isControlled) setInternalValue(val);\n onChange?.(val);\n closeMenu();\n };\n\n // Search\n const onSearchInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const q = e.target.value.toLowerCase();\n const list = options.filter((o) => o.label.toLowerCase().includes(q));\n setFiltered(list);\n setActiveIndex(list.length ? 0 : -1);\n };\n\n // Keyboard on trigger\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case \"Enter\":\n case \" \":\n case \"Spacebar\":\n case \"ArrowDown\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!open) openMenu();\n else moveActive(-1);\n break;\n case \"Escape\":\n if (open) {\n e.preventDefault();\n closeMenu();\n }\n break;\n }\n };\n\n // Keyboard in menu\n const onMenuKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveActive(-1);\n break;\n case \"Home\":\n e.preventDefault();\n setActiveIndex(filtered.length ? 0 : -1);\n scrollActiveIntoView(0);\n break;\n case \"End\":\n e.preventDefault();\n setActiveIndex(filtered.length - 1);\n scrollActiveIntoView(filtered.length - 1);\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeIndex >= 0) {\n const opt = filtered[activeIndex];\n if (opt) commit(opt.value);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n closeMenu();\n break;\n case \"Tab\":\n closeMenu();\n break;\n }\n };\n\n const moveActive = (delta: number) => {\n if (!filtered.length) return;\n const max = filtered.length - 1;\n const next =\n activeIndex < 0 ? 0 : Math.min(max, Math.max(0, activeIndex + delta));\n setActiveIndex(next);\n scrollActiveIntoView(next);\n };\n\n const scrollActiveIntoView = (index: number) => {\n const menu = menuRef.current;\n if (!menu) return;\n const items = menu.querySelectorAll<HTMLElement>(\"[data-option]\");\n if (index >= 0 && index < items.length) {\n items[index]?.scrollIntoView({ block: \"nearest\" });\n }\n };\n\n // UI helpers\n const containerBg = disabled ? \"bg-grey-100 cursor-not-allowed\" : \"bg-white\";\n const containerBorder = validationError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100 bg-white\";\n\n return (\n <div className={`flex flex-col gap-2 relative ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n {/* Trigger */}\n <div\n ref={triggerRef}\n className={`border-c rounded-md flex items-center justify-between h-12 cursor-pointer px-3 py-2 ${containerBg} ${containerBorder}`}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? \"select-menu\" : undefined}\n aria-disabled={disabled || undefined}\n aria-activedescendant={\n open && activeIndex >= 0 ? `option-${activeIndex}` : undefined\n }\n tabIndex={0}\n onClick={toggleMenu}\n onKeyDown={onTriggerKeyDown}\n >\n <div className=\"flex items-center gap-2\">\n {prefix}\n\n <div className=\"flex items-center gap-2\">\n {selected &&\n itemImageType === \"country\" &&\n selected.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${selected.countryCode.toLowerCase()}.png`}\n alt={selected.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* Bank logos could be handled similarly here */}\n\n <p\n className={`text-body-2xs font-normal mb-0 ${\n selected?.label ? \"text-sub-copy\" : \"text-grey-500\"\n }`}\n >\n {displayText}\n </p>\n </div>\n </div>\n\n {loading ? (\n // Loader (replace with your own IconLoader if you have one)\n <span className=\"inline-block h-4 w-4 border-2 border-current border-t-transparent rounded-full animate-spin\" />\n ) : open ? (\n <IconChevronUp color=\"#8FAECA\" />\n ) : (\n <IconChevronDown color=\"#8FAECA\" />\n )}\n </div>\n\n {/* Menu */}\n {open && (\n <div\n ref={menuRef}\n id=\"select-menu\"\n className=\"border-c bg-white rounded-md border-grey-border text-body-xs font-normal text-input-grey w-full mt-2 max-h-22rem overflow-y-auto\"\n role=\"listbox\"\n aria-label={label || \"Options\"}\n style={{ position: \"absolute\", top: \"100%\", zIndex: 10 }}\n onKeyDown={onMenuKeyDown}\n >\n {hasSearch && (\n <div className=\"px-4 pt-2 pb-1\">\n <input\n ref={searchRef}\n type=\"text\"\n onChange={onSearchInput}\n placeholder={`Search ${label || \"options\"}`}\n className=\"bg-transparent outline-none border-b pb-2 w-full focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal\"\n />\n </div>\n )}\n\n {filtered.map((opt, i) => {\n const selectedOpt = selected?.value === opt.value;\n return (\n <div\n key={opt.value}\n onClick={() => commit(opt.value)}\n id={`option-${i}`}\n data-option\n role=\"option\"\n aria-selected={selectedOpt}\n className={`px-4 py-3 first:pt-0 hover:bg-gray-100 flex items-center gap-2 cursor-pointer ${\n i === activeIndex ? \"bg-gray-100\" : \"\"\n }`}\n >\n {itemImageType === \"country\" && opt.countryCode && (\n <BaseImage\n src={`https://flagcdn.com/w40/${opt.countryCode.toLowerCase()}.png`}\n alt={opt.countryCode}\n width={28}\n customClass=\"rounded-lg\"\n />\n )}\n\n {/* If you later add bank logos:\n {itemImageType === \"bank\" && (\n <img src={bankLogoHandler(opt.bankCode || opt.value)} alt={opt.value} width={28} className=\"rounded-lg\" />\n )} */}\n\n <p className=\"mb-0 text-body-2xs font-medium\">{opt.label}</p>\n </div>\n );\n })}\n </div>\n )}\n\n {hint && <BaseHint hint={hint} />}\n {validationError && <BaseInputError errorMessage={validationError} />}\n </div>\n );\n};\n","import { formatAmount } from \"../../utils\";\nimport { IconUsdc, IconUsdt } from \"../icons\";\n\ninterface IBaseCurrencyAmountProps {\n currency: string;\n amount: number | string;\n textClass?: string;\n iconColorClass?: string;\n iconWidth?: number | string;\n iconHeight?: number | string;\n}\n\nexport const BaseCurrencyAmount = ({\n currency,\n amount,\n textClass = \"\",\n iconColorClass = \"\",\n iconWidth = 16,\n iconHeight = 16,\n}: IBaseCurrencyAmountProps) => {\n const cur = currency?.toUpperCase();\n\n if (cur !== \"USDT\" && cur !== \"USDC\") {\n return <p className={textClass}>{formatAmount(amount, cur)}</p>;\n }\n\n return (\n <div className=\"flex items-center gap-1\">\n {cur === \"USDT\" && (\n <IconUsdt\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n {cur === \"USDC\" && (\n <IconUsdc\n width={iconWidth}\n height={iconHeight}\n color={iconColorClass}\n />\n )}\n <p className={textClass}>{formatAmount(amount)}</p>\n </div>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { IApiResponse, IPaymentObject } from \"../types\";\nimport { checkObjectTruthy } from \"../utils\";\nimport { createPaymentLink } from \"../apis\";\nimport { IconLoader } from \"../components/icons\";\n\ninterface IIframeStyle {\n width?: string;\n height?: string;\n border?: string;\n borderRadius?: string;\n overflow?: string;\n}\n\ninterface IBzpCheckoutIframeProps {\n style?: IIframeStyle;\n url?: string;\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject?: IPaymentObject;\n}\n\nexport function BzpCheckoutIframe({\n style = {\n width: \"100%\",\n height: \"100vh\",\n border: \"0\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n },\n url,\n secretKey,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutIframeProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n\n const [message, setMessage] = useState<string>(\"\");\n const [launchUrl, setLaunchUrl] = useState<string>(\"\");\n const [loading, setLoading] = useState<boolean>(false);\n\n const launchIframe = useCallback(\n (url: string) => {\n // remove prior iframe if any\n if (iframeRef.current && iframeRef.current.parentNode) {\n iframeRef.current.parentNode.removeChild(iframeRef.current);\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n\n if (style.width) iframe.style.width = style.width;\n if (style.height) iframe.style.height = style.height;\n if (style.border) iframe.style.border = style.border;\n if (style.borderRadius) iframe.style.borderRadius = style.borderRadius;\n if (style.overflow) iframe.style.overflow = style.overflow;\n\n containerRef.current?.appendChild(iframe);\n iframeRef.current = iframe;\n },\n [style]\n );\n\n const generatePaymentLinkHandler = async () => {\n if (url) {\n launchIframe(url);\n return;\n }\n\n if (!secretKey) {\n return setMessage(\"Secret key is required.\");\n }\n\n if (!checkObjectTruthy<IPaymentObject>(paymentObject)) {\n return setMessage(\"Secret key is required.\");\n }\n\n setLoading(true);\n const response: IApiResponse<any> = await createPaymentLink(\n paymentObject,\n environment,\n secretKey\n );\n if (response?.isSuccessful) {\n setLaunchUrl(response.launchUrl ?? \"\");\n setMessage(\"Payment link created successfully\");\n if (response.launchUrl) {\n setLoading(false);\n launchIframe(response.launchUrl);\n }\n } else {\n setLoading(false);\n setMessage(\"Failed to create payment link\");\n }\n };\n\n useEffect(() => {\n if (!containerRef.current) return; // only run if div is mounted\n generatePaymentLinkHandler();\n }, []);\n\n return (\n <div className=\"relative\" style={style}>\n <div ref={containerRef} className=\"w-full h-full\"></div>\n {loading && (\n <div className=\"absolute inset-0 grid place-items-center bg-white/60\">\n <IconLoader></IconLoader>\n </div>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { BaseCard } from \"../components/base/card\";\nimport { BaseImage, BaseRadioGroup, BaseSuccess } from \"../components/base\";\nimport { PayByCard } from \"../components/pay-by-card\";\nimport { PayByTransfer } from \"../components/pay-by-transfer\";\nimport { PayByStableCoin } from \"../components/pay-by-stable-coin\";\nimport { IPaymentObject, ISelectOption } from \"../types\";\nimport { currencySign, formatAmount } from \"../utils\";\n\nexport interface CheckoutIframeStyle {\n [cssProp: string]: string | number;\n}\n\nexport interface CheckoutCardOptions {\n imageUrl?: string;\n numberPlaceholder?: string;\n expiryPlaceholder?: string;\n cvcPlaceholder?: string;\n styles?: {\n base?: CheckoutIframeStyle;\n invalid?: CheckoutIframeStyle;\n focus?: CheckoutIframeStyle;\n };\n}\n\ninterface IBzpCheckoutCardProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n options?: CheckoutCardOptions;\n}\n\nexport function BzpCheckoutCard({\n options,\n environment = \"sandbox\",\n paymentObject = {\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n },\n}: IBzpCheckoutCardProps) {\n const [checkoutState, setCheckoutState] = useState<\n \"STABLE_COIN_PAYMENT\" | \"PAYMENT\" | \"SUCCESS\"\n >(\"PAYMENT\");\n\n const paymentTypeOptions: ISelectOption[] = [\n { label: \"Card\", value: \"CARD\" },\n { label: \"Bank Transfer\", value: \"BANK_TRANSFER\" },\n { label: \"Stable Coin\", value: \"STABLE_COIN\" },\n ];\n const [filteredPaymentTypeOptions, setFilteredPaymentTypeOptions] = useState<\n ISelectOption[]\n >([]);\n const [paymentType, setPaymentType] = useState<string>(\"\");\n\n const paymentTypeHandler = (event: string): void => {\n setPaymentType(event);\n };\n\n useEffect(() => {\n let options: ISelectOption[] = [];\n if (paymentObject.currency === \"USD\") {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"BANK_TRANSFER\"\n );\n } else {\n options = paymentTypeOptions.filter(\n (option) => option.value !== \"STABLE_COIN\"\n );\n }\n\n setFilteredPaymentTypeOptions(options);\n }, [paymentObject.currency]);\n\n useEffect(() => {\n if (filteredPaymentTypeOptions.length) {\n setPaymentType(filteredPaymentTypeOptions[0].value);\n }\n }, [filteredPaymentTypeOptions]);\n\n return (\n <BaseCard showBackButton={checkoutState === \"STABLE_COIN_PAYMENT\"}>\n <div className=\"grid grid-cols-3\">\n {checkoutState === \"PAYMENT\" && (\n <div className=\"bg-[#EFF7FF] px-6 py-8 flex flex-col gap-5 col-span-1 rounded-l-xl\">\n <p className=\"text-heading-text text-body-xs font-semibold\">\n Pay with\n </p>\n <BaseRadioGroup\n options={paymentTypeOptions}\n selectedChange={(e: string) => paymentTypeHandler(e)}\n />\n </div>\n )}\n\n <div className=\"col-span-2\">\n {(checkoutState === \"PAYMENT\" ||\n checkoutState === \"STABLE_COIN_PAYMENT\") && (\n <div>\n {checkoutState === \"PAYMENT\" && (\n <div className=\"flex items-center justify-between px-12 py-8\">\n {options?.imageUrl ? (\n <BaseImage\n src={options?.imageUrl ?? \"\"}\n alt=\"Merchant Logo\"\n width={52}\n height={52}\n customClass=\"rounded-lg\"\n />\n ) : (\n <div\n className=\"bg-heading-text rounded flex flex-col justify-center\"\n style={{ width: \"52px\", height: \"52px\" }}\n >\n <p className=\"text-white text-center text-body-2xs font-medium\">\n Logo\n </p>\n </div>\n )}\n\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Raymahni Merchant LLC\n </p>\n <p className=\"text-body-2xs font-regular text-sub-copy text-right\">\n Pay:{\" \"}\n <span className=\"text-orange-500 font-extrabold\">\n {formatAmount(\n paymentObject.amount,\n paymentObject.currency\n )}\n </span>\n </p>\n </div>\n </div>\n )}\n\n <div className=\"overflow-y-scroll px-10 pb-10 pt-2\">\n {paymentType === \"CARD\" ? (\n <PayByCard />\n ) : paymentType === \"BANK_TRANSFER\" ? (\n <PayByTransfer />\n ) : (\n <PayByStableCoin\n onProceedToPay={() =>\n setCheckoutState(\"STABLE_COIN_PAYMENT\")\n }\n />\n )}\n </div>\n </div>\n )}\n\n {checkoutState === \"SUCCESS\" && <BaseSuccess />}\n </div>\n </div>\n </BaseCard>\n );\n}\n","import { useState } from \"react\";\nimport { BaseInput } from \"./base/input\";\nimport { BaseButton, BaseSelect } from \"./base\";\n\ninterface IPayByCardProps {}\n\nexport function PayByCard({}: IPayByCardProps) {\n const [formIndex, setFormIndex] = useState(0);\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <div className=\"grid grid-cols-2 gap-6 overflow-y-auto\">\n <BaseInput label=\"First Name\" required={true} />\n <BaseInput label=\"Last Name\" required={true} />\n <BaseInput label=\"Email\" required={true} />\n <BaseInput label=\"Phone Number\" required={true} />\n <BaseSelect\n label=\"Select Country\"\n required={true}\n options={[\n { label: \"United States\", value: \"US\" },\n { label: \"Canada\", value: \"CA\" },\n { label: \"United Kingdom\", value: \"UK\" },\n ]}\n />\n <BaseSelect\n label=\"Select State\"\n required={true}\n options={[\n { label: \"California\", value: \"CA\" },\n { label: \"Texas\", value: \"TX\" },\n { label: \"New York\", value: \"NY\" },\n ]}\n />\n <BaseInput label=\"City\" required={true} />\n <BaseInput label=\"Postal Code\" required={true} />\n <div className=\"col-span-2\">\n <BaseInput label=\"Street Address\" required={true} />\n </div>\n </div>\n )}\n\n {formIndex === 1 && (\n <div\n className=\"grid grid-cols-2 gap-6 overflow-y-auto\"\n style={{ maxHeight: \"320px\" }}\n >\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Name\" required={true} />\n </div>\n <div className=\"col-span-2\">\n <BaseInput label=\"Card Number\" required={true} />\n </div>\n <BaseInput label=\"Expiry Date\" required={true} />\n <BaseInput label=\"CVV\" required={true} />\n </div>\n )}\n\n <BaseButton\n label={formIndex === 0 ? \"Proceed\" : \"Pay\"}\n type=\"primary\"\n customClass=\"w-full\"\n onClick={formIndex === 0 ? () => setFormIndex(1) : undefined}\n />\n </div>\n );\n}\n","import React from \"react\";\nimport { formatAmount, restrictToNumericKeys } from \"../../utils\";\nimport { BaseImage } from \"./image\";\n\ntype Rule = \"numeric\";\n\nexport interface IBaseInputProps {\n label?: string;\n type?: React.HTMLInputTypeAttribute; // 'text' by default\n placeholder?: string;\n validationError?: string;\n hint?: string;\n mask?: string; // (not implemented here)\n rules?: Rule[]; // e.g. ['numeric']\n isAmountInput?: boolean;\n required?: boolean;\n disabled?: boolean;\n loading?: boolean;\n showCopyIcon?: boolean;\n\n // Controlled/uncontrolled\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n\n // “Slots”\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n\n className?: string;\n}\n\nexport const BaseInput = ({\n label = \"\",\n type = \"text\",\n placeholder,\n validationError = \"\",\n hint = \"\",\n rules = [],\n isAmountInput = false,\n required = false,\n disabled = false,\n loading = false,\n showCopyIcon = false,\n\n value,\n defaultValue,\n onChange,\n onBlur,\n\n prefix,\n suffix,\n\n className = \"\",\n}: IBaseInputProps) => {\n const isControlled = value !== undefined;\n const [rawValue, setRawValue] = React.useState<string>(\n defaultValue ?? value ?? \"\"\n );\n const [localHint, setLocalHint] = React.useState<string>(\"\");\n const [localError, setLocalError] = React.useState<string>(\"\");\n\n // keep internal in sync with controlled value\n React.useEffect(() => {\n if (isControlled) setRawValue(value ?? \"\");\n }, [isControlled, value]);\n\n const formattedValue = isAmountInput\n ? formatAmount(rawValue.replace(/,/g, \"\"))\n : rawValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const incoming = e.target.value.replace(/,/g, \"\"); // strip commas before storing\n if (!isControlled) setRawValue(incoming);\n onChange?.(incoming);\n\n // Move caret to end after React updates (formatting can jump cursor)\n setTimeout(() => {\n const el = e.target;\n el.selectionStart = el.selectionEnd = el.value.length;\n });\n };\n\n const handleBlur = () => {\n onBlur?.(rawValue);\n };\n\n const handleKeyDown = (e: any) => {\n if (rules.includes(\"numeric\")) restrictToNumericKeys(e);\n };\n\n const containerBg = disabled ? \"bg-grey-50 cursor-not-allowed\" : \"bg-white\";\n const containerBorder =\n validationError || localError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100\";\n\n const copyToClipboard = (text: string): Promise<void> => {\n return navigator.clipboard.writeText(text);\n };\n\n const copyHandler = (): void => {\n copyToClipboard(rawValue)\n .then(() => {\n setLocalHint(\"Text copied to clipboard\");\n })\n .catch((err) => {\n setLocalError(\"Failed to copy text to clipboard\");\n });\n };\n\n return (\n <div className={`flex flex-col gap-2 ${className}`}>\n {label ? (\n <p className=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {label}\n {required && <span className=\"text-orange-required\"> *</span>}\n </p>\n ) : null}\n\n <div\n className={`border-c px-3 py-2 flex items-center justify-between rounded-md h-12 ${containerBg} ${containerBorder}`}\n >\n {prefix}\n\n <input\n type={type}\n value={formattedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={\n placeholder ?? (label ? `Enter ${label.toLowerCase()}` : undefined)\n }\n inputMode={isAmountInput ? \"decimal\" : undefined}\n className=\"search-input bg-transparent outline-none border-none focus:outline-none focus:ring-0 text-body-2xs text-light-copy font-normal w-full\"\n />\n\n {!loading ? (\n <>\n {suffix}\n\n {showCopyIcon && rawValue && rawValue.trim() !== \"\" && (\n <BaseImage\n src=\"assets/images/copyIcon.svg\"\n alt=\"copy\"\n width={16}\n height={16}\n customClass=\"cursor-pointer hover:opacity-70 transition-opacity\"\n onClick={copyHandler}\n />\n )}\n </>\n ) : (\n // Simple loader placeholder; swap for your icon component if desired\n <div className=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\" />\n )}\n </div>\n\n {(hint || localHint) && (\n <p className=\"text-body-3xs text-light-copy\">{localHint || hint}</p>\n )}\n\n {(validationError || localError) && (\n <p className=\"text-body-3xs text-red-500\">\n {localError || validationError}\n </p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { BaseButton, BaseCopy, BaseLabelInfo } from \"./base\";\n\ninterface IPayByTransferProps {\n amountDisplay?: string;\n bankName?: string;\n accountNumber?: string;\n initialSeconds?: number;\n onConfirmPaid?: () => void;\n onCancel?: () => void;\n}\n\nexport const PayByTransfer = ({\n amountDisplay = \"NGN 200,500.00\",\n bankName = \"Teerus MFB\",\n accountNumber = \"0001928940\",\n initialSeconds = 30 * 60,\n onConfirmPaid,\n onCancel,\n}: IPayByTransferProps) => {\n const [remaining, setRemaining] = useState<number>(initialSeconds);\n const intervalRef = useRef<number | null>(null);\n\n // format mm:ss\n const countDownTime = useMemo(() => {\n const clamped = Math.max(0, remaining);\n const m = Math.floor(clamped / 60);\n const s = clamped % 60;\n return `${String(m).padStart(2, \"0\")}:${String(s).padStart(2, \"0\")}`;\n }, [remaining]);\n\n useEffect(() => {\n // start timer\n intervalRef.current = window.setInterval(() => {\n setRemaining((prev) => prev - 1);\n }, 1000);\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n };\n }, []);\n\n // stop at zero\n useEffect(() => {\n if (remaining < 0 && intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, [remaining]);\n\n return (\n <div className=\"flex flex-col gap-10\">\n <p className=\"text-sub-copy text-sm font-semibold text-center\">\n Amount to Pay {amountDisplay}\n </p>\n\n <div className=\"bg-[#EFF7FF] p-4 rounded-lg flex flex-col gap-6\">\n <BaseLabelInfo label=\"Bank Name\" value={bankName} type=\"horizontal\" />\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Account Number\"\n value={accountNumber}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={accountNumber} />\n </div>\n <div className=\"flex items-center justify-between\">\n <BaseLabelInfo\n label=\"Amount\"\n value={amountDisplay}\n type=\"horizontal\"\n />\n <BaseCopy color=\"#9DBFDE\" copyText={amountDisplay} />\n </div>\n </div>\n\n <p className=\"w-2/3 mx-auto text-center text-body-2xs font-medium text-sub-copy\">\n This account is for this transaction only and expires in{\" \"}\n <span className=\"text-orange-500\">\n {remaining >= 0 ? countDownTime : \"00:00\"}\n </span>\n </p>\n\n <div className=\"flex flex-col gap-4\">\n <BaseButton\n label=\"I have paid the money\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={onConfirmPaid}\n />\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"text-heading-text text-body-2xs font-medium text-center py-2 cursor-pointer\"\n >\n Cancel Payment\n </button>\n </div>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n BaseButton,\n BaseCopy,\n BaseCurrencyAmount,\n BaseImage,\n BaseSelect,\n} from \"./base\";\nimport { IconArrowSwap } from \"./icons\";\n\ninterface IPayByStableCoinProps {\n onProceedToPay?: () => void; // fires when user clicks \"Pay\"\n}\n\nexport const PayByStableCoin = ({ onProceedToPay }: IPayByStableCoinProps) => {\n const [formIndex, setFormIndex] = useState<number>(0);\n\n const payHandler = () => {\n setFormIndex(1);\n onProceedToPay?.();\n };\n\n return (\n <div className=\"flex flex-col gap-6\">\n {formIndex === 0 && (\n <>\n <div className=\"grid grid-cols-1 gap-6\">\n <BaseSelect\n label=\"Select Crypto\"\n required\n options={[\n { label: \"USDT\", value: \"USDT\" },\n { label: \"USDC\", value: \"USDC\" },\n { label: \"BUSD\", value: \"BUSD\" },\n ]}\n />\n\n <BaseSelect\n label=\"Select Network\"\n required\n options={[\n { label: \"Ethereum\", value: \"ETH\" },\n { label: \"Binance Smart Chain\", value: \"BSC\" },\n { label: \"Polygon\", value: \"MATIC\" },\n ]}\n />\n </div>\n\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n onClick={payHandler}\n />\n </>\n )}\n\n {formIndex === 1 && (\n <div className=\"flex flex-col gap-6\">\n <div className=\"mx-auto\">\n <BaseImage\n src=\"../../../assets/images/stable-coin-qr-code.png\"\n alt=\"QR Code\"\n width={122}\n height={122}\n customClass=\"mb-1\"\n />\n <p className=\"mb-0 text-body-4xs text-light-copy font-normal text-center\">\n USDC\n </p>\n </div>\n\n <div className=\"flex flex-col gap-6 border-c border-grey-100 p-4 rounded-2xl bg-light-white-50\">\n <div className=\"border-b border-grey-border pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Network\n </p>\n\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col gap-1\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy\">\n BNB Smart Chain (BEP20)\n </p>\n\n <div className=\"flex items-center gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n *Est. arrival = 3 mins\n </p>\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n |\n </p>\n\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={10}\n textClass=\"mb-0 text-body-3xs text-light-copy font-normal\"\n iconColorClass=\"#557591\"\n iconWidth={12}\n iconHeight={12}\n />\n </div>\n </div>\n\n <IconArrowSwap />\n </div>\n </div>\n\n <div className=\"pb-4 flex flex-col gap-2\">\n <p className=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Deposit Address &gt;\n </p>\n\n <div className=\"flex justify-between\">\n <p className=\"mb-0 text-body-2xs font-medium text-sub-copy w-2/3 break-words\">\n 0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\n </p>\n\n <BaseCopy copyText=\"0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\" />\n </div>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between border-b border-grey-border py-3\">\n <p className=\"mb-0 text-body-2xs font-medium text-primary-black\">\n Network fee\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={12}\n textClass=\"mb-0 text-body-2xs font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n />\n </div>\n\n <div className=\"flex items-center justify-between py-4\">\n <p className=\"mb-0 text-body-lg font-semibold text-primary-black\">\n Pay\n </p>\n <BaseCurrencyAmount\n currency=\"USDC\"\n amount={15}\n textClass=\"mb-0 text-body-lg font-extrabold text-primary-black\"\n iconColorClass=\"#231F20\"\n iconWidth={20}\n iconHeight={20}\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-6\">\n <BaseButton\n label=\"Confirm Payment\"\n type=\"primary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["useState","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","React","jsx","jsxs","React","jsx","jsxs","useCallback","useEffect","useState","jsx","jsxs","useState","useCallback","url","useEffect","jsx","jsxs","useState","useEffect","useState","useState","React","Fragment","jsx","jsxs","React","jsx","jsxs","useState","useEffect","useMemo","useRef","useState","jsx","jsxs","useState","useRef","useMemo","useEffect","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","useState","useEffect","options"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miden-npm/react",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org",
@@ -20,7 +20,7 @@
20
20
  "./package.json": "./package.json"
21
21
  },
22
22
  "files": [
23
- "dist"
23
+ "dist/**/*"
24
24
  ],
25
25
  "scripts": {
26
26
  "build": "tsup --config tsup.config.ts",