@miden-npm/vue 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.
Files changed (51) hide show
  1. package/dist/index.cjs.js +2 -0
  2. package/dist/index.cjs.js.map +1 -0
  3. package/dist/index.es.js +1684 -0
  4. package/dist/index.es.js.map +1 -0
  5. package/dist/index.umd.js +2 -0
  6. package/dist/index.umd.js.map +1 -0
  7. package/dist/types/apis/checkout.api.d.ts +2 -0
  8. package/dist/types/apis/index.d.ts +1 -0
  9. package/dist/types/buzapay-checkout/checkout-button.vue.d.ts +15 -0
  10. package/dist/types/buzapay-checkout/checkout-card.vue.d.ts +27 -0
  11. package/dist/types/buzapay-checkout/checkout-iframe.vue.d.ts +23 -0
  12. package/dist/types/components/base/back.vue.d.ts +6 -0
  13. package/dist/types/components/base/button.vue.d.ts +37 -0
  14. package/dist/types/components/base/card.vue.d.ts +23 -0
  15. package/dist/types/components/base/copy.vue.d.ts +6 -0
  16. package/dist/types/components/base/currency-amount.vue.d.ts +15 -0
  17. package/dist/types/components/base/hint.vue.d.ts +5 -0
  18. package/dist/types/components/base/image.vue.d.ts +20 -0
  19. package/dist/types/components/base/index.d.ts +13 -0
  20. package/dist/types/components/base/input-error.vue.d.ts +5 -0
  21. package/dist/types/components/base/input.vue.d.ts +59 -0
  22. package/dist/types/components/base/label-info.vue.d.ts +27 -0
  23. package/dist/types/components/base/radio-group.vue.d.ts +29 -0
  24. package/dist/types/components/base/select.vue.d.ts +57 -0
  25. package/dist/types/components/base/success.vue.d.ts +4 -0
  26. package/dist/types/components/icons/icon-arrow-swap.vue.d.ts +11 -0
  27. package/dist/types/components/icons/icon-buzapay-icon.vue.d.ts +11 -0
  28. package/dist/types/components/icons/icon-check-circle.vue.d.ts +11 -0
  29. package/dist/types/components/icons/icon-chevron-down.vue.d.ts +11 -0
  30. package/dist/types/components/icons/icon-chevron-left.vue.d.ts +11 -0
  31. package/dist/types/components/icons/icon-chevron-up.vue.d.ts +11 -0
  32. package/dist/types/components/icons/icon-copy-success.vue.d.ts +11 -0
  33. package/dist/types/components/icons/icon-loader.vue.d.ts +11 -0
  34. package/dist/types/components/icons/icon-usdc.vue.d.ts +11 -0
  35. package/dist/types/components/icons/icon-usdt.vue.d.ts +11 -0
  36. package/dist/types/components/icons/index.d.ts +10 -0
  37. package/dist/types/components/pay-by-card.vue.d.ts +4 -0
  38. package/dist/types/components/pay-by-stable-coin.vue.d.ts +8 -0
  39. package/dist/types/components/pay-by-transfer.vue.d.ts +20 -0
  40. package/dist/types/index.d.ts +5 -0
  41. package/dist/types/plugin.d.ts +6 -0
  42. package/dist/types/types/checkout.type.d.ts +8 -0
  43. package/dist/types/types/index.d.ts +2 -0
  44. package/dist/types/types/resource.type.d.ts +29 -0
  45. package/dist/types/types.d.ts +10 -0
  46. package/dist/types/utils/api.util.d.ts +1 -0
  47. package/dist/types/utils/index.d.ts +4 -0
  48. package/dist/types/utils/input.util.d.ts +1 -0
  49. package/dist/types/utils/object.util.d.ts +1 -0
  50. package/dist/types/utils/string.util.d.ts +3 -0
  51. package/package.json +43 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../src/plugin.ts","../src/utils/object.util.ts","../src/utils/api.util.ts","../src/utils/string.util.ts","../src/utils/input.util.ts","../src/components/icons/icon-loader.vue","../src/components/base/button.vue","../src/components/base/input-error.vue","../src/apis/checkout.api.ts","../src/buzapay-checkout/checkout-iframe.vue","../src/buzapay-checkout/checkout-button.vue","../src/components/icons/icon-chevron-left.vue","../src/components/base/back.vue","../src/components/icons/icon-buzapay-icon.vue","../src/components/base/card.vue","../src/components/base/image.vue","../src/components/base/radio-group.vue","../src/components/icons/icon-copy-success.vue","../src/components/base/copy.vue","../src/components/base/label-info.vue","../src/components/icons/icon-check-circle.vue","../src/components/base/success.vue","../src/components/base/input.vue","../src/components/icons/icon-chevron-down.vue","../src/components/icons/icon-chevron-up.vue","../src/components/base/hint.vue","../src/components/base/select.vue","../src/components/pay-by-card.vue","../src/components/pay-by-transfer.vue","../src/components/icons/icon-usdc.vue","../src/components/icons/icon-usdt.vue","../src/components/base/currency-amount.vue","../src/components/icons/icon-arrow-swap.vue","../src/components/pay-by-stable-coin.vue","../src/buzapay-checkout/checkout-card.vue"],"sourcesContent":["import type { App, InjectionKey } from \"vue\";\nimport { inject } from \"vue\";\nimport type { MidenPGConfig } from \"./types\";\n\nconst ConfigKey: InjectionKey<MidenPGConfig> = Symbol(\"MidenPGConfig\");\n\nexport function createMidenPG(config: MidenPGConfig) {\n if (!config?.publishableKey) {\n throw new Error(\"[@miden-npm/vue] publishableKey is required\");\n }\n return {\n install(app: App) {\n app.provide(ConfigKey, config);\n },\n };\n}\n\nexport function useMidenPG(): MidenPGConfig {\n const cfg = inject(ConfigKey);\n if (!cfg) {\n throw new Error(\n \"[@miden-npm/vue] Missing provider. Did you forget to app.use(createMidenPG(...))?\"\n );\n }\n return cfg;\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","<template>\n <svg\n :class=\"['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 v-bind=\"attrs\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n :stroke=\"color\"\n stroke-width=\"4\"\n />\n <path\n class=\"opacity-75\"\n :fill=\"color\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n size?: number | string;\n color?: string;\n className?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n size: 24,\n color: \"currentColor\",\n className: \"\",\n});\n\nconst attrs = useAttrs();\nconst { size, color, className } = props;\n</script>\n","<template>\n <button\n :class=\"[\n 'flex items-center justify-center gap-2 py-3 border font-normal text-input-grey transition-colors duration-300 ease-in-out',\n getButtonBgClass(type, isDisabled),\n getButtonSizeClass(size),\n paddingClassX,\n customClass,\n ]\"\n type=\"button\"\n :disabled=\"isDisabled\"\n @click=\"handleClick\"\n >\n <slot name=\"prefix\" />\n\n <IconLoader v-if=\"loading\" />\n <div v-else>\n <p v-if=\"label\" :class=\"['mb-0', getLabelSizeClass(size)]\">\n {{ label }}\n </p>\n <slot v-else />\n </div>\n\n <slot name=\"suffix\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport IconLoader from \"../icons/icon-loader.vue\";\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}\n\nconst props = withDefaults(defineProps<IBaseButtonProps>(), {\n label: \"\",\n type: \"neutral\",\n size: \"de\",\n paddingClassX: \"px-8\",\n disabled: false,\n loading: false,\n customClass: \"\",\n});\n\nconst emit = defineEmits<{\n (e: \"click\"): void;\n}>();\n\nconst isDisabled = computed(() => props.disabled || props.loading);\n\nfunction handleClick() {\n if (!isDisabled.value) emit(\"click\");\n}\n\n/** === Helper functions (ported from 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</script>\n","<template>\n <p class=\"mb-0 text-body-3xs font-normal text-red-500\">\n {{ errorMessage }}\n </p>\n</template>\n\n<script setup lang=\"ts\">\ninterface IBaseInputErrorProps {\n errorMessage: string;\n}\n\ndefineProps<IBaseInputErrorProps>();\n</script>\n","import { IPaymentObject } from \"../types/checkout.type\";\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","<template>\n <div class=\"relative\" :style=\"resolvedStyle\">\n <div ref=\"containerRef\" class=\"w-full h-full\"></div>\n <div\n v-if=\"loading\"\n class=\"absolute inset-0 grid place-items-center bg-white/60\"\n >\n <IconLoader />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n onMounted,\n onBeforeUnmount,\n ref,\n watch,\n toRefs,\n computed,\n CSSProperties,\n} from \"vue\";\nimport { checkObjectTruthy } from \"../utils\";\nimport IconLoader from \"../components/icons/icon-loader.vue\";\nimport { IPaymentObject } from \"../types/checkout.type\";\nimport { IApiResponse } from \"../types/resource.type\";\nimport { createPaymentLink } from \"../apis/checkout.api\";\n\ntype Env = \"sandbox\" | \"production\";\n\ninterface IIframeStyle {\n width?: string;\n height?: string;\n border?: string;\n borderRadius?: string;\n overflow?: string;\n}\n\ninterface ICheckoutIframeProps {\n style?: IIframeStyle;\n url?: string;\n secretKey: string;\n environment?: Env;\n paymentObject?: IPaymentObject;\n}\n\nconst props = withDefaults(defineProps<ICheckoutIframeProps>(), {\n style: () => ({\n width: \"100%\",\n height: \"100vh\",\n border: \"0\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n }),\n url: undefined,\n environment: \"sandbox\",\n paymentObject: () =>\n ({\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n } as IPaymentObject),\n});\n\nconst resolvedStyle = computed<CSSProperties>(() => ({\n ...props.style,\n}));\n\nconst containerRef = ref<HTMLDivElement | null>(null);\nconst iframeRef = ref<HTMLIFrameElement | null>(null);\n\nconst message = ref<string>(\"\");\nconst loading = ref<boolean>(false);\n\nfunction destroyIframe() {\n if (iframeRef.value && iframeRef.value.parentNode) {\n iframeRef.value.parentNode.removeChild(iframeRef.value);\n }\n iframeRef.value = null;\n}\n\nfunction launchIframe(url: string) {\n // remove prior iframe if present\n destroyIframe();\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n\n // apply provided styles to the iframe\n const s = props.style;\n if (s.width) iframe.style.width = s.width;\n if (s.height) iframe.style.height = s.height;\n if (s.border) iframe.style.border = s.border;\n if (s.borderRadius) iframe.style.borderRadius = s.borderRadius;\n if (s.overflow) iframe.style.overflow = s.overflow;\n\n containerRef.value?.appendChild(iframe);\n iframeRef.value = iframe;\n}\n\nasync function generatePaymentLinkHandler() {\n // If URL is given, just mount it\n if (props.url) {\n launchIframe(props.url);\n return;\n }\n\n if (!props.secretKey) {\n message.value = \"Secret key is required.\";\n return;\n }\n\n if (!checkObjectTruthy<IPaymentObject>(props.paymentObject)) {\n message.value = \"Kindly ensure you are passing all the required data.\";\n return;\n }\n\n loading.value = true;\n message.value = \"\";\n\n try {\n const response: IApiResponse<any> = await createPaymentLink(\n props.paymentObject,\n props.environment,\n props.secretKey\n );\n\n if (response?.isSuccessful && response.launchUrl) {\n message.value = \"Payment link created successfully\";\n launchIframe(response.launchUrl); // use the fresh URL directly\n } else {\n message.value = \"Failed to create payment link\";\n }\n } catch (e: any) {\n message.value = e?.message || \"Failed to create payment link\";\n } finally {\n loading.value = false;\n }\n}\n\nonMounted(() => {\n if (!containerRef.value) return;\n generatePaymentLinkHandler();\n});\n\n// If the `url` prop changes later, reload the iframe\nwatch(\n () => props.url,\n (newUrl) => {\n if (newUrl) launchIframe(newUrl);\n }\n);\n\nonBeforeUnmount(() => {\n destroyIframe();\n});\n</script>\n","<template>\n <CheckoutIframe\n v-if=\"launchUrl && mode === 'iframe'\"\n :url=\"launchUrl\"\n :secretKey=\"secretKey\"\n :environment=\"environment\"\n />\n <div v-else>\n <BaseButton\n label=\"Pay\"\n type=\"primary\"\n customClass=\"w-full\"\n :loading=\"loading\"\n @click=\"generatePaymentLinkHandler\"\n />\n <BaseInputError :errorMessage=\"message\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { checkObjectTruthy } from \"../utils\";\nimport BaseButton from \"../components/base/button.vue\";\nimport BaseInputError from \"../components/base/input-error.vue\";\nimport CheckoutIframe from \"./checkout-iframe.vue\";\nimport { IPaymentObject } from \"../types/checkout.type\";\nimport { IApiResponse } from \"../types/resource.type\";\nimport { createPaymentLink } from \"../apis/checkout.api\";\n\ntype Env = \"sandbox\" | \"production\";\ntype Mode = \"redirect\" | \"iframe\";\n\ninterface ICheckoutButtonProps {\n secretKey: string;\n environment?: Env;\n paymentObject?: IPaymentObject;\n mode?: Mode;\n}\n\nconst props = withDefaults(defineProps<ICheckoutButtonProps>(), {\n environment: \"sandbox\",\n paymentObject: () =>\n ({\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n } as IPaymentObject),\n mode: \"redirect\",\n});\n\nconst message = ref<string>(\"\");\nconst launchUrl = ref<string>(\"\");\nconst loading = ref<boolean>(false);\n\nasync function generatePaymentLinkHandler() {\n if (!props.secretKey) {\n message.value = \"Secret key is required.\";\n return;\n }\n if (!checkObjectTruthy<IPaymentObject>(props.paymentObject)) {\n message.value = \"Kindly ensure you are passing all the required data.\";\n return;\n }\n\n loading.value = true;\n message.value = \"\";\n\n try {\n const response: IApiResponse<any> = await createPaymentLink(\n props.paymentObject,\n props.environment,\n props.secretKey\n );\n\n if (response?.isSuccessful && response.launchUrl) {\n launchUrl.value = response.launchUrl;\n message.value = \"Payment link created successfully\";\n\n if (props.mode === \"redirect\") {\n // Use the URL from the response immediately.\n window.open(response.launchUrl, \"_blank\", \"noopener,noreferrer\");\n }\n } else {\n message.value = \"Failed to create payment link\";\n }\n } catch (e: any) {\n message.value = e?.message || \"Failed to create payment link\";\n } finally {\n loading.value = false;\n }\n}\n\n// Expose for template\nconst { secretKey, environment, mode } = props;\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 17,\n height: 17,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\n <div class=\"flex items-center gap-2 cursor-pointer\" @click=\"$emit('back')\">\n <IconChevronLeft />\n <p class=\"mb-0 text-body-xs font-normal\">Back</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport IconChevronLeft from \"../icons/icon-chevron-left.vue\";\n\nconst emit = defineEmits<{\n (e: \"back\"): void;\n}>();\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 15,\n height: 13,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\n <div\n class=\"checkout-card w-full h-screen flex flex-col items-center justify-center text-white\"\n >\n <div class=\"flex w-1/2\">\n <BaseBack v-if=\"showBackButton\" @back=\"emit('back')\" />\n\n <div class=\"flex gap-2 w-full\">\n <div class=\"flex flex-col gap-8 w-full\">\n <div class=\"bg-off-white rounded-xl\">\n <slot />\n </div>\n\n <div class=\"flex items-center gap-2 justify-center\">\n <p class=\"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 class=\"close-icon flex flex-col items-center justify-center self-start cursor-pointer hover:bg-gray-500\"\n @click=\"emit('close')\"\n role=\"button\"\n aria-label=\"Close\"\n >\n <p class=\"text-white\">x</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport BaseBack from \"./back.vue\"; // assumes you saved the emitted version as back.vue\nimport IconBuzapayIcon from \"../icons/icon-buzapay-icon.vue\";\n\ninterface IBaseCardProps {\n showBackButton?: boolean;\n}\n\nconst props = withDefaults(defineProps<IBaseCardProps>(), {\n showBackButton: false,\n});\n\nconst emit = defineEmits<{\n (e: \"back\"): void;\n (e: \"close\"): void;\n}>();\n</script>\n","<template>\n <img\n :src=\"src\"\n :height=\"height\"\n :alt=\"alt\"\n :class=\"[customClass, isFullWidth ? 'w-full' : '']\"\n :style=\"{ width: isFullWidth ? '100%' : width + 'px' }\"\n @click=\"emit('click')\"\n />\n</template>\n\n<script setup lang=\"ts\">\ninterface IBaseImageProps {\n src: string;\n height?: number | string;\n width?: number | string;\n alt?: string;\n customClass?: string;\n isFullWidth?: boolean;\n}\n\nconst props = withDefaults(defineProps<IBaseImageProps>(), {\n height: 50,\n width: 50,\n alt: \"Image\",\n customClass: \"\",\n isFullWidth: false,\n});\n\nconst emit = defineEmits<{\n (e: \"click\"): void;\n}>();\n\nconst { src, height, width, alt, customClass, isFullWidth } = props;\n</script>\n","<template>\n <div\n :class=\"['flex', containerLayout, className]\"\n role=\"radiogroup\"\n :aria-orientation=\"type === 'horizontal' ? 'horizontal' : 'vertical'\"\n tabindex=\"0\"\n >\n <div\n v-for=\"opt in options\"\n :key=\"opt.value\"\n role=\"radio\"\n :aria-checked=\"selected === opt.value\"\n tabindex=\"-1\"\n @click=\"setSelected(opt.value)\"\n class=\"flex items-center gap-2 cursor-pointer transition-colors duration-200\"\n >\n <div\n :class=\"[\n 'w-4 h-4 rounded-full border flex items-center justify-center',\n selected === opt.value\n ? 'bg-orange-500 border-orange-500'\n : 'bg-white border-grey-200',\n ]\"\n >\n <div\n v-if=\"selected === opt.value\"\n class=\"bg-white w-2 h-2 rounded-full\"\n />\n </div>\n <p class=\"mb-0 text-body-2xs font-medium text-heading-text\">\n {{ opt.label }}\n </p>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from \"vue\";\n\ntype Layout = \"vertical\" | \"horizontal\";\n\ninterface Option {\n label: string;\n value: string;\n}\n\ninterface IBaseRadioGroupProps {\n options: Option[];\n type?: Layout;\n /** Controlled value (v-model) */\n modelValue?: string;\n /** Uncontrolled initial value */\n defaultValue?: string;\n /** Extra classes for the container */\n className?: string;\n}\n\nconst props = withDefaults(defineProps<IBaseRadioGroupProps>(), {\n options: () => [],\n type: \"vertical\",\n modelValue: undefined,\n defaultValue: undefined,\n className: \"\",\n});\n\nconst emit = defineEmits<{\n (e: \"update:modelValue\", v: string): void;\n (e: \"selectedChange\", v: string): void;\n}>();\n\n/** Controlled vs uncontrolled */\nconst isControlled = computed(() => props.modelValue !== undefined);\nconst internal = ref<string>(\"\");\n\n/** Initialize for uncontrolled mode (and notify) */\nonMounted(() => {\n if (isControlled.value) return;\n const initial =\n props.defaultValue ?? (props.options.length ? props.options[0].value : \"\");\n internal.value = initial;\n if (initial) {\n emit(\"update:modelValue\", initial); // keep parent in sync if it listens\n emit(\"selectedChange\", initial);\n }\n});\n\n/** Keep internal in sync when parent controls it */\nwatch(\n () => props.modelValue,\n (v) => {\n if (isControlled.value) internal.value = v ?? \"\";\n },\n { immediate: true }\n);\n\nconst selected = computed(() =>\n isControlled.value ? props.modelValue ?? \"\" : internal.value\n);\n\nfunction setSelected(v: string) {\n if (!isControlled.value) internal.value = v;\n emit(\"update:modelValue\", v);\n emit(\"selectedChange\", v);\n}\n\nconst containerLayout = computed(() =>\n props.type === \"horizontal\" ? \"flex-row gap-5\" : \"flex-col gap-6\"\n);\n\nconst { options, type, className } = props;\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 16,\n height: 17,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\n <IconCopySuccess class=\"cursor-pointer\" :color=\"color\" @click=\"copyHandler\" />\n</template>\n\n<script setup lang=\"ts\">\nimport IconCopySuccess from \"../icons/icon-copy-success.vue\";\n\ninterface IBaseCopyProps {\n copyText: string;\n color?: string;\n}\n\nconst props = defineProps<IBaseCopyProps>();\n\nfunction copyToClipboard(text: string) {\n return navigator.clipboard.writeText(text);\n}\n\nfunction copyHandler() {\n copyToClipboard(props.copyText)\n .then(() => {\n // success: optionally emit an event or show toast\n })\n .catch((err) => {\n console.error(\"Copy failed:\", err);\n });\n}\n</script>\n","<template>\n <div\n v-if=\"type === 'vertical'\"\n :class=\"['flex flex-col gap-1', alignRight ? 'text-right items-end' : '']\"\n >\n <p :class=\"labelCustomClass\">{{ upperLabel }}</p>\n\n <div class=\"flex items-center gap-1\">\n <BaseImage\n v-if=\"showPrefixImg\"\n :src=\"valueImageSrc\"\n :alt=\"value\"\n :width=\"22\"\n :customClass=\"valueImageCustomClass\"\n />\n\n <p v-if=\"!hasValueCopy\" :class=\"valueCustomClass\">{{ value }}</p>\n <p v-else :class=\"[valueCustomClass, 'truncate']\">\n {{ truncatedValue }}\n </p>\n\n <BaseCopy v-if=\"hasValueCopy\" :copyText=\"value\" color=\"#9DBFDE\" />\n\n <BaseImage\n v-if=\"showSuffixImg\"\n :src=\"valueImageSrc\"\n :alt=\"value\"\n :width=\"22\"\n :customClass=\"valueImageCustomClass\"\n />\n </div>\n </div>\n\n <!-- horizontal -->\n <div v-else class=\"flex items-center justify-between\">\n <p :class=\"labelCustomClass\">{{ upperLabel }}</p>\n\n <div class=\"flex items-center gap-1\">\n <BaseImage\n v-if=\"showPrefixImg\"\n :src=\"valueImageSrc\"\n :alt=\"value\"\n :width=\"22\"\n :customClass=\"valueImageCustomClass\"\n />\n\n <p :class=\"valueCustomClass\">{{ value }}</p>\n\n <BaseCopy v-if=\"hasValueCopy\" :copyText=\"value\" color=\"#9DBFDE\" />\n\n <BaseImage\n v-if=\"showSuffixImg\"\n :src=\"valueImageSrc\"\n :alt=\"value\"\n :width=\"22\"\n :customClass=\"valueImageCustomClass\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { truncateString } from \"../../utils\";\nimport BaseImage from \"./image.vue\";\nimport BaseCopy from \"./copy.vue\";\n\ntype LayoutType = \"vertical\" | \"horizontal\";\ntype ImagePosition = \"prefix\" | \"suffix\";\n\ninterface IBaseLabelInfoProps {\n type?: LayoutType;\n label?: string;\n labelCustomClass?: string;\n valueImageSrc?: string;\n valueImageCustomClass?: string;\n valueImagePosition?: ImagePosition;\n hasValueCopy?: boolean;\n value?: string;\n valueCustomClass?: string;\n alignRight?: boolean;\n}\n\nconst props = withDefaults(defineProps<IBaseLabelInfoProps>(), {\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});\n\nconst upperLabel = computed(() => (props.label ?? \"\").toUpperCase());\nconst showPrefixImg = computed(\n () => !!props.valueImageSrc && props.valueImagePosition === \"prefix\"\n);\nconst showSuffixImg = computed(\n () => !!props.valueImageSrc && props.valueImagePosition === \"suffix\"\n);\nconst truncatedValue = computed(() => truncateString(props.value, 40));\n\nconst {\n type,\n labelCustomClass,\n valueImageSrc,\n valueImageCustomClass,\n hasValueCopy,\n value,\n valueCustomClass,\n alignRight,\n} = props;\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 67,\n height: 67,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\n <div class=\"flex flex-col gap-8 p-16\">\n <div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col gap-8\">\n <IconCheckCircle color=\"#F47A1F\" class=\"mx-auto\" />\n\n <div class=\"flex flex-col text-center\" style=\"gap: 2px\">\n <p class=\"text-heading-text font-medium text-header-2xl\">₦2,500.00</p>\n <p class=\"text-sub-copy font-regular text-body-3xs\">\n Has been paid successfully\n </p>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <div class=\"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 class=\"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 class=\"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</template>\n\n<script setup lang=\"ts\">\nimport BaseButton from \"./button.vue\";\nimport BaseLabelInfo from \"./label-info.vue\";\nimport IconCheckCircle from \"../icons/icon-check-circle.vue\";\n\ninterface IBaseSuccessProps {}\n\ndefineProps<IBaseSuccessProps>();\n</script>\n","<template>\n <div :class=\"['flex flex-col gap-2', className]\">\n <p v-if=\"label\" class=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {{ label }} <span v-if=\"required\" class=\"text-orange-required\"> *</span>\n </p>\n\n <div\n :class=\"[\n 'border-c px-3 py-2 flex items-center justify-between rounded-md h-12',\n containerBg,\n containerBorder,\n ]\"\n >\n <slot name=\"prefix\" />\n\n <input\n ref=\"inputEl\"\n :type=\"type\"\n :value=\"formattedValue\"\n :disabled=\"disabled\"\n :placeholder=\"\n placeholder ?? (label ? `Enter ${label.toLowerCase()}` : undefined)\n \"\n :inputmode=\"isAmountInput ? 'decimal' : undefined\"\n class=\"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 @input=\"handleInput\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeyDown\"\n />\n\n <template v-if=\"!loading\">\n <slot name=\"suffix\" />\n\n <BaseImage\n v-if=\"showCopyIcon && rawValue.trim() !== ''\"\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 @click=\"copyHandler\"\n />\n </template>\n <div\n v-else\n class=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\"\n />\n </div>\n\n <p v-if=\"hint || localHint\" class=\"text-body-3xs text-light-copy\">\n {{ localHint || hint }}\n </p>\n\n <p v-if=\"validationError || localError\" class=\"text-body-3xs text-red-500\">\n {{ localError || validationError }}\n </p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, computed, nextTick } from \"vue\";\nimport { formatAmount, restrictToNumericKeys } from \"../../utils\";\nimport BaseImage from \"./image.vue\";\n\ntype Rule = \"numeric\";\n\ninterface IBaseInputProps {\n label?: string;\n type?: string; // HTMLInputTypeAttribute\n placeholder?: string;\n validationError?: string;\n hint?: string;\n mask?: string; // not implemented\n rules?: Rule[];\n isAmountInput?: boolean;\n required?: boolean;\n disabled?: boolean;\n loading?: boolean;\n showCopyIcon?: boolean;\n\n /** v-model support (controlled) */\n modelValue?: string;\n\n /** uncontrolled initial value */\n defaultValue?: string;\n\n /** classes / slots */\n className?: string;\n}\n\nconst props = withDefaults(defineProps<IBaseInputProps>(), {\n label: \"\",\n type: \"text\",\n placeholder: undefined,\n validationError: \"\",\n hint: \"\",\n mask: \"\",\n rules: () => [],\n isAmountInput: false,\n required: false,\n disabled: false,\n loading: false,\n showCopyIcon: false,\n modelValue: undefined,\n defaultValue: \"\",\n className: \"\",\n});\n\nconst emit = defineEmits<{\n (e: \"update:modelValue\", v: string): void;\n (e: \"blur\", v: string): void;\n (e: \"copied\"): void;\n}>();\n\n/** Controlled vs uncontrolled */\nconst isControlled = computed(() => props.modelValue !== undefined);\nconst rawValue = ref<string>(props.modelValue ?? props.defaultValue ?? \"\");\nconst localHint = ref(\"\");\nconst localError = ref(\"\");\nconst inputEl = ref<HTMLInputElement | null>(null);\n\nwatch(\n () => props.modelValue,\n (v) => {\n if (isControlled.value) rawValue.value = v ?? \"\";\n }\n);\n\n/** formatted value for amount input */\nconst formattedValue = computed(() =>\n props.isAmountInput\n ? formatAmount(rawValue.value.replace(/,/g, \"\"))\n : rawValue.value\n);\n\nfunction handleInput(e: Event) {\n const el = e.target as HTMLInputElement;\n const incoming = el.value.replace(/,/g, \"\");\n if (!isControlled.value) rawValue.value = incoming;\n emit(\"update:modelValue\", incoming);\n\n // Move caret to end after formatting\n nextTick(() => {\n const target = inputEl.value;\n if (target) {\n const len = target.value.length;\n target.setSelectionRange(len, len);\n }\n });\n}\n\nfunction handleBlur() {\n emit(\"blur\", rawValue.value);\n}\n\nfunction handleKeyDown(e: KeyboardEvent) {\n if (props.rules.includes(\"numeric\")) restrictToNumericKeys(e);\n}\n\nconst containerBg = computed(() =>\n props.disabled ? \"bg-grey-50 cursor-not-allowed\" : \"bg-white\"\n);\nconst containerBorder = computed(() =>\n props.validationError || localError.value\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100\"\n);\n\nfunction copyToClipboard(text: string) {\n return navigator.clipboard.writeText(text);\n}\n\nfunction copyHandler() {\n copyToClipboard(rawValue.value)\n .then(() => {\n localError.value = \"\";\n localHint.value = \"Text copied to clipboard\";\n emit(\"copied\");\n })\n .catch(() => {\n localHint.value = \"\";\n localError.value = \"Failed to copy text to clipboard\";\n });\n}\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 24,\n height: 24,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 24,\n height: 24,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\n <p class=\"mb-0 text-body-3xs font-medium text-orange-500\">\n {{ hint }}\n </p>\n</template>\n\n<script setup lang=\"ts\">\ninterface IBaseHintProps {\n hint: string;\n}\n\ndefineProps<IBaseHintProps>();\n</script>\n","<template>\n <div :class=\"['flex flex-col gap-2 relative', className]\">\n <p v-if=\"label\" class=\"mb-0 text-body-2xs font-normal text-heading-text\">\n {{ label }} <span v-if=\"required\" class=\"text-orange-required\"> *</span>\n </p>\n\n <!-- Trigger -->\n <div\n ref=\"triggerRef\"\n :class=\"[\n 'border-c rounded-md flex items-center justify-between h-12 cursor-pointer px-3 py-2',\n containerBg,\n containerBorder,\n ]\"\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 @click=\"toggleMenu\"\n @keydown=\"onTriggerKeyDown\"\n >\n <div class=\"flex items-center gap-2\">\n <slot name=\"prefix\" />\n\n <div class=\"flex items-center gap-2\">\n <!-- Country flag in trigger -->\n <BaseImage\n v-if=\"\n selected && itemImageType === 'country' && selected.countryCode\n \"\n :src=\"`https://flagcdn.com/w40/${selected.countryCode.toLowerCase()}.png`\"\n :alt=\"selected.countryCode\"\n :width=\"28\"\n customClass=\"rounded-lg\"\n />\n\n <p\n class=\"text-body-2xs font-normal mb-0\"\n :class=\"selected?.label ? 'text-sub-copy' : 'text-grey-500'\"\n >\n {{ displayText }}\n </p>\n </div>\n </div>\n\n <span\n v-if=\"loading\"\n class=\"inline-block h-4 w-4 border-2 border-current border-t-transparent rounded-full animate-spin\"\n />\n <IconChevronUp v-else-if=\"open\" color=\"#8FAECA\" />\n <IconChevronDown v-else color=\"#8FAECA\" />\n </div>\n\n <!-- Menu -->\n <div\n v-if=\"open\"\n ref=\"menuRef\"\n id=\"select-menu\"\n class=\"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 @keydown=\"onMenuKeyDown\"\n >\n <div v-if=\"hasSearch\" class=\"px-4 pt-2 pb-1\">\n <input\n ref=\"searchRef\"\n type=\"text\"\n :placeholder=\"`Search ${label || 'options'}`\"\n class=\"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 @input=\"onSearchInput\"\n />\n </div>\n\n <div\n v-for=\"(opt, i) in filtered\"\n :key=\"opt.value\"\n @click=\"commit(opt.value)\"\n :id=\"`option-${i}`\"\n data-option\n role=\"option\"\n :aria-selected=\"selected?.value === opt.value\"\n :class=\"[\n '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 <!-- Country flag in list -->\n <BaseImage\n v-if=\"itemImageType === 'country' && opt.countryCode\"\n :src=\"`https://flagcdn.com/w40/${opt.countryCode.toLowerCase()}.png`\"\n :alt=\"opt.countryCode\"\n :width=\"28\"\n customClass=\"rounded-lg\"\n />\n\n <!-- (Bank logos can be handled similarly in future) -->\n\n <p class=\"mb-0 text-body-2xs font-medium\">\n {{ opt.label }}\n </p>\n </div>\n </div>\n\n <BaseHint v-if=\"hint\" :hint=\"hint\" />\n <BaseInputError v-if=\"validationError\" :errorMessage=\"validationError\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n nextTick,\n} from \"vue\";\nimport IconChevronDown from \"../icons/icon-chevron-down.vue\";\nimport IconChevronUp from \"../icons/icon-chevron-up.vue\";\nimport BaseHint from \"./hint.vue\";\nimport BaseInputError from \"./input-error.vue\";\nimport BaseImage from \"./image.vue\";\n\ntype ImageType = \"country\" | \"bank\" | null;\n\nexport interface SelectOption {\n label: string;\n value: string;\n countryCode?: string;\n bankCode?: string;\n}\n\ninterface IBaseSelectProps {\n options: SelectOption[];\n /** Controlled value (v-model) */\n modelValue?: string;\n /** Uncontrolled initial value */\n defaultValue?: string;\n /** Emits change when selection changes */\n className?: string;\n\n placeholder?: string;\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\nconst props = withDefaults(defineProps<IBaseSelectProps>(), {\n options: () => [],\n modelValue: undefined,\n defaultValue: undefined,\n className: \"\",\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});\n\nconst emit = defineEmits<{\n (e: \"update:modelValue\", v: string): void;\n /** Parity with React onChange */\n (e: \"change\", v: string): void;\n}>();\n\n/** Local state */\nconst open = ref(false);\nconst internalValue = ref<string>(props.defaultValue ?? props.modelValue ?? \"\");\nconst filtered = ref<SelectOption[]>([...props.options]);\nconst activeIndex = ref<number>(-1);\n\nconst triggerRef = ref<HTMLDivElement | null>(null);\nconst menuRef = ref<HTMLDivElement | null>(null);\nconst searchRef = ref<HTMLInputElement | null>(null);\n\n/** Controlled vs uncontrolled */\nconst isControlled = computed(() => props.modelValue !== undefined);\nwatch(\n () => props.modelValue,\n (v) => {\n if (isControlled.value) internalValue.value = v ?? \"\";\n }\n);\n\n/** Reset filtered when options change */\nwatch(\n () => props.options,\n (opts) => {\n filtered.value = [...opts];\n },\n { immediate: true }\n);\n\n/** Selected option */\nconst selected = computed(() => {\n const val = isControlled.value ? props.modelValue : internalValue.value;\n return props.options.find((o) => o.value === val) ?? null;\n});\n\n/** Display text */\nconst displayText = computed(() => {\n return (\n selected.value?.label ||\n props.placeholder ||\n (props.label ? `Select ${props.label}` : \"Select an option\")\n );\n});\n\n/** Open/close helpers */\nfunction openMenu() {\n if (props.disabled || open.value) return;\n filtered.value = [...props.options];\n\n // set active index to current selection or first\n const idx = selected.value\n ? Math.max(\n 0,\n props.options.findIndex((o) => o.value === selected.value!.value)\n )\n : 0;\n activeIndex.value = idx;\n\n open.value = true;\n\n // focus search if enabled\n nextTick(() => {\n if (props.hasSearch && searchRef.value) {\n searchRef.value.focus();\n searchRef.value.select();\n }\n });\n}\nfunction closeMenu() {\n if (!open.value) return;\n open.value = false;\n activeIndex.value = -1;\n}\nfunction toggleMenu() {\n if (props.disabled) return;\n open.value ? closeMenu() : openMenu();\n}\n\n/** Outside click */\nfunction onDocMouseDown(e: MouseEvent) {\n if (!open.value) return;\n const t = e.target as Node;\n const tri = triggerRef.value;\n const menu = menuRef.value;\n if (tri && !tri.contains(t) && menu && !menu.contains(t)) closeMenu();\n}\nwatch(open, (v) => {\n if (v) document.addEventListener(\"mousedown\", onDocMouseDown);\n else document.removeEventListener(\"mousedown\", onDocMouseDown);\n});\nonBeforeUnmount(() =>\n document.removeEventListener(\"mousedown\", onDocMouseDown)\n);\n\n/** Selection */\nfunction commit(val: string) {\n if (!isControlled.value) internalValue.value = val;\n emit(\"update:modelValue\", val);\n emit(\"change\", val);\n closeMenu();\n}\n\n/** Search */\nfunction onSearchInput(e: Event) {\n const q = (e.target as HTMLInputElement).value.toLowerCase();\n const list = props.options.filter((o) => o.label.toLowerCase().includes(q));\n filtered.value = list;\n activeIndex.value = list.length ? 0 : -1;\n}\n\n/** Keyboard on trigger */\nfunction onTriggerKeyDown(e: KeyboardEvent) {\n if (props.disabled) return;\n switch (e.key) {\n case \"Enter\":\n case \" \":\n case \"Spacebar\":\n case \"ArrowDown\":\n e.preventDefault();\n if (!open.value) openMenu();\n else moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!open.value) openMenu();\n else moveActive(-1);\n break;\n case \"Escape\":\n if (open.value) {\n e.preventDefault();\n closeMenu();\n }\n break;\n }\n}\n\n/** Keyboard in menu */\nfunction onMenuKeyDown(e: KeyboardEvent) {\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 activeIndex.value = filtered.value.length ? 0 : -1;\n scrollActiveIntoView(0);\n break;\n case \"End\":\n e.preventDefault();\n activeIndex.value = filtered.value.length - 1;\n scrollActiveIntoView(filtered.value.length - 1);\n break;\n case \"Enter\":\n e.preventDefault();\n if (activeIndex.value >= 0) {\n const opt = filtered.value[activeIndex.value];\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\nfunction moveActive(delta: number) {\n if (!filtered.value.length) return;\n const max = filtered.value.length - 1;\n const next =\n activeIndex.value < 0\n ? 0\n : Math.min(max, Math.max(0, activeIndex.value + delta));\n activeIndex.value = next;\n scrollActiveIntoView(next);\n}\n\nfunction scrollActiveIntoView(index: number) {\n const menu = menuRef.value;\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 */\nconst containerBg = computed(() =>\n props.disabled ? \"bg-grey-100 cursor-not-allowed\" : \"bg-white\"\n);\nconst containerBorder = computed(() =>\n props.validationError\n ? \"border-red-300 bg-red-50\"\n : \"border-grey-100 bg-white\"\n);\n\n/** Expose a few props in template */\nconst {\n options,\n placeholder,\n hasSearch,\n disabled,\n loading,\n validationError,\n label,\n hint,\n required,\n itemImageType,\n className,\n} = props;\n</script>\n","<template>\n <div class=\"flex flex-col gap-6\">\n <!-- Step 1 -->\n <div v-if=\"formIndex === 0\" class=\"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\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\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\n <BaseInput label=\"City\" :required=\"true\" />\n <BaseInput label=\"Postal Code\" :required=\"true\" />\n\n <div class=\"col-span-2\">\n <BaseInput label=\"Street Address\" :required=\"true\" />\n </div>\n </div>\n\n <!-- Step 2 -->\n <div\n v-else-if=\"formIndex === 1\"\n class=\"grid grid-cols-2 gap-6 overflow-y-auto\"\n style=\"max-height: 320px\"\n >\n <div class=\"col-span-2\">\n <BaseInput label=\"Card Name\" :required=\"true\" />\n </div>\n <div class=\"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 <BaseButton\n :label=\"formIndex === 0 ? 'Proceed' : 'Pay'\"\n type=\"primary\"\n customClass=\"w-full\"\n @click=\"formIndex === 0 && (formIndex = 1)\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport BaseInput from \"./base/input.vue\";\nimport BaseButton from \"./base/button.vue\";\nimport BaseSelect from \"./base/select.vue\";\n\ninterface IPayByCardProps {}\n\ndefineProps<IPayByCardProps>();\n\nconst formIndex = ref(0);\n</script>\n","<template>\n <div class=\"flex flex-col gap-10\">\n <p class=\"text-sub-copy text-sm font-semibold text-center\">\n Amount to Pay {{ amountDisplay }}\n </p>\n\n <div class=\"bg-[#EFF7FF] p-4 rounded-lg flex flex-col gap-6\">\n <BaseLabelInfo label=\"Bank Name\" :value=\"bankName\" type=\"horizontal\" />\n\n <div class=\"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\n <div class=\"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\n class=\"w-2/3 mx-auto text-center text-body-2xs font-medium text-sub-copy\"\n >\n This account is for this transaction only and expires in\n <span class=\"text-orange-500\">\n {{ remaining >= 0 ? countDownTime : \"00:00\" }}\n </span>\n </p>\n\n <div class=\"flex flex-col gap-4\">\n <BaseButton\n label=\"I have paid the money\"\n type=\"primary\"\n customClass=\"w-full\"\n @click=\"emit('confirm')\"\n />\n <button\n type=\"button\"\n @click=\"emit('cancel')\"\n class=\"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</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport BaseButton from \"./base/button.vue\";\nimport BaseCopy from \"./base/copy.vue\";\nimport BaseLabelInfo from \"./base/label-info.vue\";\n\ninterface IPayByTransferProps {\n amountDisplay?: string;\n bankName?: string;\n accountNumber?: string;\n /** Initial countdown seconds (defaults to 30 minutes) */\n initialSeconds?: number;\n}\n\nconst props = withDefaults(defineProps<IPayByTransferProps>(), {\n amountDisplay: \"NGN 200,500.00\",\n bankName: \"Teerus MFB\",\n accountNumber: \"0001928940\",\n initialSeconds: 30 * 60,\n});\n\nconst emit = defineEmits<{\n (e: \"confirm\"): void;\n (e: \"cancel\"): void;\n}>();\n\nconst remaining = ref<number>(props.initialSeconds);\nconst intervalRef = ref<number | null>(null);\n\n// mm:ss\nconst countDownTime = computed(() => {\n const clamped = Math.max(0, remaining.value);\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});\n\nonMounted(() => {\n intervalRef.value = window.setInterval(() => {\n remaining.value -= 1;\n }, 1000);\n});\n\nonBeforeUnmount(() => {\n if (intervalRef.value) {\n clearInterval(intervalRef.value);\n intervalRef.value = null;\n }\n});\n\n// stop timer at zero\nwatch(remaining, (val) => {\n if (val < 0 && intervalRef.value) {\n clearInterval(intervalRef.value);\n intervalRef.value = null;\n }\n});\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 28,\n height: 28,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 28,\n height: 28,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\n <p v-if=\"cur !== 'USDT' && cur !== 'USDC'\" :class=\"textClass\">\n {{ formatAmount(amount, cur) }}\n </p>\n <div v-else class=\"flex items-center gap-1\">\n <IconUsdt\n v-if=\"cur === 'USDT'\"\n :width=\"iconWidth\"\n :height=\"iconHeight\"\n :color=\"iconColorClass\"\n />\n <IconUsdc\n v-if=\"cur === 'USDC'\"\n :width=\"iconWidth\"\n :height=\"iconHeight\"\n :color=\"iconColorClass\"\n />\n <p :class=\"textClass\">{{ formatAmount(amount) }}</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { formatAmount } from \"../../utils\";\nimport IconUsdc from \"../icons/icon-usdc.vue\";\nimport IconUsdt from \"../icons/icon-usdt.vue\";\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\nconst props = withDefaults(defineProps<IBaseCurrencyAmountProps>(), {\n textClass: \"\",\n iconColorClass: \"\",\n iconWidth: 16,\n iconHeight: 16,\n});\n\nconst cur = computed(() => props.currency?.toUpperCase());\n</script>\n","<template>\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 v-bind=\"attrs\"\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</template>\n\n<script setup lang=\"ts\">\nimport { useAttrs } from \"vue\";\n\ninterface IIconProps {\n width?: number | string;\n height?: number | string;\n color?: string;\n}\n\nconst props = withDefaults(defineProps<IIconProps>(), {\n width: 16,\n height: 17,\n color: \"currentColor\",\n});\n\nconst attrs = useAttrs();\nconst { width, height, color } = props;\n</script>\n","<template>\n <div class=\"flex flex-col gap-6\">\n <!-- Step 1: choose crypto + network -->\n <template v-if=\"formIndex === 0\">\n <div class=\"grid grid-cols-1 gap-6\">\n <BaseSelect\n label=\"Select Crypto\"\n :required=\"true\"\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=\"true\"\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 @click=\"payHandler\"\n />\n </template>\n\n <!-- Step 2: payment details -->\n <div v-else class=\"flex flex-col gap-6\">\n <div class=\"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 class=\"mb-0 text-body-4xs text-light-copy font-normal text-center\">\n USDC\n </p>\n </div>\n\n <div\n class=\"flex flex-col gap-6 border-c border-grey-100 p-4 rounded-2xl bg-light-white-50\"\n >\n <div class=\"border-b border-grey-border pb-4 flex flex-col gap-2\">\n <p class=\"mb-0 text-body-3xs text-light-copy font-normal\">Network</p>\n\n <div class=\"flex justify-between\">\n <div class=\"flex flex-col gap-1\">\n <p class=\"mb-0 text-body-2xs font-medium text-sub-copy\">\n BNB Smart Chain (BEP20)\n </p>\n\n <div class=\"flex items-center gap-2\">\n <p class=\"mb-0 text-body-3xs text-light-copy font-normal\">\n *Est. arrival = 3 mins\n </p>\n <p class=\"mb-0 text-body-3xs text-light-copy font-normal\">|</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 class=\"pb-4 flex flex-col gap-2\">\n <p class=\"mb-0 text-body-3xs text-light-copy font-normal\">\n Deposit Address &gt;\n </p>\n\n <div class=\"flex justify-between\">\n <p\n class=\"mb-0 text-body-2xs font-medium text-sub-copy w-2/3 break-words\"\n >\n 0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\n </p>\n\n <BaseCopy\n copyText=\"0j8938ysheeee8333c162883a4d4f5g6t111nhk8uey37777yt6\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <div\n class=\"flex items-center justify-between border-b border-grey-border py-3\"\n >\n <p class=\"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 class=\"flex items-center justify-between py-4\">\n <p class=\"mb-0 text-body-lg font-semibold text-primary-black\">Pay</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 class=\"flex flex-col gap-6\">\n <BaseButton\n label=\"Confirm Payment\"\n type=\"primary\"\n customClass=\"w-full\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport BaseButton from \"./base/button.vue\";\nimport BaseCopy from \"./base/copy.vue\";\nimport BaseCurrencyAmount from \"./base/currency-amount.vue\";\nimport BaseImage from \"./base/image.vue\";\nimport BaseSelect from \"./base/select.vue\";\nimport IconArrowSwap from \"./icons/icon-arrow-swap.vue\";\n\ninterface IPayByStableCoinProps {}\n\ndefineProps<IPayByStableCoinProps>();\n\nconst emit = defineEmits<{\n /** Fires when user clicks the initial \"Pay\" action in step 1 */\n (e: \"proceed\"): void;\n}>();\n\nconst formIndex = ref<number>(0);\n\nfunction payHandler() {\n formIndex.value = 1;\n emit(\"proceed\");\n}\n</script>\n","<template>\n <BaseCard\n :showBackButton=\"checkoutState === 'STABLE_COIN_PAYMENT'\"\n @back=\"checkoutState = 'PAYMENT'\"\n >\n <div class=\"grid grid-cols-3\">\n <!-- Left column: payment method picker (only on PAYMENT step) -->\n <div\n v-if=\"checkoutState === 'PAYMENT'\"\n class=\"bg-[#EFF7FF] px-6 py-8 flex flex-col gap-5 col-span-1 rounded-l-xl\"\n >\n <p class=\"text-heading-text text-body-xs font-semibold\">Pay with</p>\n\n <BaseRadioGroup\n v-model=\"paymentType\"\n :options=\"formattedPaymentTypeOptions\"\n @selectedChange=\"paymentTypeHandler\"\n />\n </div>\n\n <!-- Right column -->\n <div class=\"col-span-2\">\n <div\n v-if=\"\n checkoutState === 'PAYMENT' ||\n checkoutState === 'STABLE_COIN_PAYMENT'\n \"\n >\n <!-- Header (only on PAYMENT step) -->\n <div\n v-if=\"checkoutState === 'PAYMENT'\"\n class=\"flex items-center justify-between px-12 py-8\"\n >\n <template v-if=\"options?.imageUrl\">\n <BaseImage\n :src=\"options.imageUrl\"\n alt=\"Merchant Logo\"\n :width=\"52\"\n :height=\"52\"\n customClass=\"rounded-lg\"\n />\n </template>\n <template v-else>\n <div\n class=\"bg-heading-text rounded flex flex-col justify-center\"\n style=\"width: 52px; height: 52px\"\n >\n <p class=\"text-white text-center text-body-2xs font-medium\">\n Logo\n </p>\n </div>\n </template>\n\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-body-2xs font-regular text-sub-copy text-right\">\n Raymahni Merchant LLC\n </p>\n <p class=\"text-body-2xs font-regular text-sub-copy text-right\">\n Pay:\n <span class=\"text-orange-500 font-extrabold\">\n {{ amount }}\n </span>\n </p>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"overflow-y-scroll px-10 pb-10 pt-2\">\n <PayByCard v-if=\"paymentType === 'CARD'\" />\n\n <PayByTransfer v-else-if=\"paymentType === 'BANK_TRANSFER'\" />\n\n <PayByStableCoin\n v-else\n @proceed=\"checkoutState = 'STABLE_COIN_PAYMENT'\"\n />\n </div>\n </div>\n\n <BaseSuccess v-else-if=\"checkoutState === 'SUCCESS'\" />\n </div>\n </div>\n </BaseCard>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport BaseCard from \"../components/base/card.vue\";\nimport BaseImage from \"../components/base/image.vue\";\nimport BaseRadioGroup from \"../components/base/radio-group.vue\";\nimport BaseSuccess from \"../components/base/success.vue\";\nimport PayByCard from \"../components/pay-by-card.vue\";\nimport PayByTransfer from \"../components/pay-by-transfer.vue\";\nimport PayByStableCoin from \"../components/pay-by-stable-coin.vue\";\nimport { IPaymentObject } from \"../types/checkout.type\";\nimport { 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 ICheckoutCardProps {\n secretKey: string;\n environment?: \"sandbox\" | \"production\";\n paymentObject: IPaymentObject;\n options?: CheckoutCardOptions;\n}\n\nconst props = withDefaults(defineProps<ICheckoutCardProps>(), {\n options: undefined,\n environment: \"sandbox\",\n paymentObject: () =>\n ({\n amount: 0,\n currency: \"\",\n email: \"\",\n phoneNumber: \"\",\n narration: \"\",\n redirectUrl: \"\",\n } as IPaymentObject),\n});\n\n// \"PAYMENT\" -> chooser screen; \"STABLE_COIN_PAYMENT\" -> post-pay details; \"SUCCESS\" -> success screen\nconst checkoutState = ref<\"STABLE_COIN_PAYMENT\" | \"PAYMENT\" | \"SUCCESS\">(\n \"PAYMENT\"\n);\n\n// payment method options and selected value\nconst paymentTypeOptions = ref([\n { label: \"Card\", value: \"CARD\" },\n { label: \"Bank Transfer\", value: \"BANK_TRANSFER\" },\n { label: \"Stable Coin\", value: \"STABLE_COIN\" },\n]);\n\nconst formattedPaymentTypeOptions = computed(() => {\n if (props.paymentObject.currency === \"NGN\") {\n return paymentTypeOptions.value.filter(\n (opt) => opt.value !== \"STABLE_COIN\"\n );\n } else {\n return paymentTypeOptions.value.filter(\n (opt) => opt.value !== \"BANK_TRANSFER\"\n );\n }\n});\n\nconst paymentType = ref<string>(paymentTypeOptions.value[0].value);\n\nfunction paymentTypeHandler(val: string) {\n paymentType.value = val;\n}\n\nconst amount = computed(() =>\n formatAmount(\n props.paymentObject.amount || 0,\n props.paymentObject.currency || \"NGN\"\n )\n);\n</script>\n"],"names":["ConfigKey","createMidenPG","config","app","useMidenPG","cfg","inject","checkObjectTruthy","obj","getBaseUrl","mode","currencySign","currency","formatAmount","value","num","truncateString","str","restrictToNumericKeys","event","allowedKeys","props","__props","attrs","useAttrs","size","color","className","_openBlock","_createElementBlock","_mergeProps","_unref","_createElementVNode","emit","__emit","isDisabled","computed","handleClick","getButtonBgClass","type","disabled","getButtonSizeClass","getLabelSizeClass","_normalizeClass","paddingClassX","customClass","_renderSlot","_ctx","loading","_createBlock","IconLoader","_hoisted_2","label","_hoisted_1","_toDisplayString","errorMessage","createPaymentLink","paymentObject","environment","secretKey","baseUrl","resolvedStyle","containerRef","ref","iframeRef","message","destroyIframe","launchIframe","url","iframe","s","_a","generatePaymentLinkHandler","response","e","onMounted","watch","newUrl","onBeforeUnmount","_createVNode","launchUrl","CheckoutIframe","BaseButton","BaseInputError","width","height","$emit","IconChevronLeft","_cache","showBackButton","BaseBack","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","IconBuzapayIcon","src","alt","isFullWidth","_normalizeStyle","isControlled","internal","initial","v","selected","setSelected","containerLayout","options","_Fragment","_renderList","opt","$event","copyToClipboard","text","copyHandler","err","IconCopySuccess","upperLabel","showPrefixImg","showSuffixImg","truncatedValue","labelCustomClass","valueImageSrc","valueImageCustomClass","hasValueCopy","valueCustomClass","alignRight","BaseImage","BaseCopy","IconCheckCircle","BaseLabelInfo","_hoisted_7","rawValue","localHint","localError","inputEl","formattedValue","handleInput","incoming","nextTick","target","len","handleBlur","handleKeyDown","containerBg","containerBorder","required","placeholder","isAmountInput","showCopyIcon","hint","validationError","open","internalValue","filtered","activeIndex","triggerRef","menuRef","searchRef","opts","val","o","displayText","openMenu","idx","closeMenu","toggleMenu","onDocMouseDown","t","tri","menu","commit","onSearchInput","q","list","onTriggerKeyDown","onMenuKeyDown","moveActive","scrollActiveIntoView","delta","max","next","index","items","hasSearch","itemImageType","_createTextVNode","IconChevronUp","IconChevronDown","_hoisted_8","i","_hoisted_11","BaseHint","formIndex","BaseInput","BaseSelect","remaining","intervalRef","countDownTime","clamped","m","amountDisplay","bankName","accountNumber","cur","textClass","amount","IconUsdt","iconWidth","iconHeight","iconColorClass","IconUsdc","payHandler","_hoisted_9","BaseCurrencyAmount","IconArrowSwap","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","checkoutState","paymentTypeOptions","formattedPaymentTypeOptions","paymentType","paymentTypeHandler","BaseCard","BaseRadioGroup","PayByCard","PayByTransfer","PayByStableCoin","BaseSuccess"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { IPaymentObject } from "../types/checkout.type";
2
+ export declare function createPaymentLink(paymentObject: IPaymentObject, environment: string, secretKey: string): Promise<any>;
@@ -0,0 +1 @@
1
+ export * from "./checkout.api";
@@ -0,0 +1,15 @@
1
+ import { IPaymentObject } from "../types/checkout.type";
2
+ type Env = "sandbox" | "production";
3
+ type Mode = "redirect" | "iframe";
4
+ interface ICheckoutButtonProps {
5
+ secretKey: string;
6
+ environment?: Env;
7
+ paymentObject?: IPaymentObject;
8
+ mode?: Mode;
9
+ }
10
+ declare const _default: import("vue").DefineComponent<ICheckoutButtonProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ICheckoutButtonProps> & Readonly<{}>, {
11
+ environment: Env;
12
+ paymentObject: IPaymentObject;
13
+ mode: Mode;
14
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ export default _default;
@@ -0,0 +1,27 @@
1
+ import { IPaymentObject } from "../types/checkout.type";
2
+ export interface CheckoutIframeStyle {
3
+ [cssProp: string]: string | number;
4
+ }
5
+ export interface CheckoutCardOptions {
6
+ imageUrl?: string;
7
+ numberPlaceholder?: string;
8
+ expiryPlaceholder?: string;
9
+ cvcPlaceholder?: string;
10
+ styles?: {
11
+ base?: CheckoutIframeStyle;
12
+ invalid?: CheckoutIframeStyle;
13
+ focus?: CheckoutIframeStyle;
14
+ };
15
+ }
16
+ interface ICheckoutCardProps {
17
+ secretKey: string;
18
+ environment?: "sandbox" | "production";
19
+ paymentObject: IPaymentObject;
20
+ options?: CheckoutCardOptions;
21
+ }
22
+ declare const _default: import("vue").DefineComponent<ICheckoutCardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ICheckoutCardProps> & Readonly<{}>, {
23
+ environment: "sandbox" | "production";
24
+ paymentObject: IPaymentObject;
25
+ options: CheckoutCardOptions;
26
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
27
+ export default _default;
@@ -0,0 +1,23 @@
1
+ import { IPaymentObject } from "../types/checkout.type";
2
+ type Env = "sandbox" | "production";
3
+ interface IIframeStyle {
4
+ width?: string;
5
+ height?: string;
6
+ border?: string;
7
+ borderRadius?: string;
8
+ overflow?: string;
9
+ }
10
+ interface ICheckoutIframeProps {
11
+ style?: IIframeStyle;
12
+ url?: string;
13
+ secretKey: string;
14
+ environment?: Env;
15
+ paymentObject?: IPaymentObject;
16
+ }
17
+ declare const _default: import("vue").DefineComponent<ICheckoutIframeProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ICheckoutIframeProps> & Readonly<{}>, {
18
+ style: IIframeStyle;
19
+ url: string;
20
+ environment: Env;
21
+ paymentObject: IPaymentObject;
22
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
+ export default _default;
@@ -0,0 +1,6 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
2
+ back: () => any;
3
+ }, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
4
+ onBack?: (() => any) | undefined;
5
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ export default _default;
@@ -0,0 +1,37 @@
1
+ interface IBaseButtonProps {
2
+ label?: string;
3
+ type?: string;
4
+ size?: string;
5
+ paddingClassX?: string;
6
+ disabled?: boolean;
7
+ loading?: boolean;
8
+ customClass?: string;
9
+ }
10
+ declare var __VLS_1: {}, __VLS_6: {}, __VLS_8: {};
11
+ type __VLS_Slots = {} & {
12
+ prefix?: (props: typeof __VLS_1) => any;
13
+ } & {
14
+ default?: (props: typeof __VLS_6) => any;
15
+ } & {
16
+ suffix?: (props: typeof __VLS_8) => any;
17
+ };
18
+ declare const __VLS_component: import("vue").DefineComponent<IBaseButtonProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
19
+ click: () => any;
20
+ }, string, import("vue").PublicProps, Readonly<IBaseButtonProps> & Readonly<{
21
+ onClick?: (() => any) | undefined;
22
+ }>, {
23
+ size: string;
24
+ type: string;
25
+ label: string;
26
+ loading: boolean;
27
+ paddingClassX: string;
28
+ disabled: boolean;
29
+ customClass: string;
30
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
31
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
32
+ export default _default;
33
+ type __VLS_WithSlots<T, S> = T & {
34
+ new (): {
35
+ $slots: S;
36
+ };
37
+ };
@@ -0,0 +1,23 @@
1
+ interface IBaseCardProps {
2
+ showBackButton?: boolean;
3
+ }
4
+ declare var __VLS_8: {};
5
+ type __VLS_Slots = {} & {
6
+ default?: (props: typeof __VLS_8) => any;
7
+ };
8
+ declare const __VLS_component: import("vue").DefineComponent<IBaseCardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
9
+ back: () => any;
10
+ close: () => any;
11
+ }, string, import("vue").PublicProps, Readonly<IBaseCardProps> & Readonly<{
12
+ onBack?: (() => any) | undefined;
13
+ onClose?: (() => any) | undefined;
14
+ }>, {
15
+ showBackButton: boolean;
16
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
18
+ export default _default;
19
+ type __VLS_WithSlots<T, S> = T & {
20
+ new (): {
21
+ $slots: S;
22
+ };
23
+ };
@@ -0,0 +1,6 @@
1
+ interface IBaseCopyProps {
2
+ copyText: string;
3
+ color?: string;
4
+ }
5
+ declare const _default: import("vue").DefineComponent<IBaseCopyProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IBaseCopyProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ export default _default;
@@ -0,0 +1,15 @@
1
+ interface IBaseCurrencyAmountProps {
2
+ currency: string;
3
+ amount: number | string;
4
+ textClass?: string;
5
+ iconColorClass?: string;
6
+ iconWidth?: number | string;
7
+ iconHeight?: number | string;
8
+ }
9
+ declare const _default: import("vue").DefineComponent<IBaseCurrencyAmountProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IBaseCurrencyAmountProps> & Readonly<{}>, {
10
+ textClass: string;
11
+ iconColorClass: string;
12
+ iconWidth: number | string;
13
+ iconHeight: number | string;
14
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ export default _default;
@@ -0,0 +1,5 @@
1
+ interface IBaseHintProps {
2
+ hint: string;
3
+ }
4
+ declare const _default: import("vue").DefineComponent<IBaseHintProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IBaseHintProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ export default _default;
@@ -0,0 +1,20 @@
1
+ interface IBaseImageProps {
2
+ src: string;
3
+ height?: number | string;
4
+ width?: number | string;
5
+ alt?: string;
6
+ customClass?: string;
7
+ isFullWidth?: boolean;
8
+ }
9
+ declare const _default: import("vue").DefineComponent<IBaseImageProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
10
+ click: () => any;
11
+ }, string, import("vue").PublicProps, Readonly<IBaseImageProps> & Readonly<{
12
+ onClick?: (() => any) | undefined;
13
+ }>, {
14
+ width: number | string;
15
+ height: number | string;
16
+ customClass: string;
17
+ alt: string;
18
+ isFullWidth: boolean;
19
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ export default _default;
@@ -0,0 +1,13 @@
1
+ export * from "./back.vue";
2
+ export * from "./button.vue";
3
+ export * from "./card.vue";
4
+ export * from "./copy.vue";
5
+ export * from "./currency-amount.vue";
6
+ export * from "./hint.vue";
7
+ export * from "./image.vue";
8
+ export * from "./input-error.vue";
9
+ export * from "./input.vue";
10
+ export * from "./label-info.vue";
11
+ export * from "./radio-group.vue";
12
+ export * from "./select.vue";
13
+ export * from "./success.vue";
@@ -0,0 +1,5 @@
1
+ interface IBaseInputErrorProps {
2
+ errorMessage: string;
3
+ }
4
+ declare const _default: import("vue").DefineComponent<IBaseInputErrorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IBaseInputErrorProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ export default _default;
@@ -0,0 +1,59 @@
1
+ type Rule = "numeric";
2
+ interface IBaseInputProps {
3
+ label?: string;
4
+ type?: string;
5
+ placeholder?: string;
6
+ validationError?: string;
7
+ hint?: string;
8
+ mask?: string;
9
+ rules?: Rule[];
10
+ isAmountInput?: boolean;
11
+ required?: boolean;
12
+ disabled?: boolean;
13
+ loading?: boolean;
14
+ showCopyIcon?: boolean;
15
+ /** v-model support (controlled) */
16
+ modelValue?: string;
17
+ /** uncontrolled initial value */
18
+ defaultValue?: string;
19
+ /** classes / slots */
20
+ className?: string;
21
+ }
22
+ declare var __VLS_1: {}, __VLS_3: {};
23
+ type __VLS_Slots = {} & {
24
+ prefix?: (props: typeof __VLS_1) => any;
25
+ } & {
26
+ suffix?: (props: typeof __VLS_3) => any;
27
+ };
28
+ declare const __VLS_component: import("vue").DefineComponent<IBaseInputProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
29
+ "update:modelValue": (v: string) => any;
30
+ blur: (v: string) => any;
31
+ copied: () => any;
32
+ }, string, import("vue").PublicProps, Readonly<IBaseInputProps> & Readonly<{
33
+ "onUpdate:modelValue"?: ((v: string) => any) | undefined;
34
+ onBlur?: ((v: string) => any) | undefined;
35
+ onCopied?: (() => any) | undefined;
36
+ }>, {
37
+ className: string;
38
+ type: string;
39
+ label: string;
40
+ mask: string;
41
+ loading: boolean;
42
+ disabled: boolean;
43
+ required: boolean;
44
+ placeholder: string;
45
+ modelValue: string;
46
+ defaultValue: string;
47
+ validationError: string;
48
+ hint: string;
49
+ rules: Rule[];
50
+ isAmountInput: boolean;
51
+ showCopyIcon: boolean;
52
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
53
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
54
+ export default _default;
55
+ type __VLS_WithSlots<T, S> = T & {
56
+ new (): {
57
+ $slots: S;
58
+ };
59
+ };
@@ -0,0 +1,27 @@
1
+ type LayoutType = "vertical" | "horizontal";
2
+ type ImagePosition = "prefix" | "suffix";
3
+ interface IBaseLabelInfoProps {
4
+ type?: LayoutType;
5
+ label?: string;
6
+ labelCustomClass?: string;
7
+ valueImageSrc?: string;
8
+ valueImageCustomClass?: string;
9
+ valueImagePosition?: ImagePosition;
10
+ hasValueCopy?: boolean;
11
+ value?: string;
12
+ valueCustomClass?: string;
13
+ alignRight?: boolean;
14
+ }
15
+ declare const _default: import("vue").DefineComponent<IBaseLabelInfoProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IBaseLabelInfoProps> & Readonly<{}>, {
16
+ type: LayoutType;
17
+ label: string;
18
+ labelCustomClass: string;
19
+ valueImageSrc: string;
20
+ valueImageCustomClass: string;
21
+ valueImagePosition: ImagePosition;
22
+ hasValueCopy: boolean;
23
+ value: string;
24
+ valueCustomClass: string;
25
+ alignRight: boolean;
26
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
27
+ export default _default;