@fractalpay/fractalpay-next-dev 0.0.307 → 0.0.308
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.js +9 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/app/components/RequestPayment/RequestPayment.tsx","../src/app/components/Loader/LoaderStyle.tsx","../src/app/components/Loader/Loader.tsx","../src/app/components/baseurl.ts","../src/app/components/Errortext.ts","../src/app/components/CustomModal/CustomModal2styles.tsx","../src/app/components/CustomModal/CustomModal2.tsx","../src/app/components/RequestPayment/RequestPaymentstyles.tsx","../src/app/utils/Common.js","../src/app/components/RequestPayment/RequestPreAuthPayment.tsx","../src/app/components/Charge/GetPaymentPage.tsx","../src/app/components/Charge/Chargewidgetstyles.tsx","../src/app/components/SuccessMessage/SuccessMszStyle.tsx","../src/app/components/SuccessMessage/HandleSubmit.tsx","../src/app/components/SuccessMessage/SuccessMsz.tsx","../src/app/components/Datascript.tsx","../src/app/components/ErrorCardMessage/ErrorCardMessageStyle.tsx","../src/app/components/ErrorCardMessage/ErrorCardMessage.tsx","../src/app/components/socketClient.js","../src/app/components/Atoms/CardBankRadio/CardBankRadioStyles.tsx","../src/app/components/FractalTokenizer.tsx","../src/app/components/Atoms/FractalForm/FractalFields.tsx","../src/app/components/Datacap-Payment/DataCapScriptLoader.tsx","../src/app/components/Datacap-Payment/DataCapFields.tsx","../src/app/components/Charge/FractalWidgetStyles.tsx","../src/app/components/Fractal/FractalCheckoutUI.tsx","../src/app/utils/Constant.js","../src/app/components/PreAuthCharge/PreAuthPaymentPage.tsx","../src/app/components/AddCard/AddCardEasyPay.tsx","../src/app/components/AddCard/AddCardStyles.tsx","../src/app/components/SuccessCardMessage/SuccessCardMszStyle.tsx","../src/app/components/SuccessCardMessage/SuccessCardMsz.tsx","../src/app/components/AddCard/AddCardSky.tsx","../src/app/components/AddCard/AddCardSkyStyle.tsx","../src/app/components/Atoms/FractalForm/FractalFieldsAddCardSky.tsx","../src/app/components/PartialPayment/PartialPayment.tsx","../src/app/components/Skysystemz/PayButtonWithForm.tsx","../src/app/components/Skysystemz/SkyChargewidgetstyles.tsx","../src/app/components/Atoms/ModelContentSky/ModelContentSky.tsx","../src/app/components/Atoms/ThreedsCheckout/ThreeDSChallenge.tsx","../src/app/components/Atoms/CardBankRadio/CardBankRadio.tsx","../src/app/components/Atoms/ThreedsCheckout/ThreedsCheckout.tsx","../src/app/components/Atoms/ThreedsCheckout/CheckoutForm.tsx","../src/app/components/Atoms/CardList/CardList.tsx","../src/app/components/ErrorCardMessage/ErrorCardOverlaystyle.tsx","../src/app/components/ErrorCardMessage/ErrorCardOverlay.tsx","../src/app/components/Atoms/Applepay/ApplePayButton.tsx","../src/app/components/Skysystemz/EmbeddedCheckout.tsx","../src/app/components/Skysystemz/EmbeddedCheckoutStyles.tsx","../src/app/components/Atoms/Applepay/ApplePayScriptLoader.tsx"],"sourcesContent":["{\n \"name\": \"@fractalpay/fractalpay-next-dev\",\n \"version\": \"0.0.307\",\n \"private\": false,\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"next dev -p 4001\",\n \"build\": \"next build\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"bundle\": \"tsup src/app/index.ts\"\n },\n \"dependencies\": {\n \"@stripe/react-stripe-js\": \"^5.3.0\",\n \"@stripe/stripe-js\": \"^8.3.0\",\n \"axios\": \"^1.8.1\",\n \"bootstrap\": \"^5.3.3\",\n \"credit-card-type\": \"^10.0.1\",\n \"formik\": \"^2.4.6\",\n \"node-forge\": \"^1.3.1\",\n \"react-bootstrap\": \"^2.10.5\",\n \"react-bs-datatable\": \"^3.15.0\",\n \"react-datepicker\": \"^7.5.0\",\n \"react-icons\": \"^5.5.0\",\n \"react-number-format\": \"^5.4.3\",\n \"react-toastify\": \"^10.0.6\",\n \"socket.io-client\": \"^4.8.1\",\n \"styled-components\": \"^6.1.15\",\n \"sweetalert2\": \"^11.22.0\",\n \"yup\": \"^1.6.1\"\n },\n \"peerDependencies\": {\n \"react\": \">=18.0.0 <20.0.0\",\n \"react-dom\": \">=18.0.0 <20.0.0\"\n },\n \"devDependencies\": {\n \"@types/estree\": \"^1.0.8\",\n \"@types/node\": \"^20\",\n \"@types/node-forge\": \"^1.3.11\",\n \"@types/react\": \"^18\",\n \"@types/react-dom\": \"^18\",\n \"autoprefixer\": \"^10.4.20\",\n \"eslint\": \"^8\",\n \"eslint-config-next\": \"15.0.3\",\n \"next\": \"^15.0.5\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5\"\n },\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\"\n }\n },\n \"author\": \"Mukul\",\n \"license\": \"MIT\",\n \"keywords\": [\n \"nextjs\",\n \"next\",\n \"typescript\",\n \"tailwindcss\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}","'use client'\nimport 'bootstrap/dist/js/bootstrap.bundle.min.js';\nimport React, { useState, useEffect } from 'react';\nimport Loader from '../Loader/Loader';\nimport { baseUrl } from '../baseurl';\nimport { ErrorText } from '../Errortext';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport axios from 'axios';\nimport { PatternFormat } from 'react-number-format';\nimport RequestPaymentstyles from './RequestPaymentstyles';\nimport { formatUSD, numberToBoolean } from '@/app/utils/Common';\n\n\ninterface Props {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n name?: string;\n email?: string;\n phone?: string;\n from?: string;\n amount: string;\n webname?: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n require_3ds?: boolean,\n pass_fee?: boolean,\n sessionToken?: string,\n showSurcharge?: number,\n}\n\ninterface RequestDetails {\n email: string;\n amount: string | undefined;\n phone_number: string;\n order_id: string;\n name: string;\n fractalpayPublicKey: string;\n}\n\ninterface Errors {\n [key: string]: string;\n}\n\n\n\n// export const RequestPayment: React.FC<Props> = (props) => {\nexport function RequestPayment(props: Props) {\n const fractalpayClientKey = props.merchantPublicKey;\n const discount = props?.discount;\n const tax = props?.tax;\n const surcharge = props?.surcharge;\n // State definitions with types\n const [show, setShow] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [errors, setErrors] = useState<{ [key: string]: string }>({});\n const [phone, setPhone] = useState<string | null>(null);\n const [requestDetails, setRequestDetails] = useState({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n const [allowPartial, setAllowPartial] = useState<boolean>(false);\n const [cashDiscount, setCashDiscount] = useState<number | undefined>(undefined);\n const [amount, setAmount] = useState<string>('');\n const [showConfirmationModal, setShowConfirmationModal] = useState<boolean>(false);\n const [apiResponse, setApiResponse] = useState<any>(null);\n\n const phoneNumberRegex = (value: string) => /^\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/.test(value);\n const amoutRegex = /[+-]?([0-9]*[.])?[0-9]+/;\n const isValidEmail = (value: string) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n const isAlpha = (value: string) => /^[A-Za-z\\s]*$/.test(value);\n\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount / (1 + surchargeVal);\n return Math.round(originalAmount * 100) / 100; // rounding to 2 decimals\n };\n\n useEffect(() => {\n if (props?.pass_fee) {\n let cash_discount = CalculateCashDiscount(props?.amount, props?.surcharge);\n setCashDiscount(cash_discount);\n }\n }, [props?.pass_fee,show])\n\n const handleClose = () => {\n setShow(false);\n setCashDiscount(0.00);\n setErrors({});\n };\n\n const handleShow = () => setShow(true);\n\n const handleCloseConfirmationModal = () => {\n console.log(apiResponse, 'apiresponse');\n handleSubmit(apiResponse);\n setShowConfirmationModal(false);\n };\n\n function emptyFields() {\n setRequestDetails({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n setAmount('');\n }\n\n function handleSubmit(event: any) {\n // Send message to parent window\n let message = {\n type: 'preview.compiledcheck',\n other: { ...event, status: true }\n };\n\n window.parent.postMessage(message, '*');\n }\n\n const sendRequestPayment = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading) return;\n if (Object.keys(errors).length > 0) {\n return;\n }\n setErrors({});\n\n if (!requestDetails?.email && phone && !phoneNumberRegex(phone)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumbervalid\n }));\n return;\n }\n if (!validateForm()) {\n return;\n }\n\n try {\n setLoading(true);\n const formData = {\n fractalpayPublicKey: fractalpayClientKey,\n amount: amount,\n phone_number: phone,\n order_id: requestDetails.order_id,\n action: 'request',\n name: requestDetails.name,\n email: requestDetails.email,\n customer_id: props?.customerId ? props?.customerId : '',\n discount,\n surcharge,\n tax,\n require_3ds: props?.require_3ds,\n pass_fee: props?.pass_fee,\n allow_partial: allowPartial,\n };\n let response = await axios.post(`${baseUrl}create-widget-order`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n });\n if (response?.status === 200) {\n setShowConfirmationModal(true);\n setShow(false);\n emptyFields();\n setApiResponse(response?.data);\n }\n\n setLoading(false);\n } catch (error) {\n console.log(error);\n setLoading(false);\n }\n };\n\n let favicon_logo = baseUrl + 'images/logo-img.png';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n const token = e.target.dataset.token as string;\n setRequestDetails({ ...requestDetails, [token]: value });\n if ((token === 'name') && !isAlpha(value)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n [token]: ErrorText.onlylettersallowed\n }));\n return;\n }\n\n let errorobj = errors;\n\n if (token === 'email' && !phone) {\n delete errorobj.phone;\n setErrors(errorobj);\n }\n\n if (value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n\n if (token === 'email' && !value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n };\n\n const handleAmountChange = (data: { value: string }) => {\n const { value } = data;\n if (Number(value) > 0) {\n let errorobj = errors;\n delete errorobj.amount;\n setErrors(errorobj);\n }\n setAmount(value);\n };\n\n const validateForm = () => {\n let newErrors: { [key: string]: string } = {};\n\n if (!amount) newErrors.amount = ErrorText.amountrequired;\n if (requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (!phone && !requestDetails?.email) newErrors.phone = ErrorText.phoneoremailrequired;\n if (!phone && !requestDetails?.email) newErrors.email = ErrorText.phoneoremailrequired;\n if (!phone && requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (props.from === 'merchant' && !requestDetails.order_id) newErrors.order_id = ErrorText.orderidrequired;\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n useEffect(() => {\n if (props) {\n setRequestDetails((prev) => ({\n ...prev,\n order_id: props.orderID ? props.orderID : '',\n name: props?.name ? props?.name : '',\n email: props?.email ? props?.email : '',\n }));\n setAmount(props.amount ? props.amount : '');\n setPhone(props.phone ? `${props.phone}` : null);\n }\n }, [props]);\n\n const handlePhoneChange = (e: { value: string }) => {\n let value = e?.value;\n if (value && value?.length > 0 && value?.length !== 10) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumberlength\n }));\n setPhone(value);\n return;\n } else {\n setPhone(value);\n }\n let errorobj = errors;\n delete errorobj.phone;\n\n if (value && !requestDetails?.email) {\n delete errorobj.email;\n }\n\n setErrors(errorobj);\n };\n\n function formatAmount(amount: string) {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(Number(amount));\n }\n\n const handleAllowPartial = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.checked;\n setAllowPartial(value);\n }\n\n\n return (\n <>\n <RequestPaymentstyles />\n <Loader loading={loading} />\n <>\n <button className=\"paymentBtn\" onClick={handleShow}>\n Request Payment\n </button>\n\n <CustomModal2\n open={show}\n onClose={() => setShow(false)}\n maxWidth={'500px'}\n >\n <div style={{ maxWidth: '500px' }}>\n\n <div className=\"request-payment-amount-detail frac-form\">\n <p className=\"request-payment-merchantname\">Pay {props?.webname}</p>\n <p className=\"request-payment-amount\">{formatAmount(props?.amount)}</p>\n {\n cashDiscount && cashDiscount > 0 && <div className='frac-req-cash-discount' >\n {/* <div className='frac-cashlabel' >Cash Discount :</div> */}\n <div className='frac-cashlabel' >{numberToBoolean(props?.showSurcharge) ? 'Surcharge' : 'Cash Discount'} :</div>\n <div>{formatUSD((Number(props.amount) - cashDiscount).toFixed(2))}</div>\n </div>\n }\n {\n props?.from === 'merchant' && <p className=\"request-payment-orderid\" >{requestDetails?.order_id}</p>\n }\n <span className=\"request-payment-close-popup\" onClick={handleClose}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <form className=\"request-payment-input-form\" >\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n FULL NAME\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Full Name\"\n data-token=\"name\"\n onChange={handleChange}\n value={requestDetails?.name}\n />\n {errors.name && <small className=\"request-payment-error-msg\">{errors.name}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"requestPhoneNumber\" className=\"request-payment-input-label\">\n Phone Number\n </label>\n <PatternFormat\n className=\"request-payment-input-box\"\n placeholder=\"Mobile number\"\n format=\"+1 (###) ###-####\"\n value={phone}\n onValueChange={(e) => { handlePhoneChange(e) }}\n />\n {errors.phone && <small className=\"request-payment-error-msg\">{errors.phone}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n EMAIL\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Email\"\n onChange={handleChange}\n data-token=\"email\"\n value={requestDetails?.email}\n />\n {errors.email && <small className=\"request-payment-error-msg\">{errors.email}</small>}\n </div>\n <div className=\"partial-toggle-div\">\n <input className=\"partial-input\" type=\"checkbox\" role=\"switch\"\n style={{ cursor: 'pointer' }} checked={allowPartial}\n onChange={(e) => handleAllowPartial(e)} id=\"partialSwitch\" />\n <label className=\"partial-label\" htmlFor=\"partialSwitch\"\n style={{ cursor: 'pointer' }}>Allow Partial Payments?</label>\n </div>\n <button\n type=\"button\"\n className=\"request-payment-submit-button\"\n onClick={sendRequestPayment}\n disabled={loading}\n >\n {loading ? \"Loading...\" : \"Send Request\"}\n </button>\n <div className=\"request-payment-fractal-powerd-by\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M15.2165 4.11839C15.1973 3.69746 15.1973 3.29567 15.1973 2.89387C15.1973 2.56861 14.9486 2.31988 14.6234 2.31988C12.2317 2.31988 10.4141 1.63109 8.90257 0.157848C8.67298 -0.0526158 8.32858 -0.0526158 8.09898 0.157848C6.58748 1.63109 4.76984 2.31988 2.37821 2.31988C2.05295 2.31988 1.80422 2.56861 1.80422 2.89387C1.80422 3.29567 1.80422 3.69746 1.78508 4.11839C1.70855 8.13632 1.59375 13.6466 8.30945 15.9617L8.50078 16L8.69211 15.9617C15.3887 13.6466 15.293 8.15546 15.2165 4.11839ZM8.04159 9.6861C7.92679 9.78176 7.79286 9.83916 7.63979 9.83916H7.62066C7.46759 9.83916 7.31453 9.76263 7.21887 9.64783L5.43949 7.67713L6.30048 6.91181L7.69719 8.46158L10.7967 5.5151L11.5812 6.35695L8.04159 9.6861Z\" fill=\"#727272\" />\n </svg>\n Secure payments powered by <span>Fractal</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.4999 5.49758V7.01156C17.4999 7.05924 17.4595 7.09898 17.411 7.09898H12.3516C12.9169 6.54266 13.4781 5.99032 14.0434 5.434C14.0596 5.4181 14.0838 5.41016 14.104 5.41016H17.411C17.4595 5.41016 17.4999 5.44989 17.4999 5.49758Z\" fill=\"#61C699\" />\n <path d=\"M12.3462 10.9037V9.29836C12.3462 9.25067 12.3866 9.21094 12.435 9.21094H13.8523C13.929 9.21094 13.9694 9.30631 13.9129 9.35796C13.392 9.87455 12.8711 10.3911 12.3462 10.9037Z\" fill=\"#61C699\" />\n <path d=\"M12.4404 9.00523H15.6949C15.7434 9.00523 15.7838 8.96549 15.7838 8.91781V7.40383C15.7838 7.35614 15.7434 7.31641 15.6949 7.31641H12.4404C12.3919 7.31641 12.3516 7.35614 12.3516 7.40383V8.91781C12.3516 8.96549 12.3919 9.00523 12.4404 9.00523Z\" fill=\"#61C699\" />\n <path d=\"M10.1581 0.0120725L11.4906 0.77105C11.531 0.794892 11.5471 0.84655 11.5229 0.890261L8.99114 5.20173C8.78521 4.44275 8.57927 3.68775 8.37334 2.92877C8.36527 2.90493 8.3693 2.88109 8.38142 2.86122L10.0329 0.0438621C10.0612 0.000151419 10.1177 -0.0117697 10.1581 0.0120725Z\" fill=\"#61C699\" />\n <path d=\"M12.3382 7.10006L10.9289 6.29737C10.8886 6.27353 10.8724 6.22187 10.8966 6.17816L11.6033 4.97015C11.6436 4.9026 11.7446 4.91452 11.7648 4.99002C11.9546 5.69734 12.1484 6.40068 12.3382 7.10006Z\" fill=\"#61C699\" />\n <path d=\"M10.7107 6.0771L12.338 3.30345C12.3622 3.26372 12.346 3.20808 12.3057 3.18424L10.9732 2.42526C10.9328 2.40142 10.8763 2.41732 10.852 2.45705L9.22476 5.2307C9.20053 5.27044 9.21669 5.32607 9.25706 5.34991L10.5896 6.10889C10.634 6.13273 10.6865 6.11683 10.7107 6.0771Z\" fill=\"#61C699\" />\n <path d=\"M1.66713 3.51237L2.99963 2.75339C3.04001 2.72955 3.09654 2.74544 3.12077 2.78518L5.65251 7.09665C4.88128 6.89399 4.11408 6.69133 3.34285 6.48867C3.31862 6.4847 3.30247 6.4688 3.29036 6.44893L1.63483 3.63158C1.6106 3.58787 1.62271 3.53621 1.66713 3.51237Z\" fill=\"#61C699\" />\n <path d=\"M8.99793 5.20018L7.58871 5.99889C7.54833 6.02274 7.4918 6.00684 7.46757 5.9671L6.76095 4.76307C6.72057 4.69552 6.78517 4.61605 6.86189 4.63591C7.57256 4.82268 8.28726 5.00944 8.99793 5.20018Z\" fill=\"#61C699\" />\n <path d=\"M7.27986 6.07054L5.6526 3.2969C5.62837 3.25716 5.57588 3.24127 5.53146 3.26511L4.19896 4.02409C4.15858 4.04793 4.14243 4.09959 4.16666 4.1433L5.79392 6.91694C5.81815 6.95668 5.87064 6.97257 5.91506 6.94873L7.24756 6.18975C7.28794 6.16591 7.30409 6.11425 7.27986 6.07054Z\" fill=\"#61C699\" />\n <path d=\"M0.5 12.4998V10.9859C0.5 10.9382 0.540379 10.8984 0.588833 10.8984H5.64829C5.08299 11.4548 4.52172 12.0071 3.95642 12.5634C3.94027 12.5793 3.91604 12.5873 3.89585 12.5873H0.588833C0.540379 12.5873 0.5 12.5475 0.5 12.4998Z\" fill=\"#61C699\" />\n <path d=\"M5.65129 7.09766V8.70303C5.65129 8.75072 5.61091 8.79045 5.56246 8.79045H4.14516C4.06844 8.79045 4.02806 8.69508 4.08459 8.64343C4.60548 8.12685 5.12637 7.61424 5.65129 7.09766Z\" fill=\"#61C699\" />\n <path d=\"M5.55967 8.99609H2.30514C2.25669 8.99609 2.21631 9.03583 2.21631 9.08352V10.5975C2.21631 10.6452 2.25669 10.6849 2.30514 10.6849H5.55967C5.60813 10.6849 5.6485 10.6452 5.6485 10.5975V9.08352C5.6485 9.03583 5.60813 8.99609 5.55967 8.99609Z\" fill=\"#61C699\" />\n <path d=\"M7.82638 17.9865L6.49388 17.2276C6.4535 17.2037 6.43735 17.1521 6.46158 17.1083L8.99333 12.7969C9.19926 13.5559 9.40519 14.3109 9.61112 15.0698C9.6192 15.0937 9.61516 15.1175 9.60305 15.1374L7.95155 17.9547C7.91925 17.9985 7.86676 18.0104 7.82638 17.9865Z\" fill=\"#61C699\" />\n <path d=\"M5.64795 10.8984L7.05717 11.7011C7.09755 11.725 7.1137 11.7766 7.08947 11.8203L6.38284 13.0283C6.34246 13.0959 6.24152 13.084 6.22133 13.0085C6.02751 12.3012 5.83773 11.5978 5.64795 10.8984Z\" fill=\"#61C699\" />\n <path d=\"M7.2739 11.9258L5.64664 14.6994C5.62241 14.7392 5.63856 14.7948 5.67894 14.8187L7.01144 15.5776C7.05182 15.6015 7.10835 15.5856 7.13258 15.5458L8.75984 12.7722C8.78407 12.7325 8.76792 12.6768 8.72754 12.653L7.39504 11.894C7.35062 11.8702 7.29813 11.8861 7.2739 11.9258Z\" fill=\"#61C699\" />\n <path d=\"M16.3199 14.4866L14.9874 15.2456C14.947 15.2694 14.8904 15.2535 14.8662 15.2138L12.3345 10.9023C13.1057 11.105 13.8729 11.3077 14.6441 11.5103C14.6684 11.5143 14.6845 11.5302 14.6966 11.5501L16.3481 14.3674C16.3764 14.4111 16.3643 14.4628 16.3199 14.4866Z\" fill=\"#61C699\" />\n <path d=\"M8.99121 12.7983L10.4004 11.9956C10.4408 11.9717 10.4973 11.9876 10.5216 12.0274L11.2282 13.2354C11.2686 13.3029 11.204 13.3824 11.1272 13.3625C10.4166 13.1758 9.70188 12.989 8.99121 12.7983Z\" fill=\"#61C699\" />\n <path d=\"M10.7077 11.9285L12.3349 14.7021C12.3592 14.7418 12.4117 14.7577 12.4561 14.7339L13.7886 13.9749C13.829 13.9511 13.8451 13.8994 13.8209 13.8557L12.1936 11.0821C12.1694 11.0423 12.1169 11.0264 12.0725 11.0503L10.74 11.8092C10.6996 11.8331 10.6834 11.8847 10.7077 11.9285Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </form>\n </div>\n </CustomModal2>\n <CustomModal2\n open={showConfirmationModal}\n onClose={handleCloseConfirmationModal}\n maxWidth={'500px'}\n >\n <div className=\"fractal-popup-content\" style={{ padding: '0px', maxWidth: '500px' }}>\n <div className=\"request-payment-success-container\">\n <span className=\"request-payment-close-popup\" onClick={handleCloseConfirmationModal}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <div className=\"request-payment-success-tick-div\">\n <div className=\"request-payment-success-tick\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6.12669 13.9774C5.97396 14.131 5.76558 14.2167 5.54913 14.2167C5.33267 14.2167 5.1243 14.131 4.97157 13.9774L0.359012 9.36408C-0.119671 8.8854 -0.119671 8.10919 0.359012 7.6314L0.936573 7.05369C1.4154 6.57501 2.19072 6.57501 2.6694 7.05369L5.54913 9.93357L13.3306 2.15198C13.8094 1.6733 14.5855 1.6733 15.0634 2.15198L15.641 2.72969C16.1196 3.20837 16.1196 3.98444 15.641 4.46237L6.12669 13.9774Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </div>\n <h6 className=\"request-payment-success-text\">The request <br />\n was sent</h6>\n <h6 className=\"request-payment-success-subtext\">Please wait for the customer to pay</h6>\n <div className=\"request-payment-success-btn-div\">\n {/* <button className=\"request-payment-success-btn1\">Go to Transactions</button> */}\n <button onClick={handleCloseConfirmationModal} className=\"request-payment-success-btn2\">Close</button>\n </div>\n </div>\n </div>\n </CustomModal2>\n </>\n </>\n );\n};\n\n","// import React from 'react'\n\n// type Props = {}\n\n// const LoaderStyle = (props: Props) => {\n// return (\n// <style>\n// {`\n\n// .loader {\n// position: fixed; /* Fixed position to cover the viewport */\n// top: 0;\n// left: 0;\n// width: 100%;\n// height: 100%;\n// display: flex;\n// justify-content: center;\n// align-items: center;\n// /* background: rgba(255, 255, 0, 0.01); Adjust the blur effect */\n// background-color: rgba(31, 29, 29, 0.52); /* Semi-transparent black background */\n\n// backdrop-filter: blur(.5px); /* Blur effect */\n// z-index: 999999999999 !important; /* Ensure it's on top of other elements */\n// transform: translate(0%, 0%) !important\n// }\n\n// .lds-ellipsis {\n// display: inline-block;\n// position: relative;\n// width: 80px;\n// height: 80px;\n// }\n\n// .lds-ellipsis div {\n// position: absolute;\n// top: 33px;\n// width: 13px;\n// height: 13px;\n// border-radius: 50%;\n// background: #000;\n// animation-timing-function: cubic-bezier(0, 1, 1, 0);\n// }\n\n// .lds-ellipsis div:nth-child(1) {\n// left: 8px;\n// animation: lds-ellipsis1 0.6s infinite;\n// }\n\n// .lds-ellipsis div:nth-child(2) {\n// left: 8px;\n// animation: lds-ellipsis2 0.6s infinite;\n// }\n\n// .lds-ellipsis div:nth-child(3) {\n// left: 32px;\n// animation: lds-ellipsis2 0.6s infinite;\n// }\n\n// .lds-ellipsis div:nth-child(4) {\n// left: 56px;\n// animation: lds-ellipsis3 0.6s infinite;\n// }\n\n// @keyframes lds-ellipsis1 {\n// 0% {\n// transform: scale(0);\n// }\n// 100% {\n// transform: scale(1);\n// }\n// }\n\n// @keyframes lds-ellipsis2 {\n// 0% {\n// transform: translate(0, 0);\n// }\n// 100% {\n// transform: translate(24px, 0);\n// }\n// }\n\n// @keyframes lds-ellipsis3 {\n// 0% {\n// transform: scale(1);\n// }\n// 100% {\n// transform: scale(0);\n// }\n// }\n\n// `}\n// </style>\n// )\n// }\n\n// export default LoaderStyle\n\n\n\nimport React from 'react'\n\ntype Props = {}\n\nconst LoaderStyle = (props: Props) => {\n return (\n <style>\n {`\n \n .loader-light {\n position: fixed; /* Fixed position to cover the viewport */\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n /* background: rgba(255, 255, 0, 0.01); Adjust the blur effect */\n background-color: rgba(31, 29, 29, 0.52); /* Semi-transparent black background */\n\n backdrop-filter: blur(0.5px); /* Blur effect */\n z-index: 999999999999 !important; /* Ensure it's on top of other elements */\n transform: translate(0%, 0%) !important\n}\n \n .loader-dark {\n position: fixed; /* Fixed position to cover the viewport */\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n /* background: rgba(255, 255, 0, 0.01); Adjust the blur effect */\n background-color: rgba(31, 29, 29, 0.52); /* Semi-transparent black background */\n\n backdrop-filter: blur(6.5px); /* Blur effect */\n z-index: 999999999999 !important; /* Ensure it's on top of other elements */\n transform: translate(0%, 0%) !important\n}\n\n.lds-ellipsis {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.lds-ellipsis div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #000;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\n\n.lds-ellipsis div:nth-child(1) {\n left: 8px;\n animation: lds-ellipsis1 0.6s infinite;\n}\n\n.lds-ellipsis div:nth-child(2) {\n left: 8px;\n animation: lds-ellipsis2 0.6s infinite;\n}\n\n.lds-ellipsis div:nth-child(3) {\n left: 32px;\n animation: lds-ellipsis2 0.6s infinite;\n}\n\n.lds-ellipsis div:nth-child(4) {\n left: 56px;\n animation: lds-ellipsis3 0.6s infinite;\n}\n\n@keyframes lds-ellipsis1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes lds-ellipsis2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n}\n\n@keyframes lds-ellipsis3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n}\n\n\n.loader-text {\n margin-top: 8px;\n color: #1A1226;\n text-transform: uppercase;\n font-weight: 600;\n font-family: 'IBM Plex Mono', monospace;\n}\n\n.loader-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n `}\n </style>\n )\n}\n\nexport default LoaderStyle","import React from 'react'\nimport LoaderStyle from './LoaderStyle'\n\ntype Props = {\n loading: boolean;\n intensity?: 'dark' | 'light';\n loaderText?: string;\n}\n\nconst Loader = ({ intensity = 'light', loaderText, ...props }: Props) => {\n return (\n <>\n <LoaderStyle />\n {props?.loading && (\n <div className={`loader-${intensity}`}>\n <div className=\"loader-content\">\n <div className=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n {loaderText && <div className=\"loader-text\">{loaderText}</div>}\n </div>\n {/* <div className=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div> */}\n </div>\n )}\n </>\n )\n}\n\nexport default Loader","const { name } = require('../../../package.json');\n\n// console.log(name, \"dgijiisdfhg\");\n\n// export const fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\"\n\n// export const fractalGatewayUrl = \"https://api.merchant-trends.com/\"\n\nexport const S3Url = 'https://fractal-userdata-upload.s3.us-east-1.amazonaws.com/'\n\n// dev environment urls\n\n// export const masterBaseUrl = \"https://dev-sky-node.fractalpay.com/\";\n// export const baseUrl = \"https://dev-widget.fractalpay.com/\";\n\n//Staging environment urls\n\n// export const masterBaseUrl = \"https://testapi.fractalpay.com/\";\n// export const baseUrl = \"https://staging-widget.fractalpay.com/\";\n\n//test prod environment urls\n\n// export const masterBaseUrl = \"https://sky-node-prod.fractalpay.com/\";\n// export const baseUrl = \"https://widget-prod.fractalpay.com/\";\n\n\n//prod environment urls\n\n// export const masterBaseUrl = \"https://api.fractalpay.com/\";\n// export const baseUrl = \"https://widget.fractalpay.com/\";\n\n//Local environment urls\n\n// export const baseUrl = 'http://192.168.1.63:8082/'\n// export const masterBaseUrl = \"http://192.168.1.63:8081/\";\n\n// export const baseUrl = 'http://localhost:8082/'\n// export const masterBaseUrl = \"http://localhost:8081/\";\n\n// export const baseUrl = 'http://192.168.1.65:8082/'\n// export const masterBaseUrl = \"http://192.168.1.65:8081/\";\n\n\nif (name === '@fractalpay/fractalpay-next-dev') {\n masterBaseUrl = \"https://api.dev.fractalpay.com/\";\n baseUrl = \"https://widget.dev.fractalpay.com/\"\n // masterBaseUrl = \"https://dev-sky-node.fractalpay.com/\";\n // baseUrl = \"https://dev-widget.fractalpay.com/\";\n // baseUrl = 'http://192.168.1.97:8082/';\n // masterBaseUrl = \"http://192.168.1.97:8081/\";\n // baseUrl = 'http://192.168.1.65:8082/' \n // masterBaseUrl = \"http://192.168.1.65:8081/\";\n // baseUrl = 'http://192.168.1.74:8083/' \n // masterBaseUrl = \"http://192.168.1.74:8082/\";\n // baseUrl = 'http://localhost:8082/'\n // masterBaseUrl = \"http://localhost:8081/\";\n fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\";\n datacapUrl = \"https://token-cert.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_test_51RH5Wc2SlJvyNZ80hpUDy88r4rVdpijfKbNaWaUyQEE6rOrPmG2JQyAj7G5amBD5z5daC56WaeT4jfNhrrPcGOEP00UyKu6AOw\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"12345678901234567890\"\n googlePayEnvironment = \"TEST\"\n googlePayGatewayMerchantId = \"fractal\"\n\n} else if (name === '@fractalpay/fractalpay-next-test') {\n masterBaseUrl = \"https://testapi.fractalpay.com/\";\n baseUrl = \"https://staging-widget.fractalpay.com/\";\n fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\";\n datacapUrl = \"https://token-cert.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_test_51RH5Wc2SlJvyNZ80hpUDy88r4rVdpijfKbNaWaUyQEE6rOrPmG2JQyAj7G5amBD5z5daC56WaeT4jfNhrrPcGOEP00UyKu6AOw\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"12345678901234567890\"\n googlePayEnvironment = \"TEST\"\n googlePayGatewayMerchantId = \"fractal\"\n\n\n} else if (name === '@fractalpay/fractalpay-next-testprod') {\n masterBaseUrl = \"https://sky-node-prod.fractalpay.com/\";\n baseUrl = \"https://widget-prod.fractalpay.com/\";\n fractalGatewayUrl = \"https://api.merchant-trends.com/\";\n datacapUrl = \"https://token.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_live_51RH5WXCZ90rBGeaYwqmjWqgUmudTgxL6uKOE1keu617jvRx9OvW2ke6zGf6SKgv4ixsBLcIPQ4sQIEhp8MgBX39500CqULxOPB\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"BCR2DN4T6OC2TCQH\"\n googlePayEnvironment = \"PRODUCTION\"\n googlePayGatewayMerchantId = \"skysystemz\"\n\n\n} else if (name === \"@fractalpay/fractalpay-next\") {\n masterBaseUrl = \"https://api.fractalpay.com/\";\n baseUrl = \"https://widget.fractalpay.com/\";\n fractalGatewayUrl = \"https://api.merchant-trends.com/\";\n datacapUrl = \"https://token.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_live_51RH5WXCZ90rBGeaYwqmjWqgUmudTgxL6uKOE1keu617jvRx9OvW2ke6zGf6SKgv4ixsBLcIPQ4sQIEhp8MgBX39500CqULxOPB\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"BCR2DN4T6OC2TCQH\"\n googlePayEnvironment = \"PRODUCTION\"\n googlePayGatewayMerchantId = \"skysystemz\"\n\n} else {\n baseUrl = 'http://localhost:8082/'\n masterBaseUrl = \"http://localhost:8081/\";\n fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\";\n datacapUrl = \"https://token-cert.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_test_51RH5Wc2SlJvyNZ80hpUDy88r4rVdpijfKbNaWaUyQEE6rOrPmG2JQyAj7G5amBD5z5daC56WaeT4jfNhrrPcGOEP00UyKu6AOw\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"12345678901234567890\"\n googlePayEnvironment = \"TEST\"\n googlePayGatewayMerchantId = \"fractal\"\n\n}\n\nexport var masterBaseUrl: string\nexport var baseUrl: string\nexport var fractalGatewayUrl: string\nexport var datacapUrl: string\nexport var threedsSecurePublicKey: string\nexport var applePayMerchantId: string\nexport var googlePayMerchantId: string\nexport var googlePayEnvironment: \"TEST\" | \"PRODUCTION\"\nexport var googlePayGatewayMerchantId: string","export const ErrorText = {\n\n namerequired: 'Full Name is required',\n amountrequired:'Amount is required',\n amountpositive:'Amount should be positive',\n amountzero:'Amount should not be zero',\n amountenter:'Please enter an amount',\n amountvalid:'Please enter a valid amount',\n phoneoremailrequired:'Phone or Email is required',\n invalidemail:'Please enter a valid email',\n invalidemailformat:'Invalid email format',\n onlylettersallowed:'Only letters are allowed',\n phonenumberlength:'Phone number should be 10 digits',\n phonenumberrequired:'Please enter a phone number',\n // phonenumbervalid:'Please enter a valid 10-digit phone number',\n phonenumbervalid:'Please enter a valid phone number',\n phonenumbervalidnumberonly:'Please enter a valid phone number (numbers only)',\n orderidenter:'Please enter an order ID',\n orderidrequired:'Order ID is required',\n networkresponseerror:'Network response was not ok',\n anerroroccured:'An error occurred. Please try again.',\n montherror:'Please write month only 1 to 12',\n fieldrequired:\"This field is required\",\n fractalpayclientidrequired:'Fractalpay client key is missing or empty.'\n\n\n\n\n}","import React from 'react'\n\ntype Props = {}\n\nconst CustomModal2styles = (props: Props) => {\n return (\n <style>\n {\n `\n.fractal-input::placeholder {\n color: #35254D;\n opacity: 1;\n font-size: 15px;\n}\n\n.fractal-input::-ms-input-placeholder {\n color: #35254D;\n font-size: 15px;\n}\n\n.trigger{\n text-align: center;\n padding: 7px 13px;\n background: #3e3e3e;\n color: #fff;\n font-size: 15px;\n outline: none;\n border: none;\n border-radius: 5px;\n font-family: cursive;\n}\n\n// .fractal-popup {\n// position: fixed;\n// z-index: 9999;\n// top: 0;\n// right: 0;\n// bottom: 0;\n// left: 0;\n// width: 100%;\n// // max-width:810px;\n// height: 100%;\n// background-color: rgba(0, 0, 0, 0.5);\n// transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;\n// display: flex;\n// justify-content: center;\n// align-items: center;\n// overflow:auto;\n// }\n\n .fractal-popup {\n position: fixed;\n z-index: 1050;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n background-color: rgba(0, 0, 0, 0.8);\n // padding:20px\n }\n\n.fractal-popup-content {\n margin:20px auto !important;\n transform :none;\n background-color: white;\n padding:20px;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); \n box-sizing: border-box;\n position: relative;\n // min-height : 585px;\n max-width:810px; \n width:90vw\n \n}\n \n\n// @media only screen and (min-width: 600px){\n// .fractal-popup-content {\n// max-width:810px; \n// }\n// }\n// @media only screen and (max-width: 600px){\n// .fractal-popup-content {\n// width: 350px;\n// }\n// }\n// @media only screen and (max-width: 450px){\n// .fractal-popup-content {\n// width: 300px;\n// }\n// }\n.close-popup {\n max-height:25px;\n width:25px;\n height: 25px;\n color: #999;\n position: absolute;\n top: 2px;\n right: 4px;\n z-index: 7;\n text-align: center;\n cursor: pointer;\n border-radius: 0.25rem;\n font-size: 30px;\n line-height: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-popup:hover {\n color: #000;\n}\n\n.fractal-inpt-list {\n margin-bottom: 15px;\n}\n\n.fractal-label {\n color: #727272;\n margin-bottom: 3px;\n font-family: \"Inter\", sans-serif;\n font-weight: 500;\n font-size: 12px;\n display: block;\n text-align: left;\n}\n\n.fractal-input {\n display: block;\n width: 100%;\n padding: .320rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #35254D;\n appearance: none;\n background-color:#ffffff;\n background-clip: padding-box;\n border:1px solid #dee2e6;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n.fractal-input:focus {border:#86b7fe 1px solid; outline: none;}\n\n.fractal-group {\n position: relative;\n display: flex;\n align-items: stretch;\n width: 100%;\n}\n\n.fractal-group-icons {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #f8f9fa;\n border:#dee2e6 1px solid;\n border-radius: 0.375rem 0 0 0.375rem ;\n}\n\n.fractal-group .fractal-input{\n border-radius:0 0.375rem 0.375rem 0;\n}\n\n\n.pay-button {\n outline: 0;\n height: 46px;\n font-size: 16px;\n background: #727272;\n border: none;\n display: block;\n color: #fff;\n width: 100%;\n border-radius: 180px;\n margin: 10px 0;\n text-decoration: none;\n cursor:pointer,\n font-family:\n}\n\n.pay-button:hover, .pay-button:focus {background: #222; color: #fff; cursor:pointer}\n\n.fractal-powerd-by {\n display: flex;\n font-size: 12px;\n text-align: center;\n align-items: center;\n justify-content: center;\n margin: 5px 0 20px 0;\n}\n\n\n\n\n\n\n\n/* ................................................................ */\n\n.fractal-pay-popup {\n position: fixed;\n z-index: 9999;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.fractal-pay-popup-content {\n background-color: white;\n padding:0px;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); \n box-sizing: border-box;\n position: relative;\n height: 100%;\n max-height:90%;\n overflow: hidden;\n}\n.fractal-pay-popup-content iframe{height: 100% !important; }\n.fractal-pay-popup-content iframe body{overflow: hidden;}\n@media only screen and (min-width: 768px){\n .fractal-pay-popup-content iframe{width: 768px;}\n .fractal-pay-popup-content {\n width: 750px; \n\n }\n}\n@media only screen and (max-width: 600px){\n .fractal-pay-popup-content {\n width: 350px;\n }\n}\n@media only screen and (max-width: 450px){\n .fractal-pay-popup-content {\n width: 300px;\n }\n}\n\n.request-payment-popup-container {\n padding: 0px !important;\n border-radius: 12px !important;\n}\n `\n }\n </style>\n )\n}\n\nexport default CustomModal2styles","import React from \"react\";\nimport RequestPaymentstyles from \"../RequestPayment/RequestPaymentstyles\";\nimport CustomModal2styles from \"./CustomModal2styles\";\n\ntype CustomModalProps = {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n cancelText?: string;\n maxWidth?: string;\n};\n\nconst CustomModal2: React.FC<CustomModalProps> = ({\n open,\n onClose,\n children,\n maxWidth\n}) => {\n if (!open) return null;\n\n\n // console.log(maxWidth);\n \n return (\n <>\n <CustomModal2styles />\n <div className=\"fractal-popup\">\n <div className=\"fractal-popup-content request-payment-popup-container\" style={{maxWidth : `${maxWidth ?? \"auto\"}`}}>\n {children}\n </div>\n\n </div>\n </>\n );\n};\n\nexport default CustomModal2;\n","import React from 'react'\n\ntype Props = {}\n\nconst RequestPaymentstyles = (props: Props) => {\n return (\n <style>\n {\n `\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n body {\n font-family: 'Inter', sans-serif !important;\n }\n input{\n font-family: 'Inter', sans-serif !important;\n } \n\n .paymentBtn {\n background-color: black;\n border: none;\n color: white;\n padding: 15px 32px;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n font-size: 16px;\n margin: 4px 2px;\n cursor: pointer;\n border-radius: 180px;\n /* width: auto; */\n } \n/*****************************************REDESIGNING STYLES **************************************/\n\n.request-payment-amount {\n color: #161616;\n text-align: center;\n font-size: 42px;\n font-style: normal;\n font-weight: 600;\n text-transform: uppercase;\n margin: 8px 0px !important;\n}\n\n.request-payment-orderid {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin: 0px;\n}\n\n.request-payment-pre-auth-merchantname {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin-top: 10px !important;\n margin-bottom: 0px !important;\n}\n\n.request-payment-merchantname {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin-top: 20px !important;\n margin-bottom: 0px !important;\n}\n\n.request-payment-close-popup {\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n}\n\n.request-payment-amount-detail {\n padding: 32px 0px;\n border-bottom: 1px solid #E0DFE2;\n}\n\n.request-payment-popup-container {\n padding: 0px !important;\n border-radius: 12px !important;\n}\n\n.request-payment-input-form {\n padding: 24px 48px 32px 48px;\n}\n\n.request-payment-input-label {\n color: #727272;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n margin-bottom: 6px !important;\n text-align: start !important;\n width: 100% !important;\n margin-bottom: 6px !important;\n text-transform: uppercase;\n}\n\n.request-payment-input-box {\n border-radius: 8px;\n border: 1px solid #E0DFE2;\n padding: 11px;\n display: block;\n width: 100%;\n color: #161616;\n margin-top: 6px !important;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n box-sizing: border-box;\n}\n\n.request-payment-list-div {\n margin-bottom: 12px;\n}\n\n.request-payment-submit-button {\n border-radius: 80px;\n background: #161616;\n height: 48px;\n padding: 12px 24px;\n margin-top: 20px;\n color: #fff;\n width: 100% !important;\n border: none !important;\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n cursor: pointer;\n}\n\n.request-payment-submit-button:disabled {\n cursor: not-allowed;\n}\n\n.request-payment-fractal-powerd-by {\n color: #727272;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin-top: 16px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.request-payment-fractal-powerd-by span {\n color: #61C699;\n}\n\n.request-payment-success-container {\n display: flex;\n padding: 120px 48px 32px 48px;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.request-payment-success-tick {\n border-radius: 1000px;\n background: rgba(97, 198, 153, 0.14);\n display: flex;\n width: 60px;\n height: 60px;\n justify-content: center;\n align-items: center;\n}\n\n.request-payment-success-text {\n color: #161616;\n text-align: center;\n font-size: 32px;\n font-style: normal;\n font-weight: 500;\n line-height: 36px;\n /* 112.5% */\n letter-spacing: -0.64px;\n margin-top: 20px;\n margin-bottom: 5px !important;\n}\n\n.request-payment-success-subtext {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.28px;\n margin-bottom: 6rem !important;\n margin-top: 8px !important;\n}\n\n.request-payment-success-btn-div {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n}\n\n.request-payment-success-tick-div {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 32px;\n}\n\n.request-payment-success-btn1 {\n cursor: pointer;\n border-radius: 80px;\n border: 1px solid #E0DFE2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #fff;\n}\n\n.request-payment-success-btn2 {\n border-radius: 80px;\n cursor: pointer;\n border: 1px solid #E0DFE2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #161616;\n color: #fff;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n}\n\n.request-payment-error-msg{\n color: #dc3545;\n\n font-size: 12px;\n}\n\n .frac-req-cash-discount{\n justify-content: center;\n gap: 8px;\n align-items: center;\n display: flex;\n padding: 9px 14px 9px 10px;\n font-family: Inter;\n color: #161616;\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n}\n\n.frac-req-cash-discount .frac-cashlabel{\n color: #727272;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n}\n\n.partial-toggle-div {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n}\n\n.partial-input[type=\"checkbox\"] {\n appearance: none;\n -webkit-appearance: none;\n width: 50px;\n height: 26px;\n background-color: #ccc;\n border-radius: 13px;\n position: relative;\n cursor: pointer;\n transition: background-color 0.3s ease;\n border: none;\n outline: none;\n margin-right: 10px;\n}\n\n.partial-input[type=\"checkbox\"]::before {\n content: '';\n position: absolute;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background-color: white;\n top: 2px;\n left: 2px;\n transition: transform 0.3s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.partial-input[type=\"checkbox\"]:checked {\n background-color: #000000;\n}\n\n.partial-input[type=\"checkbox\"]:checked::before {\n transform: translateX(24px);\n}\n\n.partial-input[type=\"checkbox\"]:focus {\n box-shadow: 0 0 0 3px rgba(13, 110, 253, 0.25);\n}\n\n.partial-label {\n user-select: none;\n font-size: 14px;\n}\n `\n }\n </style>\n )\n}\n\nexport default RequestPaymentstyles","import { S3Url } from \"../components/baseurl\";\n\nexport const isValidJson = (jsonString) => {\n try {\n const parsed = JSON.parse(jsonString);\n // Optionally check that parsed is an object or array\n return typeof parsed === 'object' && parsed !== null;\n } catch (e) {\n return false;\n }\n}\n\nexport const accountTypes = [\n // { value: \"personal saving\", label: \"Personal Saving\" },\n // { value: \"business saving\", label: \"Business Saving\" },\n { value: \"personal checking\", label: \"Personal Checking\" },\n { value: \"business checking\", label: \"Business Checking\" }\n];\n\n\nexport function formatUSD(num) {\n // Convert string numbers to actual numbers\n const value = Number(num);\n\n if (isNaN(value)) {\n return `$${num}`; // return empty if not a valid number\n }\n\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(value);\n}\n\nexport let mastercard = S3Url + 'widget/mc-img.svg'\nexport let visa = S3Url + 'widget/visa-img.svg'\nexport let americanexp = S3Url + 'widget/ae-img.svg'\nexport let discover = S3Url + 'widget/discover-img.svg'\nexport let defaultcard = S3Url + 'widget/card.svg'\nexport let bank = S3Url + 'widget/bank.svg'\nexport let trash = S3Url + 'widget/Trash.svg'\nexport let secure = S3Url + 'widget/secure-img.png'\nexport let pov = S3Url + 'widget/pov-by.png'\nexport let pax = S3Url + 'widget/pax.svg'\nexport let bankNew = S3Url + 'widget/Bank _New.svg'\n\n\nexport const getCardType = (card) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return defaultcard;\n }\n};\n\n\nexport const formatCardNumberWithCursor = (value, cursorPos) => {\n const raw = value.replace(/\\D/g, \"\");\n\n const digitsBeforeCursor = value\n .slice(0, cursorPos)\n .replace(/\\D/g, \"\").length;\n\n let trimmed = \"\";\n let formatted = \"\";\n\n const isAmex = /^3[47]/.test(raw);\n\n if (isAmex) {\n trimmed = raw.slice(0, 15);\n formatted = trimmed.replace(\n /^(\\d{1,4})(\\d{1,6})?(\\d{1,5})?$/,\n (_, g1, g2, g3) => [g1, g2, g3].filter(Boolean).join(\" \")\n );\n } else {\n trimmed = raw.slice(0, 16);\n formatted = trimmed.replace(\n /^(\\d{1,4})(\\d{1,4})?(\\d{1,4})?(\\d{1,4})?$/,\n (_, g1, g2, g3, g4) => [g1, g2, g3, g4].filter(Boolean).join(\" \")\n );\n }\n\n // ✅ CRITICAL FIX: zero-digit cursor case\n if (digitsBeforeCursor === 0) {\n return { formatted, cursor: 0 };\n }\n\n let newCursorPos = formatted.length;\n let digitsSeen = 0;\n\n for (let i = 0; i < formatted.length; i++) {\n if (/\\d/.test(formatted[i])) digitsSeen++;\n if (digitsSeen === digitsBeforeCursor) {\n newCursorPos = i + 1;\n break;\n }\n }\n\n return { formatted, cursor: newCursorPos };\n};\n\n\n\nexport const numberToBoolean = (value) => {\n if (value == 1) return false;\n if (value == 0) return true;\n return true; // fallback\n};\n\n\n\n","'use client'\nimport 'bootstrap/dist/js/bootstrap.bundle.min.js';\nimport React, { useState, useEffect } from 'react';\nimport Loader from '../Loader/Loader';\nimport RequestPaymentstyles from './RequestPaymentstyles';\nimport { baseUrl } from '../baseurl';\nimport { ErrorText } from '../Errortext';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport axios from 'axios';\nimport { PatternFormat } from 'react-number-format';\n\n\ninterface Props {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n name?: string;\n email?: string;\n phone?: string;\n from?: string;\n amount: string;\n webname?: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n require_3ds?: boolean;\n sessionToken?: string;\n}\n\ninterface RequestDetails {\n email: string;\n amount: string | undefined;\n phone_number: string;\n order_id: string;\n name: string;\n fractalpayPublicKey: string;\n}\n\ninterface Errors {\n [key: string]: string;\n}\n\n\n// export const RequestPayment: React.FC<Props> = (props) => {\nexport function RequestPreAuthPayment(props: Props) {\n const fractalpayClientKey = props.merchantPublicKey;\n const discount = props?.discount;\n const tax = props?.tax;\n const surcharge = props?.surcharge;\n // State definitions with types\n const [show, setShow] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [errors, setErrors] = useState<{ [key: string]: string }>({});\n const [phone, setPhone] = useState<string | null>(null);\n const [requestDetails, setRequestDetails] = useState({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n\n const [amount, setAmount] = useState<string>('');\n const [showConfirmationModal, setShowConfirmationModal] = useState<boolean>(false);\n const [apiResponse, setApiResponse] = useState<any>(null);\n\n const phoneNumberRegex = (value: string) => /^\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/.test(value);\n const amoutRegex = /[+-]?([0-9]*[.])?[0-9]+/;\n const isValidEmail = (value: string) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n const isAlpha = (value: string) => /^[A-Za-z\\s]*$/.test(value);\n\n const handleClose = () => {\n setShow(false);\n setErrors({});\n };\n\n const handleShow = () => setShow(true);\n\n const handleCloseConfirmationModal = () => {\n handleSubmit(apiResponse);\n setShowConfirmationModal(false);\n };\n\n function emptyFields() {\n setRequestDetails({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n setAmount('');\n }\n\n function handleSubmit(event: any) {\n // Send message to parent window\n let message = {\n type: 'preview.compiledcheck',\n other: { ...event, status: true }\n };\n\n window.parent.postMessage(message, '*');\n }\n\n const sendRequestPayment = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading) return;\n if (Object.keys(errors).length > 0) {\n return;\n }\n setErrors({});\n\n if (!requestDetails?.email && phone && !phoneNumberRegex(phone)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumbervalid\n }));\n return;\n }\n if (!validateForm()) {\n return;\n }\n\n try {\n setLoading(true);\n const formData = {\n fractalpayPublicKey: fractalpayClientKey,\n amount: amount,\n phone_number: phone,\n order_id: requestDetails.order_id,\n action: 'request',\n name: requestDetails.name,\n email: requestDetails.email,\n customer_id: props?.customerId ? props?.customerId : '',\n discount,\n surcharge,\n tax,\n require_3ds: props?.require_3ds,\n };\n let response = await axios.post(`${baseUrl}send-request-pre-auth-payment`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n });\n if (response?.status === 200) {\n setShowConfirmationModal(true);\n setShow(false);\n emptyFields();\n setApiResponse(response?.data);\n }\n setLoading(false);\n } catch (error) {\n console.log(error);\n setLoading(false);\n }\n };\n\n let favicon_logo = baseUrl + 'images/logo-img.png';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n const token = e.target.dataset.token as string;\n setRequestDetails({ ...requestDetails, [token]: value });\n if ((token === 'name') && !isAlpha(value)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n [token]: ErrorText.onlylettersallowed\n }));\n return;\n }\n\n let errorobj = errors;\n\n if (token === 'email' && !phone) {\n delete errorobj.phone;\n setErrors(errorobj);\n }\n\n if (value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n\n if (token === 'email' && !value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n };\n\n const handleAmountChange = (data: { value: string }) => {\n const { value } = data;\n if (Number(value) > 0) {\n let errorobj = errors;\n delete errorobj.amount;\n setErrors(errorobj);\n }\n setAmount(value);\n };\n\n const validateForm = () => {\n let newErrors: { [key: string]: string } = {};\n\n if (!amount) newErrors.amount = ErrorText.amountrequired;\n if (requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (!phone && !requestDetails?.email) newErrors.phone = ErrorText.phoneoremailrequired;\n if (!phone && !requestDetails?.email) newErrors.email = ErrorText.phoneoremailrequired;\n if (!phone && requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (props.from === 'merchant' && !requestDetails.order_id) newErrors.order_id = ErrorText.orderidrequired;\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n useEffect(() => {\n if (props) {\n setRequestDetails((prev) => ({\n ...prev,\n order_id: props.orderID ? props.orderID : '',\n name: props?.name ? props?.name : '',\n email: props?.email ? props?.email : '',\n }));\n setAmount(props.amount ? props.amount : '');\n setPhone(props.phone ? `${props.phone}` : null);\n }\n }, [props]);\n\n const handlePhoneChange = (e: { value: string }) => {\n let value = e?.value;\n if (value && value?.length > 0 && value?.length !== 10) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumberlength\n }));\n setPhone(value);\n return;\n } else {\n setPhone(value);\n }\n let errorobj = errors;\n delete errorobj.phone;\n\n if (value && !requestDetails?.email) {\n delete errorobj.email;\n }\n\n setErrors(errorobj);\n };\n\n function formatAmount(amount: string) {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(Number(amount));\n }\n\n\n return (\n <>\n <RequestPaymentstyles />\n <Loader loading={loading} />\n <>\n <button className=\"paymentBtn\" onClick={handleShow}>\n Send Request\n </button>\n <div className='frac-form'>\n <CustomModal2\n open={show}\n onClose={() => setShow(false)}\n maxWidth={'500px'}\n >\n <div className=\"request-payment-amount-detail\">\n <p className=\"request-payment-merchantname\">Authorization Request</p>\n <p className=\"request-payment-pre-auth-merchantname\">Pay {props?.webname}</p>\n <p className=\"request-payment-amount\">{formatAmount(props?.amount)}</p>\n {\n props?.from === 'merchant' && <p className=\"request-payment-orderid\" >{requestDetails?.order_id}</p>\n }\n <span className=\"request-payment-close-popup\" onClick={handleClose}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <form className=\"request-payment-input-form\" >\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n FULL NAME\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Full Name\"\n data-token=\"name\"\n onChange={handleChange}\n value={requestDetails?.name}\n />\n {errors.name && <small className=\"request-payment-error-msg\">{errors.name}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"requestPhoneNumber\" className=\"request-payment-input-label\">\n Phone Number\n </label>\n <PatternFormat\n className=\"request-payment-input-box\"\n placeholder=\"Mobile number\"\n format=\"+1 (###) ###-####\"\n value={phone}\n onValueChange={(e) => { handlePhoneChange(e) }}\n />\n {errors.phone && <small className=\"request-payment-error-msg\">{errors.phone}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n EMAIL\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Email\"\n onChange={handleChange}\n data-token=\"email\"\n value={requestDetails?.email}\n />\n {errors.email && <small className=\"request-payment-error-msg\">{errors.email}</small>}\n </div>\n <button\n type=\"button\"\n className=\"request-payment-submit-button\"\n onClick={sendRequestPayment}\n disabled={loading}\n >\n {loading ? \"Loading...\" : \"Send Request\"}\n </button>\n <div className=\"request-payment-fractal-powerd-by\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M15.2165 4.11839C15.1973 3.69746 15.1973 3.29567 15.1973 2.89387C15.1973 2.56861 14.9486 2.31988 14.6234 2.31988C12.2317 2.31988 10.4141 1.63109 8.90257 0.157848C8.67298 -0.0526158 8.32858 -0.0526158 8.09898 0.157848C6.58748 1.63109 4.76984 2.31988 2.37821 2.31988C2.05295 2.31988 1.80422 2.56861 1.80422 2.89387C1.80422 3.29567 1.80422 3.69746 1.78508 4.11839C1.70855 8.13632 1.59375 13.6466 8.30945 15.9617L8.50078 16L8.69211 15.9617C15.3887 13.6466 15.293 8.15546 15.2165 4.11839ZM8.04159 9.6861C7.92679 9.78176 7.79286 9.83916 7.63979 9.83916H7.62066C7.46759 9.83916 7.31453 9.76263 7.21887 9.64783L5.43949 7.67713L6.30048 6.91181L7.69719 8.46158L10.7967 5.5151L11.5812 6.35695L8.04159 9.6861Z\" fill=\"#727272\" />\n </svg>\n Secure payments powered by <span>Fractal</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.4999 5.49758V7.01156C17.4999 7.05924 17.4595 7.09898 17.411 7.09898H12.3516C12.9169 6.54266 13.4781 5.99032 14.0434 5.434C14.0596 5.4181 14.0838 5.41016 14.104 5.41016H17.411C17.4595 5.41016 17.4999 5.44989 17.4999 5.49758Z\" fill=\"#61C699\" />\n <path d=\"M12.3462 10.9037V9.29836C12.3462 9.25067 12.3866 9.21094 12.435 9.21094H13.8523C13.929 9.21094 13.9694 9.30631 13.9129 9.35796C13.392 9.87455 12.8711 10.3911 12.3462 10.9037Z\" fill=\"#61C699\" />\n <path d=\"M12.4404 9.00523H15.6949C15.7434 9.00523 15.7838 8.96549 15.7838 8.91781V7.40383C15.7838 7.35614 15.7434 7.31641 15.6949 7.31641H12.4404C12.3919 7.31641 12.3516 7.35614 12.3516 7.40383V8.91781C12.3516 8.96549 12.3919 9.00523 12.4404 9.00523Z\" fill=\"#61C699\" />\n <path d=\"M10.1581 0.0120725L11.4906 0.77105C11.531 0.794892 11.5471 0.84655 11.5229 0.890261L8.99114 5.20173C8.78521 4.44275 8.57927 3.68775 8.37334 2.92877C8.36527 2.90493 8.3693 2.88109 8.38142 2.86122L10.0329 0.0438621C10.0612 0.000151419 10.1177 -0.0117697 10.1581 0.0120725Z\" fill=\"#61C699\" />\n <path d=\"M12.3382 7.10006L10.9289 6.29737C10.8886 6.27353 10.8724 6.22187 10.8966 6.17816L11.6033 4.97015C11.6436 4.9026 11.7446 4.91452 11.7648 4.99002C11.9546 5.69734 12.1484 6.40068 12.3382 7.10006Z\" fill=\"#61C699\" />\n <path d=\"M10.7107 6.0771L12.338 3.30345C12.3622 3.26372 12.346 3.20808 12.3057 3.18424L10.9732 2.42526C10.9328 2.40142 10.8763 2.41732 10.852 2.45705L9.22476 5.2307C9.20053 5.27044 9.21669 5.32607 9.25706 5.34991L10.5896 6.10889C10.634 6.13273 10.6865 6.11683 10.7107 6.0771Z\" fill=\"#61C699\" />\n <path d=\"M1.66713 3.51237L2.99963 2.75339C3.04001 2.72955 3.09654 2.74544 3.12077 2.78518L5.65251 7.09665C4.88128 6.89399 4.11408 6.69133 3.34285 6.48867C3.31862 6.4847 3.30247 6.4688 3.29036 6.44893L1.63483 3.63158C1.6106 3.58787 1.62271 3.53621 1.66713 3.51237Z\" fill=\"#61C699\" />\n <path d=\"M8.99793 5.20018L7.58871 5.99889C7.54833 6.02274 7.4918 6.00684 7.46757 5.9671L6.76095 4.76307C6.72057 4.69552 6.78517 4.61605 6.86189 4.63591C7.57256 4.82268 8.28726 5.00944 8.99793 5.20018Z\" fill=\"#61C699\" />\n <path d=\"M7.27986 6.07054L5.6526 3.2969C5.62837 3.25716 5.57588 3.24127 5.53146 3.26511L4.19896 4.02409C4.15858 4.04793 4.14243 4.09959 4.16666 4.1433L5.79392 6.91694C5.81815 6.95668 5.87064 6.97257 5.91506 6.94873L7.24756 6.18975C7.28794 6.16591 7.30409 6.11425 7.27986 6.07054Z\" fill=\"#61C699\" />\n <path d=\"M0.5 12.4998V10.9859C0.5 10.9382 0.540379 10.8984 0.588833 10.8984H5.64829C5.08299 11.4548 4.52172 12.0071 3.95642 12.5634C3.94027 12.5793 3.91604 12.5873 3.89585 12.5873H0.588833C0.540379 12.5873 0.5 12.5475 0.5 12.4998Z\" fill=\"#61C699\" />\n <path d=\"M5.65129 7.09766V8.70303C5.65129 8.75072 5.61091 8.79045 5.56246 8.79045H4.14516C4.06844 8.79045 4.02806 8.69508 4.08459 8.64343C4.60548 8.12685 5.12637 7.61424 5.65129 7.09766Z\" fill=\"#61C699\" />\n <path d=\"M5.55967 8.99609H2.30514C2.25669 8.99609 2.21631 9.03583 2.21631 9.08352V10.5975C2.21631 10.6452 2.25669 10.6849 2.30514 10.6849H5.55967C5.60813 10.6849 5.6485 10.6452 5.6485 10.5975V9.08352C5.6485 9.03583 5.60813 8.99609 5.55967 8.99609Z\" fill=\"#61C699\" />\n <path d=\"M7.82638 17.9865L6.49388 17.2276C6.4535 17.2037 6.43735 17.1521 6.46158 17.1083L8.99333 12.7969C9.19926 13.5559 9.40519 14.3109 9.61112 15.0698C9.6192 15.0937 9.61516 15.1175 9.60305 15.1374L7.95155 17.9547C7.91925 17.9985 7.86676 18.0104 7.82638 17.9865Z\" fill=\"#61C699\" />\n <path d=\"M5.64795 10.8984L7.05717 11.7011C7.09755 11.725 7.1137 11.7766 7.08947 11.8203L6.38284 13.0283C6.34246 13.0959 6.24152 13.084 6.22133 13.0085C6.02751 12.3012 5.83773 11.5978 5.64795 10.8984Z\" fill=\"#61C699\" />\n <path d=\"M7.2739 11.9258L5.64664 14.6994C5.62241 14.7392 5.63856 14.7948 5.67894 14.8187L7.01144 15.5776C7.05182 15.6015 7.10835 15.5856 7.13258 15.5458L8.75984 12.7722C8.78407 12.7325 8.76792 12.6768 8.72754 12.653L7.39504 11.894C7.35062 11.8702 7.29813 11.8861 7.2739 11.9258Z\" fill=\"#61C699\" />\n <path d=\"M16.3199 14.4866L14.9874 15.2456C14.947 15.2694 14.8904 15.2535 14.8662 15.2138L12.3345 10.9023C13.1057 11.105 13.8729 11.3077 14.6441 11.5103C14.6684 11.5143 14.6845 11.5302 14.6966 11.5501L16.3481 14.3674C16.3764 14.4111 16.3643 14.4628 16.3199 14.4866Z\" fill=\"#61C699\" />\n <path d=\"M8.99121 12.7983L10.4004 11.9956C10.4408 11.9717 10.4973 11.9876 10.5216 12.0274L11.2282 13.2354C11.2686 13.3029 11.204 13.3824 11.1272 13.3625C10.4166 13.1758 9.70188 12.989 8.99121 12.7983Z\" fill=\"#61C699\" />\n <path d=\"M10.7077 11.9285L12.3349 14.7021C12.3592 14.7418 12.4117 14.7577 12.4561 14.7339L13.7886 13.9749C13.829 13.9511 13.8451 13.8994 13.8209 13.8557L12.1936 11.0821C12.1694 11.0423 12.1169 11.0264 12.0725 11.0503L10.74 11.8092C10.6996 11.8331 10.6834 11.8847 10.7077 11.9285Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </form>\n </CustomModal2>\n <CustomModal2\n open={showConfirmationModal}\n onClose={handleCloseConfirmationModal}\n maxWidth={'500px'}\n >\n <div className=\"fractal-popup-content\" style={{ padding: '0px', maxWidth: '500px' }}>\n <div className=\"request-payment-success-container\">\n <span className=\"request-payment-close-popup\" onClick={handleCloseConfirmationModal}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <div className=\"request-payment-success-tick-div\">\n <div className=\"request-payment-success-tick\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6.12669 13.9774C5.97396 14.131 5.76558 14.2167 5.54913 14.2167C5.33267 14.2167 5.1243 14.131 4.97157 13.9774L0.359012 9.36408C-0.119671 8.8854 -0.119671 8.10919 0.359012 7.6314L0.936573 7.05369C1.4154 6.57501 2.19072 6.57501 2.6694 7.05369L5.54913 9.93357L13.3306 2.15198C13.8094 1.6733 14.5855 1.6733 15.0634 2.15198L15.641 2.72969C16.1196 3.20837 16.1196 3.98444 15.641 4.46237L6.12669 13.9774Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </div>\n <h6 className=\"request-payment-success-text\">The request <br />\n was sent</h6>\n <h6 className=\"request-payment-success-subtext\">Please wait for the customer to pay</h6>\n <div className=\"request-payment-success-btn-div\">\n {/* <button className=\"request-payment-success-btn1\">Go to Transactions</button> */}\n <button onClick={handleCloseConfirmationModal} className=\"request-payment-success-btn2\">Close</button>\n </div>\n </div>\n </div>\n </CustomModal2>\n </div>\n </>\n </>\n );\n};\n\n","'use client'\nimport React, { useEffect, useRef, useState } from 'react'\nimport Chargewidgetstyles from './Chargewidgetstyles';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport { baseUrl, masterBaseUrl, fractalGatewayUrl, S3Url } from '../baseurl';\nimport axios, { AxiosError } from 'axios';\nimport Loader from '../Loader/Loader';\nimport SuccessMsz from '../SuccessMessage/SuccessMsz';\nimport Swal from 'sweetalert2';\nimport DataScript from '../Datascript';\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage';\nimport socket from '../socketClient'\nimport { accountTypes, formatCardNumberWithCursor, formatUSD, isValidJson } from '../../utils/Common'\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport FractalFields, { SurchargeLookupOptions, SurchargeLookupResult, TokenizerSession } from '../Atoms/FractalForm/FractalFields';\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment';\nimport FractalWidgetStyles from './FractalWidgetStyles';\nimport {\n FractalOrderSummary, FractalSavingsNote, FractalModalHeader, FractalMethodToggle,\n FractalSavedMethods, FractalReaderList, FractalFooter, FractalField, FractalCheckbox,\n SummaryLine,\n} from '../Fractal/FractalCheckoutUI';\nimport { DcLoadingError } from '@/app/utils/Constant';\n\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\ndeclare let FractalTokenizer: any;\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n from?: string;\n amount: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n pass_fee?: boolean;\n isReader?: boolean;\n sessionToken?: string;\n bankFeeAmount?: string;\n // Pre-authorization mode: when true this widget runs the \"authorize / hold\"\n // flow instead of a charge (replaces the standalone PreAuthPayment component).\n isPreAuth?: boolean;\n preauthId?: string;\n onTriggerPay?: (fn: () => void) => void;\n showButton?: boolean;\n}\n\ntype activeinTabs = 'form' | 'list'\n\n\nexport function GetPaymentPage(props: Props) {\n const [loading, setLoading] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [loading2, setLoading2] = useState<boolean>(false);\n const [surchargeLookupLoading, setSurchargeLookupLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>(\"\");\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n const [show, setShow] = useState<boolean>(false);\n const [activetab, setActive] = useState<string>('card');\n const [activeList, setActiveList] = useState<string>('card')\n const [activeinCard, setActiveinCard] = useState<activeinTabs>('form')\n const [activeinBank, setActiveinBank] = useState<activeinTabs>('form')\n const [activeForm, setActiveForm] = useState<boolean>(true)\n const [saveCardInfo, setSaveCardInfo] = useState<boolean>(false);\n const [saveACHinfo, setSaveACHinfo] = useState<boolean>(false);\n const [isBankConsentChecked, setIsBankConsentChecked] = useState<boolean>(false);\n const [errorBankConsent, setErrorBankConsent] = useState<string>(\"\");\n const [saveACHConsent1, setSaveACHConsent1] = useState<boolean>(false);\n const [errorBankConsentOther, setErrorBankConsentOther] = useState<string>(\"\");\n const [loaderText, setLoderText] = useState<string>(\"\");\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n const fractalpayClientKey = props.merchantPublicKey;\n const isPreAuth = !!props.isPreAuth;\n const showButton = props.showButton !== false;\n interface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n }\n interface achDetails {\n name: string;\n routingNumber: string;\n accountNumber: string;\n confirmAccountNumber: string;\n bankName: string;\n accountType: string;\n companyName?: string;\n }\n\n interface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n card_issue_type?: string | null;\n }\n\n interface PaymentDevice {\n id: number;\n device_id: number;\n device_name: string;\n }\n\n interface PaymentData {\n paymentGateway: number;\n isSkyFiAccount: boolean;\n logo: string;\n bname: string;\n card_list: Card[];\n customer_name: string;\n is_primary: string;\n paymentDeviceList: PaymentDevice[];\n showSurcharge?: number;\n surchargeProgram?: number;\n dctoken?: string,\n }\n interface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n card_issue_type?: string | null;\n }\n\n interface SelectedReader {\n id?: number;\n device_id?: number;\n device_name?: string;\n }\n\n let mastercard = S3Url + 'widget/mc-img.svg'\n let visa = S3Url + 'widget/visa-img.svg'\n let americanexp = S3Url + 'widget/ae-img.svg'\n let discover = S3Url + 'widget/discover-img.svg'\n let defaultcard = S3Url + 'widget/card.svg'\n let trash = S3Url + 'widget/Trash.svg'\n let bank = S3Url + 'widget/bank.svg'\n let secure = S3Url + 'widget/secure-img.png'\n let pov = S3Url + 'widget/pov-by.png'\n let pax = S3Url + 'widget/pax.svg'\n\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [achData, setAchData] = useState<achDetails>()\n const [achError, setAchError] = useState<Partial<Record<keyof achDetails, string>>>({});\n const [cardList, setCardList] = useState([])\n const [bankList, setBankList] = useState([])\n const [selectedCard, setSelectedCard] = useState<SelectedCard>()\n const [selectedReader, setSelectedReader] = useState<PaymentDevice | null | undefined>(undefined)\n const [cashDiscount, setCashDiscount] = useState<number | undefined>(Number(props?.amount));\n const [bankAmount, setBankAmount] = useState<number | undefined>(Number(props?.amount));\n const [bankFeeAmount, setBankFeeAmount] = useState<number>(0.00);\n const [bankSavingsAmount, setBankSavingsAmount] = useState<number>(0.00);\n // console.log(selectedCard, \"selectedCard\");\n\n\n const [paymentData, setPaymentData] = useState<PaymentData>()\n let [tranId, setTranId] = useState(\"\");\n let [isDebitAdjusted, setIsDebitAdjusted] = useState<boolean>(false);\n // Pre-charge surcharge assessment from the tokenizer (PAN-complete lookup).\n const [surchargeResult, setSurchargeResult] = useState<SurchargeLookupResult | null>(null);\n\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '14px',\n 'letter-spacing': '-0.14px',\n 'color': '#221730',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#221730',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#a39bb0'\n }\n };\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount / (1 + surchargeVal);\n return Math.round(originalAmount * 100) / 100; // rounding to 2 decimals\n };\n\n // Mints a tokenized session for the surcharge lookup — same endpoint and shape as the\n // createToken charge flow. Resolves null on failure so the lookup fails soft.\n const createSurchargeSession = async (): Promise<TokenizerSession | null> => {\n try {\n const requestOptions = { method: \"POST\", redirect: \"follow\" };\n const res = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions);\n const data = res?.data?.data;\n const public_key_pem = data?.publicKeyPem || data?.public_key_pem;\n const session_key = data?.session_key;\n if (!public_key_pem || !session_key) return null;\n return { session_key, public_key_pem };\n } catch (err) {\n console.error(\"Surcharge session error\", err);\n return null;\n }\n };\n\n // Lookup inputs, read lazily at lookup time. amount is the pre-fee subtotal in cents;\n // merchant_location_zip isn't available on this surface (tokenizer Phase 2 / optional).\n const getSurchargeOptions = (): SurchargeLookupOptions => ({\n amount: Math.round(Number(cashDiscount ?? props?.amount ?? 0) * 100),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n\n // Surcharge assessment for a saved card (card-on-file) — there's no PAN to run through the\n // tokenizer iframe for a saved card, so this hits the backend by card_id instead. Fails soft,\n // same as createSurchargeSession/lookupSurcharge.\n const runCofSurchargeLookup = async (cardId: string): Promise<SurchargeLookupResult | null> => {\n try {\n const res = await axios.post(`${baseUrl}surcharge-lookup-cof`, {\n fractalpayPublicKey: fractalpayClientKey,\n customer_id: props?.customerId,\n card_id: cardId,\n amount: Number(cashDiscount ?? props?.amount ?? 0),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n const data = res?.data?.data;\n if (!data) return null;\n // Same field-by-field shape the tokenizer's own SURCHARGE_LOOKUP_RESULT handler\n // builds for the live-PAN lookup (FractalTokenizer's onmessage handler). This\n // branch's SurchargeLookupResult doesn't carry surcharge_lookup_status/engine_error,\n // so only the fields it declares are mapped here.\n return {\n card_brand: data.card_brand,\n card_issue_type: data.card_issue_type,\n surcharge_allowed: data.surcharge_allowed,\n max_surcharge_percent: data.max_surcharge_percent,\n max_surcharge_amount: data.max_surcharge_amount,\n };\n } catch (err) {\n console.error(\"COF surcharge lookup failed\", err);\n return null;\n }\n };\n\n // Fires whenever the customer picks a saved card, mirroring FractalFields' own\n // surchargeEnabled gate. Bank accounts are never card-surcharged, so skip the call\n // entirely for those — same waiver the live-PAN path applies. Feeds the same\n // setSurchargeResult state the live-PAN lookup uses, so surchargeBlocked/cardTotal\n // above need no changes regardless of which path populated it.\n useEffect(() => {\n const surchargingOn = Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee;\n if (!surchargingOn || !selectedCard?.id || selectedCard.card_type === 'Bank') {\n setSurchargeResult(null);\n return;\n }\n let cancelled = false;\n setSurchargeLookupLoading(true);\n runCofSurchargeLookup(selectedCard.id).then((result) => {\n if (cancelled) return;\n setSurchargeResult(result);\n setSurchargeLookupLoading(false);\n });\n return () => { cancelled = true; };\n }, [selectedCard?.id, selectedCard?.card_type, paymentData?.surchargeProgram, props?.pass_fee]);\n\n useEffect(() => {\n if (show) {\n // The dashboard always passes the total (credit/banked price). Derive the pre-fee base.\n let cash_discount = CalculateCashDiscount(props?.amount, (props?.surcharge || 0));\n let bankAmount = cash_discount\n if (props?.bankFeeAmount && Number(props?.bankFeeAmount) > 0) {\n bankAmount = Number(cash_discount) + Number(props?.bankFeeAmount);\n }\n setBankAmount(bankAmount);\n setCashDiscount(cash_discount);\n const cardFeeAmount = Number((Number(props?.amount) - Number(cash_discount || 0)).toFixed(2));\n const bankFeeAmount = Number(props?.bankFeeAmount || 0);\n const bankSavingsAmount = Math.max(bankFeeAmount > 0 ? cardFeeAmount - bankFeeAmount : cardFeeAmount, 0);\n const bankSavingsText = bankSavingsAmount > 0 ? `Save ${formatUSD(bankSavingsAmount.toFixed(2))}` : '';\n setBankFeeAmount(bankFeeAmount)\n setBankSavingsAmount(bankSavingsAmount)\n console.log({\n cash_discount,\n bankAmount, \n cardFeeAmount,\n bankFeeAmount,\n bankSavingsAmount,\n bankSavingsText,\n amount : props?.amount,\n });\n\n }\n // if (props?.pass_fee) {\n // } else {\n // setCashDiscount(undefined);\n // }\n }, [show, props?.pass_fee, props?.amount, props?.surcharge])\n\n\n // for payment popup\n const handleClose = () => {\n\n // if (tokenizerRef.current) {\n // try {\n // tokenizerRef.current.destroy?.(); \n // tokenizerRef.current.unmount?.();\n // } catch (err) {\n // console.warn(\"Tokenizer cleanup error:\", err);\n // }\n\n // tokenizerRef.current = null;\n // }\n // [\"card_number\", \"exp_month\", \"exp_year\", \"cvv\"].forEach((id) => {\n // const el = document.getElementById(id);\n // if (el) el.innerHTML = \"\";\n // });\n\n setShow(false);\n setActive('card')\n setError(\"\")\n setSuccess(false)\n setTranId(\"\")\n setSurchargeResult(null)\n setAchData({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setAchError({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setCardError({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveACHinfo(false)\n setSaveCardInfo(false)\n setSelectedCard({\n card_type: \"\",\n cardlastfourdigit: \"\",\n expmonth: 1,\n expyear: 2025,\n primary_card: 0,\n firstname: \"\",\n id: \"\",\n lastname: \"\",\n })\n setSelectedReader(null)\n setCashDiscount(0)\n setActiveList('card')\n setActiveForm(true)\n setActiveinBank('form')\n setActiveinCard('form')\n setLoading2(false);\n setLoading(false);\n setBankList([]);\n setCardList([]);\n setIsBankConsentChecked(false);\n setErrorBankConsent('');\n setSaveACHConsent1(false)\n setErrorBankConsentOther('');\n setLoderText(\"\");\n setIsDebitAdjusted(false);\n };\n const handleShow = () => setShow(true);\n\n // Pre-auth hosts can grab the open() handler to trigger the modal themselves.\n useEffect(() => {\n if (props.onTriggerPay) {\n props.onTriggerPay(() => { handleShow(); });\n }\n }, [props.onTriggerPay]);\n\n\n const handletabchange = (id: string) => {\n setActive(id)\n }\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n const handleChangeAch = (e: any) => {\n const { name, value } = e.target\n const numericFields = [\"routingNumber\", \"accountNumber\", \"confirmAccountNumber\"];\n if (name == \"name\") {\n\n\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return\n\n }\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentData?.paymentGateway !== 32) {\n\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Card number is required\";\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.expiryMonth?.trim() || !data?.expiryYear?.trim()) {\n // errors.expiryMonth = \"Invalid Expiration Date.\"\n // } else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n // if (!data?.cvv?.trim()) errors.cvv = \"CVV is required\";\n // // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n // }\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n setCardError(errors);\n\n // Return true if there is any error\n return Object.keys(errors).length > 0;\n };\n const validateAchData = (): boolean => {\n const errors: Partial<Record<keyof achDetails, string>> = {};\n const data = achData\n if (!data?.name?.trim()) errors.name = \"Name is required\";\n if (!data?.accountNumber?.trim()) errors.accountNumber = \"Account number is required\";\n if (data?.accountNumber?.trim() && data?.accountNumber?.trim() !== data?.confirmAccountNumber?.trim()) errors.confirmAccountNumber = \"Account numbers must match\";\n if (!data?.bankName?.trim()) errors.bankName = \"Bank name is required\";\n if (!data?.routingNumber?.trim()) errors.routingNumber = \"Routing Number is required\";\n\n\n if (data?.routingNumber && data?.routingNumber?.length !== 9) errors.routingNumber = \"Routing number must be 9 digits\";\n\n\n if ((data?.accountType === 'business saving' || data?.accountType === 'business checking')) {\n if (!data?.companyName || data?.companyName === \"\") {\n errors.companyName = \"Company Name is required for business accounts\";\n }\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n setErrorBankConsent('Above consent is required');\n }\n\n if (saveACHinfo && !saveACHConsent1) {\n setErrorBankConsentOther('Your consent is required to save your bank details for future use');\n }\n\n // Routing Number Validation removed du to new validation \n // if (data?.routingNumber?.length == 9) {\n\n // let routingNumber = data?.routingNumber\n // const weights = [3, 7, 1];\n // let sum = 0;\n\n // for (let i = 0; i < routingNumber.length; i++) {\n // sum += parseInt(routingNumber[i], 10) * weights[i % 3];\n // }\n // if (sum % 10 !== 0) {\n // errors.routingNumber = \"Invalid routing number\"\n // }\n\n // }\n setAchError(errors);\n return (Object.keys(errors).length > 0);\n };\n\n // ---- Pre-authorization card submit (replaces standalone PreAuthPayment) ----\n // Unlike a charge, pre-auth does NOT create a widget order; it tokenizes and\n // emits an authorize/hold socket request (fractal-charge-preauth / charge-preauth).\n const submitPreAuthCard = async () => {\n const hasError = validateCardData()\n if (hasError) return\n setLoading2(true)\n try {\n const tokenCallback = async function (response: any) {\n if (response.Error) {\n setError(response.Error)\n setLoading2(false)\n } else {\n response.name = cardData?.cardName;\n response.postal_code = cardData?.zipCode;\n response.fractalpayPublicKey = props?.merchantPublicKey;\n response.amount = props?.amount;\n response.order_id = props?.orderID;\n response.preAuth_id = props?.preauthId || \"\";\n response.isCardSave = saveCardInfo;\n response.customer_id = props?.customerId;\n response.link_token = \"\";\n response.gateway_id = paymentData?.paymentGateway;\n response.discount = props?.discount;\n response.tax = props?.tax;\n response.surcharge = props?.surcharge;\n response.pass_fee = props?.pass_fee;\n const requestOptions = { method: \"POST\", body: JSON.stringify(response), redirect: \"follow\" };\n socket.emit(\"sendMessage\", { ...requestOptions, \"isChargePreauth\": true, ...(props?.sessionToken && { sessionToken: props.sessionToken }) })\n socket.on('charge-preauth', (data: any) => {\n if (data?.status == \"Failed\") {\n setLoading2(false)\n setError(data?.message || \"Something went wrong. Please try again later.\")\n } else {\n setSuccess(true)\n setTranId(data?.data?.transaction_id)\n setLoading2(false)\n setCardData({ cardName: \"\", cardNumber: \"\", expiryMonth: \"\", expiryYear: \"\", cvv: \"\", orderId: \"\", zipCode: \"\" })\n }\n })\n }\n }\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = { method: \"POST\", redirect: \"follow\" };\n try {\n const sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n try {\n let tokenizeData;\n try {\n tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n } catch (err: any) {\n setLoading2(false);\n setErrorIframe(err?.response?.data?.message || err?.message || \"Something went wrong.\");\n return\n }\n const reqData = JSON.stringify({\n ...tokenizeData,\n name: cardData?.cardName,\n postal_code: cardData?.zipCode,\n customer_id: props?.customerId,\n amount: props?.amount,\n Token: `${tokenizeData?.token}`,\n fractalpayPublicKey: fractalpayClientKey,\n order_id: props?.orderID,\n preAuth_id: props?.preauthId || \"\",\n isCardSave: saveCardInfo,\n discount: props?.discount,\n surcharge: props?.surcharge,\n tax: props?.tax,\n link_token: \"\",\n ExpirationYear: cardData?.expiryYear,\n ExpirationMonth: cardData?.expiryMonth,\n CVV: cardData?.cvv,\n Last4: tokenizeData?.last4,\n Brand: tokenizeData?.brand,\n gateway_id: paymentData?.paymentGateway,\n pass_fee: props?.pass_fee,\n })\n const requestOptions2 = { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: reqData, redirect: \"follow\" };\n socket.emit(\"sendMessage\", { ...requestOptions2, \"isFractalPreauth\": true, ...(props?.sessionToken && { sessionToken: props.sessionToken }) })\n socket.on('fractal-charge-preauth', (data: any) => {\n if (data?.status == \"Failed\") {\n setLoading2(false)\n setError(data?.message || \"Something went wrong , Try again later\")\n } else {\n setTranId(data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n }\n })\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong , Try again later\")\n }\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong , Try again later\")\n }\n } else {\n try {\n const result = await (window as any).requestDcToken();\n if (result.Token) { tokenCallback(result); }\n } catch (err: any) {\n setErrorIframe(err);\n setLoading2(false);\n }\n }\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n\n // ---- Pre-authorization with a saved card (authorize-by-card REST, no socket) ----\n const handleAuthorizeSavedCard = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n const customer_id = props?.customerId\n const fractalpayPublicKey = props?.merchantPublicKey\n const order_id = props?.orderID\n const amount = leftTotal\n const card_id = selectedCard?.id\n const card_type = selectedCard?.card_type\n const preAuth_id = props?.preauthId || ''\n if (fractalpayPublicKey && order_id && amount) {\n if (customer_id) {\n if (card_id) {\n const chargeobj = {\n amount, order_id, customer_id, card_id, fractalpayPublicKey,\n isCardSave: card_type != \"Bank\",\n discount: props?.discount, surcharge: props?.surcharge, tax: props?.tax, preAuth_id\n }\n const { isCardSave, ...rest } = chargeobj\n const chargeurl = baseUrl + \"authorize-by-card\"\n const headers = { 'Content-Type': 'application/json', ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken }) }\n setLoading2(true)\n try {\n const result = await axios.post(chargeurl, card_type == 'Bank' ? rest : chargeobj, { headers })\n if (result?.data?.result) {\n setTranId(result?.data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(result?.data?.message || \"Something went wrong.\")\n }\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.response?.data?.status || \"Something went wrong\")\n }\n } else {\n setError(\"Please Select A Card/ACH\")\n }\n } else {\n setError(\"Please Select Customer\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n const submitFunc = async (e: any) => {\n e.preventDefault()\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (isPreAuth) { await submitPreAuthCard(); return; }\n if (activetab !== 'ach') {\n const hasError = validateCardData()\n if (hasError) return\n else {\n let validCard = true;\n let validExpirationDate = true;\n let validCVV = true;\n\n // if (paymentData?.paymentGateway !== 32) {\n // let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n // let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n // let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n // let errors: Partial<Record<keyof CardDetails, string>> = {}\n // if (!validCard) errors.cardNumber = \"Invalid card Number\"\n // if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n // if (!validCVV) errors.cvv = \"Invalid CVV\"\n // setCardError(errors)\n // }\n\n if (validCard && validCVV && validExpirationDate) {\n\n // showLoader()\n setLoading2(true)\n try {\n const formData = {\n // amount: `${props.amount || 0}`,\n amount: `${orderAmount}`,\n fractalpayPublicKey: fractalpayClientKey,\n orderId: props?.orderID,\n customer_id: props?.customerId,\n discount: props?.discount,\n surcharge: props?.surcharge,\n tax: props?.tax,\n pass_fee: props?.pass_fee\n }\n const result = await axios.post(`${baseUrl}create-widget-order`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n })\n let tokenCallback = async function (response: any) {\n\n if (response.Error) {\n setError(response.Error)\n // hideLoader();\n setLoading2(false)\n\n\n } else {\n let name = cardData?.cardName;\n let postal_code = cardData?.zipCode;\n\n response.name = name;\n response.postal_code = postal_code;\n response.isCardSave = `${saveCardInfo}`\n response.isCharge = true;\n response.posSalesIdEncode = result?.data.data.posSalesIdEncode;\n\n\n socket.emit(\"sendMessage\", response)\n socket.on(result?.data.data.posSalesIdEncode, (data: any) => {\n if (isValidJson(data?.data)) {\n let apiResponse = JSON.parse(data.data);\n if (apiResponse?.result) {\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveCardInfo(false)\n setTranId(apiResponse?.transactionId)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(apiResponse?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n\n // try {\n // let apiResponse = await axios.post(`${masterBaseUrl}quick-pay/${result?.data.data.posSalesIdEncode}`, response)\n // setCardData({\n // cardName: \"\",\n // cardNumber: \"\",\n // expiryMonth: \"\",\n // expiryYear: \"\",\n // cvv: \"\",\n // orderId: \"\",\n // zipCode: \"\"\n // })\n // setSaveCardInfo(false)\n // setTranId(apiResponse?.data?.transactionId)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n\n // } catch (err: any) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n\n // }\n\n }\n }\n\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n try {\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber;\n // cardNumber = cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: {\n // md: forge.md.sha1.create()\n // }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n // // Create Token\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // const raw = JSON.stringify({\n // \"enc_track2_data\": `${encryptedBase64}`,\n // \"algorithm\": \"RSAES_OAEP_SHA_1\",\n // session_key: `${sesionResult?.data?.data?.session_key}`\n // });\n\n try {\n console.log(sesionResult, \"sesionResult\");\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders })\n\n let tokenizeData;\n\n try {\n tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n\n } catch (err: any) {\n setErrorIframe(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n setLoading2(false)\n return;\n }\n\n const card_issue_type = tokenizeData?.bin_lookup_result?.card_issue_type || null;\n\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExempt = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExempt && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`);\n }\n\n console.log(tokenizeData, \"tokenizeData\");\n const reqData = JSON.stringify({\n ...tokenizeData,\n isSaveCardChecked: saveCardInfo,\n name: cardData?.cardName,\n postal_code: cardData?.zipCode,\n customer_id: props?.customerId,\n card_issue_type\n })\n\n const reqData2 = JSON.stringify({\n \"pre_sales_id\": `${result?.data?.data?.posSalesIdEncode}`,\n \"token\": `${tokenizeData?.token}`,\n \"json_response\": `${reqData}`\n })\n let myHeaders2 = JSON.stringify({\n \"Content-Type\": \"application/json\"\n })\n const requestOptions = {\n method: \"POST\",\n headers: myHeaders2,\n body: reqData2,\n redirect: \"follow\",\n isChargeviafractal: true,\n };\n\n socket.emit(\"sendMessage\", requestOptions)\n socket.on('chargeviafractalgateway', (data: any) => {\n if (isValidJson(data?.data)) {\n let paymentRes = JSON.parse(data?.data);\n console.log(paymentRes, \"paymentRes\");\n if (paymentRes?.result) {\n setTranId(paymentRes?.data?.transactionId);\n setIsDebitAdjusted(paymentRes?.data?.is_debit_adjusted);\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(paymentRes?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n\n // try {\n // let paymentRes = await axios.post(`${masterBaseUrl}api/v1/payment-gateway/charge`, requestOptions,\n // {\n // headers: myHeaders2\n // }\n // )\n // if (paymentRes?.data?.result) {\n // setTranId(paymentRes?.data?.data?.transactionId)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n\n // }\n\n // } catch (err: any) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n // }\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } else {\n try {\n const result = await (window as any).requestDcToken();;\n console.log(\"Token:\", result.Token);\n if (result.Token) {\n tokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading2(false);\n }\n\n // if (typeof DatacapWebToken !== 'undefined') {\n\n // DatacapWebToken.requestToken(result?.data.data.dctoken, \"PaymentForm\", tokenCallback);\n // }\n }\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n } else {\n let hasError = validateAchData()\n if (saveACHinfo && !saveACHConsent1) {\n hasError = true;\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n hasError = true;\n }\n if (hasError) return\n else {\n setLoading2(true)\n let dataForm = {\n fractalpayPublicKey: fractalpayClientKey,\n label: achData?.name || \"John Doe\",\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n amount: String(bankAmount || 0),\n isSaveAch: saveACHinfo,\n customer_id: props?.customerId,\n order_id: props?.orderID,\n tax: props?.tax,\n discount: props?.discount,\n surcharge: props?.surcharge,\n isChargeACH: true,\n company_name: achData?.companyName || \"\",\n ...(props?.sessionToken && { sessionToken: props.sessionToken })\n }\n // showLoader()\n socket.emit(\"sendMessage\", dataForm)\n socket.on('ach-incoming', (data: any) => {\n if (data?.status == \"Failed\") {\n if (typeof (data?.message) == \"object\") {\n Object.values(data?.message).forEach((message: any) => {\n setError(message || \"Something went wrong\");\n });\n } else {\n setError(data?.message || \"Something went wrong\")\n }\n } else {\n setTranId(data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n // Swal.fire({\n // icon: 'success',\n // title: 'Congrats...',\n // text: data?.message,\n // }).then((res) => {\n // if (res.isConfirmed) {\n // // OK button was clicked\n // handleClose()\n // }\n // });\n }\n })\n\n // try {\n // let result = await axios.post(`${baseUrl}ach-incoming`, dataForm)\n // // hideLoader()\n // setLoading2(false)\n\n // Swal.fire({\n // icon: 'success',\n // title: 'Congrats...',\n // text: result?.data?.message,\n // }).then((res) => {\n // if (res.isConfirmed) {\n // // OK button was clicked\n // handleClose()\n // }\n // });\n // } catch (error) {\n // if (axios.isAxiosError(error)) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(error.response?.data?.message?.error ?? error.response?.data?.message?.amount ?? \"Something went wrong\")\n // }\n // else {\n // console.error('Unexpected error', error);\n // }\n // }\n }\n }\n\n }\n\n\n const getPaymentDetails = async () => {\n showLoader()\n try {\n const data = {\n fractalpayPublicKey: fractalpayClientKey,\n \"customer_id\": props?.customerId,\n pass_fee: props?.pass_fee,\n isReader: props?.isReader\n }\n let paymentData = await axios.post(`${baseUrl}get-payment-details`, data)\n setPaymentData(paymentData?.data?.data)\n if (!paymentData?.data?.data?.paymentGateway) {\n handleClose()\n setError(\"Something went wrong.\")\n }\n let willShowCardForm = true\n if (paymentData?.data?.data?.card_list && paymentData?.data?.data?.card_list?.length > 0) {\n // setActive('cardList')\n let banklists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type == 'Bank')\n let cardlists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type !== 'Bank')\n // console.log(banklists, \"hohgohoo\", cardlists);\n // Keep both flags in sync so the unified saved-methods list opens\n // whenever the customer has any saved card or bank.\n if (cardlists?.length > 0 || banklists?.length > 0) {\n setActiveinCard('list')\n setActiveinBank('list')\n willShowCardForm = false\n }\n setCardList(cardlists)\n setBankList(banklists)\n // let primary_card = paymentData?.data?.data?.card_list?.filter((card: any) => card?.primary_card == 1)\n // if (primary_card?.[0] && primary_card?.[0]?.payment_method_type == paymentData?.data?.data?.paymentGateway) {\n // setSelectedCard(primary_card[0])\n // } else if (primary_card?.[0]?.card_type === \"Bank\") {\n // setSelectedCard(primary_card[0])\n // }\n } else {\n setActive('card')\n }\n\n if (paymentData?.data?.data?.paymentDeviceList && paymentData?.data?.data?.paymentDeviceList?.length > 0) {\n setSelectedReader(paymentData?.data?.data?.paymentDeviceList[0])\n }\n\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no gap frame with every\n // loading flag false while DataCapFields' own effect spins up.\n // Only when the card form (not the saved-methods list) will\n // actually render DataCapFields, otherwise this would get stuck\n // true forever since DataCapFields never mounts to clear it.\n if (willShowCardForm && paymentData?.data?.data?.paymentGateway === 31 && paymentData?.data?.data?.dctoken) {\n setLoadingIframe(true)\n }\n\n hideLoader()\n } catch (err: any) {\n console.log(err);\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong\")\n }\n }\n\n const handlechargeCustomer = async (e: React.MouseEvent<HTMLButtonElement>) => {\n if (isPreAuth) { return handleAuthorizeSavedCard(e); }\n e.currentTarget.blur();\n if (loading2) return;\n let customer_id = props?.customerId\n let discount = String(props?.discount)\n let surcharge = String(props?.surcharge)\n let tax = String(props?.tax)\n let fractalpayPublicKey = props?.merchantPublicKey\n let order_id = props?.orderID\n let amount = String(props?.amount)\n let card_id = selectedCard?.id\n let card_type = selectedCard?.card_type\n let card_issue_type = selectedCard?.card_issue_type\n if (fractalpayPublicKey && order_id && amount && bankAmount) {\n if (customer_id) {\n if (card_id) {\n setLoading2(true);\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExempt = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExempt && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`)\n }\n let resultofOrderCreate\n if (!(card_type === \"Bank\")) {\n const formData = {\n // amount: `${props.amount || 0}`,\n amount: `${orderAmount}`,\n fractalpayPublicKey: fractalpayClientKey,\n orderId: props?.orderID,\n customer_id: props?.customerId,\n discount: props?.discount,\n surcharge: props?.surcharge,\n tax: props?.tax,\n pass_fee: props?.pass_fee\n }\n resultofOrderCreate = await axios.post(`${baseUrl}create-widget-order`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n })\n\n console.log(resultofOrderCreate, \"vfndsjkfvhg\", resultofOrderCreate?.data.data.posSalesIdEncode);\n }\n\n let chargeobj = {\n amount: `${leftTotal}`,\n order_id,\n customer_id,\n card_id,\n fractalpayPublicKey,\n isCardSave: saveCardInfo,\n discount,\n surcharge,\n tax,\n pass_fee: props?.pass_fee,\n require3ds: false,\n ...(props?.sessionToken && { sessionToken: props.sessionToken }),\n ...(resultofOrderCreate?.data?.data?.posSalesIdEncode && { enOrderId: resultofOrderCreate?.data.data.posSalesIdEncode }),\n }\n let { isCardSave, pass_fee, require3ds, ...rest } = chargeobj\n\n\n let endpoint = card_type === \"Bank\" ? \"charge-ach\" : \"charge-by-card\"\n\n let chargeurl = baseUrl + endpoint\n const headers = {\n 'Content-Type': 'application/json'\n }\n // showLoader()\n\n socket.emit(\"sendMessage\", { url: chargeurl, body: card_type == 'Bank' ? rest : chargeobj, isChargebycard: true })\n socket.on('charge-by-card', (response: any) => {\n if (response?.result == true || response?.status == true) {\n setIsDebitAdjusted(response.data?.adjustedForDebit);\n setTranId(response.data?.transaction_id);\n setSuccess(true);\n // hideLoader()\n setLoading2(false);\n } else {\n setError(response?.message || \"Something went wrong.\")\n }\n })\n // try {\n // let result = await axios.post(chargeurl, card_type == 'Bank' ? rest : chargeobj, { headers })\n // if (result?.data?.result) {\n // setTranId(result?.data?.data?.transaction_id)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n\n // }\n // // hideLoader()\n\n // } catch (err: any) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(err?.response?.data?.message || err?.response?.data?.status || \"Something went erong\")\n\n // }\n\n } else {\n setError(\"Please Select A Card/ACH\")\n // swal(\"Please Select A Card/ACH\", '', \"error\");\n }\n } else {\n // swal(\"Please Select Customer\", '', \"error\");\n setError(\"Please Select Customer\")\n }\n } else {\n // swal(\"Something went wrong\", 'Please try again later !!!', \"error\");\n setError(\"Something went wrong.\")\n }\n }\n\n const handleChargewithEMV = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n let fractalpayPublicKey = props?.merchantPublicKey\n let customer_order_id = props?.orderID\n let amount = String(props?.amount)\n let customer_id = props?.customerId\n\n if (!selectedReader?.device_id) {\n setError(\"Please Select A Payment Device\")\n return\n }\n\n if (fractalpayPublicKey && customer_order_id && amount) {\n setLoading2(true)\n let obj = {\n amount,\n fractalpayPublicKey,\n customer_order_id,\n device_id: selectedReader?.device_id,\n customer_id: customer_id || \"\",\n ...(isPreAuth && { is_auth: true })\n }\n\n try {\n let response = await axios.post(`${baseUrl}charge-with-reader`, obj)\n\n\n if (response?.data?.result == true) {\n setTranId(response?.data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n } else {\n setError(response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n const handlepayment = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (activeList === 'card') {\n handlechargeCustomer(e)\n } else if (activeList === 'reader') {\n handleChargewithEMV(e)\n }\n }\n\n\n useEffect(() => {\n if (show && fractalpayClientKey) {\n\n getPaymentDetails()\n }\n }, [fractalpayClientKey, show])\n\n const handleDeleteCard = async (cardId: any) => {\n Swal.fire({\n icon: 'warning',\n text: 'Do you want to delete the card?',\n showCancelButton: true,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n reverseButtons: true,\n buttonsStyling: false,\n customClass: {\n confirmButton: 'swal2-confirm btn btn-dark',\n cancelButton: 'swal2-cancel btn btn-dark',\n popup: 'custom-swal-popup',\n icon: 'custom-swal-icon'\n }\n }).then(async (result) => {\n if (result.isConfirmed) {\n // 👇 Yahan aap apna API call karo\n // showLoader()\n setLoading2(true)\n try {\n let obj = {\n card_id: cardId,\n customer_id: props?.customerId,\n fractalpayPublicKey: props?.merchantPublicKey\n }\n\n const res = await axios.post(`${baseUrl}delete-customer-card`, obj)\n // hideLoader()\n setLoading2(false)\n\n getPaymentDetails()\n Swal.fire({\n icon: 'success',\n title: 'Deleted!',\n text: 'Card deleted.',\n confirmButtonText: 'OK',\n showConfirmButton: true,\n timer: 1000, // auto-close after 1 second\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n\n } catch (err) {\n // hideLoader()\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Error!',\n text: 'Failed to delete the card.',\n confirmButtonText: 'OK',\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n });\n }\n\n\n } else if (result.dismiss === Swal.DismissReason.cancel) {\n // 👇 Show new popup on \"No\"\n Swal.fire({\n icon: 'info',\n text: 'Card not deleted',\n confirmButtonText: 'OK',\n buttonsStyling: false,\n customClass: {\n confirmButton: 'btn btn-dark float-end',\n actions: 'swal2-actions-end'\n }\n });\n\n }\n });\n };\n\n const getCardType = (card: string) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return card;\n }\n };\n\n const getCashDiscount = () => {\n let cashDiscountNew = cashDiscount || 0\n let diff = Number(props.amount) - cashDiscountNew\n return diff.toFixed(0)\n }\n\n // ---- derived display values for the redesigned surcharge modal ----\n const merchantName = paymentData?.bname || paymentData?.customer_name || 'the merchant'\n // Avoid \"Invoice #Invoice123\" when the order id already carries an \"Invoice\" prefix.\n const invoiceNo = String(props?.orderID || '').replace(/^\\s*invoice\\s*#?\\s*/i, '').trim()\n const invoiceLabel = invoiceNo ? `Invoice #${invoiceNo}` : 'Invoice'\n const isSurchargeProgram = Number(paymentData?.surchargeProgram) === 1\n // The dashboard always passes the total (credit/banked price). The pre-fee base is the\n // discounted/cash base, derived from that total for both surcharge program and cash discount.\n const baseAmount = Number(cashDiscount ?? props?.amount ?? 0)\n const fundingType = surchargeResult?.card_issue_type?.toLowerCase()\n const feeExempt = fundingType === 'debit' || fundingType === 'prepaid'\n\n let cardTotal\n if (isSurchargeProgram) {\n cardTotal = feeExempt\n ? baseAmount\n : parseFloat((baseAmount * (1 + (Number(props?.surcharge || 0) / 100))).toFixed(2))\n } else {\n // Cash discount: always show the full price ($103) regardless of card type.\n cardTotal = Number(props?.amount || 0)\n }\n\n const surchargeFee = Math.max(cardTotal - baseAmount, 0)\n // The saved-methods list mixes cards and bank accounts on the 'card' tab (goToList always\n // forces activetab to 'card'), so once a saved method is selected there, its own card_type\n // decides bank vs. card — not the tab. Falls back to the tab when the list isn't showing a\n // selection (form entry, reader, or list with nothing picked yet).\n const isBankView = activetab !== 'reader' && activeinCard === 'list' && !!selectedCard?.id\n ? selectedCard?.card_type === 'Bank'\n : activetab === 'ach'\n const discountNum = Number(props?.discount || 0)\n const taxNum = Number(props?.tax || 0)\n const leftTotal = isBankView ? Number(bankAmount || 0) : cardTotal\n // Surcharge-program: create the order at the pre-fee subtotal ($100) so the backend can add\n // the surcharge for credit cards. Cash-discount: always create at the full price ($103) so\n // the backend's removeSurcharge correctly derives the discounted base — even for debit.\n const orderAmount = isSurchargeProgram ? baseAmount : Number(props?.amount || 0)\n const fmtNum = (n: number) => Number(n).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })\n // surcharge_program (from pos_sales_setting) flips the framing: ON = true surcharging\n // (itemized \"Surcharge\" added to a pre-fee subtotal); OFF = cash-discount (the price already\n // includes the fee, and debit/bank gets a discount). Same dollars, different presentation.\n const hasFee = surchargeFee > 0 && !!props?.pass_fee\n const showSurchargeLine = isSurchargeProgram && !isBankView && hasFee\n // Surcharge program subtotal is the pre-fee base; cash-discount subtotal is the full price.\n const summarySubtotal = (isSurchargeProgram || isBankView) ? baseAmount : cardTotal\n\n const savedMethods: any[] = [...(cardList || []), ...(bankList || [])]\n const hasSaved = savedMethods.length > 0\n // `activeinCard`/`activeinBank` are kept in sync (both 'list' or both 'form'),\n // so the unified saved-methods list shows regardless of the active card/bank tab.\n const showList = hasSaved && activetab !== 'reader' && activeinCard === 'list'\n\n const availableMethods: string[] = [\n 'card',\n ...(!isPreAuth && paymentData?.isSkyFiAccount ? ['ach'] : []),\n ...(props?.isReader && paymentData?.paymentDeviceList && paymentData.paymentDeviceList.length > 0 ? ['reader'] : []),\n ]\n\n const goToList = () => { setActive('card'); setActiveinCard('list'); setActiveinBank('list'); setError(''); }\n const payWithOther = () => { setActive('card'); setActiveinCard('form'); setActiveinBank('form'); setError(''); }\n const switchMethod = (m: string) => {\n setActive(m)\n if (m === 'card' || m === 'ach') { setActiveinCard('form'); setActiveinBank('form'); }\n setError('')\n }\n\n const rightTitle = showList\n ? 'Payment methods'\n : activetab === 'reader'\n ? (isPreAuth ? 'Reader authorization' : 'Reader payment')\n : activetab === 'ach'\n ? 'Bank payment'\n : (isPreAuth ? 'Card authorization' : 'Card payment')\n\n const showBack = hasSaved && !showList\n\n const MethodToggle = (\n <FractalMethodToggle\n methods={[\n { value: 'card', label: 'Card' },\n ...(availableMethods.includes('ach') ? [{ value: 'ach', label: 'Bank' }] : []),\n ...(availableMethods.includes('reader') ? [{ value: 'reader', label: 'Reader' }] : []),\n ]}\n active={activetab}\n onChange={switchMethod}\n />\n )\n\n const summaryLines: SummaryLine[] = [\n { label: 'Subtotal', value: fmtNum(summarySubtotal) },\n { label: 'Discount', value: fmtNum(discountNum), muted: true },\n { label: 'Tax', value: fmtNum(taxNum), muted: true },\n ...(showSurchargeLine ? [{ label: 'Surcharge', value: formatUSD(surchargeFee.toFixed(2)) }] : []),\n ]\n\n const summaryNote = isBankView\n ? (bankSavingsAmount > 0\n ? <FractalSavingsNote label={isSurchargeProgram ? 'Savings' : 'Cash discount savings'} amount={formatUSD(bankSavingsAmount.toFixed(2))} />\n : null)\n : !hasFee ? null\n : isSurchargeProgram\n // Debit never carries a bank fee, so it always settles at the pre-fee base. Bank\n // does when bankFeeAmount is set — call that out separately instead of implying\n // debit and bank land on the same number.\n ? (bankFeeAmount > 0\n ? <div className=\"fps-note\"><b>{formatUSD(baseAmount.toFixed(2))}</b> if customer pays with debit (no surcharge), or <b>{formatUSD(Number(bankAmount || 0).toFixed(2))}</b> if by bank.</div>\n : <div className=\"fps-note\"><b>{formatUSD(baseAmount.toFixed(2))}</b> if customer pays with debit or by bank (no surcharge).</div>)\n : <div className=\"fps-note\"><b>{formatUSD(Number(bankAmount || 0).toFixed(2))}</b> if customer pays by bank (cash discount price).</div>\n\n const LeftSummary = (\n <FractalOrderSummary\n logo={paymentData?.logo}\n invoiceLabel={invoiceLabel}\n lines={summaryLines}\n total={formatUSD(leftTotal.toFixed(2))}\n cardIcons={isBankView ? null : { visa, mastercard, amex: americanexp, discover }}\n note={summaryNote}\n secureIcon={secure}\n />\n )\n\n const AuthText = isPreAuth ? (\n <p className=\"fps-auth\">\n By authorizing, you allow {merchantName} to place a hold of {formatUSD(cardTotal.toFixed(2))} on your card. <u>Refund policy</u>.\n </p>\n ) : (\n <p className=\"fps-auth\">\n By paying, you authorize {merchantName} to charge {formatUSD((isBankView ? Number(bankAmount || 0) : cardTotal).toFixed(2))} to your {isBankView ? 'account' : 'card'}. <u>Refund policy</u>.\n </p>\n )\n\n return (\n <>\n <DataScript />\n {\n paymentData?.paymentGateway === 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n\n {\n paymentData?.paymentGateway === 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }} />\n )\n }\n <Chargewidgetstyles />\n <CardBankRadioStyles />\n <FractalWidgetStyles />\n <>\n {showButton && (\n <button className=\"paymentBtn\" onClick={handleShow}>\n {isPreAuth ? 'PreAuth Payment' : 'Pay'}\n </button>\n )}\n\n <CustomModal2\n open={show}\n onClose={handleClose}\n maxWidth=\"760px\"\n >\n {\n error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>\n }\n {\n errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>\n }\n {success && <SuccessMsz onClose={handleClose} tranId={tranId} isDebitAdjusted={isDebitAdjusted} />}\n {!error && !errorIframe && !success &&\n <>\n {(loading || loading2 || loadingIframe || surchargeLookupLoading) && <Loader loading={loading || loading2 || loadingIframe || surchargeLookupLoading} loaderText={loaderText} />}\n\n <div className=\"fps-modal\">\n {LeftSummary}\n\n <section className=\"fps-content\">\n <FractalModalHeader title={rightTitle} onBack={showBack ? goToList : undefined} onClose={handleClose} />\n\n {/* ---------- Saved methods list ---------- */}\n {showList ? (\n <>\n <FractalSavedMethods\n sectionLabel=\"Cards / bank accounts\"\n items={savedMethods.map((card: any) => {\n const isBankCard = card?.card_type === 'Bank'\n let isDisabled = false\n if (paymentData?.paymentGateway) {\n isDisabled = paymentData?.paymentGateway != card?.payment_method_type && !isBankCard\n }\n return {\n id: card?.id,\n primaryText: `**** ${card?.cardlastfourdigit}`,\n secondaryText: isBankCard ? undefined : `${card?.expmonth}/${card?.expyear}`,\n badge: isBankCard ? 'BANK' : (card?.card_issue_type || 'CARD'),\n brandLogo: isBankCard ? undefined : getCardType(card?.card_type),\n disabled: isDisabled,\n }\n })}\n selectedId={selectedCard?.id}\n onSelect={(id) => setSelectedCard(savedMethods.find((c: any) => c?.id === id))}\n onRemove={(id) => handleDeleteCard(id)}\n removeIcon={trash}\n otherLabel=\"Pay with other method\"\n onOther={payWithOther}\n otherIcon={defaultcard}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2 || !selectedCard?.id || surchargeLookupLoading}\n onPay={handlechargeCustomer}\n buttonLabel={isPreAuth\n ? `Authorize ${formatUSD(cardTotal.toFixed(2))}`\n : `Pay ${formatUSD((selectedCard?.card_type === 'Bank' ? Number(bankAmount || 0) : cardTotal).toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'reader' ? (\n /* ---------- Reader ---------- */\n <>\n {MethodToggle}\n <FractalReaderList\n sectionLabel=\"Readers\"\n items={(paymentData?.paymentDeviceList || []).map((r: any) => ({ id: String(r?.id), name: r?.device_name }))}\n selectedId={selectedReader?.id != null ? String(selectedReader?.id) : undefined}\n onSelect={(id) => setSelectedReader((paymentData?.paymentDeviceList || []).find((r: any) => String(r?.id) === id))}\n icon={pax}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2}\n onPay={handleChargewithEMV}\n buttonLabel={isPreAuth ? `Authorize ${formatUSD(cardTotal.toFixed(2))}` : `Pay ${formatUSD(cardTotal.toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'ach' ? (\n /* ---------- Bank form ---------- */\n <form\n id=\"ACHPaymentForm\"\n autoComplete=\"off\"\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on account\" htmlFor=\"nameonaccount\" error={achError?.name}>\n <input id=\"nameonaccount\" className=\"fps-input\" maxLength={100} placeholder=\"John Doe\" name=\"name\" value={achData?.name ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Routing number\" htmlFor=\"routingnumber\" error={achError?.routingNumber}>\n <input id=\"routingnumber\" className=\"fps-input\" maxLength={9} placeholder=\"000000000\" name=\"routingNumber\" value={achData?.routingNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Account number\" htmlFor=\"accountnumber\" error={achError?.accountNumber}>\n <input id=\"accountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"accountNumber\" value={achData?.accountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Confirm account number\" htmlFor=\"confirmaccountnumber\" error={achError?.confirmAccountNumber}>\n <input id=\"confirmaccountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"confirmAccountNumber\" value={achData?.confirmAccountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Bank name\" htmlFor=\"bankname\" error={achError?.bankName}>\n <input id=\"bankname\" className=\"fps-input\" maxLength={100} placeholder=\"My Bank\" name=\"bankName\" value={achData?.bankName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n {(achData?.accountType === 'business saving' || achData?.accountType === 'business checking') && (\n <FractalField label=\"Company name\" htmlFor=\"companyName\" error={achError?.companyName}>\n <input id=\"companyName\" className=\"fps-input\" maxLength={100} placeholder=\"My Company\" name=\"companyName\" value={achData?.companyName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n )}\n <FractalField label=\"Account type\" htmlFor=\"accounttype\">\n <select id=\"accounttype\" name=\"accountType\" className=\"fps-input\" value={achData?.accountType ?? ''} onChange={handleChangeAch}>\n <option value=\"\">Select</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>{type.label}</option>\n ))}\n </select>\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"saveACH\" checked={saveACHinfo} onChange={(v) => {\n setSaveACHinfo(v)\n if (!v) { setSaveACHConsent1(false); setErrorBankConsentOther('') }\n }}>\n Save this bank account. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n {saveACHinfo && (\n <>\n <FractalCheckbox id=\"saveACHConsent1\" checked={saveACHConsent1} onChange={(v) => {\n setSaveACHConsent1(v)\n if (v) setErrorBankConsentOther('')\n }}>\n By providing my bank account information and selecting ‘Save for future payments’, I authorize {merchantName} to store my bank account details for future ACH payments. I understand that future payments may be initiated using this saved account in accordance with my instructions. I confirm I am authorized to use this bank account.\n </FractalCheckbox>\n {errorBankConsentOther && <span className=\"fps-error\">{errorBankConsentOther}</span>}\n </>\n )}\n {!saveACHinfo && (\n <>\n <FractalCheckbox id=\"achconsent\" checked={isBankConsentChecked} onChange={(v) => {\n setIsBankConsentChecked(v)\n if (v) setErrorBankConsent('')\n }}>\n By selecting this box, I authorize SkyFi, on behalf of {paymentData?.bname || 'merchant'}, to initiate a one-time electronic ACH debit from my bank account for the total amount displayed on this screen, including any applicable processing fee. I confirm that I am authorized to use this account and that the bank account information I provided is correct.\n </FractalCheckbox>\n {errorBankConsent && <span className=\"fps-error\">{errorBankConsent}</span>}\n </>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2}\n buttonLabel={`Pay ${formatUSD(Number(bankAmount || 0).toFixed(2))} to ${merchantName}`}\n />\n </form>\n ) : (\n /* ---------- Card form ---------- */\n <form\n id={paymentData?.paymentGateway === 32 ? 'paymentForm' : 'PaymentForm'}\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on card\" htmlFor=\"cardHolderName\" error={cardError?.cardName}>\n <input\n id=\"cardHolderName\"\n className=\"fps-input\"\n maxLength={100}\n placeholder=\"John Doe\"\n value={cardData?.cardName || ''}\n onChange={(e: any) => {\n const value = e.target.value\n if (/^[a-zA-Z\\s]*$/.test(value)) handleCardChange('cardName', value)\n }}\n />\n </FractalField>\n\n <FractalField label={paymentData?.paymentGateway === 32 ? \"Card number\" : \"\"} error={cardError?.cardNumber}>\n <div className={`fps-tokenizer ${paymentData?.paymentGateway !== 32 ? 'dc-tokenizer' : ''}`}>\n {paymentData?.paymentGateway === 32 ? (\n show && isTokenizerReady && <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n surchargeEnabled={Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee}\n createSurchargeSession={createSurchargeSession}\n getSurchargeOptions={getSurchargeOptions}\n onSurchargeResult={setSurchargeResult}\n />\n ) : (\n <DataCapFields isOpen={show} tokenKey={paymentData?.dctoken} setLoader={setLoadingIframe} onError={(msg: string) => setError(msg || DcLoadingError)} />\n )}\n </div>\n </FractalField>\n\n <FractalField label=\"Zip\" htmlFor=\"zip\" error={cardError?.zipCode}>\n <input id=\"zip\" className=\"fps-input\" maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? ''} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"save_card\" checked={saveCardInfo} onChange={(v) => setSaveCardInfo(v)}>\n Save this card. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2}\n buttonLabel={isPreAuth ? `Authorize ${formatUSD(cardTotal.toFixed(2))}` : `Pay ${formatUSD(cardTotal.toFixed(2))} to ${merchantName}`}\n />\n </form>\n )}\n </section>\n </div>\n </>\n }\n </CustomModal2>\n </>\n </>\n )\n}","import React from \"react\";\n\nexport default function Chargewidgetstyles() {\n const primarycolor = \"#000\";\n const primarybgcolor = \"#fff\";\n const primarybodycolor = \"#212529\";\n const primarybordercolor = \"#dee2e6\";\n return (\n <style>\n {`\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n body\n {\n font-family: 'Inter', sans-serif !important;\n }\n input\n {\n font-family: 'Inter', sans-serif !important;\n } \n .frac-form .form-group{\n margin:0 !important\n }\n .frac-form .mb-4{\n margin-bottom : 10px !important\n }\n .frac-form .save-ach-div{\n display:flex !important;\n gap:5px !important;\n align-items:start;\n }\n .save-ach-div label{\n margin-top: -4px;\n }\n .frac-form .card-cvv-in{\n height : 36px !importantt; \n }\n\n .frac-form .pay-payment-amount{\n text-align:start !important\n }\n .frac-form .pay-amount{\n text-align:start !important\n }\n .frac-form .pay-main-logo{\n text-align:start !important\n }\n\n\n \n .paymentBtn {\n background-color: black;\n border: none;\n color: white;\n padding: 15px 32px;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n font-size: 16px;\n margin: 4px 2px;\n cursor: pointer;\n border-radius: 180px;\n /* width: auto; */\n } \n \n .main-logo {\n text-align: center;\n margin-bottom: 20px;\n }\n\n .main-logo img {\n max-width: 180px;\n }\n\n .pay-main-box {\n width: 365px !important;\n height: 93%;\n background: 0 0 #ffffff;\n border-radius: 12px;\n\n\n border: 1px solid #E0DFE2;\n margin: 0 auto;\n display: block;\n padding: 0px 26px !important\n }\n .pay-main-box .pay-header {\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n }\n \n .pay-main-box .pay-header button {\n border: 0;\n background: none;\n padding: 0;\n box-shadow: 0;\n outline: inherit;\n }\n \n .pay-main-box h1 {\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .tab {\n overflow: hidden;\n padding: 5px;\n border-radius: 8px;\n display: flex;\n justify-content: space-around;\n margin-bottom:12px\n }\n\n /* Style the buttons inside the tab */\n .tab button {\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n background:white;\n padding: 11px 16px;\n transition: 0.3s;\n font-size: 16px;\n width: 143px;\n border-radius: 5px;\n box-shadow: inherit;\n outline: none;\n color: ${primarycolor};\n }\n\n /* Change background color of buttons on hover */\n .tab button:hover {\n background-color: #f0f0f0;\n }\n\n /* Create an active/current tablink class */\n // .tab button.active {\n // background-color: #ccc;\n // }\n\n /* Style the tab content */\n \n \n .parent-pay-container{\n padding: 24px;\n }\n .pay-container{\n display: grid;\n grid-template-columns: 2fr 3fr;\n \n }\n .pay-main{\n padding-y: 20px}\n\n .request-payment-close-popup {\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n}\n .pay-conatiner-one{\n border-right: 1px solid #E0DFE2;\n }\n .pay-conatiner-one-first{\n min-height:530px\n }\n .pay-conatiner-one-last{\n display:flex;\n font-size:12px;\n gap:5px;\n max-width:250px;\n align-items:center;\n color:black !important\n }\n .pay-conatiner-one-last img{\n width : 17px;\n height:17px\n }\n .pay-conatiner-two{\n padding: 0 5% 0;\n }\n .pay-logo-container{\n border-bottom: 1px solid #E0DFE2\n }\n .pay-heading{\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .pay-main-logo > img{\n width: 50%;\n }\n .pay-main-logo-res > img{\n width: 50%;\n display : none\n }\n \n .pay-payment-amount{\n display: block;\n font-size: 12px;\n color: #727272;\n margin-bottom: 8px;\n }\n .pay-amount-conatiner{\n margin-top: 6%;\n }\n .pay-amount{\n color: #000000;\n font-size: 38px;\n display: block;\n line-height: 110%;\n letter-spacing: -1px;\n }\n .frac-form label{\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n margin-bottom: 2px !important;\n font-weight: 600 !important;\n font-size: 12px !important;\n display:block !important;\n text-align : left !important;\n text-transform: uppercase !important;\n }\n .form-control{\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: ${primarybodycolor};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: ${primarybgcolor};\n background-clip: padding-box;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n }\n .form-control:focus{\n border-color: #86b7fe;\n outline: 0;\n }\n .toggle-num-wrapper {\n position: relative;\n }\n .card-number-new{\n border-bottom: none;\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n .card-crdi {\n display: flex;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .exp-date-year-container{\n display: flex;\n flex-wrap: wrap;\n }\n .exp-date-year-container .form-group{\n flex:1;\n \n }\n\n .exp-date {\n float: left;\n // width: 30%\n }\n\n .exp-date input {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n\n .exp-year {\n float: left;\n // width: 30%\n }\n\n .exp-year input {\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n .exp-date input:focus {\n position: relative;\n z-index: 10;\n }\n\n .security-digit {\n float: right;\n // width: 40%;\n position: relative;\n }\n\n .security-digit input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right:0;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .form-control{box-sizing: border-box ;}\n #PaymentForm .form-group{\n padding:5px 0 ;\n matgin: 0 !important\n }\n\n #paymentForm .form-group{\n padding:5px 0 ;\n matgin: 0 !important\n }\n \n .toggle-label {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 24px;\n background-color: #ccc;\n border-radius: 12px;\n cursor: pointer;\n transition: background-color 0.3s;\n }\n\n .toggle-label::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: left 300ms linear;\n }\n\n .toggle-checkbox {\n display: none;\n }\n\n .toggle-checkbox:checked + .toggle-label {\n background-color: #4caf50;\n }\n\n .toggle-checkbox:checked + .toggle-label::before {\n left: 18px;\n }\n .ach-scrl {\n max-height: 380px;\n min-height: 380px;\n overflow-y: auto;\n padding-right: 6px;\n }\n .mb-4{\n margin-bottom:4px\n }\n .ach-scrl::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .ach-scrl::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n\n .error-span{\n color:red !important;\n font-size:12px !important;\n text-align: left !important;\n width: 100% !important;\n display: block;\n }\n\n .charge-customer-name{\n color: #161616;\n font-family: Inter;\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n line-height: 32px;\n letter-spacing: -0.48px;\n text-transform: capitalize;\n margin-top:0;\n margin-bottom:16px !important;\n text-align:left !important\n }\n .card-ach-heading {\n color: #727272;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.24px;\n margin : 0 0 10px !important; \n text-align : left\n}\n .card-list-div{\n max-height : 190px;\n overflow-y : auto;\n border:1px solid #E0DFE2;\n border-radius : 8px\n }\n \n \n .card-list-div::-webkit-scrollbar{\n width:2px;\n background-color:#F5F5F5\n }\n .card-list-div::-webkit-scrollbar-thumb{\n background-color:#35254D\n }\n \n .card-list-single-div{\n border-bottom: 1px solid #E0DFE2;\n padding : 8px 11px;\n display : flex ;\n align-items:center;\n justify-content : space-between;\n gap:12px\n }\n .card-list-single-div:last-child {\n border-bottom: none;\n}\n .card-lint-div-in{\n min-height:444px}\n .card-number-radio{\n display:flex;\n gap:12px;\n }\n .card-number-radio .card-number-last-four{\n color:#161616 !important;\n font-family:Inter !important;\n font-size:14px !important;\n font-weight:500 !important;\n font-style:normal !important;\n line-height : 18px !important;\n latter-spacing:-0.18px !important\n }\n .card-expiry-date{\n margin:0;\n color:#00000080;\n font-family:Inter;\n font-size:14px;\n font-weight:500;\n font-style\"normal;\n line-height : 18px;\n latter-spacing:-0.18px\n }\n .pay-with-other-card {\n margin-top : 12px;\n padding:12px 32px;\n border :1px solid #E0DFE2;\n border-radius : 1000px;\n display: flex;\n justify-content : center;\n align-items:center;\n gap:10px;\n // width:100%;\n background:white;\n cursor:pointer;\n color:#161616;\n text-align:center\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.28px;\n // margin-bottom: 50px;\n }\n .charge-payment-back-btn {\n display: flex;\n padding: 5px 10px;\n align-items: center;\n gap: 6px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n cursor:pointer;\n color:black\n}\n .res-charge-payment-back-btn{\n padding: 9px 16px;\n align-items: center;\n gap: 6px;\n margin-bottom: 20px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n curso:pointer;\n color:black;\n display:none \n }\n .btn {\n padding: 11px 23px;\n background-color: black;\n color: white;\n border: none;\n border-radius: 6px;\n font-weight: bold;\n margin: 0 10px;\n cursor: pointer;\n}\n\n.custom-swal-icon {\n margin: 20px auto;\n}\n\n.custom-swal-popup {\n font-size: 16px;\n text-align: center;\n}\n\n .frac-form .res-pay-con{\n display:none\n }\n\n .frac-cash-discount{\n border-radius: 8px;\n background: #F6F6F7;\n justify-content: space-between;\n align-items: center;\n display: flex;\n padding: 9px 14px 9px 10px;\n font-family: Inter;\n color: #161616;\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n margin: 12px 0;\n }\n.frac-cash-discount .frac-cashlabel{\n color: #727272;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n}\n\nfrac-tooltip-wrapper {\n position: absolute;\n right:0;\n}\n\n.frac-tooltip-icon {\n cursor: pointer;\n}\n.frac-tooltip-mn{\nposition:relative;\n}\n.frac-tooltip-text {\n display: none;\n position: absolute;\n top:-15px;\n right: 22px;\n background: #161616;\n color: white;\n padding: 15px;\n border-radius: 10px;\n width: 200px;\n font-size:12px;\n word-break: break-word;\n white-space: normal;\n z-index: 999;\n}\n\n.frac-tooltip-wrapper:hover .frac-tooltip-text {\n display: block;\n}\n\n.frac-tooltip-text p,.frac-tooltip-text b {\n font-size : 12px !important;\n line-height : 1.5 !important;\n margin-bottom : 10px !important;\n}\n\n@media (max-width: 768px) {\n .parent-pay-container{\n padding: 20px 5%;\n }\n .pay-container {\n grid-template-columns: 1fr;\n padding: 10px 5%;\n border:1px solid #E0DFE2;\n border-radius : 12px;\n gap:24px;\n }\n .pay-conatiner-one{\n border-right: none;\n }\n .pay-conatiner-one-first{\n min-height:0\n }\n .pay-main-logo > img{\n display: none;\n }\n .pay-main-logo-res > img {\n display:block;\n margin:auto\n }\n \n .pay-logo-container{\n border :none\n }\n // .res-charge-payment-back-btn {\n // display:flex !important\n // }\n // .charge-payment-back-btn{\n // display:none !important\n // }\n .fractal-popup-content{\n width: 90%;\n }\n // .frac-form .res-pay-con{\n // display:flex;\n // justify-content :space-between;\n // align-items:center;\n // padding-bottom : 10px\n // }\n // .frac-form .amt-pay-con{\n // display:none\n // }\n .pay-conatiner-one-last{\n display:none}\n .pay-conatiner-two{\n padding:0\n }\n \n \n }\n .amt-pay-con {\n padding-right: 24px;\n }\n @media (max-width : 512px){\n .tab button {\n padding: 6px 16px;\n }\n .amt-pay-con {\n padding-right: 0;\n }\n}\n \n \n .frac-cash-discount-fee {\n display: flex;\n padding: 11px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n border-radius: 8px;\n border: 1px solid #E0DFE2;\n background: #F6F6F7;\n margin-top: 24px;\n }\n .frac-cash-discount-fee small {\n color:#727272;\n font-size: 12px;\n font-weight: 500;\n }\n .frac-cash-discount-fee p{\n margin:0px;\n font-size: 14px;\n font-weight: 500;\n }\n .frac-card-payment-heading {\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n margin:0px;\n }\n .exp-date-year-container .form-group {\n padding: 0px !important;\n }\n .frac-heading-card-wrap {\n display: flex;\n align-items: center;\n margin-bottom:12px;\n }\n .frac-backarrow {\n margin-right: 10px;\n }\n .frac-charge-payment-back-btn-wrap , .frac-tab-2{\n display: none;\n }\n .frac-pay-conatiner-one{\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n min-height: auto;\n }\n\n .frac-partial-payment-input{\n margin-top: 12px !important; \n }\n div#cvv {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 0;\n }\n div#exp_year {\n height: 36px;\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid #dee2e6;\n }\n div#exp_month {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid #dee2e6;\n }\n\n .frac-fee-text{\n display: block;\n padding: 10px 0 4px;\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n font-size: 12px;\n line-height: 1.4;\n text-align: start !important;\n }\n .frac-fee-amount{\n color: #c62828 !important;\n }\n\n .surcharge-program-notice-text{\n margin: 10px 0 4px;\n padding: 8px 12px;\n background: #f6f6f7;\n border-radius: 8px;\n font-family: 'Inter', sans-serif;\n font-size: 12px;\n color: #727272;\n line-height: 1.5;\n }\n\n .surcharge-program-notice-text-att {\n font-weight: 700;\n color: #161616;\n }\n\n `}\n </style>\n );\n}\n","import React from 'react'\n\nexport default function SuccessMszStyle() {\n return (\n <style>\n {\n `\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n \n body{\n display: flex;\n justify-content: center;\n align-items: center;\n padding-top: 30px;\n margin: 0;\n /* background-color: #f8f9fa; */\n flex-direction: column;\n }\n .payment-msg-container{\n min-height : 550px\n }\n\n .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n .payment-success-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 18px 20px 24px;\n width: 335px;\n height: 400px; /* Fixed height */\n background: #ffffff;\n border-radius: 12px;\n position: relative;\n /* box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n border: 1px solid #e3e3e3; */\n justify-content: center;\n text-align: center;\n margin-top: 50px; /* Adjust this to move the content down */\n }\n\n .success-icon {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n width: 227px;\n height: 116px;\n z-index: 2;\n }\n\n .circle {\n width: 40px;\n height: 40px;\n border: 1px solid #49b182;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .circle .fa-check-circle {\n font-size: 20px;\n color: #49b182;\n }\n\n .success-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n width: 227px;\n }\n\n .payment-success-text {\n font-family: \"Inter\", sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .thank-you-text {\n font-family: \"Inter\", sans-serif;\n font-weight: 500;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n opacity: 0.5;\n }\n\n .charge-payment-success-tick-div {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 32px;\n }\n .charge-payment-success-tick {\n border-radius: 1000px;\n background: rgba(97, 198, 153, 0.14);\n display: flex;\n width: 60px;\n height: 60px;\n justify-content: center;\n align-items: center;\n }\n .charge-payment-success-text {\n color: #161616;\n text-align: center;\n font-family: Inter;\n font-size: 32px;\n font-style: normal;\n font-weight: 500;\n line-height: 36px;\n letter-spacing: -0.64px;\n margin-top: 20px;\n margin-bottom: 5px !important;\n }\n .charge-payment-success-container {\n display: flex;\n padding: 120px 48px 32px 48px;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n .charge-payment-success-subtext {\n color: #727272;\n text-align: center;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px; /* 128.571% */\n letter-spacing: -0.28px;\n margin:14px 0 !important\n\n }\n .charge-success-payment-button-div {\n display: flex;\n gap: 10px;\n align-items: baseline;\n }\n .charge-success-btn1 {\n display: flex;\n padding: 9px 16px;\n align-items: center;\n gap: 6px;\n border-radius: 1000px;\n border: 1px solid #e0dfe2;\n background: #fff;\n color: #161616;\n }\n\n .charge-payment-success-btn-div {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n }\n\n .charge-payment-success-btn1 {\n cursor: pointer;\n border-radius: 80px;\n border: 1px solid #e0dfe2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #fff;\n }\n\n .charge-payment-success-btn2 {\n border-radius: 80px;\n cursor: pointer;\n border: 1px solid #e0dfe2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #161616;\n color: #fff;\n } \n \n \n #receipt-debit-note {\n font-family: 'Inter', sans-serif;\n font-size: 11px;\n color: #49B182;\n margin-top: 2px;\n }\n\n `\n }\n </style>\n )\n}\n","\nexport function HandleSubmit(event: React.FormEvent, key: string, tranId: string): void {\n event.preventDefault();\n\n const status = key === 'close';\n\n const message = {\n type: 'preview.compiledcheck',\n other: {\n msg: 'Payment success!',\n status,\n data: {\n tran_id: tranId,\n key,\n },\n },\n };\n\n console.log('message:', message);\n window.parent.postMessage(message, '*');\n}\n","import React from 'react'\nimport SuccessMszStyle from './SuccessMszStyle'\nimport { HandleSubmit } from './HandleSubmit'\n\n\ninterface SuccessMszProps {\n onClose: () => void;\n tranId: string;\n isDebitAdjusted?: boolean;\n}\nexport default function SuccessMsz({ onClose, tranId, isDebitAdjusted = false }: SuccessMszProps) {\n\n\n return (\n <>\n <SuccessMszStyle />\n <div className='payment-msg-container'>\n\n <div className=\"charge-payment-success-container\">\n <div className=\"charge-payment-success-tick-div\">\n <div className=\"charge-payment-success-tick\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M6.12669 13.9774C5.97396 14.131 5.76558 14.2167 5.54913 14.2167C5.33267 14.2167 5.1243 14.131 4.97157 13.9774L0.359012 9.36408C-0.119671 8.8854 -0.119671 8.10919 0.359012 7.6314L0.936573 7.05369C1.4154 6.57501 2.19072 6.57501 2.6694 7.05369L5.54913 9.93357L13.3306 2.15198C13.8094 1.6733 14.5855 1.6733 15.0634 2.15198L15.641 2.72969C16.1196 3.20837 16.1196 3.98444 15.641 4.46237L6.12669 13.9774Z\"\n fill=\"#61C699\"\n />\n </svg>\n </div>\n </div>\n <h6 className=\"charge-payment-success-text\">\n Your charge<br />\n was successful\n </h6>\n <h6 className=\"charge-payment-success-subtext\">We’ve processed your charge\n {isDebitAdjusted &&\n <>\n <br/>\n <span\n id=\"receipt-debit-note\"\n className='charge-payment-success-subtext'\n >\n No surcharge — debit card\n </span>\n </>\n }\n </h6>\n <div className=\"charge-success-payment-button-div\">\n <button className=\"charge-success-btn1\" onClick={(e) => HandleSubmit(e, 'print', tranId)} >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n >\n <path\n d=\"M15.7729 8.7272C15.58 8.7272 15.395 8.80383 15.2586 8.94022C15.1222 9.07661 15.0456 9.2616 15.0456 9.45448V12.5185C15.045 13.0559 14.8313 13.5711 14.4513 13.9511C14.0713 14.3311 13.5561 14.5449 13.0187 14.5454H3.98149C3.44409 14.5449 2.92887 14.3311 2.54887 13.9511C2.16887 13.5711 1.95514 13.0559 1.95456 12.5185V9.45448C1.95456 9.2616 1.87794 9.07661 1.74154 8.94022C1.60515 8.80383 1.42017 8.7272 1.22728 8.7272C1.03439 8.7272 0.849407 8.80383 0.713015 8.94022C0.576624 9.07661 0.5 9.2616 0.5 9.45448V12.5185C0.500963 13.4416 0.86807 14.3265 1.52077 14.9792C2.17346 15.6319 3.05844 15.999 3.98149 16H13.0187C13.9417 15.999 14.8267 15.6319 15.4794 14.9792C16.1321 14.3265 16.4992 13.4416 16.5002 12.5185V9.45448C16.5002 9.2616 16.4235 9.07661 16.2871 8.94022C16.1507 8.80383 15.9658 8.7272 15.7729 8.7272Z\"\n fill=\"#161616\"\n />\n <path\n d=\"M4.65059 6.75861L7.7728 9.88082V0.72728C7.7728 0.534394 7.84942 0.349407 7.98581 0.213015C8.1222 0.0766239 8.30719 0 8.50008 0C8.69296 0 8.87795 0.0766239 9.01434 0.213015C9.15073 0.349407 9.22736 0.534394 9.22736 0.72728V9.88082L12.3496 6.75861C12.4867 6.62613 12.6704 6.55283 12.8611 6.55448C13.0518 6.55614 13.2342 6.63263 13.3691 6.76747C13.5039 6.90231 13.5804 7.08472 13.5821 7.27541C13.5837 7.46611 13.5104 7.64982 13.3779 7.78698L9.01427 12.1507C8.87788 12.287 8.69293 12.3636 8.50008 12.3636C8.30723 12.3636 8.12228 12.287 7.98589 12.1507L3.62221 7.78698C3.48973 7.64982 3.41643 7.46611 3.41808 7.27541C3.41974 7.08472 3.49623 6.90231 3.63107 6.76747C3.76592 6.63263 3.94833 6.55614 4.13902 6.55448C4.32971 6.55283 4.51342 6.62613 4.65059 6.75861Z\"\n fill=\"#161616\"\n />\n </svg>\n Print receipt\n </button>\n <button className=\"charge-success-btn1\" onClick={(e) => HandleSubmit(e, 'share', tranId)}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n >\n <g clipPath=\"url(#clip0_12420_50683)\">\n <path\n d=\"M9.30194 4.78664V2.31152C9.30194 2.09629 9.3862 1.88988 9.53631 1.73768C9.68634 1.5855 9.8899 1.5 10.1021 1.5C10.312 1.50089 10.5132 1.58542 10.6622 1.73534L16.2633 7.41595C16.3383 7.49142 16.3978 7.58117 16.4385 7.68001C16.4791 7.77894 16.5 7.885 16.5 7.99212C16.5 8.09924 16.4791 8.20531 16.4385 8.30423C16.3978 8.40307 16.3383 8.49283 16.2633 8.5683L10.6622 14.2489C10.5499 14.3606 10.4076 14.4362 10.2531 14.4663C10.0987 14.4964 9.93887 14.4797 9.79372 14.4182C9.64857 14.3568 9.52455 14.2532 9.43701 14.1206C9.34955 13.9881 9.30258 13.8323 9.30194 13.6727V11.157H8.62181C7.35764 11.1379 6.10443 11.3981 4.94932 11.9193C3.79422 12.4406 2.76481 13.2107 1.93249 14.1759C1.83215 14.3113 1.6926 14.4115 1.53337 14.4624C1.37406 14.5134 1.20306 14.5125 1.04431 14.4599C0.882759 14.4046 0.742811 14.2984 0.644952 14.1568C0.547092 14.0152 0.496363 13.8456 0.500203 13.6727C0.500203 6.27171 6.96548 5.00575 9.30194 4.78664ZM8.62181 9.51777C9.15695 9.51607 9.69162 9.55129 10.2221 9.62327C10.4115 9.6524 10.5844 9.74954 10.7092 9.89699C10.834 10.0444 10.9025 10.2324 10.9023 10.4267V11.717L14.567 7.99212L10.9023 4.26727V5.55758C10.9023 5.77281 10.8179 5.97922 10.6679 6.13141C10.5178 6.28359 10.3143 6.36909 10.1021 6.36909C9.37396 6.36909 3.61282 6.5314 2.36457 11.5871C4.17637 10.2324 6.3708 9.50665 8.62181 9.51777Z\"\n fill=\"#161616\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_12420_50683\">\n <rect\n width=\"16\"\n height=\"16\"\n fill=\"white\"\n transform=\"translate(0.5)\"\n />\n </clipPath>\n </defs>\n </svg>\n Send receipt\n </button>\n </div>\n </div>\n <div className=\"charge-payment-success-btn-div\">\n <button className=\"charge-payment-success-btn1\" onClick={(e) => HandleSubmit(e, 'tran', tranId)}>Go to Transactions</button>\n <button className=\"charge-payment-success-btn2\" onClick={(e) => {\n onClose()\n HandleSubmit(e, 'close', tranId)\n }}>Close</button>\n </div>\n </div>\n </>\n )\n}\n","\n// 'use client'\n// import Script from 'next/script';\n// import { useEffect } from 'react';\n\n// // Add a declaration for the DatacapWebToken to avoid TypeScript errors\n// declare global {\n// interface Window {\n// DatacapWebToken: any; // You can replace 'any' with a more specific type if you know the shape of DatacapWebToken\n// }\n// }\n\n// export default function DataScript() {\n// const src = \"https://token-cert.dcap.com/v1/client\";\n// useEffect(() => {\n// console.log(\"datacap useeffect called\");\n \n// if (!document.querySelector(`script[src=\"${src}\"]`)) {\n// console.log(\"datacap useeffect called an if section called\");\n\n// alert(\"in data\")\n// const script = document.createElement(\"script\");\n// script.src = src;\n// script.onload = () => console.log(\"Script loaded\");\n// script.onerror = (e) => console.error(\"Failed to load script\", e);\n// document.head.appendChild(script);\n// }\n// }, []);\n// return (\n// <>\n// hi</>\n// )\n\n// }\n\n'use client';\n\nimport { useEffect } from 'react';\nimport { datacapUrl } from './baseurl';\n\n// Add a declaration for the DatacapWebToken\ndeclare global {\n interface Window {\n DatacapWebToken: any;\n }\n \n\n interface Window {\n forge: any;\n }\n}\n\nexport default function DataScript() {\n useEffect(() => {\n const src = datacapUrl;\n\n if (typeof window === 'undefined') return;\n\n if (window.DatacapWebToken) {\n // console.log('✅ Datacap already available');\n return;\n }\n\n if (!document.querySelector(`script[src=\"${src}\"]`)) {\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n script.onload = () => {\n // console.log('✅ Datacap script loaded');\n\n if (window.DatacapWebToken) {\n // console.log('✅ DatacapWebToken is ready:', window.DatacapWebToken);\n } else {\n console.warn('⚠️ Script loaded, but DatacapWebToken not found');\n }\n };\n\n script.onerror = (err) => {\n console.error('❌ Failed to load Datacap script', err);\n };\n\n document.head.appendChild(script);\n } else {\n // console.log('ℹ️ Script already in DOM, waiting for Datacap...');\n }\n }, []);\n\nuseEffect(() => {\n const scriptId = 'forge-cdn-script';\n\n // Avoid re-injecting the script\n if (!document.getElementById(scriptId)) {\n const forgeScript = document.createElement('script');\n forgeScript.src = 'https://cdn.jsdelivr.net/npm/node-forge@1.0.0/dist/forge.min.js';\n forgeScript.id = scriptId;\n forgeScript.async = true;\n document.head.appendChild(forgeScript);\n }\n\n // Optional cleanup\n return () => {\n const existingScript = document.getElementById(scriptId);\n if (existingScript) {\n document.head.removeChild(existingScript);\n }\n };\n}, []);\n\n return null; // ⚠️ No need to return <Script />, it's handled manually\n}\n","import React from 'react'\n\nexport default function ErrorCardMszStyle() {\n return (\n <style>\n {\n `\n .card-error .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .card-error .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n .card-error .payment-error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 18px 20px 24px;\n // width: 335px;\n min-height: 250px; /* Fixed height */\n background: #FFFFFF;\n border-radius: 12px;\n position: relative;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n border: 1px solid #e3e3e3;\n justify-content: center;\n text-align: center;\n // margin-top: 50px; /* Adjust this to move the content down */\n margin: 50px auto 0 auto !important;\n }\n\n .card-error .error-icon {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n min-height: 116px;\n z-index: 2;\n }\n\n .card-error .circle {\n width: 50px;\n height: 50px;\n border: 1px solid red;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom:20px\n }\n\n .card-error .circle .fa-times {\n font-size: 30px;\n color: red;\n }\n\n .card-error .error-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n // width: 227px;\n }\n\n .card-error .payment-error-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .card-error .thank-you-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 16px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616 !important;\n opacity: 0.5;\n padding-top:10px\n }\n\n .card-error .error-btn-div{\n padding-top:30px;\n \n }\n .card-error .error-btn-div button{\n border-radius: 0.25em;\n border:none;\n background: initial;\n background-color: #7066e0;\n box-shadow: var(--swal2-confirm-button-box-shadow);\n color: white;\n font-size: 1em;\n padding:10px 17px;\n cursor:pointer;\n }\n `\n }\n </style>\n )}","// import React from 'react'\n// import ErrorCardMszStyle from './ErrorCardMessageStyle';\n// // import SuccessCardMszStyle from './SuccessCardMszStyle'\n\n// type ErrorCardMessage = {\n// onClose: () => void;\n// error : string\n// };\n// const ErrorCardMessage: React.FC<ErrorCardMessage> = ({ onClose , error }) => {\n// return (\n// <>\n// <ErrorCardMszStyle/>\n// <div className='card-error'>\n \n// <div className=\"payment-error-container\">\n// <div className=\"error-icon\">\n// <div className=\"circle\">\n// {/* <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i> */}\n// {/* <i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\"></i> */}\n// <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n// </div>\n// <div className=\"error-text\">\n// <div className=\"payment-error-text\">{error}</div>\n// <div className=\"thank-you-text\">Try again later </div>\n// </div>\n \n// <div className=\"error-btn-div\">\n// <button onClick={onClose}>OK</button>\n// </div>\n// </div>\n// </div>\n// </div>\n// </>\n \n// )\n// }\n// export default ErrorCardMessage\n\n\nimport React from 'react'\nimport ErrorCardMszStyle from './ErrorCardMessageStyle';\n// import SuccessCardMszStyle from './SuccessCardMszStyle'\n\ntype ErrorCardMessage = {\n onClose: () => void;\n error: string;\n autoTrigger?: boolean;\n};\nconst ErrorCardMessage: React.FC<ErrorCardMessage> = ({ onClose, error, autoTrigger = false }) => {\n return (\n <>\n <ErrorCardMszStyle />\n <div className='card-error'>\n\n <div className=\"payment-error-container\">\n <div className=\"error-icon\">\n <div className=\"circle\">\n {/* <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i> */}\n {/* <i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\"></i> */}\n <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n </div>\n <div className=\"error-text\">\n <div className=\"payment-error-text\">{error}</div>\n <div className=\"thank-you-text\">Try again later </div>\n </div>\n\n {\n !autoTrigger && (\n <div className=\"error-btn-div\">\n <button onClick={onClose}>OK</button>\n </div>\n )\n }\n </div>\n </div>\n </div>\n </>\n\n )\n}\nexport default ErrorCardMessage","// socketClient.js\nimport { io } from 'socket.io-client';\nimport { baseUrl } from './baseurl';\n\nconst socket = io(baseUrl, {\n transports: ['websocket'], // Optional: force WebSocket\n withCredentials: false,\n});\n\nexport default socket;\n","import React from 'react'\n\ntype Props = {}\n\nexport default function CardBankRadioStyles({ }: Props) {\n return (\n <style>\n {\n `\n .frac-card-bank-radio-main{\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n align-self: stretch;\n border-radius: 14px;\n border: 1px solid #E0DFE2;\n overflow: hidden;\n }\n\n .frac-card-bank-radio{\n display: flex;\n padding: 12px 16px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n position: relative;\n }\n \n input[type=\"radio\"] {\n accent-color: #000;\n }\n\n .frac-card-title-main{\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .frac-card-label{\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n }\n\n .frac-card-label-text{\n color: #727272;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.24px;\n }\n\n .frac-card-label-amount{\n color: #161616;\n text-align: center;\n font-family: Inter;\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n line-height: 140%;\n letter-spacing: -0.32px;\n }\n\n .frac-payment-type-logo{\n width: 24px;\n height: 24px;\n aspect-ratio: 1/1;\n }\n\n .frac-card-bank-radio-main .frac-card-bank-radio:nth-child(2) {\n border-top: 1px solid #E0DFE2;\n }\n\n .frac-card-bank-radio-main .frac-card-bank-radio:nth-child(3) {\n border-top: 1px solid #E0DFE2;\n }\n\n .frac-card-bank-radio.frac-active {\n background: #F6F6F7;\n }\n\n .frac-saving-badge {\n padding: 1px 7px !important;\n border: 1px solid #9ad7ab;\n border-radius: 999px;\n background: #e8f8ec;\n color: #1e6a34;\n font-size: 10px;\n font-weight: 600;\n line-height: 15px;\n pointer-events: none;\n }\n\n .frac-saving-badge-corner {\n position: absolute;\n top: 8px;\n right: 10px;\n }\n\n .frac-saving-badge-with-radio {\n right: 34px;\n }\n `\n \n }\n </style>\n )\n}","// 'use client';\n\n// import { useEffect } from 'react';\n// import { fractalGatewayUrl } from './baseurl';\n\n// export default function FractalTokenizerScript() {\n// useEffect(() => {\n// const src = `${fractalGatewayUrl}tokenizer/static/js/fractal_tokenizer.js`;\n\n// if (document.querySelector(`script[src=\"${src}\"]`)) return;\n\n// const script = document.createElement('script');\n// script.src = src;\n// script.async = true;\n\n// script.onload = () => {\n// try {\n// // Grab class from global scope\n// // eslint-disable-next-line no-eval\n// const TokenizerClass = eval('FractalTokenizer');\n\n// if (TokenizerClass) {\n// (window as any).FractalTokenizer = TokenizerClass;\n// }\n// } catch (err) {\n// console.error('FractalTokenizer not accessible:', err);\n// }\n// };\n\n// document.head.appendChild(script);\n// }, []);\n\n// return null;\n// }\n\n\n'use client';\n\nimport { useEffect } from 'react';\nimport { fractalGatewayUrl } from './baseurl';\n\nexport default function FractalTokenizerScript({ onLoad }: { onLoad?: () => void }) {\n useEffect(() => {\n const src = `${fractalGatewayUrl}tokenizer/static/js/fractal_tokenizer.js`;\n\n // If already available → trigger immediately\n if ((window as any).FractalTokenizer) {\n onLoad?.();\n return;\n }\n\n // Prevent duplicate script injection\n const existing = document.querySelector(`script[src=\"${src}\"]`) as HTMLScriptElement;\n\n if (existing) {\n existing.addEventListener('load', () => onLoad?.());\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n script.onload = () => {\n try {\n if (typeof FractalTokenizer !== \"undefined\") {\n (window as any).FractalTokenizer = FractalTokenizer;\n onLoad?.();\n } else {\n console.error(\"FractalTokenizer not defined in global scope\");\n }\n } catch (err) {\n console.error(err);\n }\n };\n\n document.head.appendChild(script);\n }, []);\n\n return null;\n}","'use client'\nimport { useEffect, useRef } from \"react\";\n\n/** Backend-minted tokenizer session — the shape both createToken and lookupSurcharge consume. */\nexport interface TokenizerSession {\n session_key: string;\n public_key_pem: string;\n}\n\n/** Inputs for a surcharge lookup. `amount` is in the smallest currency unit (cents). */\nexport interface SurchargeLookupOptions {\n amount: number;\n /** Reserved for the tokenizer's Phase-2 state-based rules; omit if unavailable. */\n merchant_location_zip?: string;\n cardholder_billing_zip?: string;\n}\n\n/** Surcharge assessment from the tokenizer's onSurchargeLookup callback. */\nexport interface SurchargeLookupResult {\n card_brand?: string;\n card_issue_type?: string;\n surcharge_allowed?: boolean;\n max_surcharge_percent?: number;\n max_surcharge_amount?: number;\n}\n\ninterface Props {\n fractalStyles: any;\n tokenizerRef: React.MutableRefObject<any>;\n isAddCard?: boolean;\n isSky?: boolean;\n /**\n * Opts this instance into surcharge lookups. Safe to enable after mount (e.g. once the\n * merchant's surcharge-program flag resolves): if the PAN is already complete, the lookup\n * runs immediately via the tokenizer's isSurchargeLookupReady().\n */\n surchargeEnabled?: boolean;\n /** Mints a tokenized session via the Fractal backend. Resolve null to abort the lookup. */\n createSurchargeSession?: () => Promise<TokenizerSession | null>;\n /** Latest lookup inputs, read lazily at lookup time (avoids stale-closure amounts/ZIPs). */\n getSurchargeOptions?: () => SurchargeLookupOptions;\n /** Surcharge assessment, or null when the cardholder edits the PAN (prior result invalid). */\n onSurchargeResult?: (result: SurchargeLookupResult | null) => void;\n}\n\nconst FractalFields = ({\n fractalStyles,\n tokenizerRef,\n isAddCard = false,\n isSky = false,\n surchargeEnabled = false,\n createSurchargeSession,\n getSurchargeOptions,\n onSurchargeResult,\n}: Props) => {\n const instanceRef = useRef<any>(null);\n\n // The tokenizer's surcharge callbacks are registered once at mount but must always\n // see the latest props, so we mirror them into refs that update every render.\n const runLookupRef = useRef<(() => void) | null>(null);\n const surchargeEnabledRef = useRef(surchargeEnabled);\n const createSessionRef = useRef(createSurchargeSession);\n const getOptionsRef = useRef(getSurchargeOptions);\n const onResultRef = useRef(onSurchargeResult);\n surchargeEnabledRef.current = surchargeEnabled;\n createSessionRef.current = createSurchargeSession;\n getOptionsRef.current = getSurchargeOptions;\n onResultRef.current = onSurchargeResult;\n\n useEffect(() => {\n if (!(window as any).FractalTokenizer) return;\n\n const instance = new (window as any).FractalTokenizer({\n styles: fractalStyles,\n });\n\n instanceRef.current = instance;\n tokenizerRef.current = instance;\n\n instance.mountField(\"card_number\", \"card_number\");\n instance.mountField(\"exp_month\", \"exp_month\");\n instance.mountField(\"exp_year\", \"exp_year\");\n instance.mountField(\"cvv\", \"cvv\");\n\n console.log(\"Fractal fields mounted\");\n\n // --- Surcharge lookup -----------------------------------------------------------------\n // The tokenizer iframe fires onSurchargeLookupReady the moment a complete, valid PAN is\n // entered; we respond by minting a session and running the lookup, then surface the\n // assessment via onSurchargeResult (null when the cardholder edits the PAN). No-op unless\n // the parent opts in with surchargeEnabled + the callbacks.\n //\n // Caveat: readiness is driven by the iframe's own `input` event, so a PAN placed by\n // browser autofill (which may not dispatch `input` cross-origin) won't trigger a lookup.\n // The backend still applies the debit adjustment at charge time, so this only affects the\n // pre-charge preview — never what's actually charged.\n const runLookup = async () => {\n if (!surchargeEnabledRef.current) return;\n try {\n const session = await createSessionRef.current?.();\n if (!session) return;\n instance.lookupSurcharge?.(session, getOptionsRef.current?.() ?? {});\n } catch (err) {\n console.error(\"Surcharge lookup failed\", err);\n }\n };\n runLookupRef.current = runLookup;\n\n instance.onSurchargeLookupReady?.(() => runLookup());\n instance.onSurchargeLookup?.((result: SurchargeLookupResult | null) => onResultRef.current?.(result));\n\n return () => {\n try {\n instance.destroy?.();\n } catch (err) { }\n\n tokenizerRef.current = null;\n };\n }, []);\n\n // Covers surcharging being enabled mid-transaction: if the PAN was already\n // complete before the program flag resolved, the ready callback has already\n // fired, so kick off the lookup now.\n useEffect(() => {\n const instance = instanceRef.current;\n if (surchargeEnabled && instance?.isSurchargeLookupReady?.()) {\n runLookupRef.current?.();\n }\n }, [surchargeEnabled]);\n\n return (\n <>\n {\n isAddCard ? (\n <>\n <div\n id=\"card_number\"\n className=\"form-control card-number-new\"\n style={{ height: \"46px\", display: 'inline-block' }}\n />\n <div className=\"card-dtl\">\n <div className=\"exp-cvc-container exp-cvc-container-wrap\" style={{ margin: 0 }}>\n <div className=\"form-group\" style={{ marginTop: 0 }}>\n <label htmlFor=\"expMonth\">MM</label>\n <div\n id=\"exp_month\"\n className=\"form-control required card-cvv-in\"\n\n />\n </div>\n\n <div className=\"form-group\" style={{ marginTop: 0 }}>\n <label htmlFor=\"expYear\">YY</label>\n <div\n id=\"exp_year\"\n className=\"form-control required card-cvv-in\"\n\n />\n </div>\n\n <div className=\"form-group\" style={{ marginTop: 0 }}>\n <label htmlFor=\"cvc\">CVC</label>\n <div\n id=\"cvv\"\n className=\"form-control card-cvv-in required\"\n\n />\n </div>\n </div>\n </div>\n </>) : (\n <>\n\n <div\n id=\"card_number\"\n className=\"form-control card-number-new\"\n style={{ height: `${isSky ? \"36px\" : \"46px\"}` }}\n />\n\n <div className=\"card-crdi card-expiry-new\">\n <div className=\"exp-date-year-container\">\n <div className=\"exp-date form-group input-main-wrap-frac\">\n <div\n id=\"exp_month\"\n className=\"form-control required card-cvv-in\"\n style={{ height: \"46px\", display: 'block', minHeight: \"46px\" }}\n />\n </div>\n\n <div className=\"exp-year form-group input-main-wrap-frac\">\n <div\n id=\"exp_year\"\n className=\"form-control required card-cvv-in\"\n style={{ height: \"46px\", display: 'block', minHeight: \"46px\" }}\n />\n </div>\n\n <div className=\"security-digit form-group input-main-wrap-frac\">\n <div\n id=\"cvv\"\n className=\"form-control card-cvv-in required\"\n style={{ height: \"46px\", display: 'block', minHeight: \"46px\" }}\n />\n </div>\n </div>\n </div>\n </>\n )\n }\n </>\n );\n};\n\nexport default FractalFields;\n","// import { useEffect } from \"react\";\n// import { datacapUrl } from \"../baseurl\";\n\n// let scriptLoaded = false;\n\n// export const DataCapScriptLoader = () => {\n// useEffect(() => {\n// // console.log(\"🔵 DataCapScriptLoader mounted\");\n// // console.log(\"🔵 scriptLoaded flag:\", scriptLoaded);\n\n// if (scriptLoaded) {\n// // console.log(\"🟡 Script already marked as loaded. Skipping injection.\");\n// return;\n// }\n\n// const existingScript = document.querySelector(\n// `script[src=\"${datacapUrl}/hosted\"]`\n// );\n\n// console.log(\"🔵 existingScript found:\", !!existingScript);\n\n// if (!existingScript) {\n// // console.log(\"🟢 Injecting DataCap hosted script...\");\n\n// const script = document.createElement(\"script\");\n// script.src = `${datacapUrl}/hosted`;\n// script.async = true;\n\n// script.onload = () => {\n// console.log(\"✅ DataCap script loaded successfully\");\n// scriptLoaded = true;\n// // console.log(\"🔵 scriptLoaded flag updated to:\", scriptLoaded);\n// // console.log(\"🔵 window.dcap:\", (window as any).DatacapHostedWebToken);\n// };\n\n// script.onerror = (err) => {\n// console.error(\"❌ DataCap script failed to load\", err);\n// };\n\n// document.head.appendChild(script);\n// } else {\n// // console.log(\"🟡 Script already exists in DOM.\");\n// scriptLoaded = true;\n// // console.log(\"🔵 scriptLoaded flag updated to:\", scriptLoaded);\n// // console.log(\"🔵 window.dcap:\", (window as any).dcap);\n// }\n// }, []);\n\n// return null;\n// };\n\n\n'use client';\n\nimport { useEffect } from 'react';\nimport { datacapUrl } from '../baseurl';\n\ndeclare global {\n interface Window {\n DatacapHostedWebToken?: any;\n __DATACAP_SCRIPT_LOADING__?: boolean;\n __DATACAP_SCRIPT_LOADED__?: boolean;\n }\n}\n\nexport const DataCapScriptLoader = ({\n onReady,\n onError,\n}: {\n onReady?: () => void;\n onError?: (err: any) => void;\n}) => {\n useEffect(() => {\n const src = `${datacapUrl}/hosted`;\n\n // Already loaded\n if (\n window.__DATACAP_SCRIPT_LOADED__ &&\n window.DatacapHostedWebToken\n ) {\n onReady?.();\n return;\n }\n\n // Already loading\n if (window.__DATACAP_SCRIPT_LOADING__) {\n const interval = setInterval(() => {\n if (window.DatacapHostedWebToken) {\n clearInterval(interval);\n onReady?.();\n }\n }, 100);\n\n return () => clearInterval(interval);\n }\n\n window.__DATACAP_SCRIPT_LOADING__ = true;\n\n const existingScript = document.querySelector(\n `script[src=\"${src}\"]`\n ) as HTMLScriptElement | null;\n\n if (existingScript) {\n waitForSDK();\n return;\n }\n\n const script = document.createElement('script');\n\n script.src = src;\n script.async = true;\n\n script.onload = () => {\n waitForSDK();\n };\n\n script.onerror = (err) => {\n console.error('Datacap script failed');\n\n window.__DATACAP_SCRIPT_LOADING__ = false;\n\n onError?.(err);\n };\n\n document.head.appendChild(script);\n\n function waitForSDK() {\n let attempts = 0;\n\n const interval = setInterval(() => {\n attempts++;\n\n if (window.DatacapHostedWebToken) {\n clearInterval(interval);\n\n window.__DATACAP_SCRIPT_LOADING__ = false;\n window.__DATACAP_SCRIPT_LOADED__ = true;\n\n console.log('✅ Datacap SDK Ready');\n\n onReady?.();\n }\n\n if (attempts > 100) {\n clearInterval(interval);\n\n window.__DATACAP_SCRIPT_LOADING__ = false;\n\n onError?.('SDK bootstrap timeout');\n }\n }, 100);\n }\n }, []);\n\n return null;\n};","'use client'\n// import React, { useEffect, useRef } from \"react\";\n\n// const customCSS = `\n// body { \n// margin: 0; \n// font-family: 'IBM Plex Mono', monospace !important; \n// }\n\n// .card-data {\n// display: flex;\n// flex-direction: column;\n// gap: 12px;\n// padding: 6px;\n// }\n\n// input {\n// height: 40px !important;\n// width: 100% !important;\n// border: 1px solid #d1d5db !important;\n// border-radius: 8px !important;\n// padding: 10px !important;\n// font-size: 14px !important;\n// }\n\n// input:focus {\n// border-color: #2563eb !important;\n// outline: none !important;\n// }\n// `;\n\n// export const DataCapFields = ({ isOpen, tokenKey }: any) => {\n// const iframeId = \"datacap-iframe\";\n// const resolverRef = useRef<any>(null);\n\n// useEffect(() => {\n// if (!isOpen || !tokenKey) return;\n\n// const initialize = async () => {\n// // 1️⃣ Wait until SDK is ready\n// const waitForSDK = () =>\n// new Promise<void>((resolve) => {\n// const interval = setInterval(() => {\n// if ((window as any).DatacapHostedWebToken) {\n// clearInterval(interval);\n// resolve();\n// }\n// }, 100);\n// });\n\n// await waitForSDK();\n\n// // 2️⃣ Wait until iframe exists in DOM\n// const waitForIframe = () =>\n// new Promise<void>((resolve) => {\n// const interval = setInterval(() => {\n// const iframe = document.getElementById(iframeId);\n// if (iframe) {\n// clearInterval(interval);\n// resolve();\n// }\n// }, 100);\n// });\n\n// await waitForIframe();\n\n// console.log(\"🟢 Iframe found. Initializing Datacap...\");\n\n// const sdk = (window as any).DatacapHostedWebToken;\n\n// sdk.init(\n// tokenKey,\n// iframeId,\n// (response: any) => {\n\n// if (!resolverRef.current) return;\n\n// if (response?.Error || response?.Errors) {\n// console.log(\"📦 Datacap response:\", response);\n// resolverRef.current.reject(response.Error || response.Errors);\n// } else {\n// resolverRef.current.resolve(response);\n// }\n\n// resolverRef.current = null;\n// },\n// customCSS\n// );\n// };\n\n// initialize();\n// }, [isOpen, tokenKey]);\n\n// // Promise-based request\n// (window as any).requestDcToken = () => {\n// return new Promise((resolve, reject) => {\n// resolverRef.current = { resolve, reject };\n// (window as any).DatacapHostedWebToken.requestToken();\n// });\n// };\n\n// return (\n// <iframe\n// id={iframeId}\n// style={{ width: \"100%\", height: \"300px\", border: \"none\" }}\n// />\n// );\n// };\n\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nconst baseCSS = `\n body { \n margin: 0; \n font-family: 'IBM Plex Mono', monospace !important; \n }\n\n \n\n input {\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n margin-bottom: 10px;\n box-sizing: border-box;\n }\n\n input:focus {\n border-color: #2563eb !important;\n outline: none !important;\n }\n select {\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n\n transition: border-color .15s ease-in-out,\n box-shadow .15s ease-in-out;\n margin-bottom: 10px;\n}\n select:focus {\n border-color: #2563eb !important;\n outline: none !important;\n }\n label {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 12px !important;\n letter-spacing: 1.1px !important;\n color: #867c94 !important;\n font-weight: 500 !important;\n line-height: normal;\n margin: 0 0 2px 0 !important;\n text-align: start !important;\n display: block !important;\n text-transform: uppercase !important;\n}\n input.card-data.card-data-cvv{\n margin-bottom: 0px;\n }\n\n right-col{\n width : 10px !important;\n }\n\n `;\n\nexport const DataCapFields = ({\n isOpen,\n tokenKey,\n setLoader,\n isAddCard,\n isEmbedded,\n customCSS: extraCss,\n height,\n onError\n}: any) => {\n const iframeId = \"datacap-iframe\";\n const resolverRef = useRef<any>(null);\n const [iframeReady, setIframeReady] = useState(false);\n const [mountKey, setMountKey] = useState(0);\n const initGenRef = useRef(0);\n const initTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n let customCSS = baseCSS;\n useEffect(() => {\n if (!isOpen || !tokenKey) return;\n if (isAddCard) {\n customCSS += `\n label {\n display: block !important;\n text-align: left !important;\n font-weight: 400 !important;\n text-transform: uppercase;\n color: #35254D !important;\n margin-bottom: 6px;\n}\n input::placeholder {\n font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;\n color: #9ca3af !important;\n font-weight: 400 !important; \n font-size: 14px !important;\n}\n \n `\n }\n\n if (isEmbedded) {\n customCSS += `\n \n input {\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1;\n }\n \n select {\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1);\n }\n `\n }\n\n if (extraCss) {\n customCSS += extraCss\n }\n\n // console.log(customCSS, \"customCSS1555\");\n\n\n // console.log(customCSS,\"customcss\");\n\n\n // Each open cycle gets its own generation id and a brand-new <iframe>\n // DOM node (via the key bump below). Datacap's hosted-fields SDK does\n // not reliably reinitialize against an iframe it already initialized\n // once (e.g. after the modal is closed and reopened) — reusing the same\n // node leaves the form stuck \"loading\" forever. A fresh node forces the\n // SDK to treat every open as the first one.\n const myGen = ++initGenRef.current;\n setMountKey(myGen);\n\n const initialize = async () => {\n setLoader?.(true);\n setIframeReady(false);\n\n const waitForSDK = () =>\n new Promise<void>((resolve, reject) => {\n let attempts = 0;\n\n const interval = setInterval(() => {\n attempts++;\n\n if ((window as any).DatacapHostedWebToken) {\n clearInterval(interval);\n\n console.log(\"✅ Datacap SDK Ready\");\n\n resolve();\n }\n\n if (attempts > 100) {\n clearInterval(interval);\n\n reject(\"Datacap SDK not loaded\");\n }\n }, 100);\n });\n\n const waitForIframe = () =>\n new Promise<void>((resolve, reject) => {\n let attempts = 0;\n\n const interval = setInterval(() => {\n attempts++;\n\n if (document.getElementById(iframeId)) {\n clearInterval(interval);\n resolve();\n }\n\n if (attempts > 100) {\n clearInterval(interval);\n reject(\"Datacap iframe not found\");\n }\n }, 50);\n });\n\n try {\n await waitForSDK();\n await waitForIframe();\n } catch (err) {\n if (initGenRef.current !== myGen) return;\n\n console.error(\"❌ Datacap failed to become ready:\", err);\n\n setLoader?.(false);\n onError?.(\"Unable to load payment form. Please try again.\");\n return;\n }\n\n // A newer open/close cycle superseded this one while we were waiting.\n if (initGenRef.current !== myGen) return;\n\n const sdk = (window as any).DatacapHostedWebToken;\n\n // This watchdog only guards whether the iframe itself renders — it is\n // cleared by the iframe's onLoad handler below. It is NOT a signal for\n // \"user submitted and got a token back\", so it must not wait on the\n // sdk.init() response callback, which only fires after requestToken()\n // is called (i.e. on form submit, which can happen much later).\n initTimeoutRef.current = setTimeout(() => {\n if (initGenRef.current !== myGen) return;\n\n console.error(\"❌ Datacap iframe load timeout\");\n\n initTimeoutRef.current = null;\n setLoader?.(false);\n onError?.(\"Unable to load payment form. Please try again.\");\n\n resolverRef.current?.reject?.(\n \"Unable to load payment form\"\n );\n }, 15000);\n\n sdk.init(\n tokenKey,\n iframeId,\n (response: any) => {\n\n if (initGenRef.current !== myGen) return;\n\n setLoader?.(false);\n\n if (!resolverRef.current) return;\n\n if (response?.Error || response?.Errors) {\n resolverRef.current.reject(response.Error || response.Errors);\n } else {\n resolverRef.current.resolve(response);\n }\n\n resolverRef.current = null;\n },\n customCSS\n );\n };\n\n initialize();\n\n return () => {\n resolverRef.current = null;\n };\n\n }, [isOpen, tokenKey]);\n\n // useEffect(() => {\n // (window as any).requestDcToken = () => {\n // return new Promise((resolve, reject) => {\n // setLoader?.(true);\n // resolverRef.current = { resolve, reject };\n // });\n // };\n\n // return () => {\n // delete (window as any).requestDcToken;\n // };\n // }, []);\n\n useEffect(() => {\n const uniqueId = Math.random();\n\n const fn = () => {\n // console.log(\"🔥 FUNCTION CALLED, ID:\", uniqueId);\n\n return new Promise((resolve, reject) => {\n // console.log(\"✅ Promise executor running\");\n\n setLoader?.(true);\n resolverRef.current = { resolve, reject };\n\n // 🔥 IMPORTANT: trigger Datacap 11-05-26\n // (window as any).DatacapHostedWebToken.requestToken();\n\n if (!(window as any).DatacapHostedWebToken) {\n reject(\"Datacap SDK unavailable\");\n return;\n }\n\n try {\n (window as any).DatacapHostedWebToken.requestToken();\n } catch (err) {\n reject(err);\n }\n });\n };\n\n (window as any).requestDcToken = fn;\n\n // console.log(\"✅ Function registered with ID:\", uniqueId);\n\n return () => {\n delete (window as any).requestDcToken;\n };\n }, []);\n\n // console.log(setLoader, \"loadingIframe\");\n\n return (\n // <iframe\n // id={iframeId}\n // onLoad={() => {\n // console.log(\"🟢 Iframe visually loaded\");\n // setIframeReady(true);\n // setLoader?.(false);\n // }}\n // style={{\n // width: \"100%\",\n // height: `${height || \"250px\"}`,\n // border: \"none\",\n // opacity: iframeReady ? 1 : 0,\n // transition: \"opacity 0.3s ease\",\n // }}\n // />\n\n <iframe\n key={mountKey}\n id={iframeId}\n onLoad={() => {\n console.log(\"🟢 Iframe visually loaded\");\n\n if (initTimeoutRef.current) {\n clearTimeout(initTimeoutRef.current);\n initTimeoutRef.current = null;\n }\n\n setIframeReady(true);\n\n setLoader?.(false);\n }}\n onError={() => {\n console.error(\"❌ iframe failed\");\n\n if (initTimeoutRef.current) {\n clearTimeout(initTimeoutRef.current);\n initTimeoutRef.current = null;\n }\n\n setLoader?.(false);\n onError?.(\"Payment form failed to load\");\n\n resolverRef.current?.reject?.(\n \"Payment form failed to load\"\n );\n }}\n style={{\n width: \"100%\",\n height: `${height || \"250px\"}`,\n border: \"none\",\n opacity: iframeReady ? 1 : 0,\n transition: \"opacity 0.3s ease\",\n }}\n />\n\n );\n};","import React from \"react\";\n\n/**\n * Shared styles for the redesigned Fractal payment widgets (Figma \"Modal / Surcharge\").\n * Two-panel layout: left = order summary, right = payment method / form.\n * Used by both GetPaymentPage and PreAuthPaymentPage so they stay visually consistent.\n * All classes are prefixed `fps-` (fractal payment styles) to avoid clashing with the\n * legacy widget styles in Chargewidgetstyles.\n */\nexport default function FractalWidgetStyles() {\n return (\n <style>\n {`\n .fps-modal {\n --fps-border: #e5e0ef;\n --fps-text-tertiary: #867c94;\n --fps-text-secondary: #484a4d;\n --fps-text-primary: #221730;\n --fps-bg-page: #f9f5ff;\n --fps-brand: #7b5fb0;\n --fps-dark: #221730;\n --fps-green-text: #1b4a33;\n --fps-green-bg: rgba(97, 198, 153, 0.08);\n\n display: flex;\n align-items: stretch;\n width: 100%;\n background: #fff;\n border-radius: 12px;\n overflow: hidden;\n font-family: 'Inter', sans-serif;\n color: var(--fps-text-primary);\n max-height: 88vh;\n box-sizing: border-box;\n }\n .fps-modal *, .fps-modal *::before, .fps-modal *::after { box-sizing: border-box; }\n\n /* ---------- Left: order summary ---------- */\n .fps-summary {\n width: 301px;\n flex-shrink: 0;\n border-right: 1px solid var(--fps-border);\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 24px;\n overflow-y: auto;\n }\n .fps-logo { height: 43px; display: flex; align-items: center; }\n .fps-logo img { max-height: 43px; max-width: 160px; object-fit: contain; }\n .fps-divider { width: 100%; height: 1px; background: var(--fps-border); flex-shrink: 0; }\n .fps-invoice { font-size: 14px; font-weight: 500; color: var(--fps-text-tertiary); text-align: start !important; }\n .fps-lines { display: flex; flex-direction: column; gap: 8px; width: 100%; font-size: 14px; font-weight: 500; text-align: start !important; }\n .fps-line { display: flex; align-items: center; justify-content: space-between; }\n .fps-line .fps-lbl { color: var(--fps-text-tertiary); }\n .fps-line .fps-val { color: var(--fps-text-primary); }\n .fps-line.fps-muted .fps-val { color: var(--fps-text-tertiary); }\n .fps-total-label { font-size: 14px; font-weight: 500; color: var(--fps-text-tertiary); margin-bottom: 4px; }\n .fps-total { font-size: 32px; font-weight: 700; letter-spacing: -0.32px; color: var(--fps-text-primary); line-height: 1.1; }\n .fps-cards { display: flex; gap: 6px; align-items: center; }\n .fps-cards img { height: 22px; width: 33px; object-fit: contain; border-radius: 4px; }\n .fps-note {\n background: var(--fps-green-bg);\n border-radius: 8px;\n padding: 9px 12px;\n font-size: 11px;\n line-height: 16px;\n color: var(--fps-green-text);\n text-align: start !important;\n }\n .fps-note b { font-weight: 700; }\n .fps-note-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n .fps-note-label { display: flex; align-items: center; gap: 4px; font-weight: 500; }\n .fps-note-label svg { display: block; flex-shrink: 0; }\n .fps-note-amount { font-weight: 700; white-space: nowrap; }\n .fps-secure {\n margin-top: auto;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n color: var(--fps-text-tertiary);\n }\n .fps-secure img { height: 16px; width: auto; object-fit: contain; }\n .fps-total-div { text-align: start !important; }\n\n /* ---------- Right: content ---------- */\n .fps-content {\n flex: 1 0 0;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 24px;\n overflow: hidden;\n }\n .fps-head { display: flex; align-items: center; justify-content: space-between; width: 100%; }\n .fps-head-left { display: flex; align-items: center; gap: 8px; }\n .fps-back {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 9px 16px;\n border: 1px solid #e0dfe2;\n border-radius: 1000px;\n background: #fff;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n cursor: pointer;\n }\n .fps-back svg { display: block; }\n .fps-title { font-size: 18px; font-weight: 600; letter-spacing: -0.18px; color: var(--fps-text-primary); margin: 0; }\n .fps-close {\n width: 32px; height: 32px;\n display: flex; align-items: center; justify-content: center;\n border: none; background: none; cursor: pointer;\n color: var(--fps-text-tertiary); font-size: 18px; line-height: 1; border-radius: 16px;\n }\n .fps-close:hover { color: var(--fps-text-primary); }\n .fps-section-label {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 12px;\n letter-spacing: 1.1px;\n text-transform: uppercase;\n color: var(--fps-text-tertiary);\n font-weight: 500;\n line-height: normal;\n margin: 0;\n text-align: start !important;\n }\n\n /* scrollable middle region between header and footer */\n .fps-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n padding-right: 4px;\n }\n .fps-scroll::-webkit-scrollbar { width: 3px; }\n .fps-scroll::-webkit-scrollbar-thumb { background: var(--fps-brand); border-radius: 3px; }\n\n /* ---------- Card/Bank toggle ---------- */\n .fps-toggle {\n display: flex;\n background: var(--fps-bg-page);\n border: 1px solid var(--fps-border);\n border-radius: 9999px;\n padding: 4px;\n width: 100%;\n }\n .fps-toggle button {\n flex: 1 0 0;\n border: none;\n background: transparent;\n padding: 8px;\n border-radius: 9999px;\n font-size: 13px;\n font-weight: 500;\n color: var(--fps-text-secondary);\n cursor: pointer;\n font-family: 'Inter', sans-serif;\n transition: background 0.15s ease, color 0.15s ease;\n }\n .fps-toggle button.fps-active { background: var(--fps-dark); color: #fff; }\n\n /* ---------- Form fields ---------- */\n .fps-field { display: flex; flex-direction: column; gap: 8px; width: 100%; }\n .fps-input {\n height: 40px;\n border: 1px solid var(--fps-border);\n border-radius: 8px;\n padding: 0 16px;\n font-size: 14px;\n letter-spacing: -0.14px;\n color: var(--fps-text-primary);\n background: #fff;\n width: 100%;\n font-family: 'Inter', sans-serif;\n }\n .fps-input::placeholder { color: #a39bb0; }\n .fps-input:focus { outline: none; border-color: var(--fps-brand); }\n .fps-input:disabled { background: var(--fps-bg-page); color: var(--fps-text-tertiary); }\n select.fps-input {\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23867c94' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");\n background-repeat: no-repeat;\n background-position: right 12px center;\n padding-right: 40px;\n }\n\n /* Tokenizer (card number / exp / cvc): the inputs render inside iframes,\n so we style the wrapper divs we own to match the Figma input design.\n Card number sits on top (rounded top); MM / YY / CVV share one bordered\n container below (rounded bottom) with thin dividers between cells. */\n .fps-tokenizer { width: 100%; }\n .fps-tokenizer .form-control {\n border: 1px solid var(--fps-border) !important;\n border-radius: 8px;\n background: #fff !important;\n color: var(--fps-text-primary);\n font-family: 'Inter', sans-serif;\n box-shadow: none !important;\n }\n .fps-tokenizer #card_number,\n .fps-tokenizer .card-number-new {\n height: 44px !important;\n min-height: 44px !important;\n display: flex !important;\n align-items: center;\n padding: 0 16px !important;\n border: 1px solid var(--fps-border) !important;\n border-bottom: 1px solid var(--fps-border) !important;\n border-radius: 8px 8px 0 0 !important;\n background: #fff !important;\n overflow: hidden;\n }\n /* iframes carry the actual inputs — never let their default border draw a line */\n .fps-tokenizer iframe { border: 0 !important; display: block; width: 100% !important; min-width: 0 !important; height: 100% !important; }\n .dc-tokenizer iframe { height: 250px !important; }\n .fps-tokenizer .card-crdi,\n .fps-tokenizer .card-expiry-new {\n border: 1px solid var(--fps-border) !important;\n border-top: none !important;\n border-radius: 0 0 8px 8px !important;\n overflow: hidden;\n background: #fff !important;\n }\n /* Keep MM / YY / CVV on a single row (override the legacy flex-wrap:wrap)\n and let the cells shrink (iframes default to 300px intrinsic width). */\n .fps-tokenizer .exp-date-year-container {\n display: flex !important;\n flex-wrap: nowrap !important;\n width: 100%;\n align-items: stretch;\n }\n .fps-tokenizer .exp-date-year-container .form-group { padding: 0 !important; margin: 0 !important; min-width: 0 !important; }\n /* Figma layout: MM + YY tight on the LEFT half, CVV on the RIGHT half with a\n centered divider. margin-left:auto pushes the 50%-wide CVV cell to the right. */\n .fps-tokenizer .exp-date-year-container .exp-date { flex: 0 0 50px !important; }\n .fps-tokenizer .exp-date-year-container .exp-year { flex: 0 0 58px !important; position: relative; }\n /* custom \"/\" separator between MM and YY (the fields are separate iframes) */\n .fps-tokenizer .exp-date-year-container .exp-year::before {\n content: \"/\";\n position: absolute;\n left: -7px;\n top: 0;\n height: 44px;\n display: flex;\n align-items: center;\n font-family: 'Inter', sans-serif;\n font-size: 14px;\n color: var(--fps-text-tertiary);\n pointer-events: none;\n z-index: 2;\n }\n .fps-tokenizer .exp-date-year-container .security-digit {\n flex: 0 0 50% !important;\n margin-left: auto !important;\n min-width: 0 !important;\n border-left: 1px solid var(--fps-border) !important;\n }\n .fps-tokenizer #exp_month,\n .fps-tokenizer #exp_year,\n .fps-tokenizer #cvv,\n .fps-tokenizer .card-cvv-in {\n height: 44px !important;\n min-height: 44px !important;\n width: 100% !important;\n min-width: 0 !important;\n display: flex !important;\n align-items: center;\n border: none !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n background: #fff !important;\n overflow: hidden;\n }\n .fps-tokenizer #exp_month { padding: 0 2px 0 16px !important; }\n .fps-tokenizer #exp_year { padding: 0 2px 0 2px !important; }\n .fps-tokenizer #cvv { padding: 0 16px !important; }\n .fps-tokenizer .error-span { margin-top: 4px; }\n\n /* ---------- Saved methods list ---------- */\n .fps-list {\n display: flex;\n flex-direction: column;\n width: 100%;\n border: 1px solid var(--fps-border);\n border-radius: 8px;\n overflow: hidden;\n }\n .fps-list-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 11px;\n border-bottom: 1px solid var(--fps-border);\n gap: 12px;\n cursor: pointer;\n }\n .fps-list-row:last-child { border-bottom: none; }\n .fps-list-row.fps-disabled { opacity: 0.5; cursor: not-allowed; }\n .fps-list-left { display: flex; align-items: center; gap: 12px; min-width: 0; }\n .fps-list-right { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }\n .fps-radio {\n width: 16px; height: 16px;\n border-radius: 50%;\n border: 1.2px solid var(--fps-border);\n background: var(--fps-bg-page);\n flex-shrink: 0;\n position: relative;\n }\n .fps-radio.fps-checked { border-color: var(--fps-brand); }\n .fps-radio.fps-checked::after {\n content: \"\";\n position: absolute;\n width: 10px; height: 10px;\n border-radius: 50%;\n background: var(--fps-brand);\n top: 50%; left: 50%;\n transform: translate(-50%, -50%);\n }\n .fps-pm-meta { display: flex; align-items: center; gap: 12px; }\n .fps-pm-last4 { font-size: 14px; font-weight: 500; color: var(--fps-text-primary); letter-spacing: -0.28px; }\n .fps-pm-exp { font-size: 14px; font-weight: 500; color: var(--fps-text-tertiary); letter-spacing: -0.28px; }\n .fps-badge {\n border: 1px solid var(--fps-border);\n background: var(--fps-bg-page);\n border-radius: 4px;\n padding: 2px 4px;\n font-size: 11px;\n font-weight: 600;\n color: var(--fps-text-tertiary);\n letter-spacing: -0.22px;\n text-transform: uppercase;\n white-space: nowrap;\n }\n .fps-brand-logo { height: 20px; width: 30px; object-fit: contain; }\n .fps-remove { cursor: pointer; display: flex; align-items: center; }\n .fps-remove img { width: 14px; height: 14px; }\n\n /* ---------- Buttons ---------- */\n .fps-other-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n height: 44px;\n border: 1px solid var(--fps-border);\n border-radius: 9999px;\n background: #fff;\n font-size: 14px;\n font-weight: 600;\n color: var(--fps-text-primary);\n cursor: pointer;\n width: 100%;\n font-family: 'Inter', sans-serif;\n }\n .fps-other-btn img { width: 20px; height: 20px; object-fit: contain; }\n\n .fps-footer {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n margin-top: auto;\n }\n .fps-auth { font-size: 11px; font-weight: 500; color: var(--fps-text-tertiary); line-height: 1.45; margin: 0; text-align: start !important; }\n .fps-auth u, .fps-auth a { text-decoration: underline; cursor: pointer; color: inherit; }\n .fps-pay-btn {\n height: 44px;\n border: none;\n border-radius: 9999px;\n background: var(--fps-dark);\n color: #fff;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: -0.025px;\n cursor: pointer;\n width: 100%;\n font-family: 'Inter', sans-serif;\n }\n .fps-pay-btn:hover { opacity: 0.92; }\n .fps-pay-btn:disabled { opacity: 0.55; cursor: not-allowed; }\n\n /* ---------- Checkbox rows ---------- */\n .fps-check { display: flex; gap: 12px; align-items: flex-start; width: 100%; }\n .fps-check input[type=\"checkbox\"] {\n width: 16px; height: 16px; margin: 0; margin-top: 1px;\n flex-shrink: 0; accent-color: var(--fps-brand); cursor: pointer;\n }\n .fps-check label { font-size: 12px; font-weight: 500; color: var(--fps-text-primary); line-height: 1.4; cursor: pointer; margin: 0; font-family: 'Inter', sans-serif; text-transform: none; text-align: start !important; }\n .fps-check u, .fps-check a { text-decoration: underline; cursor: pointer; }\n .fps-error { color: #dc2626; font-size: 12px; display: block; }\n\n /* ---------- Responsive ---------- */\n @media (max-width: 640px) {\n .fps-modal { flex-direction: column; max-height: none; }\n .fps-summary { width: 100%; border-right: none; border-bottom: 1px solid var(--fps-border); }\n .fps-content { overflow: visible; }\n .fps-scroll { overflow: visible; }\n }\n `}\n </style>\n );\n}\n","import React from 'react'\n\n/**\n * Shared, backend-agnostic presentational components for the redesigned Fractal\n * checkout (the `.fps-*` two-panel design in FractalWidgetStyles).\n *\n * These are pure UI: data comes in as already-formatted props and user actions go\n * out as callbacks. They hold NO charge/auth logic, so any container — the Gen-A\n * socket widgets (GetPaymentPage / PreAuthPayment) or the Gen-B REST widget\n * (ModelContentSky) — can render the same UI with its own data/charge layer.\n */\n\n/* ----------------------------- Order summary (left) ----------------------------- */\n\nexport type SummaryLine = { label: string; value: string; muted?: boolean }\nexport type CardIcons = { visa: string; mastercard: string; amex: string; discover: string }\n\ntype OrderSummaryProps = {\n logo?: string\n invoiceLabel: string\n lines: SummaryLine[]\n totalLabel?: string\n total: string\n cardIcons?: CardIcons | null // null/undefined hides the accepted-cards row\n note?: React.ReactNode | null // green savings note (text or savings row); null hides it\n secureIcon: string\n secureText?: string\n extra?: React.ReactNode | null // optional content rendered directly below the total (e.g. a partial-amount field)\n}\n\nexport function FractalOrderSummary({\n logo, invoiceLabel, lines, totalLabel = 'Total', total,\n cardIcons, note, secureIcon, secureText = 'Secure payment powered by Fractal', extra,\n}: OrderSummaryProps) {\n return (\n <aside className=\"fps-summary\">\n <div className=\"fps-logo\">{logo && <img src={logo} alt=\"\" />}</div>\n <div className=\"fps-divider\" />\n <div className=\"fps-invoice\">{invoiceLabel}</div>\n <div className=\"fps-lines\">\n {lines.map((l, i) => (\n <div key={i} className={`fps-line${l.muted ? ' fps-muted' : ''}`}>\n <span className=\"fps-lbl\">{l.label}</span>\n <span className=\"fps-val\">{l.value}</span>\n </div>\n ))}\n </div>\n <div className=\"fps-divider\" />\n <div className='fps-total-div' >\n <div className=\"fps-total-label\">{totalLabel}</div>\n <div className=\"fps-total\">{total}</div>\n </div>\n {extra}\n {cardIcons && (\n <div className=\"fps-cards\">\n <img src={cardIcons.visa} alt=\"Visa\" />\n <img src={cardIcons.mastercard} alt=\"Mastercard\" />\n <img src={cardIcons.amex} alt=\"Amex\" />\n <img src={cardIcons.discover} alt=\"Discover\" />\n </div>\n )}\n {note && (\n <>\n <div className=\"fps-divider\" />\n {note}\n </>\n )}\n <div className=\"fps-secure\">\n <img src={secureIcon} alt=\"\" />\n {secureText}\n </div>\n </aside>\n )\n}\n\n/** Green \"savings\" pill used on the bank side (Figma 141:6503). */\nexport function FractalSavingsNote({ label, amount }: { label: string; amount: string }) {\n return (\n <div className=\"fps-note fps-note-row\">\n <span className=\"fps-note-label\">\n {label}\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1b4a33\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n </span>\n <span className=\"fps-note-amount\">{amount}</span>\n </div>\n )\n}\n\n/* ----------------------------- Header (right top) ----------------------------- */\n\nexport function FractalModalHeader({ title, onBack, onClose }: { title: string; onBack?: () => void; onClose: () => void }) {\n return (\n <>\n <div className=\"fps-head\">\n <div className=\"fps-head-left\">\n {onBack && (\n <div className=\"fps-back\" onClick={onBack} role=\"button\" aria-label=\"Back\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#221730\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </div>\n )}\n <h2 className=\"fps-title\">{title}</h2>\n </div>\n <button className=\"fps-close\" onClick={onClose} aria-label=\"Close\">✕</button>\n </div>\n <div className=\"fps-divider\" />\n </>\n )\n}\n\n/* ----------------------------- Card / Bank / Reader toggle ----------------------------- */\n\nexport type ToggleMethod = { value: string; label: string }\n\nexport function FractalMethodToggle({ methods, active, onChange }: { methods: ToggleMethod[]; active: string; onChange: (v: string) => void }) {\n if (methods.length <= 1) return null\n return (\n <div className=\"fps-toggle\">\n {methods.map((m) => (\n <button key={m.value} type=\"button\" className={active === m.value ? 'fps-active' : ''} onClick={() => onChange(m.value)}>\n {m.label}\n </button>\n ))}\n </div>\n )\n}\n\n/* ----------------------------- Saved methods list ----------------------------- */\n\nexport type SavedMethodItem = {\n id: string\n primaryText: string // e.g. \"**** 7890\"\n secondaryText?: string // e.g. \"01/27\"\n badge?: string // e.g. \"CREDIT\" / \"DEBIT\" / \"BANK\"\n brandLogo?: string // brand chip image (omit for bank)\n disabled?: boolean\n}\n\nexport function FractalSavedMethods({\n sectionLabel, items, selectedId, onSelect, onRemove, removeIcon,\n otherLabel, onOther, otherIcon,\n}: {\n sectionLabel: string\n items: SavedMethodItem[]\n selectedId?: string\n onSelect: (id: string) => void\n onRemove?: (id: string) => void\n removeIcon: string\n otherLabel: string\n onOther: () => void\n otherIcon: string\n}) {\n return (\n <>\n <div className=\"fps-section-label\">{sectionLabel}</div>\n <div className=\"fps-scroll\">\n <div className=\"fps-list\">\n {items.map((it) => {\n const checked = selectedId === it.id\n return (\n <div\n key={it.id}\n className={`fps-list-row${it.disabled ? ' fps-disabled' : ''}`}\n onClick={() => { if (!it.disabled) onSelect(it.id) }}\n >\n <div className=\"fps-list-left\">\n <span className={`fps-radio${checked ? ' fps-checked' : ''}`} />\n <div className=\"fps-pm-meta\">\n <span className=\"fps-pm-last4\">{it.primaryText}</span>\n {it.secondaryText && <span className=\"fps-pm-exp\">{it.secondaryText}</span>}\n </div>\n </div>\n <div className=\"fps-list-right\">\n {it.badge && <span className=\"fps-badge\">{it.badge}</span>}\n {it.brandLogo && <img className=\"fps-brand-logo\" src={it.brandLogo} alt=\"\" />}\n {onRemove && (\n <span className=\"fps-remove\" onClick={(e) => { e.stopPropagation(); onRemove(it.id) }}>\n <img src={removeIcon} alt=\"Remove\" />\n </span>\n )}\n </div>\n </div>\n )\n })}\n </div>\n <button type=\"button\" className=\"fps-other-btn\" onClick={onOther}>\n {otherLabel}\n <img src={otherIcon} alt=\"\" />\n </button>\n </div>\n </>\n )\n}\n\n/** Simple reader/device selection list (no badge/logo/remove). */\nexport function FractalReaderList({\n sectionLabel, items, selectedId, onSelect, icon,\n}: {\n sectionLabel: string\n items: { id: string; name: string }[]\n selectedId?: string\n onSelect: (id: string) => void\n icon: string\n}) {\n return (\n <>\n <div className=\"fps-section-label\">{sectionLabel}</div>\n <div className=\"fps-scroll\">\n <div className=\"fps-list\">\n {items.map((it) => {\n const checked = selectedId === it.id\n return (\n <div key={it.id} className=\"fps-list-row\" onClick={() => onSelect(it.id)}>\n <div className=\"fps-list-left\">\n <span className={`fps-radio${checked ? ' fps-checked' : ''}`} />\n <span className=\"fps-pm-last4\">{it.name}</span>\n </div>\n <div className=\"fps-list-right\">\n <img className=\"fps-brand-logo\" src={icon} alt=\"\" />\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </>\n )\n}\n\n/* ----------------------------- Footer (auth text + pay button) ----------------------------- */\n\nexport function FractalFooter({\n authText, buttonLabel, onPay, disabled, submit = false,\n}: {\n authText?: React.ReactNode\n buttonLabel: React.ReactNode\n onPay?: (e: React.MouseEvent<HTMLButtonElement>) => void\n disabled?: boolean\n submit?: boolean\n}) {\n return (\n <div className=\"fps-footer\">\n {authText}\n <button type={submit ? 'submit' : 'button'} className=\"fps-pay-btn\" disabled={disabled} onClick={submit ? undefined : onPay}>\n {buttonLabel}\n </button>\n </div>\n )\n}\n\n/* ----------------------------- Labelled field + checkbox row ----------------------------- */\n\nexport function FractalField({ label, htmlFor, children, error }: { label: string; htmlFor?: string; children: React.ReactNode; error?: string }) {\n return (\n <div className=\"fps-field\">\n {label &&\n <label className=\"fps-section-label\" htmlFor={htmlFor}>{label}</label>\n }\n {children}\n {error && <span className=\"fps-error\">{error}</span>}\n </div>\n )\n}\n\nexport function FractalCheckbox({ id, checked, onChange, children }: { id: string; checked: boolean; onChange: (v: boolean) => void; children: React.ReactNode }) {\n return (\n <div className=\"fps-check\">\n <input type=\"checkbox\" id={id} checked={checked} onChange={(e) => onChange(e.target.checked)} />\n <label htmlFor={id}>{children}</label>\n </div>\n )\n}\n","export const PaymentMethodKeys = {\n PROPAYKEY: '25',\n PAYARCKEY: '26',\n STRIPEKEYCC: '27',\n PAYRIXKEY: '28',\n SKYFIACHKEY: '29',\n JUSTIFIKEY: '30',\n INFINICEPTKEY: '31',\n FRACTALKEY: '32'\n}\n\nexport const DcLoadingError = \"Something went wrong while loading the payment form. Please try again after some time.\"","'use client'\nimport React from 'react'\nimport { GetPaymentPage } from '../Charge/GetPaymentPage'\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n from?: string;\n amount: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n pass_fee?: boolean;\n isReader?: boolean;\n onTriggerPay?: (fn: () => void) => void;\n preauthId?: string;\n showButton?: boolean;\n sessionToken?: string;\n}\n\n/**\n * PreAuthPayment is now a thin alias over the unified GetPaymentPage widget:\n * passing `isPreAuth` runs the authorize/hold flow (authorize-by-card /\n * fractal-charge-preauth / charge-preauth) instead of a charge, hides the bank\n * tab, and switches the copy to \"Authorize\". Kept as a separate export so existing\n * host integrations that import PreAuthPayment keep working unchanged.\n */\nexport function PreAuthPayment(props: Props) {\n return <GetPaymentPage {...props} isPreAuth />\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport DataScript from '../Datascript';\nimport Swal from 'sweetalert2';\nimport axios, { AxiosError } from 'axios';\nimport { baseUrl, masterBaseUrl, fractalGatewayUrl } from '../baseurl';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport Loader from '../Loader/Loader';\nimport SuccessMsz from '../SuccessMessage/SuccessMsz';\nimport AddCardStyle from './AddCardStyles';\nimport CustomModal from '../CustomModal/CustomModal';\nimport SuccessCardMsz from '../SuccessCardMessage/SuccessCardMsz';\nimport { HandleSubmit } from '../SuccessMessage/HandleSubmit';\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage';\nimport { formatCardNumberWithCursor } from '@/app/utils/Common';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport FractalFields from '../Atoms/FractalForm/FractalFields';\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment';\nimport { DcLoadingError } from '@/app/utils/Constant';\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n}\n\nexport function AddCardEasyPay(props: Props) {\n const [loading, setLoading] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n const [error, setError] = useState<string>(\"\");\n const [show, setShow] = useState<boolean>(false);\n const card_number_ref = useRef<HTMLInputElement>(null)\n const exp_month_ref = useRef<HTMLInputElement>(null)\n const exp_year_ref = useRef<HTMLInputElement>(null)\n const cvv_ref = useRef<HTMLInputElement>(null)\n const name_ref = useRef<HTMLInputElement>(null)\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '14px',\n 'font-weight': '500',\n 'color': '#35254D',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#35254D',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#35254D'\n }\n };\n\n interface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n }\n\n interface PaymentData {\n paymentGateway: number;\n isSkyFiAccount: boolean;\n logo: string;\n bname: string;\n card_list: Card[];\n customer_name: string;\n is_primary: string;\n dctoken: string\n }\n interface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n }\n\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [paymentData, setPaymentData] = useState<PaymentData>()\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n\n const showError = (msz: string) => {\n Swal.fire({\n icon: 'error',\n text: msz,\n customClass: {\n popup: 'custom-z-index'\n }\n });\n };\n\n\n\n // for payment popup\n const handleClose = () => {\n setShow(false);\n setSuccess(false)\n setError(\"\")\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n // setActive('cardList')\n };\n const handleShow = () => setShow(true);\n\n const handleCloseSeccess = () => {\n handleClose()\n }\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n // console.log(name, value?.length, \"dfih\", name === 'expiryMonth' && value?.length === 2);\n\n if (name === 'expiryMonth' && value?.length === 2) {\n exp_year_ref?.current?.focus();\n }\n\n if (name === 'expiryYear' && value?.length === 4) {\n cvv_ref?.current?.focus();\n }\n\n if (name === 'cvv' && value?.length === 3) {\n name_ref?.current?.focus();\n }\n\n\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n // console.log(value, name);\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n // console.log(rawValue?.length, \"length\");\n\n if (rawValue?.length === 16) {\n exp_month_ref?.current?.focus()\n }\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n\n };\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentData?.paymentGateway !== 32) {\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Card number is required\";\n // if (!data?.expiryMonth?.trim()) {\n // errors.expiryMonth = \"Expiration month is required\"\n // } else if (Number(data?.expiryMonth) > 12 || Number(data?.expiryMonth) < 1) {\n // errors.expiryMonth = \"Invalid Expiration Month.\"\n // }\n // if (!data?.expiryYear?.trim()) {\n // errors.expiryYear = \"Expiration year is required\"\n // } else if (data?.expiryYear?.trim().length !== 4 || Number(data?.expiryYear) < 2025) {\n // errors.expiryYear = \"Invalid Expiration Year.\"\n // }\n\n // else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n\n // if (!data?.cvv?.trim()) errors.cvv = \"CVC is required\";\n\n // // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n\n // }\n\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n // if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n setCardError(errors);\n\n // Return true if there is any error\n\n\n return Object.keys(errors).length > 0;\n };\n\n\n const getPaymentDetails = async () => {\n showLoader()\n try {\n const data = {\n fractalpayPublicKey: props?.merchantPublicKey,\n \"customer_id\": props?.customerId,\n addcard: true\n }\n let paymentData = await axios.post(`${baseUrl}get-payment-details`, data)\n // console.log(paymentData);\n setPaymentData(paymentData?.data?.data)\n if (!paymentData?.data?.data?.paymentGateway) {\n handleClose()\n setError(\"Something went wrong.\")\n }\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no gap frame with every\n // loading flag false while DataCapFields' own effect spins up.\n if (paymentData?.data?.data?.paymentGateway === 31 && paymentData?.data?.data?.dctoken) {\n setLoadingIframe(true);\n }\n hideLoader()\n\n\n } catch (err: any) {\n console.log(err);\n hideLoader()\n handleClose()\n setError(\"Something went wrong.\")\n }\n }\n\n useEffect(() => {\n if (props?.merchantPublicKey) {\n\n getPaymentDetails()\n }\n }, [props?.merchantPublicKey])\n\n\n const addCardFunc = async (e: any) => {\n e.preventDefault();\n e.currentTarget.blur();\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading) return;\n const hasError = validateCardData()\n // console.log(cardData)\n if (hasError) return\n else {\n\n let validCard = true;\n let validExpirationDate = true;\n let validCVV = true;\n\n // if (paymentData?.paymentGateway !== 32) {\n // let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n // let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n // let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n // let errors: Partial<Record<keyof CardDetails, string>> = {}\n // if (!validCard) errors.cardNumber = \"Invalid card Number\"\n // if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n // if (!validCVV) errors.cvv = \"Invalid CVV\"\n // setCardError(errors)\n // }\n\n if (validCard && validCVV && validExpirationDate) {\n showLoader()\n try {\n let getTokenCallback = async function (token: any) {\n // console.log(token)\n if (token.Error) {\n // console.log(token?.Error);\n setError(token.Error)\n hideLoader();\n } else {\n const reqData = {\n userId: props?.customerId,\n cardName: cardData?.cardName,\n zip: cardData?.zipCode,\n fractalpayPublicKey: props?.merchantPublicKey,\n token: token\n }\n try {\n let apiResponse = await axios.post(`${baseUrl}add-card`, reqData)\n // console.log(apiResponse);\n if (apiResponse?.data?.result) {\n setSuccess(true)\n hideLoader()\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n HandleSubmit(e, 'close', \"\")\n }\n // let formData = {\n // fractalpayPublicKey: props?.merchantPublicKey,\n // wallet_id: '',\n // card_number: cardData?.cardNumber.replaceAll(\" \", ''),\n // exp_month: cardData?.expiryMonth,\n // exp_year: cardData?.expiryYear?.slice(-2),\n // cvv: cardData?.cvv,\n // }\n // try {\n // const result = await axios.post(`${baseUrl}link-wallet`, formData)\n // console.log(result);\n // setSuccess(true)\n // hideLoader()\n // setCardData({\n // cardName: \"\",\n // cardNumber: \"\",\n // expiryMonth: \"\",\n // expiryYear: \"\",\n // cvv: \"\",\n // orderId: \"\",\n // zipCode: \"\"\n // })\n // HandleSubmit(e, 'close', \"\")\n // } catch (err: any) {\n // console.log(err);\n // hideLoader()\n // setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n // }\n } catch (err: any) {\n console.log(err);\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n try {\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber;\n // cardNumber = cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: {\n // md: forge.md.sha1.create()\n // }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n // // Create Token\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // const raw = JSON.stringify({\n // \"enc_track2_data\": `${encryptedBase64}`,\n // \"algorithm\": \"RSAES_OAEP_SHA_1\",\n // session_key: `${sesionResult?.data?.data?.session_key}`\n // });\n\n try {\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders })\n\n const tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n const reqData = JSON.stringify({\n ...tokenizeData,\n cvv: cardData?.cvv,\n cardName: cardData?.cardName,\n zip: cardData?.zipCode,\n userId: props?.customerId,\n fractalpayPublicKey: props?.merchantPublicKey,\n })\n\n\n let myHeaders2 = {\n \"Content-Type\": \"application/json\"\n }\n\n\n try {\n let addCardRes = await axios.post(`${baseUrl}add-card`, reqData,\n {\n headers: myHeaders2\n }\n )\n // console.log((addCardRes));\n if (addCardRes?.data?.result) {\n setSuccess(true)\n hideLoader()\n HandleSubmit(e, 'close', \"\")\n }\n\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } else {\n // if (typeof DatacapWebToken !== 'undefined') {\n // DatacapWebToken.requestToken(paymentData?.dctoken, \"creditCardForm\", getTokenCallback);\n // }\n\n try {\n const result = await (window as any).requestDcToken();;\n // console.log(\"Token:\", result.Token);\n if (result.Token) {\n getTokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n hideLoader()\n }\n\n }\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n }\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n\n\n }, []);\n\n return (\n\n <>\n {/* data cap */}\n <DataScript />\n {/* Fractal Gateway */}\n {\n paymentData?.paymentGateway === 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n {/* Datacap Ifrmaes */}\n\n {\n paymentData?.paymentGateway === 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }}\n />\n )\n }\n {/* STYLE */}\n <AddCardStyle />\n\n\n {/* <button className=\"paymentBtn\" onClick={handleShow}\n >\n Pay\n </button> */}\n\n\n {/* <CustomModal\n open={show}\n onClose={handleClose}\n\n > */}\n\n <Loader loading={loading || loadingIframe} />\n\n {\n error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>\n }\n\n\n {\n errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>\n }\n\n {success && <SuccessCardMsz onClose={handleCloseSeccess} />}\n {!error && !success && !errorIframe &&\n <>\n\n\n\n <div\n className=\"container-creditcard add-card modal-content\"\n id=\"add-credit-card-panel\" style={{ margin: 'auto' }}\n >\n {\n paymentData?.paymentGateway === 32 ? (\n <form\n id=\"paymentForm\"\n onSubmit={addCardFunc}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n >\n <div style={{ maxHeight: '350px', minHeight: '0' }} className='card-scrl'>\n <div className=\"form-group\" style={{ marginTop: '0', marginBottom: '10px' }}>\n <label htmlFor=\"cardNumber\" >Card Number</label>\n {paymentData?.paymentGateway === 32 && isTokenizerReady &&\n <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n isAddCard={true}\n />\n }\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"cardholderName\">Name on card<sup style={{ fontSize: '12px' }}>*</sup></label>\n <input\n type=\"text\"\n id=\"cardholderName\"\n name=\"cardholderName\"\n placeholder=\"Name on card\"\n value={cardData?.cardName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }}\n ref={name_ref}\n />\n {cardError?.cardName && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cardName}</span>}\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"zipcode\">Zip</label>\n <input type=\"text\"\n id=\"\"\n name=\"zipcode\"\n placeholder=\"Zip\"\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.zipCode}</span>}\n </div>\n </div>\n <input\n type=\"submit\"\n // onClick=\"handleCardFormSubmission()\"\n className=\"idle-green-btn w-100\"\n defaultValue=\"Submit\"\n disabled={loading}\n />\n </form>\n ) : (\n <form id=\"creditCardForm\" onSubmit={addCardFunc} onKeyDown={\n (e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}>\n\n <div style={{ maxHeight: '450px', minHeight: '0' }} className='card-scrl'>\n\n {/* Dc Ifrmaes */}\n\n <div className=\"form-group\" style={{ marginTop: '0', marginBottom: '0' }}>\n <DataCapFields\n isOpen={true}\n tokenKey={paymentData?.dctoken}\n setLoader={setLoadingIframe}\n isAddCard={true}\n onError={(msg: string) => setError(msg || DcLoadingError)}\n />\n </div>\n\n {/* <div className=\"form-group\" style={{ marginTop: '0', marginBottom: '10px' }}>\n <label htmlFor=\"cardNumber\" >Card Number</label>\n <input\n type=\"text\"\n data-token=\"card_number\"\n placeholder=\"Enter card number\"\n maxLength={19}\n inputMode=\"numeric\"\n value={cardData?.cardNumber || \"\"}\n onChange={(e) => handleCardNumberChange(e)}\n ref={card_number_ref}\n // onInput=\"formatCardNumber(this)\"\n // required=\"\"\n />\n {cardError?.cardNumber &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cardNumber}</span>\n }\n <br />\n </div>\n <div className=\"form-group\">\n <div className=\"card-dtl\">\n <div className=\"exp-cvc-container\" style={{ margin: '0' }}>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"expMonth\">MM</label>\n <input\n data-token=\"exp_month\"\n className=\"form-control required\"\n type=\"text\"\n placeholder=\"MM\"\n maxLength={2}\n value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)}\n ref={exp_month_ref}\n\n />\n {cardError?.expiryMonth &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.expiryMonth}</span>\n }\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"expYear\">YYYY</label>\n <input\n data-token=\"exp_year\"\n className=\"form-control required\"\n type=\"text\"\n placeholder=\"YYYY\"\n maxLength={4}\n value={cardData?.expiryYear || \"\"}\n onChange={(e) => handleCardChange('expiryYear', e.target.value)}\n ref={exp_year_ref}\n />\n {cardError?.expiryYear &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.expiryYear}</span>\n }\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"cvc\">CVC</label>\n <input\n data-token=\"cvv\"\n className=\"form-control required\"\n type=\"text\"\n placeholder=\"CVC\"\n maxLength={4}\n value={cardData?.cvv || \"\"}\n onChange={(e) => handleCardChange('cvv', e.target.value)}\n ref={cvv_ref}\n />\n {cardError?.cvv &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cvv}</span>\n\n }\n <span id=\"cvv-error\" style={{ color: \"red\", display: \"none\" }} />\n </div>\n </div>\n </div>\n </div> */}\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"cardholderName\">Name on card<sup style={{ fontSize: '12px' }} >*</sup></label>\n <input\n type=\"text\"\n id=\"cardholderName\"\n name=\"cardholderName\"\n placeholder=\"Name on card\"\n value={cardData?.cardName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }}\n ref={name_ref}\n />\n {cardError?.cardName && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cardName}</span>}\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"zipcode\">Zip</label>\n <input type=\"text\"\n id=\"\"\n name=\"zipcode\"\n placeholder=\"Zip\"\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.zipCode}</span>}\n </div>\n </div>\n\n\n <input\n type=\"submit\"\n // onClick=\"handleCardFormSubmission()\"\n className=\"idle-green-btn w-100\"\n defaultValue=\"Submit\"\n disabled={loading}\n />\n </form>\n )\n }\n\n </div>\n\n </>\n }\n {/* </CustomModal> */}\n </>\n )\n}\n","import React from \"react\";\n\nexport default function AddCardStyle() {\n const primarycolor = \"#000\";\n const primarybgcolor = \"#fff\";\n const primarybodycolor = \"#212529\";\n const primarybordercolor = \"#dee2e6\";\n return (\n <style>\n {`\n .add-card {\n max-width:380px;\n padding: 0 20px\n }\n .add-card .form-group {\n // margin-bottom: 5px;\n }\n\n .add-card .idle-green-btn {\n color: white;\n background-color: rgba(97, 198, 153, 1);\n border-radius: 100px;\n border: none !important;\n padding: 12px 24px 12px 24px;\n width: 100%;\n cursor:pointer\n }\n\n .add-card .idle-green-btn:hover {\n background-color: rgba(65, 164, 120, 1) !important;\n }\n\n .add-card .idle-green-btn:focus {\n border: 2px solid rgba(90, 172, 136, 1) !important;\n background-color: rgba(97, 198, 153, 1) !important;\n padding: 10px 24px 10px 24px;\n }\n \n .add-card .container-creditcard {\n width: 426px;\n padding: 24px;\n background-color: #FFFFFF;\n border-radius: 24px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n .add-card .container-creditcard .request-payment-close-popup{\n position:absolute;\n // background:red\n }\n \n .add-card h2 {\n font-size: 24px;\n line-height: 32px;\n font-weight: 500;\n color: #35254D;\n margin-bottom: 24px;\n text-align: center;\n }\n .add-card .form-group {\n margin-top: 20px;\n margin-bottom : 10px\n }\n \n .add-card .credit-card {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n padding: 20px;\n background-color: #35254D;\n color: #FFFFFF;\n border-radius: 15px;\n margin-bottom: 20px;\n }\n \n .add-card .credit-card .chip {\n width: 50px;\n height: 30px;\n background-image: url('https://raw.githubusercontent.com/danieldasilvaa/creditcard-html-css/main/chip.png');\n background-size: cover;\n margin-bottom: 10px;\n }\n \n .add-card .credit-card .card-number {\n font-size: 18px;\n letter-spacing: 2px;\n margin-bottom: 10px;\n }\n \n .add-card .credit-card .card-info {\n font-size: 14px;\n margin-bottom: 5px;\n }\n \n .add-card label {\n font-size: 12px;\n font-family: 'IBM Plex Mono', monospace;\n font-weight: 400;\n text-transform: uppercase;\n color: #35254D;\n margin-bottom: 6px;\n }\n \n .add-card input[type=\"text\"],\n .add-card input[type=\"number\"],\n .add-card input[type=\"date\"],\n .add-card input[type=\"email\"],\n .add-card select {\n width: 100%;\n padding: 12px;\n font-size: 14px;\n font-weight: 500;\n color: #35254D;\n border: 1px solid #D4CDDF;\n border-radius: 6px;\n background-color: #FFFFFF;\n box-sizing: border-box;\n // margin-bottom: 20px;\n }\n \n .add-card input[type=\"text\"]::placeholder {\n color: #867C94;\n }\n \n // .add-card input[type=\"submit\"] {\n // width: 100%;\n // padding: 12px;\n // background-color: #161616;\n // color: #FFFFFF;\n // font-size: 14px;\n // font-weight: 500;\n // border: none;\n // border-radius: 1000px;\n // cursor: pointer;\n // text-align: center;\n // }\n \n .add-card input[type=\"submit\"]:hover {\n background-color: #000000;\n }\n \n .add-card .error {\n font-size: 12px;\n color: red;\n margin-top: -15px;\n margin-bottom: 15px;\n }\n \n /* Tab Styling */\n .add-card .tabs {\n display: flex;\n gap: 4px;\n margin-bottom: 24px;\n justify-content: center;\n }\n \n .add-card .tab {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 6px 16px;\n font-size: 14px;\n font-weight: 500;\n border: 1px solid #D4CDDF;\n border-radius: 1000px;\n cursor: pointer;\n }\n \n .add-card .tab.active {\n border-color: #35254D;\n color: #35254D;\n }\n \n .add-card .tab:hover {\n border-color: #867C94;\n }\n \n /* Buttons */\n .add-card .button-close {\n display: inline-block;\n background-color: #161616;\n color: #FFFFFF;\n font-size: 14px;\n font-weight: 500;\n padding: 12px 32px;\n border-radius: 1000px;\n text-align: center;\n cursor: pointer;\n width: 48%;\n box-sizing: border-box;\n }\n \n .add-card .button-close:hover {\n background-color: #000000;\n }\n \n .add-card .btn-add1 {\n display: inline-block;\n background-color: #61c699;\n color: #FFFFFF;\n font-size: 14px;\n font-weight: 500;\n padding: 12px 32px;\n border-radius: 1000px;\n text-align: center;\n cursor: pointer;\n width: 48%;\n box-sizing: border-box;\n }\n \n .add-card .btn-add1:hover {\n background-color: #B5E1CB;\n }\n \n /* Combined Expiration Date and CVC Row */\n .add-card .exp-cvc-container {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 5px;\n }\n \n .add-card .exp-cvc-container input {\n flex: 1;\n padding: 12px;\n font-size: 14px;\n font-weight: 500;\n color: #35254D;\n border: 1px solid #D4CDDF;\n border-radius: 6px;\n background-color: #FFFFFF;\n box-sizing: border-box;\n }\n \n .add-card .exp-cvc-container input::placeholder {\n color: #867C94;\n }\n \n .card-scrl {\n overflow-y: auto;\n padding-right: 6px !important;\n }\n .card-scrl::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .card-scrl::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n\n .custom-z-index {\n z-index: 9999 !important;\n}\n #add-credit-card-panel{\n padding: 15px !important}\n /* Responsive Design */\n @media screen and (max-width: 768px) {\n .add-card .container-creditcard {\n width: 90%;\n padding: 20px;\n }\n \n .add-card input[type=\"submit\"] {\n font-size: 12px;\n padding: 10px;\n }\n }\n .exp-cvc-container-wrap div#exp_month, .exp-cvc-container-wrap div#exp_year, .exp-cvc-container-wrap div#cvv {\n border: 1px solid #dee2e6;\n height: 47px;\n border-radius: 0.375rem;\n padding: 0px 12px;\n\n}\ndiv#card_number{\n border: 1px solid #dee2e6 !important;\n border-radius: 0.375rem !important;\n padding: 0px 12px;\n}\n input#cardholderName::placeholder , input#zipcode::placeholder {\n font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;\n color: #9ca3af !important;\n font-weight: 400 !important; \n font-size: 14px !important; \n}\n \n `}\n </style>\n );\n}\n","import React from 'react'\n\nexport default function SuccessCardMszStyle() {\n return (\n <style>\n {\n `\n .card-success .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .card-success .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n .card-success .payment-success-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 18px 20px 24px;\n width: 335px;\n height: 400px; /* Fixed height */\n background: #FFFFFF;\n border-radius: 12px;\n position: relative;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n border: 1px solid #e3e3e3;\n justify-content: center;\n text-align: center;\n // margin-top: 50px; /* Adjust this to move the content down */\n margin: 50px auto 0 auto !important;\n }\n\n .card-success .success-icon {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n width: 227px;\n height: 116px;\n z-index: 2;\n }\n\n .card-success .circle {\n width: 40px;\n height: 40px;\n border: 1px solid #49B182;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .card-success .circle .fa-check-circle {\n font-size: 20px;\n color: #49B182;\n }\n\n .card-success .success-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n width: 227px;\n }\n\n .card-success .payment-success-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .card-success .thank-you-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n opacity: 0.5;\n }\n `\n }\n </style>\n )}","import React from 'react'\nimport SuccessCardMszStyle from './SuccessCardMszStyle'\n\ntype SuccessCardMszProps = {\n onClose: () => void;\n};\nconst SuccessCardMsz: React.FC<SuccessCardMszProps> = ({ onClose }) => {\n return (\n <>\n <SuccessCardMszStyle/>\n <div className='card-success'>\n {/* <div className=\"logo-container\">\n <img src=\"<%= merchant_logo %>\" alt=\"\" className=\"client-logo\" />\n\n\n\n </div> */}\n <div className=\"payment-success-container\">\n <div className=\"success-icon\">\n <div className=\"circle\">\n <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i>\n </div>\n <div className=\"success-text\">\n <div className=\"payment-success-text\">Your card was added successfully.</div>\n <div className=\"thank-you-text\">Thank you </div>\n </div>\n </div>\n </div>\n </div>\n </>\n )\n}\nexport default SuccessCardMsz","import React, { useEffect, useRef, useState } from 'react'\nimport DataScript from '../Datascript';\nimport Loader from '../Loader/Loader';\nimport axios from 'axios';\nimport { fractalGatewayUrl, masterBaseUrl } from '../baseurl';\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage';\nimport { DcLoadingError, PaymentMethodKeys } from '../../utils/Constant'\nimport AddCardSkyStyle from './AddCardSkyStyle'\nimport { formatCardNumberWithCursor } from '@/app/utils/Common';\nimport FractalFieldsAddCardSky from '../Atoms/FractalForm/FractalFieldsAddCardSky';\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment';\nimport FractalTokenizerScript from '../FractalTokenizer';\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\n\ntype Props = {\n session_token: string,\n callback: (resp: any) => void,\n isloading: boolean,\n onCancel: () => void,\n showChecks: boolean,\n merchantName: string,\n signCheckbox: boolean,\n checkedSignCheckbox: boolean,\n onCheckSign: (val: boolean) => void,\n cancelbtnClass: string,\n savebtnClass: string,\n inputClass: string,\n isDual?: boolean,\n customCSS?: string,\n height?: string\n}\n\ninterface CardDetails {\n firstName: string,\n lastName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n zipCode: string;\n authHold: boolean;\n authorise: boolean;\n checkSign: boolean\n\n}\n\nexport function CardOnFile({ session_token, callback, isloading, onCancel, showChecks, merchantName, signCheckbox, checkedSignCheckbox, onCheckSign, cancelbtnClass, savebtnClass, inputClass, isDual, customCSS, height }: Props) {\n const [loading, setLoading] = useState<boolean>(false);\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [seeMore, setSeeMore] = useState<boolean>(false)\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [error, setError] = useState<string>(\"\");\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n const [passFee, setPassFee] = useState<boolean | null>(null);\n const [paymentGateway, setPaymentGateway] = useState<number | undefined>();\n const [dcToken, setDCToken] = useState<number | undefined>();\n const tokenizerRef = useRef<any>(null);\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '14px',\n 'font-weight': '500',\n 'color': '#35254D',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#35254D',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#35254D'\n }\n };\n\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentGateway != 32) {\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Please enter a card number.\";\n // if (!data?.expiryMonth?.trim()) {\n // errors.expiryMonth = \"Please enter an expiry month.\"\n // } else if (Number(data?.expiryMonth) > 12 || Number(data?.expiryMonth) < 1) {\n // errors.expiryMonth = \"Invalid Expiration Month.\"\n // }\n // if (!data?.expiryYear?.trim()) {\n // errors.expiryYear = \"Please enter an expiry year.\"\n // } else if (data?.expiryYear?.trim().length !== 4 || Number(data?.expiryYear) < 2025) {\n // errors.expiryYear = \"Invalid Expiration Year.\"\n // }\n\n // else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n\n // if (!data?.cvv?.trim()) errors.cvv = \"Please enter a CVV.\";\n\n // }\n if (!data?.firstName?.trim()) errors.firstName = \"Please enter a first name.\";\n if (!data?.lastName?.trim()) errors.lastName = \"Please enter a last name.\";\n if (!data?.zipCode?.trim()) errors.zipCode = \"Please enter a zip code.\";\n\n if (signCheckbox && !checkedSignCheckbox) errors.checkSign = \"You must authorize this before proceeding.\";\n if (showChecks && !data?.authHold) errors.authHold = \"You must authorize this before proceeding.\";\n if (showChecks && !data?.authorise) errors.authorise = \"Please confirm your authorization to continue.\";\n\n // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n setCardError(errors);\n\n // Return true if there is any error\n\n\n return Object.keys(errors).length > 0;\n };\n\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n // console.log(value, name);\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const validateCardInputs = (): boolean => {\n let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n\n let errors: Partial<Record<keyof CardDetails, string>> = {}\n if (!validCard) errors.cardNumber = \"Invalid card Number\"\n if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n if (!validCVV) errors.cvv = \"Invalid CVV\"\n\n setCardError(errors)\n\n return validCard && validCVV && validExpirationDate\n }\n\n const handleTokenCallback = async (token: any) => {\n if (token.Error) {\n // console.log(token?.Error);\n setError(token.Error);\n hideLoader();\n } else {\n let data = {\n token: token.Token,\n resp: token\n };\n const updateToken = await axios.post(`${masterBaseUrl}api/v1/gateway/update/token/${session_token}`, data);\n // console.log(updateToken, \"jkdvfhsdjkhf\");\n\n if (updateToken?.status == 200) {\n let respData = {\n Token: updateToken?.data?.data?.gateway_token,\n Brand: token.Brand,\n ExpirationMonth: token.ExpirationMonth,\n ExpirationYear: token.ExpirationYear,\n Last4: token.Last4,\n Bin: token.Bin,\n CVV: token.CVV,\n postalCode: cardData?.zipCode,\n ...(showChecks && { authHold: cardData?.authHold }),\n ...(showChecks && { authorise: cardData?.authorise }),\n };\n hideLoader();\n // console.log(respData, \"respspsp\");\n callback(respData);\n }\n }\n };\n\n const handleFractalTokenFlow = async () => {\n try {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: { md: forge.md.sha1.create() }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // const raw = JSON.stringify({\n // enc_track2_data: encryptedBase64,\n // algorithm: \"RSAES_OAEP_SHA_1\",\n // session_key: sesionResult?.data?.data?.session_key\n // });\n\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders });\n let tokenizeData;\n try {\n tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n\n } catch (err: any) {\n setErrorIframe(err);\n hideLoader();\n }\n\n // console.log(tokenizeData, \"tokeni\");\n\n if (tokenizeData?.token) {\n let token = tokenizeData?.token;\n try {\n let verifyandsaveresp = await axios.post(`${masterBaseUrl}api/v1/gateway/verify-and-save/${session_token}`, { token });\n // console.log(verifyandsaveresp, \"verifyandsaveresp\");\n\n if (verifyandsaveresp?.status == 200) {\n let responsetemp = verifyandsaveresp?.data?.data;\n let respData = {\n Token: responsetemp.gateway_token,\n Brand: responsetemp.card_data.brand,\n ExpirationMonth: responsetemp.card_data.expire_mm,\n ExpirationYear: responsetemp.card_data.expire_yy,\n Last4: responsetemp.card_data.last4,\n Bin: responsetemp.card_data.bin,\n postalCode: cardData?.zipCode\n };\n callback(respData);\n hideLoader();\n }\n } catch (error) {\n console.log(error, \"error\");\n hideLoader();\n }\n }\n } catch (error: any) {\n\n let readableMessage = \"Something went wrong!\";\n\n try {\n const rawError = error?.response?.data || error?.message || \"\";\n\n // Convert to string safely\n const errorText = typeof rawError === \"string\" ? rawError : JSON.stringify(rawError);\n\n // Split safely (avoid crashes even if empty or non-string)\n const lines = errorText.split?.(\"\\n\")?.filter(Boolean) || [];\n const lastLine = lines.at(-1) || \"\";\n\n // Extract message after last colon (if any)\n const parts: any = lastLine.split?.(\": \");\n readableMessage = parts?.length > 1 ? parts.pop().trim() : lastLine.trim() || readableMessage;\n } catch {\n // If *anything* above fails, fallback to a generic message\n readableMessage = \"Something went wrong!\";\n }\n hideLoader()\n setError(readableMessage)\n }\n };\n\n\n\n const handleCardAdd = async (e: any) => {\n e.preventDefault();\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading) return;\n const hasError = validateCardData();\n if (hasError) return;\n\n let isValid = true;\n // if (paymentGateway != 32) {\n // isValid = validateCardInputs();\n // }\n if (!isValid) return;\n showLoader();\n try {\n const result = await axios.get(`${masterBaseUrl}api/v1/gateway/token/${session_token}`, {\n params: {\n pass_fee: passFee\n }\n });\n if (result?.status == 200) {\n const gatewayToken = result?.data?.data?.gateway_token;\n const paymentGateway = result?.data?.data?.paymentGateway;\n\n if (paymentGateway == PaymentMethodKeys?.FRACTALKEY) {\n await handleFractalTokenFlow();\n } else {\n // DatacapWebToken.requestToken(gatewayToken, 'creditCardForm', handleTokenCallback);\n\n try {\n const result = await (window as any).requestDcToken();;\n // console.log(\"Token:\", result.Token);\n if (result.Token) {\n handleTokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading(false);\n }\n }\n }\n } catch (error: any) {\n // console.log(error, \"svuiuhd\");\n hideLoader();\n setError(error?.response?.data?.message || \"Something went wrong!\");\n }\n }\n\n // console.log(cardData, \"uifgudasgf\", cardError);\n\n const handleClose = () => {\n setError(\"\")\n // setCardData({\n // firstName: \"\",\n // lastName: \"\",\n // cardNumber: \"\",\n // expiryMonth: \"\",\n // expiryYear: \"\",\n // cvv: \"\",\n // zipCode: \"\"\n // })\n };\n\n const handleCancel = () => {\n setError(\"\")\n setCardData({\n firstName: \"\",\n lastName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n zipCode: \"\",\n authHold: false,\n authorise: false,\n checkSign: false\n })\n onCancel()\n }\n\n // console.log(passFee, \"aoapoaa\");\n\n const getPaymentDetails = async () => {\n try {\n showLoader()\n const res = await axios.get(`${masterBaseUrl}api/v1/gateway/get-payment-details/${session_token}`);\n // console.log(res, \"respinse\");\n if (res?.status == 200) {\n setPaymentGateway(res?.data?.data?.paymentGateway);\n setDCToken(res?.data?.data?.dctoken)\n // Hand off to the Datacap iframe loader in the same batch\n // that clears the page loader, so there's no gap frame with\n // every loading flag false while DataCapFields' own effect\n // spins up.\n if (res?.data?.data?.paymentGateway === 31 && res?.data?.data?.dctoken) {\n setLoadingIframe(true);\n }\n hideLoader();\n }\n\n } catch (error: any) {\n console.log(error?.response?.data?.result, \"error while getting payment details\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n // setError(error?.response?.data?.message || error?.message || \"Something went wrong\")\n hideLoader()\n }\n\n }\n\n useEffect(() => {\n getPaymentDetails();\n }, [])\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n }, []);\n\n\n return (\n <>\n <DataScript />\n {\n paymentGateway == 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n {\n paymentGateway == 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }}\n />\n )\n }\n <AddCardSkyStyle />\n <Loader loading={loading || isloading || loadingIframe} />\n {error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>}\n {errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>}\n {\n !error && !errorIframe && (\n <div className='creditformbox'>\n {\n paymentGateway == 32 ? (\n <form id='paymentForm' onSubmit={handleCardAdd} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }} >\n <div className=\"name-row\">\n <div className=\"form-group\">\n <label> First Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='first_name'\n placeholder='First Name'\n value={cardData?.firstName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('firstName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.firstName && (\n <small className='error'>{cardError?.firstName}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Last Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='last_name'\n placeholder='Last Name'\n value={cardData?.lastName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('lastName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.lastName && (\n <small className='error'>{cardError?.lastName}</small>\n )\n }\n </div>\n </div>\n {isTokenizerReady &&\n <FractalFieldsAddCardSky\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n extraInputs={\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n }\n />\n }\n {/* <div className=\"form-pay-row\">\n <div className=\"form-group\">\n <label> Card Number <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"card_number\"\n placeholder='Card Number'\n maxLength={19}\n inputMode=\"numeric\"\n value={cardData?.cardNumber || \"\"}\n onChange={(e) => handleCardNumberChange(e)}\n className={inputClass}\n />\n {\n cardError?.cardNumber && (\n <small className='error'>{cardError?.cardNumber}</small>\n )\n }\n </div>\n </div>\n <div className=\"card-pay-row\">\n <div className=\"form-group\">\n <label> Exp Month <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_month\"\n placeholder='MM'\n maxLength={2}\n value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryMonth && (\n <small className='error'>{cardError?.expiryMonth}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Exp Year <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_year\"\n placeholder='YYYY'\n maxLength={4}\n value={cardData?.expiryYear || \"\"}\n onChange={(e) => handleCardChange('expiryYear', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryYear && (\n <small className='error'>{cardError?.expiryYear}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> CVV <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"cvv\"\n placeholder='CVV'\n maxLength={4}\n value={cardData?.cvv || \"\"}\n onChange={(e) => handleCardChange('cvv', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.cvv && (\n <small className='error'>{cardError?.cvv}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n </div> */}\n {\n isDual && (\n <div className='pass-fee-toggle-div'>\n <input\n type=\"checkbox\"\n id=\"pass_fee\"\n className=\"toggle-checkbox\"\n checked={passFee ?? false}\n onChange={(e) => { setPassFee(e.target.checked) }}\n />\n <label htmlFor=\"pass_fee\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Cash Discount</label>\n </div>\n )\n }\n {signCheckbox &&\n <div className=\"checks-row\">\n <input\n name=\"discalosure\"\n type=\"checkbox\"\n id=\"disclosureCheck\"\n checked={checkedSignCheckbox}\n onChange={(e) => onCheckSign(e.target.checked)}\n />\n <label htmlFor=\"disclosureCheck\" className=\"form-check-label\">\n Please agree to the following in order to add Payment method.\n </label>\n </div>}\n {\n signCheckbox && cardError?.checkSign && (\n <small className='check-error'>{cardError?.checkSign}</small>\n )\n }\n {showChecks &&\n <>\n <div className=\"checks-row\">\n <input\n name=\"authHold\"\n type=\"checkbox\"\n id=\"authHold\"\n checked={!!cardData?.authHold}\n onChange={(e) => handleCardChange('authHold', e.target.checked)}\n />\n <label htmlFor=\"authHold\" className=\"form-check-label\">\n To securely save your card on file, we will place a temporary\n authorization hold of $1.00. This is not a charge and will be released\n by your card issuer shortly after verification.\n </label>\n </div>\n {\n cardError?.authHold && (\n <small className='check-error'>{cardError?.authHold}</small>\n )\n }\n <div className=\"checks-row \">\n <input\n name=\"authorise\"\n type=\"checkbox\"\n id=\"authorise\"\n checked={!!cardData?.authorise}\n onChange={(e) => handleCardChange('authorise', e.target.checked)} />\n\n <label htmlFor=\"authorise\" className=\"form-check-label see-more\">\n {!seeMore ?\n <>\n <span>\n By providing your payment information, you authorize {merchantName}, a\n Sky Systemz merchant, to securely store your card on file for future\n pay...{\" \"}\n </span>\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(true); }}>See more ...</a>\n </>\n :\n <>\n <span >\n By providing your payment information, you authorize{\" \"}\n <strong>{merchantName}</strong>, a Sky Systemz merchant, to securely\n store your card on file for future payments. Your card information\n will be encrypted and stored in compliance with PCI-DSS (Payment\n Card Industry Data Security Standard) regulations using Sky\n Systemz’s secure payment technology. This information will be used\n solely for transactions you authorize with{\" \"}\n <strong>{merchantName}</strong>. You may request the removal of your\n stored payment information at any time by contacting{\" \"}\n <strong>{merchantName}</strong> directly. By signing or proceeding with\n this transaction, you acknowledge and agree to this card on file\n authorization.\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(false); }}>See less ...</a>\n </span>\n </>\n\n }\n </label>\n </div>\n {\n cardError?.authorise && (\n <small className='check-error'>{cardError?.authorise}</small>\n )\n }\n </>\n }\n <div className='button-row'>\n <button className={`cancelbtn ${cancelbtnClass} `} type=\"button\" onClick={handleCancel} >Cancel</button>\n <button className={`savebtn ${savebtnClass} `} disabled={loading} type='submit' >Save</button>\n </div>\n </form>\n ) : (\n <form id='creditCardForm' onSubmit={handleCardAdd} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }} >\n <div className=\"name-row\">\n <div className=\"form-group\">\n <label> First Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='first_name'\n placeholder='First Name'\n value={cardData?.firstName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('firstName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.firstName && (\n <small className='error'>{cardError?.firstName}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Last Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='last_name'\n placeholder='Last Name'\n value={cardData?.lastName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('lastName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.lastName && (\n <small className='error'>{cardError?.lastName}</small>\n )\n }\n </div>\n </div>\n <div className=\"form-pay-row\">\n <DataCapFields\n isOpen={true}\n tokenKey={dcToken}\n setLoader={setLoadingIframe}\n customCSS={customCSS}\n height={height}\n onError={(msg: string) => setError(msg || DcLoadingError)}\n />\n </div>\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n {/* <div className=\"form-pay-row\">\n <div className=\"form-group\">\n <label> Card Number <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"card_number\"\n placeholder='Card Number'\n maxLength={19}\n inputMode=\"numeric\"\n value={cardData?.cardNumber || \"\"}\n onChange={(e) => handleCardNumberChange(e)}\n className={inputClass}\n />\n {\n cardError?.cardNumber && (\n <small className='error'>{cardError?.cardNumber}</small>\n )\n }\n </div>\n </div>\n <div className=\"card-pay-row\">\n <div className=\"form-group\">\n <label> Exp Month <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_month\"\n placeholder='MM'\n maxLength={2}\n value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryMonth && (\n <small className='error'>{cardError?.expiryMonth}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Exp Year <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_year\"\n placeholder='YYYY'\n maxLength={4}\n value={cardData?.expiryYear || \"\"}\n onChange={(e) => handleCardChange('expiryYear', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryYear && (\n <small className='error'>{cardError?.expiryYear}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> CVV <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"cvv\"\n placeholder='CVV'\n maxLength={4}\n value={cardData?.cvv || \"\"}\n onChange={(e) => handleCardChange('cvv', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.cvv && (\n <small className='error'>{cardError?.cvv}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n </div> */}\n {\n isDual && (\n <div className='pass-fee-toggle-div'>\n <input\n type=\"checkbox\"\n id=\"pass_fee\"\n className=\"toggle-checkbox\"\n checked={passFee ?? false}\n onChange={(e) => { setPassFee(e.target.checked) }}\n />\n <label htmlFor=\"pass_fee\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Cash Discount</label>\n </div>\n )\n }\n {signCheckbox &&\n <div className=\"checks-row\">\n <input\n name=\"discalosure\"\n type=\"checkbox\"\n id=\"disclosureCheck\"\n checked={checkedSignCheckbox}\n onChange={(e) => onCheckSign(e.target.checked)}\n />\n <label htmlFor=\"disclosureCheck\" className=\"form-check-label\">\n Please agree to the following in order to add Payment method.\n </label>\n </div>}\n {\n signCheckbox && cardError?.checkSign && (\n <small className='check-error'>{cardError?.checkSign}</small>\n )\n }\n {showChecks &&\n <>\n <div className=\"checks-row\">\n <input\n name=\"authHold\"\n type=\"checkbox\"\n id=\"authHold\"\n checked={!!cardData?.authHold}\n onChange={(e) => handleCardChange('authHold', e.target.checked)}\n />\n <label htmlFor=\"authHold\" className=\"form-check-label\">\n To securely save your card on file, we will place a temporary\n authorization hold of $1.00. This is not a charge and will be released\n by your card issuer shortly after verification.\n </label>\n </div>\n {\n cardError?.authHold && (\n <small className='check-error'>{cardError?.authHold}</small>\n )\n }\n <div className=\"checks-row \">\n <input\n name=\"authorise\"\n type=\"checkbox\"\n id=\"authorise\"\n checked={!!cardData?.authorise}\n onChange={(e) => handleCardChange('authorise', e.target.checked)} />\n\n <label htmlFor=\"authorise\" className=\"form-check-label see-more\">\n {!seeMore ?\n <>\n <span>\n By providing your payment information, you authorize {merchantName}, a\n Sky Systemz merchant, to securely store your card on file for future\n pay...{\" \"}\n </span>\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(true); }}>See more ...</a>\n </>\n :\n <>\n <span >\n By providing your payment information, you authorize{\" \"}\n <strong>{merchantName}</strong>, a Sky Systemz merchant, to securely\n store your card on file for future payments. Your card information\n will be encrypted and stored in compliance with PCI-DSS (Payment\n Card Industry Data Security Standard) regulations using Sky\n Systemz’s secure payment technology. This information will be used\n solely for transactions you authorize with{\" \"}\n <strong>{merchantName}</strong>. You may request the removal of your\n stored payment information at any time by contacting{\" \"}\n <strong>{merchantName}</strong> directly. By signing or proceeding with\n this transaction, you acknowledge and agree to this card on file\n authorization.\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(false); }}>See less ...</a>\n </span>\n </>\n\n }\n </label>\n </div>\n {\n cardError?.authorise && (\n <small className='check-error'>{cardError?.authorise}</small>\n )\n }\n </>\n }\n <div className='button-row'>\n <button className={`cancelbtn ${cancelbtnClass} `} type=\"button\" onClick={handleCancel} >Cancel</button>\n <button className={`savebtn ${savebtnClass} `} disabled={loading} type='submit' >Save</button>\n </div>\n </form>\n )\n }\n </div>\n )\n }\n </>\n )\n}","import React from 'react'\n\ntype Props = {}\n\nexport default function AddCardSkyStyle({ }: Props) {\n return (\n <style>\n {`\n @import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap\");\n\n .creditformbox {\n // max-width: 550px;\n margin: 0 auto;\n font-family: Poppins !important;\n }\n\n .name-row {\n display: grid;\n grid-gap: 10px;\n grid-template-columns:1fr 1fr;\n }\n\n label {\n display: block;\n color: #383838;\n font-size: 16px;\n }\n\n .form-group span.text-danger{\n color:red;\n }\n .form-group small.error{\n color:red;\n font-size:11px;\n }\n .name-row .form-group {\n display: block;\n width: 100%;\n margin-bottom: 15px;\n }\n\n .creditformbox input, .creditformbox select {\n border: 1.25px solid rgba(234, 236, 239, 1);\n color: rgba(94, 94, 94, 0.75);\n border-radius: 10px;\n width: -webkit-fill-available;\n padding: 10px 12px;\n font-size: .875rem;\n min-height: 20px;\n }\n\n .form-pay-row {\n display: block;\n width: 100%;\n }\n\n .form-pay-row .form-group {\n display: block;\n width: 100%;\n margin-bottom: 15px;\n }\n\n .card-pay-row {\n display: flex;\n width: 100%;\n gap: 10px;\n flex-wrap: wrap;\n }\n\n .card-pay-row .form-group {\n flex: 1;\n margin-bottom: 15px;\n min-width: 100px;\n }\n .card-pay-row #exp_month , .card-pay-row #exp_year, .card-pay-row #cvv , .form-pay-row #card_number{\n height: 20px;\n border: 1.25px solid rgba(234, 236, 239, 1);\n color: rgba(94, 94, 94, 0.75);\n border-radius: 10px;\n width: -webkit-fill-available;\n padding: 10px 12px;\n font-size: .875rem;\n }\n\n .creditformbox input:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);\n }\n\n .checks-row{\n display:flex;\n align-items:start;\n gap:10px\n }\n .checks-row input {\n border: 1.25px solid rgba(234, 236, 239, 1);\n color: rgba(94, 94, 94, 0.75);\n border-radius: 10px;\n min-width: 16px !important;\n width:16px !important;\n padding: 10px 12px;\n font-size: .875rem;\n max-height: 16px !important;\n height: 16px !important;\n }\n // .checks-row input.is-valid:checked{\n // background-color: #198754;\n // border-color: #198754;\n // background-image: url(data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e);\n // }\n .check-error{\n color:red;\n font-size:11px;\n padding-left:25px\n }\n .button-row{\n display: flex;\n width: 100%;\n gap: 10px;\n flex-wrap: wrap;\n margin-top: 20px !important\n }\n .button-row .btn{\n flex: 1;\n margin-top:20px;\n }\n\n .cancelbtn {\n font-size:15px;\n color: #000000 !important;\n background-color: transparent !important;\n background: transparent !important;\n border:1px solid #000000 !important;\n border-radius: 10px !important;\n padding: 10px 25px !important;\n cursor:pointer;\n font-size: 16px;\n }\n .cancelbtn:hover {\n background:#000000 !important;\n color:#ffffff !important;\n }\n\n .savebtn {\n font-size:15px;\n color: #2979FF;\n background-color: transparent;\n background: transparent;\n border:1px solid #2979FF;\n border-radius: 10px;\n padding: 10px 25px;\n cursor:pointer;\n font-size: 16px;\n }\n .savebtn:hover {\n background:#2979FF;\n color:#ffffff;\n }\n \n .toggle-label {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 24px;\n background-color: #ccc;\n border-radius: 12px;\n cursor: pointer;\n transition: background-color 0.3s;\n }\n\n .toggle-label::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: left 300ms linear;\n }\n\n .toggle-checkbox {\n display: none;\n }\n\n .toggle-checkbox:checked + .toggle-label {\n background-color: #4caf50;\n }\n\n .toggle-checkbox:checked + .toggle-label::before {\n left: 18px;\n }\n .pass-fee-toggle-div {\n display: flex;\n align-items: center;\n gap: 10px;\n padding-top: 10px;\n }\n `}\n\n\n </style>\n )\n}","'use client'\nimport { useEffect, useRef } from \"react\";\n\ninterface Props {\n fractalStyles: any;\n tokenizerRef: React.MutableRefObject<any>;\n extraInputs?: any;\n}\n\nconst FractalFieldsAddCardSky = ({ fractalStyles, tokenizerRef, extraInputs }: Props) => {\n const instanceRef = useRef<any>(null);\n\n useEffect(() => {\n const Tokenizer = (window as any).FractalTokenizer;\n\n if (!Tokenizer) {\n console.error(\"Tokenizer not available\");\n return;\n }\n\n const instance = new Tokenizer({\n styles: fractalStyles,\n });\n\n instanceRef.current = instance;\n tokenizerRef.current = instance;\n\n instance.mountField(\"card_number\", \"card_number\");\n instance.mountField(\"exp_month\", \"exp_month\");\n instance.mountField(\"exp_year\", \"exp_year\");\n instance.mountField(\"cvv\", \"cvv\");\n\n console.log(\"Fractal fields mounted\");\n\n return () => {\n try {\n instance.destroy?.();\n } catch (err) { }\n\n tokenizerRef.current = null;\n };\n }, []);\n\n return (\n <>\n <div className=\"form-pay-row\">\n <div className=\"form-group\" >\n <label> Card Number <span className=\"text-danger\">*</span></label>\n <div\n id=\"card_number\"\n className=\"form-control card-number-new\"\n style={{ display: \"inline-block\" }}\n\n />\n </div>\n </div>\n <div className=\"card-pay-row\">\n <div className=\"form-group\">\n <label> Exp Month <span className=\"text-danger\">*</span></label>\n <div\n id=\"exp_month\"\n className=\"form-control required card-cvv-in\"\n style={{ display: \"inline-block\" }}\n />\n </div>\n <div className=\"form-group\">\n <label> Exp Year <span className=\"text-danger\">*</span></label>\n <div\n id=\"exp_year\"\n className=\"form-control required card-cvv-in\"\n style={{ display: \"inline-block\" }}\n\n />\n </div>\n <div className=\"form-group\">\n <label> CVV <span className=\"text-danger\">*</span></label>\n <div\n id=\"cvv\"\n className=\"form-control card-cvv-in required\"\n style={{ display: \"inline-block\" }}\n\n />\n </div>\n {extraInputs}\n </div>\n </>\n );\n};\n\nexport default FractalFieldsAddCardSky;\n","import React, { useEffect, useRef, useState } from 'react'\nimport DataScript from '../Datascript'\nimport Chargewidgetstyles from '../Charge/Chargewidgetstyles'\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles'\nimport FractalWidgetStyles from '../Charge/FractalWidgetStyles'\nimport { baseUrl, fractalGatewayUrl, masterBaseUrl, S3Url } from '../baseurl'\nimport axios from 'axios'\nimport socket from '../socketClient'\nimport { accountTypes, formatCardNumberWithCursor, formatUSD, isValidJson } from '@/app/utils/Common'\nimport Swal from 'sweetalert2'\nimport CustomModal2 from '../CustomModal/CustomModal2'\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage'\nimport SuccessMsz from '../SuccessMessage/SuccessMsz'\nimport Loader from '../Loader/Loader'\nimport { NumericFormat } from 'react-number-format'\nimport FractalFields, { SurchargeLookupOptions, SurchargeLookupResult, TokenizerSession } from '../Atoms/FractalForm/FractalFields'\nimport FractalTokenizerScript from '../FractalTokenizer'\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment'\nimport { DcLoadingError } from '@/app/utils/Constant'\nimport {\n FractalOrderSummary, FractalModalHeader, FractalMethodToggle,\n FractalSavedMethods, FractalReaderList, FractalFooter, FractalField, FractalCheckbox,\n SummaryLine,\n} from '../Fractal/FractalCheckoutUI'\n\n\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\ndeclare let FractalTokenizer: any;\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n from?: string;\n amount: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n pass_fee?: boolean;\n orderGuid: string;\n onTriggerPay?: (fn: () => void) => void;\n allowPartial: boolean;\n cashDiscount?: string;\n}\n\ntype activeinTabs = 'form' | 'list'\n\n\ninterface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n}\ninterface achDetails {\n name: string;\n routingNumber: string;\n accountNumber: string;\n confirmAccountNumber: string;\n bankName: string;\n accountType: string;\n companyName?: string;\n}\n\ninterface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n card_issue_type?: string | null;\n}\n\ninterface PaymentDevice {\n id: number;\n device_id: number;\n device_name: string;\n}\n\ninterface OrderDetails {\n orderId?: string;\n}\n\ninterface PaymentData {\n paymentGateway: number;\n isSkyFiAccount: boolean;\n logo: string;\n bname: string;\n card_list: Card[];\n customer_name: string;\n is_primary: string;\n paymentDeviceList: PaymentDevice[];\n orderDetails: OrderDetails;\n dctoken: string;\n showSurcharge?: number;\n surchargeProgram?: number;\n}\ninterface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n card_issue_type?: string | null;\n}\n\ninterface SelectedReader {\n id?: number;\n device_id?: number;\n device_name?: string;\n}\n\nexport function PartialPayment(props: Props) {\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (props.onTriggerPay) {\n props.onTriggerPay(() => {\n handleShow();\n });\n }\n }, [props]);\n\n let mastercard = S3Url + 'widget/mc-img.svg'\n let visa = S3Url + 'widget/visa-img.svg'\n let americanexp = S3Url + 'widget/ae-img.svg'\n let discover = S3Url + 'widget/discover-img.svg'\n let defaultcard = S3Url + 'widget/card.svg'\n let trash = S3Url + 'widget/Trash.svg'\n let bank = S3Url + 'widget/bank.svg'\n let secure = S3Url + 'widget/secure-img.png'\n let pov = S3Url + 'widget/pov-by.png'\n let pax = S3Url + 'widget/pax.svg'\n\n const [loading, setLoading] = useState<boolean>(false);\n const [loading2, setLoading2] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [surchargeLookupLoading, setSurchargeLookupLoading] = useState<boolean>(false);\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n const [show, setShow] = useState<boolean>(false);\n const [activetab, setActive] = useState<string>('card');\n const [activeinCard, setActiveinCard] = useState<activeinTabs>('form')\n const [activeinBank, setActiveinBank] = useState<activeinTabs>('form')\n const [saveCardInfo, setSaveCardInfo] = useState<boolean>(false);\n const [saveACHinfo, setSaveACHinfo] = useState<boolean>(false);\n const fractalpayClientKey = props.merchantPublicKey;\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [achData, setAchData] = useState<achDetails>()\n const [achError, setAchError] = useState<Partial<Record<keyof achDetails, string>>>({});\n const [cardList, setCardList] = useState([])\n const [bankList, setBankList] = useState([])\n const [selectedCard, setSelectedCard] = useState<SelectedCard>()\n const [selectedReader, setSelectedReader] = useState<SelectedReader>()\n const [cashDiscount, setCashDiscount] = useState<number | undefined>(Number(props?.amount));\n const [aftertaxAmount, setAfterTaxAmount] = useState<number>(Number(props?.amount));\n const [partialAmount, setPartialAmount] = useState<string | undefined>('');\n const [partialError, setPartialError] = useState<string>(\"\");\n const [isBankConsentChecked, setIsBankConsentChecked] = useState<boolean>(false);\n const [errorBankConsent, setErrorBankConsent] = useState<string>(\"\");\n const [saveACHConsent1, setSaveACHConsent1] = useState<boolean>(false);\n const [errorBankConsentOther, setErrorBankConsentOther] = useState<string>(\"\");\n const [loaderText, setLoderText] = useState<string>(\"\");\n let [isDebitAdjusted, setIsDebitAdjusted] = useState<boolean>(false);\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '16px',\n 'color': '#212529',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#212529',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#212529'\n }\n };\n\n\n const [paymentData, setPaymentData] = useState<PaymentData>()\n let [tranId, setTranId] = useState(\"\")\n // Pre-charge surcharge assessment from the tokenizer (PAN-complete lookup) or COF lookup.\n const [surchargeResult, setSurchargeResult] = useState<SurchargeLookupResult | null>(null);\n\n // ---- surcharge-lookup-aware card total ----\n // Surcharging only reduces the card price when the merchant runs a true surcharge program;\n // cash-discount merchants always show/charge the full price regardless of card type, same\n // as GetPaymentPage.\n const isSurchargeProgram = Number(paymentData?.surchargeProgram) === 1\n const fundingType = surchargeResult?.card_issue_type?.toLowerCase()\n const feeExempt = fundingType === 'debit' || fundingType === 'prepaid'\n const cardTotal = isSurchargeProgram && feeExempt ? Number(cashDiscount ?? props?.amount ?? 0) : Number(aftertaxAmount)\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount - (amount * surchargeVal);\n return originalAmount; // rounding to 2 decimals\n };\n\n\n const CalculateAfterTaxAmount = (amount: any, surcharge: any) => {\n const surchargeVal = (Number(surcharge) || 0) / 100;\n const originalAmount = +amount + +(amount * surchargeVal);\n return originalAmount; // rounding to 2 decimals\n };\n\n // Mints a tokenized session for the surcharge lookup — same endpoint and shape as the\n // charge flow. Resolves null on failure so the lookup fails soft.\n const createSurchargeSession = async (): Promise<TokenizerSession | null> => {\n try {\n const requestOptions = { method: \"POST\", redirect: \"follow\" };\n const res = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions);\n const data = res?.data?.data;\n const public_key_pem = data?.publicKeyPem || data?.public_key_pem;\n const session_key = data?.session_key;\n if (!public_key_pem || !session_key) return null;\n return { session_key, public_key_pem };\n } catch (err) {\n console.error(\"Surcharge session error\", err);\n return null;\n }\n };\n\n // Lookup inputs, read lazily at lookup time. amount is the pre-fee subtotal in cents,\n // preferring the partial amount when one is set and valid.\n const getSurchargeOptions = (): SurchargeLookupOptions => ({\n amount: Math.round((partialAmount && !partialError ? Number(partialAmount) : Number(cashDiscount ?? props?.amount ?? 0)) * 100),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n\n // Surcharge assessment for a saved card (card-on-file) — there's no PAN to run through the\n // tokenizer iframe for a saved card, so this hits the backend by card_id instead. Fails soft,\n // same as createSurchargeSession/lookupSurcharge.\n const runCofSurchargeLookup = async (cardId: string): Promise<SurchargeLookupResult | null> => {\n try {\n const res = await axios.post(`${baseUrl}surcharge-lookup-cof`, {\n fractalpayPublicKey: fractalpayClientKey,\n customer_id: props?.customerId,\n card_id: cardId,\n amount: partialAmount && !partialError ? Number(partialAmount) : Number(cashDiscount ?? props?.amount ?? 0),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n const data = res?.data?.data;\n if (!data) return null;\n return {\n card_brand: data.card_brand,\n card_issue_type: data.card_issue_type,\n surcharge_allowed: data.surcharge_allowed,\n max_surcharge_percent: data.max_surcharge_percent,\n max_surcharge_amount: data.max_surcharge_amount,\n };\n } catch (err) {\n console.error(\"COF surcharge lookup failed\", err);\n return null;\n }\n };\n\n // Fires whenever the customer picks a saved card. Bank accounts are never card-surcharged,\n // so skip the call entirely for those — same waiver the live-PAN path applies.\n useEffect(() => {\n const surchargingOn = Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee;\n if (!surchargingOn || !selectedCard?.id || selectedCard.card_type === 'Bank') {\n setSurchargeResult(null);\n return;\n }\n let cancelled = false;\n setSurchargeLookupLoading(true);\n runCofSurchargeLookup(selectedCard.id).then((result) => {\n if (cancelled) return;\n setSurchargeResult(result);\n setSurchargeLookupLoading(false);\n });\n return () => { cancelled = true; };\n }, [selectedCard?.id, selectedCard?.card_type, paymentData?.surchargeProgram, props?.pass_fee]);\n\n useEffect(() => {\n if (show) {\n if (props?.pass_fee) {\n setAfterTaxAmount(Number(props?.amount));\n setCashDiscount(Number(props?.cashDiscount));\n } else {\n setAfterTaxAmount(Number(props?.amount));\n setCashDiscount(Number(props?.amount));\n }\n }\n\n // if (props?.pass_fee) {\n // } else {\n // setCashDiscount(undefined);\n // }\n }, [show, props?.pass_fee, props?.amount, props?.surcharge])\n\n // for payment popup\n const handleClose = () => {\n setShow(false);\n setActive('card')\n setError(\"\")\n setSuccess(false)\n setTranId(\"\")\n setSurchargeResult(null)\n setAchData({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setAchError({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setCardError({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveACHinfo(false)\n setSaveCardInfo(false)\n setSelectedCard({\n card_type: \"\",\n cardlastfourdigit: \"\",\n expmonth: 1,\n expyear: 2025,\n primary_card: 0,\n firstname: \"\",\n id: \"\",\n lastname: \"\",\n })\n setSelectedReader({})\n setCashDiscount(0)\n setActiveinBank('form')\n setActiveinCard('form')\n setLoading2(false);\n setLoading(false);\n setBankList([]);\n setCardList([]);\n setPartialAmount('');\n setPartialError('');\n setIsBankConsentChecked(false);\n setErrorBankConsent('');\n setSaveACHConsent1(false)\n setErrorBankConsentOther('');\n setLoderText(\"\");\n };\n const handleShow = () => setShow(true);\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n\n const handleChangeAch = (e: any) => {\n const { name, value } = e.target\n const numericFields = [\"routingNumber\", \"accountNumber\", \"confirmAccountNumber\"];\n if (name == \"name\") {\n\n\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return\n\n }\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n setCardError(errors);\n\n // Return true if there is any error\n return Object.keys(errors).length > 0;\n };\n const validateAchData = (): boolean => {\n const errors: Partial<Record<keyof achDetails, string>> = {};\n const data = achData\n if (!data?.name?.trim()) errors.name = \"Name is required\";\n if (!data?.accountNumber?.trim()) errors.accountNumber = \"Account number is required\";\n if (data?.accountNumber?.trim() && data?.accountNumber?.trim() !== data?.confirmAccountNumber?.trim()) errors.confirmAccountNumber = \"Account numbers must match\";\n if (!data?.bankName?.trim()) errors.bankName = \"Bank name is required\";\n if (!data?.routingNumber?.trim()) errors.routingNumber = \"Routing Number is required\";\n\n\n if (data?.routingNumber && data?.routingNumber?.length !== 9) errors.routingNumber = \"Routing number must be 9 digits\";\n\n\n if ((data?.accountType === 'business saving' || data?.accountType === 'business checking')) {\n if (!data?.companyName || data?.companyName === \"\") {\n errors.companyName = \"Company Name is required for business accounts\";\n }\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n setErrorBankConsent('Above consent is required');\n }\n\n if (saveACHinfo && !saveACHConsent1) {\n setErrorBankConsentOther('Your consent is required to save your bank details for future use');\n }\n\n setAchError(errors);\n return (Object.keys(errors).length > 0);\n };\n\n\n\n const submitFunc = async (e: any) => {\n e.preventDefault();\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading2) return;\n if (partialError) {\n return\n }\n if (activetab !== 'ach') {\n const hasError = validateCardData()\n if (hasError) return\n else {\n let validCard = true;\n let validExpirationDate = true;\n let validCVV = true;\n\n if (validCard && validCVV && validExpirationDate) {\n\n // showLoader()\n setLoading2(true)\n try {\n let tokenCallback = async function (response: any) {\n\n if (response.Error) {\n setError(response.Error)\n // hideLoader();\n setLoading2(false)\n\n\n } else {\n let name = cardData?.cardName;\n let postal_code = cardData?.zipCode;\n\n response.name = name;\n response.postal_code = postal_code;\n response.isCardSave = `${saveCardInfo}`\n response.isCharge = true;\n response.posSalesIdEncode = paymentData?.orderDetails?.orderId;\n response.partial_amount = partialAmount && !partialError ? partialAmount : cardTotal\n\n\n socket.emit(\"sendMessage\", response)\n let eventName: string = paymentData?.orderDetails?.orderId!\n socket.on(eventName, (data: any) => {\n if (isValidJson(data?.data)) {\n let apiResponse = JSON.parse(data.data);\n if (apiResponse?.result) {\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveCardInfo(false)\n setTranId(apiResponse?.transactionId)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(apiResponse?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n }\n }\n\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n try {\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n\n try {\n const tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n\n const card_issue_type = tokenizeData?.bin_lookup_result?.card_issue_type || null;\n\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExemptCard = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExemptCard && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`);\n }\n const reqData = JSON.stringify({\n ...tokenizeData,\n isSaveCardChecked: saveCardInfo,\n name: cardData?.cardName,\n postal_code: cardData?.zipCode,\n customer_id: props?.customerId,\n partial_amount: partialAmount && !partialError ? partialAmount : cardTotal,\n card_issue_type\n })\n\n const reqData2 = JSON.stringify({\n \"pre_sales_id\": `${paymentData?.orderDetails?.orderId!}`,\n \"token\": `${tokenizeData?.token}`,\n \"json_response\": `${reqData}`\n })\n let myHeaders2 = JSON.stringify({\n \"Content-Type\": \"application/json\"\n })\n const requestOptions = {\n method: \"POST\",\n headers: myHeaders2,\n body: reqData2,\n redirect: \"follow\",\n isChargeviafractal: true,\n };\n\n socket.emit(\"sendMessage\", requestOptions)\n socket.on('chargeviafractalgateway', (data: any) => {\n if (isValidJson(data?.data)) {\n let paymentRes = JSON.parse(data?.data)\n if (paymentRes?.result) {\n setTranId(paymentRes?.data?.transactionId)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(paymentRes?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } else {\n try {\n const result = await (window as any).requestDcToken();;\n // console.log(\"Token:\", result.Token);\n if (result.Token) {\n tokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading2(false);\n }\n }\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n } else {\n let hasError = validateAchData()\n if (saveACHinfo && !saveACHConsent1) {\n hasError = true;\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n hasError = true;\n }\n if (hasError) return\n else {\n setLoading2(true)\n let dataForm = {\n fractalpayPublicKey: fractalpayClientKey,\n label: achData?.name || \"John Doe\",\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n amount: partialAmount && !partialError ? partialAmount : String(cashDiscount || 0),\n isSaveAch: saveACHinfo,\n customer_id: props?.customerId,\n order_id: props?.orderID,\n tax: props?.tax,\n discount: props?.discount,\n surcharge: props?.surcharge,\n isChargeACH: true,\n company_name: achData?.companyName || \"\",\n orderGuid: props?.orderGuid\n }\n // showLoader()\n socket.emit(\"sendMessage\", dataForm)\n socket.on('ach-incoming', (data: any) => {\n if (data?.status == \"Failed\") {\n if (typeof (data?.message) == \"object\") {\n Object.values(data?.message).forEach((message: any) => {\n setError(message || \"Something went wrong\");\n });\n } else {\n setError(data?.message || \"Something went wrong\")\n }\n } else {\n setTranId(data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n }\n })\n }\n }\n\n }\n\n\n const getPaymentDetails = async () => {\n showLoader()\n try {\n const data = {\n fractalpayPublicKey: fractalpayClientKey,\n \"customer_id\": props?.customerId,\n pass_fee: props?.pass_fee,\n orderGuid: props?.orderGuid\n }\n let paymentData = await axios.post(`${baseUrl}get-payment-details`, data)\n setPaymentData(paymentData?.data?.data)\n if (!paymentData?.data?.data?.paymentGateway) {\n handleClose()\n setError(\"Something went wrong.\")\n }\n let willShowCardForm = true\n if (paymentData?.data?.data?.card_list && paymentData?.data?.data?.card_list?.length > 0) {\n let banklists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type == 'Bank')\n let cardlists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type !== 'Bank')\n if (cardlists?.length > 0) {\n setActiveinCard('list')\n willShowCardForm = false\n }\n if (banklists?.length > 0) {\n setActiveinBank('list')\n }\n setCardList(cardlists)\n setBankList(banklists)\n } else {\n setActive('card')\n }\n\n if (paymentData?.data?.data?.paymentDeviceList && paymentData?.data?.data?.paymentDeviceList?.length > 0) {\n setSelectedReader(paymentData?.data?.data?.paymentDeviceList[0])\n }\n\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no gap frame with every\n // loading flag false while DataCapFields' own effect spins up.\n // Only when the card form (not the saved-methods list) will\n // actually render DataCapFields, otherwise this would get stuck\n // true forever since DataCapFields never mounts to clear it.\n if (willShowCardForm && paymentData?.data?.data?.paymentGateway === 31 && paymentData?.data?.data?.dctoken) {\n setLoadingIframe(true)\n }\n\n hideLoader()\n } catch (err: any) {\n console.log(err);\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong\")\n }\n }\n\n const handlechargeCustomer = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n let customer_id = props?.customerId\n let discount = String(props?.discount)\n let surcharge = String(props?.surcharge)\n let tax = String(props?.tax)\n let fractalpayPublicKey = props?.merchantPublicKey\n let order_id = props?.orderID\n let amount = partialAmount && !partialError ? partialAmount : String(aftertaxAmount)\n let card_id = selectedCard?.id\n let card_type = selectedCard?.card_type\n let card_issue_type = selectedCard?.card_issue_type\n\n if (partialError) {\n return\n }\n\n if (fractalpayPublicKey && order_id && amount && cashDiscount) {\n if (customer_id) {\n if (card_id) {\n let amount\n if (partialAmount && !partialError) {\n amount = partialAmount;\n } else if (card_type === \"Bank\") {\n amount = cashDiscount;\n } else {\n amount = cardTotal;\n }\n\n let chargeobj: any = {\n amount: amount,\n order_id,\n customer_id,\n card_id,\n fractalpayPublicKey,\n isCardSave: saveCardInfo,\n discount,\n surcharge,\n tax,\n orderGuid: props?.orderGuid,\n pass_fee: props?.pass_fee,\n require3ds: false\n }\n\n if (partialAmount && !partialError && card_type !== \"Bank\") {\n chargeobj.ispartialPayment = true;\n }\n\n let { isCardSave, ...rest } = chargeobj\n\n\n let endpoint = card_type === \"Bank\" ? \"charge-ach\" : \"charge-by-card\"\n\n let chargeurl = baseUrl + endpoint\n const headers = {\n 'Content-Type': 'application/json'\n }\n // showLoader()\n setLoading2(true)\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExemptCard = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExemptCard && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`)\n }\n socket.emit(\"sendMessage\", { url: chargeurl, body: card_type == 'Bank' ? rest : chargeobj, isChargebycard: true })\n socket.on('charge-by-card', (response: any) => {\n if (response?.result == true || response?.status == true) {\n setIsDebitAdjusted(response.data?.adjustedForDebit);\n setTranId(response.data?.transaction_id)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setError(response?.message || \"Something went wrong.\")\n }\n })\n\n } else {\n setError(\"Please Select A Card/ACH\")\n }\n } else {\n setError(\"Please Select Customer\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n const handleChargewithEMV = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n let fractalpayPublicKey = props?.merchantPublicKey\n let customer_order_id = props?.orderID\n let amount = partialAmount && !partialError ? partialAmount : String(aftertaxAmount)\n let customer_id = props?.customerId\n\n if (!selectedReader?.device_id) {\n setError(\"Please Select A Payment Device\")\n return\n }\n\n if (fractalpayPublicKey && customer_order_id && amount) {\n setLoading2(true)\n let obj = {\n amount,\n fractalpayPublicKey,\n customer_order_id,\n device_id: selectedReader?.device_id,\n customer_id: customer_id || \"\"\n }\n\n try {\n let response = await axios.post(`${baseUrl}charge-with-reader`, obj)\n\n\n if (response?.data?.result == true) {\n setTranId(response?.data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n } else {\n setError(response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n useEffect(() => {\n if (show && fractalpayClientKey) {\n\n getPaymentDetails()\n }\n }, [fractalpayClientKey, show])\n\n const handleDeleteCard = async (cardId: any) => {\n Swal.fire({\n icon: 'warning',\n text: 'Do you want to delete the card?',\n showCancelButton: true,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n reverseButtons: true,\n buttonsStyling: false,\n customClass: {\n confirmButton: 'swal2-confirm btn btn-dark',\n cancelButton: 'swal2-cancel btn btn-dark',\n popup: 'custom-swal-popup',\n icon: 'custom-swal-icon'\n }\n }).then(async (result) => {\n if (result.isConfirmed) {\n setLoading2(true)\n try {\n let obj = {\n card_id: cardId,\n customer_id: props?.customerId,\n fractalpayPublicKey: props?.merchantPublicKey\n }\n\n const res = await axios.post(`${baseUrl}delete-customer-card`, obj)\n setLoading2(false)\n\n getPaymentDetails()\n Swal.fire({\n icon: 'success',\n title: 'Deleted!',\n text: 'Card deleted.',\n confirmButtonText: 'OK',\n showConfirmButton: true,\n timer: 1000,\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n\n } catch (err) {\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Error!',\n text: 'Failed to delete the card.',\n confirmButtonText: 'OK',\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n });\n }\n\n\n } else if (result.dismiss === Swal.DismissReason.cancel) {\n Swal.fire({\n icon: 'info',\n text: 'Card not deleted',\n confirmButtonText: 'OK',\n buttonsStyling: false,\n customClass: {\n confirmButton: 'btn btn-dark float-end',\n actions: 'swal2-actions-end'\n }\n });\n\n }\n });\n };\n\n const getCardType = (card: string) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return card;\n }\n };\n\n // console.log(activeinCard, \"activeinCard\", \"activeinBank\", activeinBank);\n\n const handlePartialChange = (values: any) => {\n // console.log(values, \"values\");\n if (activetab === 'ach') {\n if ((Number(cashDiscount)?.toFixed(2) < values?.floatValue) || (values?.floatValue <= 0)) {\n setPartialAmount(values?.value);\n setPartialError(`Partial amount cannot exceed ${formatUSD(Number(cashDiscount)?.toFixed(2))}`);\n } else {\n setPartialAmount(values?.value);\n setPartialError(\"\");\n }\n } else {\n // cardTotal already drops the surcharge when the entered/selected card came back\n // debit or prepaid from the surcharge lookup, so the cap follows suit.\n if ((Number(cardTotal)?.toFixed(2) < values?.floatValue) || (values?.floatValue <= 0)) {\n setPartialAmount(values?.value);\n setPartialError(`Partial amount cannot exceed ${formatUSD(Number(cardTotal)?.toFixed(2))}`);\n } else {\n setPartialAmount(values?.value);\n setPartialError(\"\");\n }\n }\n\n }\n\n useEffect(() => {\n // cardTotal already drops the surcharge when the entered/selected card came back\n // debit or prepaid from the surcharge lookup, so the cap follows suit.\n const baseAmount = activetab === \"ach\"\n ? Number(cashDiscount)\n : Number(cardTotal);\n\n const partial = Number(partialAmount);\n\n if (partialAmount) {\n if (partial <= 0 || partial > baseAmount) {\n setPartialError(`Partial amount cannot exceed ${formatUSD(baseAmount.toFixed(2))}`);\n } else {\n setPartialError(\"\");\n }\n } else {\n setPartialError(\"\");\n }\n }, [activetab, partialAmount, cashDiscount, cardTotal]);\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n\n\n }, []);\n\n // ---- derived display values for the redesigned checkout UI (mirrors GetPaymentPage.tsx) ----\n const merchantName = paymentData?.bname || paymentData?.customer_name || 'the merchant'\n // Avoid \"Invoice #Invoice123\" when the order id already carries an \"Invoice\" prefix.\n const invoiceNo = String(props?.orderID || '').replace(/^\\s*invoice\\s*#?\\s*/i, '').trim()\n const invoiceLabel = invoiceNo ? `Invoice #${invoiceNo}` : 'Invoice'\n const baseAmount = Number(cashDiscount ?? props?.amount ?? 0)\n const surchargeFee = Math.max(cardTotal - baseAmount, 0)\n // Once a saved method is selected in the merged list, its own card_type decides bank vs.\n // card — not the tab. Falls back to the tab when the list isn't showing a selection.\n const isBankView = activetab !== 'reader' && activeinCard === 'list' && !!selectedCard?.id\n ? selectedCard?.card_type === 'Bank'\n : activetab === 'ach'\n const discountNum = Number(props?.discount || 0)\n const taxNum = Number(props?.tax || 0)\n const hasFee = surchargeFee > 0 && !!props?.pass_fee\n const showSurchargeLine = isSurchargeProgram && !isBankView && hasFee\n const summarySubtotal = (isSurchargeProgram || isBankView) ? baseAmount : cardTotal\n const fmtNum = (n: number) => Number(n).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })\n\n // The partial-amount input, when set and valid, overrides whatever the selected method\n // would otherwise charge.\n const partialOverride = partialAmount && !partialError ? Number(partialAmount) : null\n const methodTotal = isBankView ? Number(cashDiscount || 0) : cardTotal\n const effectiveTotal = partialOverride ?? methodTotal\n\n // Bank/ACH is temporarily hidden for partial payment — saved bank accounts are dropped\n // from the merged list and the Bank toggle tab isn't offered. Flip this back to\n // `paymentData?.isSkyFiAccount` to restore it.\n const hideBank = true\n const savedMethods: any[] = [...(cardList || []), ...(hideBank ? [] : (bankList || []))]\n const hasSaved = savedMethods.length > 0\n const showList = hasSaved && activetab !== 'reader' && activeinCard === 'list'\n\n const availableMethods: string[] = [\n 'card',\n ...(!hideBank && paymentData?.isSkyFiAccount ? ['ach'] : []),\n ...(paymentData?.paymentDeviceList && paymentData.paymentDeviceList.length > 0 ? ['reader'] : []),\n ]\n\n const goToList = () => { setActive('card'); setActiveinCard('list'); setActiveinBank('list'); setError(''); }\n const payWithOther = () => { setActive('card'); setActiveinCard('form'); setActiveinBank('form'); setError(''); }\n const switchMethod = (m: string) => {\n setActive(m)\n if (m === 'card' || m === 'ach') { setActiveinCard('form'); setActiveinBank('form'); }\n setError('')\n }\n\n const rightTitle = showList\n ? 'Payment methods'\n : activetab === 'reader'\n ? 'Reader payment'\n : activetab === 'ach'\n ? 'Bank payment'\n : 'Card payment'\n\n const showBack = hasSaved && !showList\n\n const MethodToggle = (\n <FractalMethodToggle\n methods={[\n { value: 'card', label: 'Card' },\n ...(availableMethods.includes('ach') ? [{ value: 'ach', label: 'Bank' }] : []),\n ...(availableMethods.includes('reader') ? [{ value: 'reader', label: 'Reader' }] : []),\n ]}\n active={activetab}\n onChange={switchMethod}\n />\n )\n\n const summaryLines: SummaryLine[] = [\n { label: 'Subtotal', value: fmtNum(summarySubtotal) },\n { label: 'Discount', value: fmtNum(discountNum), muted: true },\n { label: 'Tax', value: fmtNum(taxNum), muted: true },\n ...(showSurchargeLine ? [{ label: 'Surcharge', value: formatUSD(surchargeFee.toFixed(2)) }] : []),\n ]\n\n const summaryNote = isBankView\n ? null\n : !hasFee ? null\n : <div className=\"fps-note\"><b>{formatUSD(baseAmount.toFixed(2))}</b> if customer pays with debit or by bank (no surcharge).</div>\n\n const partialInput = props?.allowPartial ? (\n <FractalField label=\"Partial payment\" htmlFor=\"partialpayment\" error={partialError}>\n <NumericFormat\n id=\"partialpayment\"\n className=\"fps-input\"\n prefix=\"$\"\n thousandSeparator\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n placeholder=\"Enter partial amount\"\n value={partialAmount}\n onValueChange={handlePartialChange}\n />\n </FractalField>\n ) : null\n\n const LeftSummary = (\n <FractalOrderSummary\n logo={paymentData?.logo}\n invoiceLabel={invoiceLabel}\n lines={summaryLines}\n total={formatUSD(effectiveTotal.toFixed(2))}\n cardIcons={isBankView ? null : { visa, mastercard, amex: americanexp, discover }}\n note={summaryNote}\n secureIcon={secure}\n extra={partialInput}\n />\n )\n\n const AuthText = (\n <p className=\"fps-auth\">\n By paying, you authorize {merchantName} to charge {formatUSD(effectiveTotal.toFixed(2))} to your {isBankView ? 'account' : 'card'}. <u>Refund policy</u>.\n </p>\n )\n\n return (\n <>\n <DataScript />\n {\n paymentData?.paymentGateway === 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n\n {\n paymentData?.paymentGateway === 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }} />\n )\n }\n <Chargewidgetstyles />\n <CardBankRadioStyles />\n <FractalWidgetStyles />\n <>\n <button ref={buttonRef} style={{ display: 'none' }} className=\"paymentBtn\" onClick={handleShow}>\n Pay\n </button>\n\n <CustomModal2\n open={show}\n onClose={handleClose}\n maxWidth=\"760px\"\n >\n {error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>}\n {errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>}\n {success && <SuccessMsz onClose={handleClose} tranId={tranId} isDebitAdjusted={isDebitAdjusted} />}\n {!error && !success && !errorIframe &&\n <>\n {(loading || loading2 || loadingIframe || surchargeLookupLoading) && <Loader loading={loading || loading2 || loadingIframe || surchargeLookupLoading} loaderText={loaderText} />}\n\n <div className=\"fps-modal\">\n {LeftSummary}\n\n <section className=\"fps-content\">\n <FractalModalHeader title={rightTitle} onBack={showBack ? goToList : undefined} onClose={handleClose} />\n\n {/* ---------- Saved methods list ---------- */}\n {showList ? (\n <>\n <FractalSavedMethods\n sectionLabel=\"Cards / bank accounts\"\n items={savedMethods.map((card: any) => {\n const isBankCard = card?.card_type === 'Bank'\n let isDisabled = false\n if (paymentData?.paymentGateway) {\n isDisabled = paymentData?.paymentGateway != card?.payment_method_type && !isBankCard\n }\n return {\n id: card?.id,\n primaryText: `**** ${card?.cardlastfourdigit}`,\n secondaryText: isBankCard ? undefined : `${card?.expmonth}/${card?.expyear}`,\n badge: isBankCard ? 'BANK' : (card?.card_issue_type || 'CARD'),\n brandLogo: isBankCard ? undefined : getCardType(card?.card_type),\n disabled: isDisabled,\n }\n })}\n selectedId={selectedCard?.id}\n onSelect={(id) => setSelectedCard(savedMethods.find((c: any) => c?.id === id))}\n onRemove={(id) => handleDeleteCard(id)}\n removeIcon={trash}\n otherLabel=\"Pay with other method\"\n onOther={payWithOther}\n otherIcon={defaultcard}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2 || !selectedCard?.id || surchargeLookupLoading}\n onPay={handlechargeCustomer}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'reader' ? (\n /* ---------- Reader ---------- */\n <>\n {MethodToggle}\n <FractalReaderList\n sectionLabel=\"Readers\"\n items={(paymentData?.paymentDeviceList || []).map((r: any) => ({ id: String(r?.id), name: r?.device_name }))}\n selectedId={selectedReader?.id != null ? String(selectedReader?.id) : undefined}\n onSelect={(id) => setSelectedReader((paymentData?.paymentDeviceList || []).find((r: any) => String(r?.id) === id))}\n icon={pax}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2}\n onPay={handleChargewithEMV}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'ach' ? (\n /* ---------- Bank form ---------- */\n <form\n id=\"ACHPaymentForm\"\n autoComplete=\"off\"\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on account\" htmlFor=\"nameonaccount\" error={achError?.name}>\n <input id=\"nameonaccount\" className=\"fps-input\" maxLength={100} placeholder=\"John Doe\" name=\"name\" value={achData?.name ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Routing number\" htmlFor=\"routingnumber\" error={achError?.routingNumber}>\n <input id=\"routingnumber\" className=\"fps-input\" maxLength={9} placeholder=\"000000000\" name=\"routingNumber\" value={achData?.routingNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Account number\" htmlFor=\"accountnumber\" error={achError?.accountNumber}>\n <input id=\"accountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"accountNumber\" value={achData?.accountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Confirm account number\" htmlFor=\"confirmaccountnumber\" error={achError?.confirmAccountNumber}>\n <input id=\"confirmaccountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"confirmAccountNumber\" value={achData?.confirmAccountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Bank name\" htmlFor=\"bankname\" error={achError?.bankName}>\n <input id=\"bankname\" className=\"fps-input\" maxLength={100} placeholder=\"My Bank\" name=\"bankName\" value={achData?.bankName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n {(achData?.accountType === 'business saving' || achData?.accountType === 'business checking') && (\n <FractalField label=\"Company name\" htmlFor=\"companyName\" error={achError?.companyName}>\n <input id=\"companyName\" className=\"fps-input\" maxLength={100} placeholder=\"My Company\" name=\"companyName\" value={achData?.companyName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n )}\n <FractalField label=\"Account type\" htmlFor=\"accounttype\">\n <select id=\"accounttype\" name=\"accountType\" className=\"fps-input\" value={achData?.accountType ?? ''} onChange={handleChangeAch}>\n <option value=\"\">Select</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>{type.label}</option>\n ))}\n </select>\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"saveACH\" checked={saveACHinfo} onChange={(v) => {\n setSaveACHinfo(v)\n if (!v) { setSaveACHConsent1(false); setErrorBankConsentOther('') }\n }}>\n Save this bank account. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n {saveACHinfo && (\n <>\n <FractalCheckbox id=\"saveACHConsent1\" checked={saveACHConsent1} onChange={(v) => {\n setSaveACHConsent1(v)\n if (v) setErrorBankConsentOther('')\n }}>\n By providing my bank account information and selecting ‘Save for future payments’, I authorize {merchantName} to store my bank account details for future ACH payments. I understand that future payments may be initiated using this saved account in accordance with my instructions. I confirm I am authorized to use this bank account.\n </FractalCheckbox>\n {errorBankConsentOther && <span className=\"fps-error\">{errorBankConsentOther}</span>}\n </>\n )}\n {!saveACHinfo && (\n <>\n <FractalCheckbox id=\"achconsent\" checked={isBankConsentChecked} onChange={(v) => {\n setIsBankConsentChecked(v)\n if (v) setErrorBankConsent('')\n }}>\n By selecting this box, I authorize {merchantName} to initiate a one-time electronic ACH debit from my bank account for the total amount displayed on this screen, including any applicable processing fee. I confirm that I am authorized to use this account and that the bank account information I provided is correct.\n </FractalCheckbox>\n {errorBankConsent && <span className=\"fps-error\">{errorBankConsent}</span>}\n </>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </form>\n ) : (\n /* ---------- Card form ---------- */\n <form\n id={paymentData?.paymentGateway === 32 ? 'paymentForm' : 'PaymentForm'}\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on card\" htmlFor=\"cardHolderName\" error={cardError?.cardName}>\n <input\n id=\"cardHolderName\"\n className=\"fps-input\"\n maxLength={100}\n placeholder=\"John Doe\"\n value={cardData?.cardName || ''}\n onChange={(e: any) => {\n const value = e.target.value\n if (/^[a-zA-Z\\s]*$/.test(value)) handleCardChange('cardName', value)\n }}\n />\n </FractalField>\n\n <FractalField label={paymentData?.paymentGateway === 32 ? \"Card number\" : \"\"} error={cardError?.cardNumber}>\n <div className={`fps-tokenizer ${paymentData?.paymentGateway !== 32 ? 'dc-tokenizer' : ''}`}>\n {paymentData?.paymentGateway === 32 ? (\n show && isTokenizerReady && <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n surchargeEnabled={Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee}\n createSurchargeSession={createSurchargeSession}\n getSurchargeOptions={getSurchargeOptions}\n onSurchargeResult={setSurchargeResult}\n />\n ) : (\n <DataCapFields isOpen={show} tokenKey={paymentData?.dctoken} setLoader={setLoadingIframe} onError={(msg: string) => setError(msg || DcLoadingError)} />\n )}\n </div>\n </FractalField>\n\n <FractalField label=\"Zip\" htmlFor=\"zip\" error={cardError?.zipCode}>\n <input id=\"zip\" className=\"fps-input\" maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? ''} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"save_card\" checked={saveCardInfo} onChange={(v) => setSaveCardInfo(v)}>\n Save this card. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2 || surchargeLookupLoading}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </form>\n )}\n </section>\n </div>\n </>\n }\n </CustomModal2>\n </>\n </>\n )\n}\n","'use client';\nimport React, { useEffect, useState, useMemo, useRef } from 'react';\nimport DataScript from '../Datascript';\nimport SkyChargewidgetstyles from './SkyChargewidgetstyles';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles';\nimport CustomModal2styles from '../CustomModal/CustomModal2styles';\nimport ModelContentSky from '../Atoms/ModelContentSky/ModelContentSky';\nimport axios from 'axios';\nimport { masterBaseUrl } from '../baseurl';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport { DataCapScriptLoader } from '../Datacap-Payment';\n\ntype Props = {\n session_token: string;\n surcharge: string;\n amount: string;\n submitBtnText?: string;\n submitBtnClass?: string;\n customerId?: string;\n callback: (resp: any) => void;\n merchantName: string;\n isPreAuth: boolean;\n submitBtnIcon?: any;\n isRequest?: boolean;\n pass_fee?: boolean;\n pass_fee_amount?: number | string;\n bankAmount: string;\n bankSurcharge?: string;\n require3ds: boolean;\n autoTrigger: boolean;\n isPartial?: boolean;\n partialRef?: string;\n customCSS?: string;\n disableSubmitBtn?: boolean;\n};\n\nexport const PaymentWidget = ({\n amount,\n bankAmount,\n submitBtnText = 'Pay',\n session_token,\n customerId,\n callback,\n merchantName = 'merchant',\n isPreAuth,\n surcharge = '0',\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds = false,\n autoTrigger = false,\n isPartial,\n bankSurcharge,\n partialRef,\n customCSS,\n disableSubmitBtn = false\n}: Props) => {\n\n const [show, setShow] = useState(autoTrigger || false);\n const [loading, setLoading] = useState(false);\n const [childHandleClose, setChildHandleClose] = useState<() => void>(() => () => { });\n const [orderGuid, setOrderGuid] = useState(null);\n const [remainingAmount, setRemainingAmount] = useState(null)\n // const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n // -----------------------------------------------\n // ✅ Build fresh commonProps whenever parent props change\n // -----------------------------------------------\n const initialCommonProps = useMemo(\n () => ({\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n setShow,\n setHandleCloseRef: setChildHandleClose,\n isPartial,\n bankSurcharge,\n partialRef,\n customCSS,\n disableSubmitBtn\n }),\n [\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n isPartial,\n bankSurcharge,\n partialRef,\n disableSubmitBtn\n ]\n );\n // -----------------------------------------------\n // Current working props passed to modal content\n // -----------------------------------------------\n const [commonProps, setCommonProps] = useState(initialCommonProps);\n\n // -----------------------------------------------\n // Reset commonProps every time modal opens\n // -----------------------------------------------\n useEffect(() => {\n if (show) {\n setCommonProps(initialCommonProps);\n }\n }, [show, initialCommonProps]);\n\n // -----------------------------------------------\n // Fetch updated amounts for partial payments\n // -----------------------------------------------\n const getskyosOrderDetails = async () => {\n setLoading(true);\n try {\n const res = await axios.get(\n `${masterBaseUrl}api/v1/gateway/get-order-details/${session_token}`,\n { params: { isPartial, partialRef } }\n );\n\n if (res?.data?.result) {\n const data = res.data.data;\n if (data?.orderGuid) {\n setOrderGuid(data?.orderGuid);\n setRemainingAmount(data?.remainingAmount);\n }\n setCommonProps(prev => ({\n ...prev,\n amount: data.amount,\n pass_fee_amount: data.pass_fee_amount,\n pass_fee: data.pass_fee\n }));\n }\n } catch (error) {\n console.log('error while getting skyosorderdeatils', error);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (show && isPartial && partialRef) {\n getskyosOrderDetails();\n }\n }, [show, isPartial, partialRef]);\n\n // console.log(\"isTokenizerReady\",isTokenizerReady);\n \n\n // -----------------------------------------------\n // Render UI\n // -----------------------------------------------\n return (\n <>\n <link href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css\" />\n\n <DataScript />\n {/* <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} /> */}\n <SkyChargewidgetstyles />\n <CardBankRadioStyles />\n <CustomModal2styles />\n {/* <DataCapScriptLoader /> */}\n\n\n\n\n {!autoTrigger && (\n <button className={submitBtnClass || 'paymentBtn'} disabled={disableSubmitBtn} onClick={() => setShow(true)}>\n {submitBtnText}\n {submitBtnIcon}\n </button>\n )}\n\n {!autoTrigger ? (\n <CustomModal2 open={show} onClose={childHandleClose}>\n <ModelContentSky show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n </CustomModal2>\n ) : (\n <ModelContentSky show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n )}\n </>\n );\n};\n","import React from \"react\";\n\nexport default function SkyChargewidgetstyles() {\n const primarycolor = \"#000\";\n const primarybgcolor = \"#fff\";\n const primarybodycolor = \"#212529\";\n const primarybordercolor = \"#dee2e6\";\n return (\n <style>\n {`\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n body\n {\n font-family: 'Inter', sans-serif;\n }\n input\n {\n font-family: 'Inter', sans-serif !important;\n } \n .frac-form .form-group-frac{\n padding: 5px 0;\n }\n .frac-form .mb-4{\n margin-bottom : 10px !important\n }\n .frac-form .save-ach-div{\n display:flex !important;\n gap:5px !important;\n align-items:start;\n }\n \n .frac-form .card-cvv-in{\n height : 36px !importantt; \n }\n\n .frac-form .pay-payment-amount{\n text-align:start !important\n }\n .frac-form .pay-amount{\n text-align:start !important\n }\n .frac-form .pay-main-logo{\n text-align:start !important\n }\n\n\n \n .paymentBtn {\n background-color: black;\n border: none;\n color: white;\n padding: 15px 32px;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n font-size: 16px;\n margin: 4px 2px;\n cursor: pointer;\n border-radius: 180px;\n /* width: auto; */\n } \n \n .main-logo {\n text-align: center;\n margin-bottom: 20px;\n }\n\n .main-logo img {\n max-width: 180px;\n }\n\n .pay-main-box {\n width: 365px !important;\n height: 93%;\n background: 0 0 #ffffff;\n border-radius: 12px;\n\n\n border: 1px solid #E0DFE2;\n margin: 0 auto;\n display: block;\n padding: 0px 26px !important\n }\n .pay-main-box .pay-header {\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n }\n \n .pay-main-box .pay-header button {\n border: 0;\n background: none;\n padding: 0;\n box-shadow: 0;\n outline: inherit;\n }\n \n .pay-main-box h1 {\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .tab {\n overflow: hidden;\n padding: 5px;\n border-radius: 8px;\n display: flex;\n justify-content: space-around;\n margin-bottom:12px\n }\n\n /* Style the buttons inside the tab */\n .tab button {\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n background:white;\n padding: 11px 16px;\n transition: 0.3s;\n font-size: 16px;\n width: 143px;\n border-radius: 5px;\n box-shadow: inherit;\n outline: none;\n color: ${primarycolor};\n }\n\n /* Change background color of buttons on hover */\n .tab button:hover {\n background-color: #f0f0f0;\n }\n\n /* Create an active/current tablink class */\n // .tab button.active {\n // background-color: #ccc;\n // }\n\n /* Style the tab content */\n \n \n .parent-pay-container{\n padding: 24px;\n }\n .pay-container{\n display: grid;\n grid-template-columns: 2fr 3fr;\n \n }\n .pay-main{\n padding-y: 20px}\n\n .request-payment-close-popup {\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n}\n .pay-conatiner-one{\n border-right: 1px solid #E0DFE2;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n }\n .pay-conatiner-one-first{\n \n min-height:inherit !important;\n }\n .pay-conatiner-one-last{\n display:flex;\n font-size:12px;\n gap:5px;\n max-width:250px;\n align-items:center;\n color:black !important\n }\n .pay-conatiner-one-last img{\n width : 17px;\n height:17px\n }\n .pay-conatiner-two{\n padding: 0 5% 0;\n }\n .pay-logo-container{\n border-bottom: 1px solid #E0DFE2\n }\n .pay-heading{\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .pay-main-logo > img{\n width: 50%;\n }\n .pay-main-logo-res > img{\n width: 50%;\n display : none\n }\n \n .pay-payment-amount{\n display: block;\n font-size: 12px;\n color: #727272;\n margin-bottom: 8px;\n }\n .pay-amount-conatiner{\n margin-top: 6%;\n }\n .pay-amount{\n color: #000000;\n font-size: 38px;\n display: block;\n line-height: 110%;\n letter-spacing: -1px;\n }\n .frac-form label{\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n margin-bottom: 2px !important;\n font-weight: 600 !important;\n font-size: 12px !important;\n display:block !important;\n text-align : left !important;\n text-transform: uppercase !important;\n }\n .frac-form .frac-fee-text{\n display: block;\n padding: 10px 0 4px;\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n font-size: 12px;\n line-height: 1.4;\n }\n .frac-form .frac-fee-amount{\n color: #c62828 !important;\n }\n .form-control-frac{\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: ${primarybodycolor};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: ${primarybgcolor};\n background-clip: padding-box;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n }\n .form-control-frac:focus{\n border-color: #86b7fe;\n outline: 0;\n }\n .toggle-num-wrapper {\n position: relative;\n }\n .card-number-new{\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n border-bottom: none;\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n padding-left: .75rem;\n }\n .exp-date-year-container .form-group {\n flex: 1;\n padding-left:.75rem !important;\n}\n .card-crdi {\n display: flex;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .exp-date-year-container{\n display: flex;\n flex-wrap: wrap;\n }\n .exp-date-year-container .form-group-frac{\n flex:1;\n // padding: 0px !important\n \n }\n\n .exp-date {\n float: left;\n // width: 30%\n }\n\n .exp-date input {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n\n .exp-year {\n float: left;\n // width: 30%\n }\n\n .exp-year input {\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n .exp-date input:focus {\n position: relative;\n z-index: 10;\n }\n\n .security-digit {\n float: right;\n // width: 40%;\n position: relative;\n }\n\n .security-digit input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right:0;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .form-control-frac{box-sizing: border-box ;}\n #PaymentForm .form-group-frac{\n padding:5px 0 ;\n }\n \n .toggle-label {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 24px;\n background-color: #ccc;\n border-radius: 12px;\n cursor: pointer;\n transition: background-color 0.3s;\n }\n\n .toggle-label::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: left 300ms linear;\n }\n\n .toggle-checkbox {\n display: none;\n }\n\n .toggle-checkbox:checked + .toggle-label {\n background-color: #4caf50;\n }\n\n .toggle-checkbox:checked + .toggle-label::before {\n left: 18px;\n }\n .ach-scrl {\n max-height: 380px;\n min-height: 380px;\n overflow-y: auto;\n padding-right: 6px;\n }\n .mb-4{\n margin-bottom:4px\n }\n .ach-scrl::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .ach-scrl::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n\n .error-span{\n color:red !important;\n font-size:12px !important;\n text-align: left !important;\n width: 100% !important;\n display: block;\n }\n\n .charge-customer-name-frac{\n color: #161616;\n font-family: Inter;\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n line-height: 32px;\n letter-spacing: -0.48px;\n text-transform: capitalize;\n margin-top:0;\n margin-bottom:16px !important;\n text-align:left !important\n }\n .card-ach-heading-frac {\n color: #727272;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.24px;\n margin : 0 0 10px !important; \n text-align : left\n}\n .card-list-div{\n max-height : 190px;\n overflow-y : auto;\n border:1px solid #E0DFE2;\n border-radius : 8px\n }\n \n \n .card-list-div::-webkit-scrollbar{\n width:2px;\n background-color:#F5F5F5\n }\n .card-list-div::-webkit-scrollbar-thumb{\n background-color:#35254D\n }\n \n .card-list-single-div{\n border-bottom: 1px solid #E0DFE2;\n padding : 8px 11px;\n display : flex ;\n align-items:center;\n justify-content : space-between;\n gap:12px\n }\n .card-list-single-div:last-child {\n border-bottom: none;\n}\n .card-lint-div-in{\n min-height:444px}\n .card-number-radio{\n display:flex;\n gap:12px;\n }\n .card-number-radio .card-number-last-four{\n color:#161616 !important;\n font-family:Inter !important;\n font-size:14px !important;\n font-weight:500 !important;\n font-style:normal !important;\n line-height : 18px !important;\n latter-spacing:-0.18px !important\n }\n .card-expiry-date{\n margin:0;\n color:#00000080;\n font-family:Inter;\n font-size:14px;\n font-weight:500;\n font-style\"normal;\n line-height : 18px;\n latter-spacing:-0.18px\n }\n .pay-with-other-card {\n margin-top : 12px;\n padding:12px 32px;\n border :1px solid #E0DFE2;\n border-radius : 1000px;\n display: flex;\n justify-content : center;\n align-items:center;\n gap:10px;\n // width:100%;\n background:white;\n cursor:pointer;\n color:#161616;\n text-align:center\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.28px;\n // margin-bottom: 50px;\n }\n .charge-payment-back-btn {\n display: flex;\n padding: 6px 12px !important ;\n align-items: center;\n gap: 6px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n curso:pointer;\n color:black\n}\n .res-charge-payment-back-btn{\n padding: 9px 16px;\n align-items: center;\n gap: 6px;\n margin-bottom: 20px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n curso:pointer;\n color:black;\n display:none \n }\n .btn {\n padding: 11px 23px;\n background-color: black;\n color: white;\n border: none;\n border-radius: 6px;\n font-weight: bold;\n margin: 0 10px;\n cursor: pointer;\n}\n\n.custom-swal-icon {\n margin: 20px auto;\n}\n\n.custom-swal-popup {\n font-size: 16px;\n text-align: center;\n}\n\n .frac-form .res-pay-con{\n display:none\n }\n\n .saveachtext p, .saveachtext b {\n font-size: 12px !important;\n color: #727272 !important;\n }\n\n .cardicon-img img {\n margin-top: -2px !important;\n }\n\n .bankicon-img img {\n margin-top: -4px !important;\n }\n\n .cardicon {\n margin-right : 8px !important;\n width : 18px !important;\n }\n\n .bankicon {\n margin-right : 8px !important;\n width : 18px !important;\n }\n\n \n.frac-tooltip-wrapper {\n position: absolute;\n right:0;\n}\n\n.frac-tooltip-icon {\n cursor: pointer;\n}\n.frac-tooltip-mn{\nposition:relative;\n}\n.frac-tooltip-text {\n display: none;\n position: absolute;\n top:-15px;\n right: 22px;\n background: #161616;\n color: white;\n padding: 15px;\n border-radius: 10px;\n width: 200px;\n font-size:12px;\n word-break: break-word;\n white-space: normal;\n z-index: 999;\n}\n\n.frac-tooltip-wrapper:hover .frac-tooltip-text {\n display: block;\n}\n\n.frac-tooltip-text p,.frac-tooltip-text b {\n font-size : 12px !important;\n line-height : 1.5 !important;\n margin-bottom : 10px !important;\n}\n\n .amt-pay-con {\n padding-right: 24px;\n}\n\n\n\n@media (max-width: 768px) {\n.card-lint-div-in {\n min-height: auto;\n margin-bottom: 10px;\n}\n .ach-scrl {\n min-height: auto !important;\n margin-bottom: 10px;\n}\n.request-payment-close-popup {\n right: 12px !important;\n top: 12px !important;\n}\n\n .parent-pay-container{\n padding:24px;\n }\n .pay-container {\n grid-template-columns: 1fr;\n padding: 10px 5%;\n border:1px solid #E0DFE2;\n border-radius : 12px\n }\n .pay-conatiner-one{\n border-right: none;\n }\n .pay-conatiner-one-first{\n min-height:0\n }\n .pay-main-logo > img{\n display: none;\n }\n .pay-main-logo-res > img {\n display:block;\n margin:auto\n }\n \n .pay-logo-container{\n border :none\n }\n // .res-charge-payment-back-btn {\n // display:flex !important\n // }\n // .charge-payment-back-btn{\n // display:none !important\n // }\n \n .frac-new-form .pay-amount-conatiner {\n margin-top: 0px;\n margin-bottom: 24px;\n }\n .frac-form .res-pay-con{\n display:flex;\n justify-content :space-between;\n align-items:center;\n padding-bottom : 10px\n }\n .amt-pay-con {\n padding-right: 0px;\n }\n .pay-conatiner-one-last{\n display:none}\n .pay-conatiner-two{\n padding:0\n }\n\n \n }\n @media (max-width : 512px){\n .tab button {\n padding: 6px 16px;\n }\n \n} \n\n\n.frac-cash-discount-fee {\n display: flex;\n padding: 11px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n border-radius: 8px;\n border: 1px solid #E0DFE2;\n background: #F6F6F7;\n margin-top: 24px;\n }\n .frac-cash-discount-fee small {\n color:#727272;\n font-size: 12px;\n font-weight: 500;\n }\n .frac-cash-discount-fee p{\n margin:0px;\n font-size: 14px;\n font-weight: 500;\n }\n .frac-card-payment-heading {\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n margin:0px;\n }\n\n .frac-heading-card-wrap {\n display: flex;\n align-items: center;\n margin-bottom:12px;\n }\n .frac-backarrow {\n margin-right: 10px;\n }\n .frac-charge-payment-back-btn-wrap , .frac-tab-2{\n display: none;\n }\n .frac-pay-conatiner-one{\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n min-height: auto;\n }\n\n .frac-form .saveachlabel {\n margin-bottom : 0px !important;\n }\n\n .frac-partial-payment-input{\n margin-top: 12px !important; \n }\n \n .challengeUrlclass-frac{\n height : 90vh;\n width : 100%;\n border-radius : 8px;\n border : none;\n }\n\n\n div#cvv {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 0;\n }\n div#exp_year {\n height: 36px;\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid #dee2e6;\n }\n div#exp_month {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid #dee2e6;\n }\n .exp-date-year-container .form-group {\n flex: 1;\n }\n.input-main-wrap-frac{\nmargin:0px !important;\npadding:0px !important;\n}\n\n\n.toggle-num-wrapper-new div#card_number {\n display: block !important;\n}\n .toggle-num-wrapper-new .input-main-wrap-frac {\n height: 36px;\n}\n .toggle-num-wrapper-new:focus {\n border: 1px solid #004eab !important;\n}\n .frac-or {\n position: relative;\n margin: 15px 0;\n text-align: center;\n}\n .frac-or:before {\n position: absolute;\n left: 0;\n transform: translateY(-50%);\n top: 50%;\n height: 1px;\n width: 100%;\n background: #E0DFE2;\n content: '';\n z-index: 1;\n}\n .frac-or span {\n background: transparent;\n font-size: 13px;\n margin: 0 auto;\n width: 15px;\n font-weight: 500;\n text-transform: uppercase;\n color: #727272;\n padding: 3px;\n position: relative;\n z-index: 3;\n}\n button#gpay-button-online-api-id{\n width: 100%;\n }\n\n\n `}\n </style>\n );\n}\n","import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport Loader from '../../Loader/Loader'\nimport ErrorCardMessage from '../../ErrorCardMessage/ErrorCardMessage'\nimport { applePayMerchantId, fractalGatewayUrl, googlePayEnvironment, googlePayGatewayMerchantId, googlePayMerchantId, masterBaseUrl, S3Url } from '../../baseurl'\nimport axios from 'axios'\nimport { DcLoadingError, PaymentMethodKeys } from '@/app/utils/Constant'\nimport Swal from 'sweetalert2'\nimport { ThreeDSChallenge } from '../ThreedsCheckout/ThreeDSChallenge'\nimport { CardBankRadio } from '../CardBankRadio'\nimport { accountTypes, formatCardNumberWithCursor, formatUSD } from '@/app/utils/Common'\nimport CheckoutWrapper from '../ThreedsCheckout/ThreedsCheckout'\nimport { IoArrowBack } from 'react-icons/io5'\nimport { CardList } from '../CardList/CardList'\nimport { NumericFormat } from 'react-number-format'\nimport FractalFields from '../FractalForm/FractalFields'\nimport { DataCapFields, DataCapScriptLoader } from '../../Datacap-Payment'\nimport ErrorCardOverlay from '../../ErrorCardMessage/ErrorCardOverlay'\nimport FractalTokenizerScript from '../../FractalTokenizer'\n// import GooglePayComponent from '../Googlepay/Googlepay'\nimport ApplePayButton from '../Applepay/ApplePayButton'\n\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\n\ntype Props = {\n session_token: string,\n // callback: (resp: any) => void,\n // isloading: boolean,\n // onCancel: () => void,\n // showChecks: boolean,\n // merchantName: string,\n surcharge: string\n amount: string,\n submitBtnText?: string,\n submitBtnClass?: string,\n customerId?: string,\n callback: (resp: any) => void,\n merchantName: string,\n isPreAuth: boolean,\n submitBtnIcon?: any,\n isRequest?: boolean,\n pass_fee?: boolean,\n pass_fee_amount?: number | string;\n bankAmount: string;\n bankSurcharge?: string,\n require3ds: boolean,\n autoTrigger: boolean,\n show: boolean,\n setShow: React.Dispatch<React.SetStateAction<boolean>>\n setHandleCloseRef?: React.Dispatch<React.SetStateAction<() => void>>;\n isPartial?: boolean\n partialRef?: string,\n loadingPrev?: boolean,\n orderGuid?: string | null,\n remainingAmount?: string | null,\n onSubmit?: (submitFn: () => void) => void;\n onLoad?: boolean;\n customCSS?: string;\n}\n\ninterface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n}\ninterface achDetails {\n name: string;\n routingNumber: string;\n accountNumber: string;\n confirmAccountNumber: string;\n bankName: string;\n accountType: string;\n companyName?: string;\n}\n\n\ninterface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n}\n\n\n\ninterface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n}\n\n\ninterface PaymentDevice {\n id: number;\n device_id: number;\n device_name: string;\n}\n\ntype activeinTabs = 'form' | 'list'\n\nconst ModelContentSky = ({ amount, bankAmount, submitBtnText = 'Pay', session_token, customerId, callback, merchantName = \"merchant\", isPreAuth, surcharge = \"0\", submitBtnClass, submitBtnIcon, isRequest, pass_fee, pass_fee_amount, require3ds = false, autoTrigger = false, show, setShow, setHandleCloseRef, isPartial, bankSurcharge, partialRef, loadingPrev = false, orderGuid: ordGuid, remainingAmount: remAmount, onSubmit, onLoad = true, customCSS }: Props) => {\n const hasRunRef = useRef(false);\n const cardFormRef = useRef<HTMLFormElement | null>(null);\n const bankFormRef = useRef<HTMLFormElement | null>(null);\n const expiryYearRef = useRef<HTMLInputElement | null>(null);\n const expiryMonthRef = useRef<HTMLInputElement>(null);\n const cardListRunRef = useRef(false);\n const threeDSContainerRef = useRef<HTMLDivElement>(null);\n const [activetab, setActive] = useState<string>('card');\n const [activeList, setActiveList] = useState<string>('card')\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [achData, setAchData] = useState<achDetails>()\n const [achError, setAchError] = useState<Partial<Record<keyof achDetails, string>>>({});\n const [saveACHinfo, setSaveACHinfo] = useState<boolean>(false);\n const [saveACHConsent1, setSaveACHConsent1] = useState<boolean>(false);\n const [saveCardInfo, setSaveCardInfo] = useState<boolean>(false);\n const [error, setError] = useState<string>(\"\");\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n let [tranId, setTranId] = useState(\"\")\n const [loading, setLoading] = useState<boolean>(false);\n const [loading2, setLoading2] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [cardList, setCardList] = useState([]);\n const [bankList, setBankList] = useState([]);\n const [selectedCard, setSelectedCard] = useState<SelectedCard>()\n const [cashDiscount, setCashDiscount] = useState<number>(Number(amount));\n const [activeinCard, setActiveinCard] = useState<activeinTabs>('form')\n const [activeinBank, setActiveinBank] = useState<activeinTabs>('form')\n const [isBankActive, setIsBankActive] = useState<boolean>(false);\n const [processingFee, setProcessingFee] = useState<number>(0);\n const [clientSecret, setClientSecret] = useState<string | null>('');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [initialLoader, setInitialLoader] = useState<boolean>(false)\n const [is3DSEnable, setIs3DSEnable] = useState<boolean>(false)\n const [stripeResponse, setStripeResponse] = useState<any>(null);\n const [orderLoader, setOrderLoader] = useState<boolean>(false);\n const [orderGuid, setOrderGuid] = useState<string | null>(ordGuid || null);\n const [partialAmount, setPartialAmount] = useState<string | undefined>('');\n const [partialError, setPartialError] = useState<string>(\"\")\n const [remainingAmount, setRemainingAmount] = useState<string | undefined>('');\n const [paymentGateway, setPaymentGateway] = useState<number | undefined>();\n const [dcToken, setDCToken] = useState<number | undefined>();\n const [isBankConsentChecked, setIsBankConsentChecked] = useState<boolean>(false);\n const [errorBankConsent, setErrorBankConsent] = useState<string>(\"\");\n const [errorBankConsentOther, setErrorBankConsentOther] = useState<string>(\"\");\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n // console.log(cashDiscount, \"cashDiscount\");\n // console.log(show, \"show\");\n\n console.log(loadingIframe,\"loadingIframe\");\n console.log(loading,\"loader\");\n console.log(loading2,\"loading2\");\n console.log(loadingPrev,\"loadingPrev\"); \n\n let mastercard = S3Url + 'widget/mc-img.svg'\n let visa = S3Url + 'widget/visa-img.svg'\n let americanexp = S3Url + 'widget/ae-img.svg'\n let discover = S3Url + 'widget/discover-img.svg'\n let defaultcard = S3Url + 'widget/card.svg'\n let trash = S3Url + 'widget/Trash.svg'\n let bank = S3Url + 'widget/bank.svg'\n let secure = S3Url + 'widget/secure-img.png'\n let pov = S3Url + 'widget/pov-by.png'\n let pax = S3Url + 'widget/pax.svg'\n let cardicon = S3Url + 'widget/cardicon.svg'\n let bankicon = S3Url + 'widget/bankicon.svg'\n let defualtcardborder = S3Url + 'widget/defualtcardborder.svg'\n let unionicon = S3Url + 'widget/unionpay.svg'\n let dinersicon = S3Url + 'widget/diners.svg'\n let jcbicon = S3Url + 'widget/jcb.svg'\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount / (1 + surchargeVal);\n return Math.round(originalAmount * 100) / 100; // rounding to 2 decimals\n };\n\n const cardFeeAmount = Number(pass_fee_amount || 0);\n const bankFeeAmount = Number(bankSurcharge || 0);\n const bankSavingsAmount = Math.max(bankFeeAmount > 0 ? cardFeeAmount - bankFeeAmount : cardFeeAmount, 0);\n const bankSavingsText = bankSavingsAmount > 0 ? `Save ${formatUSD(bankSavingsAmount.toFixed(2))}` : '';\n\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '16px',\n 'color': '#212529',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#212529',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#212529'\n }\n };\n\n\n\n const handleCharge = async (data: any) => {\n // console.log(data, \"ndfkjhdskjfhds\");\n try {\n let dataObj: any = {\n pass_fee_amount: Number(amount) - cashDiscount,\n pass_fee: pass_fee,\n Token: data?.Token,\n amount: partialAmount ? partialAmount : amount,\n postal_code: data?.postalCode,\n require3ds,\n isPartial,\n orderGuid: orderGuid || ordGuid,\n ...(saveCardInfo\n ? {\n card: {\n postal_code: cardData?.zipCode,\n customer_id: customerId,\n gateway_token: data?.Token || data?.gateway_token,\n name: cardData?.cardName\n },\n }\n : null),\n ...(data?.typeoftoken ? {\n typeoftoken: data?.typeoftoken\n } : null)\n }\n\n if (require3ds && data?.stripe_3ds_auth_id) {\n dataObj.stripe_3ds_auth_id = data?.stripe_3ds_auth_id\n }\n\n const chargeResponse = await axios.post(`${masterBaseUrl}api/v1/gateway/charge/${session_token}`, dataObj);\n if (chargeResponse?.data?.result) {\n // let addCard\n // if (saveCardInfo && customerId) {\n // try {\n // let obj = {\n // postal_code: cardData?.zipCode,\n // customer_id: customerId,\n // gateway_token: data?.gateway_token || data?.Token\n // }\n // addCard = await axios.post(`${masterBaseUrl}api/v1/gateway/add-card/${session_token}`, obj)\n // // console.log(addCard?.data?.data, \"addCard?.data?.data\");\n\n // if (addCard?.data?.result) {\n // addCard = addCard?.data?.data\n // }\n\n // } catch (error: any) {\n // console.log(error, \"error\");\n // hideLoader();\n // callback({\n // error: error?.response?.data?.message || \"Something went wrong!\",\n // result: error?.response?.data?.result,\n // statusCode: error?.response?.status\n // })\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n // }\n // }\n let callbackdata = {\n // cardDetails: { ...addCard, ...data },\n callback: { ...chargeResponse?.data?.data, name: cardData?.cardName, isPreAuth }\n }\n // if (!saveCardInfo) {\n // delete callbackdata.cardDetails\n // }\n callback(callbackdata)\n hideLoader();\n handleClose()\n }\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n }\n }\n\n const handlePreAuth = async (data: any) => {\n try {\n let dataObj: any = {\n Token: data?.Token,\n amount,\n postal_code: data?.postalCode,\n require3ds,\n ...(saveCardInfo\n ? {\n card: {\n postal_code: cardData?.zipCode,\n customer_id: customerId,\n gateway_token: data?.Token || data?.gateway_token,\n name: cardData?.cardName\n },\n }\n : null),\n }\n\n if (require3ds && data?.stripe_3ds_auth_id) {\n dataObj.stripe_3ds_auth_id = data?.stripe_3ds_auth_id\n }\n const preAuthResponse = await axios.post(`${masterBaseUrl}api/v1/gateway/preauth/${session_token}`, dataObj);\n if (preAuthResponse?.data?.result) {\n let addCard\n // if (saveCardInfo && customerId) {\n // try {\n // // console.log(preAuthResponse, \"preAuthResponse\");\n // let obj = {\n // postal_code: cardData?.zipCode,\n // customer_id: customerId,\n // gateway_token: data?.Token || data?.gateway_token\n // }\n // addCard = await axios.post(`${masterBaseUrl}api/v1/gateway/add-card/${session_token}`, obj)\n\n // if (addCard?.data?.result) {\n // addCard = addCard?.data?.data\n // }\n\n // } catch (error: any) {\n // console.log(error, \"error\");\n // hideLoader();\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n // callback({\n // error: error?.response?.data?.message || \"Something went wrong!\",\n // result: error?.response?.data?.result,\n // statusCode: error?.response?.status\n // })\n // }\n // }\n let callbackdata = {\n // cardDetails: { ...addCard, ...data },\n callback: { ...preAuthResponse?.data?.data, name: cardData?.cardName, isPreAuth }\n }\n // if (!saveCardInfo) {\n // delete callbackdata.cardDetails\n // }\n callback(callbackdata)\n hideLoader();\n handleClose()\n }\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n }\n }\n\n const handleTokenCallback = async (token: any) => {\n if (token.Error) {\n setError(token.Error);\n callback({\n error: token.Error || \"Something went wrong!\"\n })\n hideLoader();\n } else {\n let data = {\n token: token.Token,\n resp: token\n };\n try {\n const updateToken = await axios.post(`${masterBaseUrl}api/v1/gateway/update/token/${session_token}`, data);\n\n if (updateToken?.status == 200) {\n let respData = {\n Token: updateToken?.data?.data?.gateway_token,\n Brand: token.Brand,\n ExpirationMonth: token.ExpirationMonth,\n ExpirationYear: token.ExpirationYear,\n Last4: token.Last4,\n Bin: token.Bin,\n CVV: token.CVV,\n postalCode: cardData?.zipCode,\n };\n let addCard\n\n if (isPreAuth) {\n handlePreAuth(respData)\n } else {\n handleCharge(respData)\n }\n }\n } catch (error: any) {\n console.log(error, \"error\");\n hideLoader();\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n }\n }\n };\n\n const handletabchange = (id: string) => {\n setActive(id)\n }\n\n const validateAchData = (): boolean => {\n const errors: Partial<Record<keyof achDetails, string>> = {};\n const data = achData\n if (!data?.name?.trim()) errors.name = \"Name is required\";\n if (!data?.accountNumber?.trim()) errors.accountNumber = \"Account number is required\";\n if (data?.accountNumber?.trim() && data?.accountNumber?.trim() !== data?.confirmAccountNumber?.trim()) errors.confirmAccountNumber = \"Account numbers must match\";\n if (!data?.bankName?.trim()) errors.bankName = \"Bank name is required\";\n if (!data?.routingNumber?.trim()) errors.routingNumber = \"Routing Number is required\";\n\n\n if (data?.routingNumber && data?.routingNumber?.length !== 9) errors.routingNumber = \"Routing number must be 9 digits\";\n\n if ((data?.accountType === 'business saving' || data?.accountType === 'business checking')) {\n if (!data?.companyName || data?.companyName === \"\") {\n errors.companyName = \"Company Name is required for business accounts\";\n }\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n setErrorBankConsent('Above consent is required');\n }\n\n if (saveACHinfo && !saveACHConsent1) {\n setErrorBankConsentOther('Your consent is required to save your bank details for future use');\n }\n // if (!saveACHinfo && saveACHConsent1) {\n // setErrorBankConsentSave('Above consent is required');\n // }\n\n // Routing Number Validation removed du to new validation \n // if (data?.routingNumber?.length == 9) {\n\n // let routingNumber = data?.routingNumber\n // const weights = [3, 7, 1];\n // let sum = 0;\n\n // for (let i = 0; i < routingNumber.length; i++) {\n // sum += parseInt(routingNumber[i], 10) * weights[i % 3];\n // }\n // if (sum % 10 !== 0) {\n // errors.routingNumber = \"Invalid routing number\"\n // }\n\n // }\n setAchError(errors);\n return (Object.keys(errors).length > 0);\n };\n\n const completeFractalFlow = async (tokenizeData: string, intentid?: string | null, typeoftoken?: string | null) => {\n // console.log(tokenizeData, intentid, \"fjahfgyuhgad\");\n showLoader();\n try {\n console.log({\n tokenizeData, intentid, typeoftoken\n });\n if (typeoftoken == 'google_pay' || typeoftoken == 'apple_pay') {\n handleCharge({\n Token: tokenizeData,\n postalCode: cardData?.zipCode,\n typeoftoken\n });\n return\n } else {\n if (isPreAuth) {\n handlePreAuth({\n Token: tokenizeData,\n postalCode: cardData?.zipCode,\n typeoftoken: \"token\",\n ...(intentid && { stripe_3ds_auth_id: intentid })\n })\n } else {\n handleCharge({\n Token: tokenizeData,\n postalCode: cardData?.zipCode,\n typeoftoken: \"token\",\n ...(intentid && { stripe_3ds_auth_id: intentid })\n });\n }\n }\n\n // let token = tokenizeData;\n // let verifyandsaveresp = await axios.post(`${masterBaseUrl}api/v1/gateway/verify-and-save/${session_token}`, {\n // token,\n // require3ds,\n // pass_fee,\n // typeoftoken\n // });\n\n // if (verifyandsaveresp?.status == 200) {\n // let responsetemp = verifyandsaveresp?.data?.data;\n // let respData = {\n // Token: responsetemp.gateway_token,\n // Brand: responsetemp.card_data.brand,\n // ExpirationMonth: responsetemp.card_data.expire_mm,\n // ExpirationYear: responsetemp.card_data.expire_yy,\n // Last4: responsetemp.card_data.last4,\n // Bin: responsetemp.card_data.bin,\n // postalCode: cardData?.zipCode,\n // stripe_3ds_auth_id: intentid\n // };\n\n // // let addCard\n\n // // if (saveCardInfo && customerId) {\n // // try {\n // // let data = {\n // // postal_code: cardData?.zipCode,\n // // customer_id: customerId,\n // // gateway_token: responsetemp.gateway_token\n // // }\n // // addCard = await axios.post(`${masterBaseUrl}api/v1/gateway/add-card/${session_token}`, data)\n\n\n // // } catch (error: any) {\n // // console.log(error, \"error\");\n // // hideLoader();\n // // setError(error?.response?.data?.message || \"Something went wrong!\");\n // // }\n // // }\n\n // // if (isPreAuth) {\n // // handlePreAuth(respData)\n // // } else {\n // // handleCharge(respData)\n // // }\n // }\n } catch (error: any) {\n console.log(error, \"error\");\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n }\n }\n\n const handleFractalTokenFlow = async () => {\n try {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: { md: forge.md.sha1.create() }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // let objtokenize: any = {\n // enc_track2_data: encryptedBase64,\n // algorithm: \"RSAES_OAEP_SHA_1\",\n // session_key: sesionResult?.data?.data?.session_key\n // }\n\n let objtokenize: any = {\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n }\n let three_ds_data = null;\n if (require3ds) {\n // Ensure we are in the browser (Next.js SSR safety)\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined') {\n const languages = navigator.languages ?? [navigator.language];\n const language = Array.isArray(languages) ? languages[0] : languages;\n\n three_ds_data = {\n amount: partialAmount ? Math.round(parseFloat(partialAmount) * 100) : Math.round(parseFloat(amount) * 100), // convert dollars → cents\n currency: 'usd',\n channel: {\n type: 'browser',\n browser: {\n language: typeof language === 'string' ? language : null,\n color_depth: window.screen?.colorDepth ?? null,\n java_enabled: typeof navigator.javaEnabled === 'function' ? navigator.javaEnabled() : false,\n screen_height: window.screen?.height ?? null,\n screen_width: window.screen?.width ?? null,\n timezoneOffset: new Date().getTimezoneOffset(),\n },\n },\n };\n }\n }\n\n\n // const raw = JSON.stringify(objtokenize);\n\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders });\n\n let tokenizeData;\n\n try {\n tokenizeData = await tokenizerRef.current.createToken(objtokenize,\n three_ds_data\n );\n } catch (error: any) {\n console.log(error, \"error in tokenization\");\n\n let readableMessage = \"Something went wrong!\";\n try {\n const rawError = error?.response?.data || error?.message || \"\";\n\n // Convert to string safely\n const errorText = typeof rawError === \"string\" ? rawError : JSON.stringify(rawError);\n\n // Split safely (avoid crashes even if empty or non-string)\n const lines = errorText.split?.(\"\\n\")?.filter(Boolean) || [];\n const lastLine = lines.at(-1) || \"\";\n\n // Extract message after last colon (if any)\n const parts: any = lastLine.split?.(\": \");\n readableMessage = parts?.length > 1 ? parts.pop().trim() : lastLine.trim() || readableMessage;\n } catch {\n // If *anything* above fails, fallback to a generic message\n readableMessage = \"Something went wrong!\";\n }\n setErrorIframe(readableMessage)\n hideLoader();\n }\n\n\n if (tokenizeData?.token) {\n\n // console.log(tokenizeData, \"tokenizeData\");\n let ThreedsData = tokenizeData?.stripe_three_ds_response\n // console.log(ThreedsData, \"ThreedsData\");\n\n if (require3ds && !ThreedsData && ThreedsData?.status === \"200 OK\" && ThreedsData?.data?.challenge_url) {\n setError(\"Something went wrong. Please try again later.\")\n }\n\n if (require3ds) {\n if (!ThreedsData?.data?.challenge_url) {\n completeFractalFlow(tokenizeData?.token, ThreedsData?.data?.id)\n } else {\n hideLoader()\n setStripeResponse({\n ...ThreedsData?.data,\n fractalToken: tokenizeData?.token\n });\n }\n } else {\n completeFractalFlow(tokenizeData?.token, null)\n }\n }\n } catch (error: any) {\n hideLoader();\n console.log(error, \"error\");\n let readableMessage = \"Something went wrong!\";\n\n try {\n const rawError = error?.response?.data || error?.message || \"\";\n\n // Convert to string safely\n const errorText = typeof rawError === \"string\" ? rawError : JSON.stringify(rawError);\n\n // Split safely (avoid crashes even if empty or non-string)\n const lines = errorText.split?.(\"\\n\")?.filter(Boolean) || [];\n const lastLine = lines.at(-1) || \"\";\n\n // Extract message after last colon (if any)\n const parts: any = lastLine.split?.(\": \");\n readableMessage = parts?.length > 1 ? parts.pop().trim() : lastLine.trim() || readableMessage;\n } catch {\n // If *anything* above fails, fallback to a generic message\n readableMessage = \"Something went wrong!\";\n }\n setError(readableMessage);\n callback({\n error: readableMessage,\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n }\n }\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentGateway !== 32) {\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Card number is required\";\n // if (!data?.expiryMonth?.trim() || !data?.expiryYear?.trim()) {\n // errors.expiryMonth = \"Invalid Expiration Date.\"\n // }\n // else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n\n // if (!data?.cvv?.trim()) errors.cvv = \"CVV is required\";\n\n // // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n // }\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n // else if (data?.expiryMonth < 1 || data?.expiryMonth > 12 || data?.expiryYear.length !== 4){\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n\n\n\n setCardError(errors);\n\n // Return true if there is any error\n\n\n return Object.keys(errors).length > 0;\n };\n\n const validateCardInputs = (): boolean => {\n let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n\n let errors: Partial<Record<keyof CardDetails, string>> = {}\n if (!validCard) errors.cardNumber = \"Invalid card Number\"\n if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n if (!validCVV) errors.cvv = \"Invalid CVV\"\n\n setCardError(errors)\n\n return validCard && validCVV && validExpirationDate\n }\n\n const submitFunc = async (e: any) => {\n //handle function submit here\n e.preventDefault()\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading) return;\n if (partialError) {\n return\n }\n if (activetab !== 'ach') {\n const hasError = validateCardData()\n if (hasError) return\n let isValid = true;\n // if (paymentGateway !== 32) {\n // isValid = validateCardInputs();\n // }\n if (!isValid) return;\n } else {\n let hasError = validateAchData()\n if (saveACHinfo && !saveACHConsent1) {\n hasError = true;\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n hasError = true;\n }\n\n if (hasError) return\n }\n try {\n showLoader()\n const result = await axios.get(`${masterBaseUrl}api/v1/gateway/token/${session_token}`, {\n params: {\n require3ds,\n pass_fee\n }\n });\n if (result?.status == 200) {\n let gatewayToken = result?.data?.data?.gateway_token;\n let paymentGateway = result?.data?.data?.paymentGateway;\n\n if (activetab !== 'ach') {\n //handle card actions here \n if (paymentGateway == PaymentMethodKeys?.FRACTALKEY) {\n await handleFractalTokenFlow();\n } else {\n // DatacapWebToken.requestToken(gatewayToken, 'PaymentForm', handleTokenCallback);\n try {\n const result = await (window as any).requestDcToken();\n console.log(\"Token:\", result.Token);\n if (result.Token) {\n handleTokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading(false);\n }\n }\n } else {\n let callbackdata: Record<string, any> | undefined;\n try {\n const payByBank = await axios.post(`${masterBaseUrl}api/v1/gateway/bank-charge/${session_token}`, {\n label: achData?.name,\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n amount: `${bankAmount}`,\n customer_id: null,\n isSaveAch: false,\n tax: \"0.00\",\n discount: \"0.00\",\n surcharge: \"0.00\",\n order_id: '',\n company_name: achData?.companyName || \"\",\n ...(saveACHinfo\n ? {\n bank: {\n name: achData?.name,\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n customer_id: customerId || \"\",\n company_name: achData?.companyName || \"\"\n },\n }\n : null),\n })\n if (payByBank?.data?.result) {\n // if (saveACHinfo && customerId) {\n // try {\n // const result = await axios.post(`${masterBaseUrl}api/v1/gateway/add-bank/${session_token}`, {\n // name: achData?.name,\n // account_number: achData?.accountNumber,\n // routing_number: achData?.routingNumber,\n // bank_name: achData?.bankName,\n // account_type: achData?.accountType,\n // customer_id: customerId || \"\",\n // company_name: achData?.companyName || \"\"\n // })\n // if (result.data.result) {\n\n // callbackdata = {\n // bankDetails: { ...result?.data?.data, account_type: achData?.accountType }\n // }\n // }\n // } catch (error: any) {\n // hideLoader();\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n // callback({\n // error: error?.response?.data?.message || \"Something went wrong!\",\n // result: error?.response?.data?.result,\n // statusCode: error?.response?.status\n // })\n // }\n // }\n\n callbackdata = {\n ...callbackdata,\n callback: { ...payByBank?.data?.data, name: achData?.name, isPreAuth }\n }\n callback(callbackdata)\n handleClose()\n hideLoader()\n }\n } catch (error: any) {\n console.log(error, \"errororor\");\n let data = error?.response?.data\n if (typeof (data?.message) == \"object\") {\n Object.values(data?.message).forEach((message: any) => {\n setError(message || \"Something went wrong\");\n callback({\n error: message || \"Something went wrong!\",\n result: data?.result || false,\n statusCode: error?.response?.status\n })\n });\n } else {\n setError(data?.message || \"Something went wrong\")\n callback({\n error: data?.message || \"Something went wrong!\",\n result: data?.result || false,\n statusCode: error?.response?.status\n })\n }\n hideLoader()\n }\n }\n }\n } catch (error: any) {\n hideLoader();\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n setError(error?.response?.data?.message || \"Something went wrong!\");\n }\n }\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n\n\n const handleChangeAch = (e: any) => {\n const { name, value } = e.target\n const numericFields = [\"routingNumber\", \"accountNumber\", \"confirmAccountNumber\"];\n if (name == \"name\") {\n\n\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return\n\n }\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const handleClose = () => {\n setShow(false);\n setActive('card')\n setError(\"\")\n setSuccess(false)\n setTranId(\"\")\n setAchData({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setAchError({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setCardError({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveACHinfo(false)\n setSaveCardInfo(false)\n setActiveinBank('form')\n setActiveinCard('form')\n setIsBankActive(false)\n setProcessingFee(0)\n setCashDiscount(0)\n setCardList([])\n setErrorMessage(null)\n setClientSecret(null)\n setInitialLoader(false)\n setIs3DSEnable(false)\n setStripeResponse(null)\n setOrderGuid(null);\n setPartialAmount('');\n setPartialError('');\n setRemainingAmount('');\n setIsBankConsentChecked(false);\n setErrorBankConsent('');\n setSaveACHConsent1(false);\n setErrorBankConsentOther('');\n };\n\n const getCardList = async () => {\n showLoader()\n try {\n const data = {\n isPreAuth: isPreAuth,\n \"customerId\": customerId\n }\n let cardListData = await axios.post(`${masterBaseUrl}api/v1/gateway/card-list/${session_token}`, data)\n // console.log(\"cardListData\", cardListData);\n let savedpaymentsList = cardListData?.data?.data?.cardList || []\n let banklists = savedpaymentsList?.filter((card: any) => card?.card_type == 'Bank')\n let cardlists = savedpaymentsList?.filter((card: any) => card?.card_type !== 'Bank')\n if (cardlists && cardlists?.length > 0) {\n setActive('card')\n setActiveinCard('list')\n setCardList(cardlists)\n setLoadingIframe(false)\n // let primary_card = cardlists?.find((card: any) => card?.primary_card == 1)\n // if (primary_card) {\n // setSelectedCard(primary_card)\n // }\n } else {\n setActive('card')\n setCardList([])\n }\n if (banklists && banklists?.length > 0) {\n setActiveinBank('list')\n setBankList(banklists)\n // let primary_card = banklists?.find((card: any) => card?.primary_card == 1)\n // if (primary_card) {\n // setSelectedCard(primary_card)\n // }\n } else {\n setBankList([])\n }\n\n hideLoader()\n } catch (err: any) {\n console.log(err);\n hideLoader()\n callback({\n error: err?.response?.data?.message || \"Something went wrong!\",\n result: err?.response?.data?.result,\n statusCode: err?.response?.status\n })\n setError(err?.response?.data?.message || err?.message || \"Something went wrong\")\n }\n }\n\n // console.log(bankList, \"lists\", cardList);\n\n const getCardType = (card: string) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return card;\n }\n };\n\n const handleDeleteCard = async (cardId: any) => {\n Swal.fire({\n icon: 'warning',\n text: 'Do you want to delete the card?',\n showCancelButton: true,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n reverseButtons: true,\n buttonsStyling: false,\n customClass: {\n confirmButton: 'swal2-confirm btn btn-dark',\n cancelButton: 'swal2-cancel btn btn-dark',\n popup: 'custom-swal-popup',\n icon: 'custom-swal-icon'\n }\n }).then(async (result) => {\n if (result.isConfirmed) {\n // 👇 Yahan aap apna API call karo\n // showLoader()\n setLoading2(true)\n try {\n let obj = {\n card_id: cardId,\n customer_id: customerId\n }\n\n const res = await axios.patch(`${masterBaseUrl}api/v1/gateway/delete-card/${session_token}`, obj)\n // hideLoader()\n if (res?.data?.result) {\n setLoading2(false)\n getCardList()\n Swal.fire({\n icon: 'success',\n title: 'Deleted!',\n text: res?.data?.message || 'Card deleted.',\n confirmButtonText: 'OK',\n showConfirmButton: true,\n timer: 1000, // auto-close after 1 second\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n } else {\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Failure!',\n text: 'Card not deleted.',\n timer: 1000, // auto-close after 1 second\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n }\n\n } catch (err) {\n // hideLoader()\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Error!',\n text: 'Failed to delete the card.',\n confirmButtonText: 'OK',\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n });\n }\n\n\n } else if (result.dismiss === Swal.DismissReason.cancel) {\n // 👇 Show new popup on \"No\"\n Swal.fire({\n icon: 'info',\n text: 'Card not deleted',\n confirmButtonText: 'OK',\n buttonsStyling: false,\n customClass: {\n confirmButton: 'btn btn-dark float-end',\n actions: 'swal2-actions-end'\n }\n });\n\n }\n });\n };\n const handlechargeCustomer = async (e?: React.MouseEvent<HTMLButtonElement>) => {\n e?.currentTarget.blur();\n if (loading) return;\n let customer_id = customerId\n // let discount = String(props?.discount)\n // let surcharge = String(props?.surcharge)\n // let tax = String(props?.tax)\n // let order_id = props?.orderID\n let card_id = selectedCard?.id\n let card_type = selectedCard?.card_type\n\n if (partialError) {\n return\n }\n\n\n if (amount) {\n if (customer_id) {\n if (card_id) {\n let chargeobj: any = {\n amount: (card_type)?.toLowerCase() === 'bank' ? `${bankAmount}` : partialAmount ? partialAmount : amount,\n customer_id,\n card_id,\n pass_fee,\n pass_fee_amount: Number(amount) - cashDiscount,\n }\n // let { isCardSave, ...rest } = chargeobj\n\n if (isPartial) {\n chargeobj.orderGuid = orderGuid || ordGuid\n if (partialAmount) {\n chargeobj.ispartialPayment = true\n }\n }\n\n\n\n if (isPreAuth) {\n chargeobj.isPreauth = true\n }\n // console.log(chargeobj, \"chargeobj\");\n\n let chargeurl = masterBaseUrl + 'api/v1/gateway/charge-by-saved-details/' + session_token\n\n const headers = {\n 'Content-Type': 'application/json'\n }\n\n try {\n showLoader()\n const response = await axios.post(chargeurl, chargeobj);\n // console.log(response, \"res\");\n if (response?.data?.result) {\n callback({ callback: { ...response?.data?.data, isPreAuth } });\n hideLoader();\n handleClose();\n }\n } catch (error: any) {\n console.log(error?.response, \"error by saved details\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n }\n\n // showLoader()\n // socket.emit(\"sendMessage\", { url: chargeurl, body: card_type == 'Bank' ? rest : chargeobj, isChargebycard: true })\n // socket.on('charge-by-card', (response: any) => {\n // if (response?.result == true || response?.status == true) {\n // setTranId(response.data?.transaction_id)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n // } else {\n // setError(response?.message || \"Something went wrong.\")\n // }\n // })\n\n } else {\n setErrorIframe(\"Please Select A Card/Bank\")\n callback({\n error: \"Please Select A Card/Bank\",\n })\n }\n } else {\n setError(\"Please Select Customer\")\n callback({\n error: \"Please Select Customer\",\n })\n }\n } else {\n setError(\"Something went wrong.\")\n callback({\n error: \"Something went wrong.\",\n })\n }\n }\n\n // console.log(show, amount, customerId);\n\n const getPaymentDetails = async () => {\n try {\n showLoader()\n const res = await axios.get(`${masterBaseUrl}api/v1/gateway/get-payment-details/${session_token}`, {\n params: {\n require3ds,\n pass_fee\n }\n });\n // console.log(res, \"respinse\");\n if (res?.status == 200) {\n setIsBankActive(res?.data?.data?.isBankActive);\n setProcessingFee(Number(res?.data?.data?.fee) || 0);\n setPaymentGateway(res?.data?.data?.paymentGateway);\n setDCToken(res?.data?.data?.dctoken);\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no frame with every\n // loading flag false while DataCapFields' own effect spins up.\n // getCardList() (a parallel request) forces this back to\n // false if a saved-card list ends up showing instead.\n if (res?.data?.data?.paymentGateway === 31 && res?.data?.data?.dctoken) {\n setLoadingIframe(true);\n }\n hideLoader();\n }\n\n } catch (error: any) {\n console.log(error?.response?.data?.result, \"error while getting payment details\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n setError(error?.response?.data?.message || error?.message || \"Something went wrong\")\n hideLoader()\n }\n\n }\n\n const crateOrderFrac = async () => {\n if (orderLoader) return;\n setOrderLoader(true);\n try {\n const res = await axios.post(`${masterBaseUrl}api/v1/gateway/create-pay-order/${session_token}`, {\n amount,\n cashDiscount,\n bankAmount,\n bankSurcharge,\n customerId,\n passFee: pass_fee,\n passFeeAmount: pass_fee_amount ? pass_fee_amount : Number(amount) - cashDiscount,\n require3ds,\n isPartial\n })\n\n // console.log(res, \"res of order create\");\n if (res?.data?.result) {\n setOrderLoader(false);\n // console.log(res?.data?.data, \"res?.data?.data\");\n setOrderGuid(res?.data?.data?.orderGuid);\n setRemainingAmount(res?.data?.data?.remainingAmount)\n hasRunRef.current = true;\n }\n\n } catch (error) {\n console.log(\"error in creating order\", error);\n setOrderLoader(false);\n }\n }\n\n\n\n useEffect(() => {\n if (!show && !autoTrigger) {\n hasRunRef.current = false; // reset when modal is closed\n cardListRunRef.current = false;\n }\n }, [show, autoTrigger]);\n\n useEffect(() => {\n if (!hasRunRef.current && (show || autoTrigger) && onLoad) {\n getPaymentDetails();\n if (isPartial && !partialRef) {\n crateOrderFrac();\n }\n\n }\n }, [show, autoTrigger, isPartial, onLoad]);\n\n // console.log(hasRunRef, \"hasRunRef\", show, \"show\", isPartial, \"isPartial\", remainingAmount, \"remainingAmount\", remAmount, \"remAmount\");\n\n\n useEffect(() => {\n // setActive('cardList')\n if ((show || autoTrigger) && pass_fee_amount) {\n let cashdisc = Number(amount) - Number(pass_fee_amount);\n if (cashdisc && !isNaN(cashdisc)) {\n setCashDiscount(cashdisc)\n }\n } else if ((show || autoTrigger) && pass_fee && processingFee) {\n let cashdisc = CalculateCashDiscount(amount, processingFee)\n if (cashdisc && !isNaN(cashdisc)) {\n setCashDiscount(cashdisc)\n }\n } else {\n setCashDiscount(Number(amount))\n }\n if (!cardListRunRef.current && customerId && (show || autoTrigger) && !isRequest) {\n cardListRunRef.current = true;\n getCardList()\n }\n }, [customerId, show, amount, processingFee, autoTrigger])\n\n const getHeading = () => {\n if (isPreAuth) {\n return \"Cards\"\n } else {\n return \"Cards/Bank\"\n }\n }\n\n // console.log(isBankActive, \"scdgfhasgcf\");\n // \n\n const fetchClientSecret = useCallback(async () => {\n try {\n setInitialLoader(true)\n const res = await fetch(`${masterBaseUrl}api/v1/gateway/create-payment-intent/${session_token}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ amount, require3ds, pass_fee }),\n });\n\n const data = await res.json();\n if (data.is3dEnable) {\n setInitialLoader(false)\n setClientSecret(data.clientSecret);\n setIs3DSEnable(data.is3dEnable)\n } else {\n setInitialLoader(false)\n setIs3DSEnable(data.is3dEnable)\n }\n if (!data.result) {\n setError(data.error || data?.message || \"Failed to get client secret\");\n }\n } catch (err: any) {\n console.log(err.response, \"err.response\");\n setError(err.message);\n }\n }, [amount]);\n\n // useEffect(() => {\n // if (show) {\n // if (!clientSecret) {\n // fetchClientSecret();\n // }\n // }\n // }, [fetchClientSecret, is3DSEnable, show, clientSecret]);\n\n // if (errorMessage) return <div>Error: {errorMessage}</div>;\n // if (!clientSecret) return <div>Loading payment...</div>;\n\n\n const onSuccess = () => {\n // alert(\"sucess\")\n // console.log(\"successsssssss\");\n\n }\n\n // console.log(clientSecret, \"clientSecret\");\n\n const handleSuccess = (token: string, intentId: string) => {\n // console.log(\"3DS Auth successful ✅\", token, intentId);\n showLoader()\n completeFractalFlow(token, intentId);\n setStripeResponse(null)\n };\n\n const handleError = (status: string) => {\n console.error(\"3DS Auth failed ❌\", status);\n setError(`3DS Authentication ${status}`);\n };\n\n\n // console.log(stripeResponse, \"stripeResponse\");\n\n\n useEffect(() => {\n if (setHandleCloseRef) {\n setHandleCloseRef(() => handleClose);\n }\n }, []);\n\n\n const handlePartialChange = (values: any) => {\n // console.log(values, \"values\");\n // if (activetab === 'ach') {\n // if ((Number(cashDiscount)?.toFixed(2) < values?.floatValue) || (values?.floatValue <= 0)) {\n // setPartialAmount(values?.value);\n // setPartialError(`Partial amount cannot exceed ${formatUSD(Number(cashDiscount)?.toFixed(2))}`);\n // } else {\n // setPartialAmount(values?.value);\n // setPartialError(\"\");\n // }\n // } else {\n if ((Number(remainingAmount || remAmount)?.toFixed(2) < values?.floatValue) || (values?.floatValue < 0)) {\n setPartialAmount(values?.value);\n setPartialError(`Partial amount cannot exceed ${formatUSD(Number(remainingAmount || remAmount)?.toFixed(2))}`);\n } else if (values?.floatValue == 0) {\n setPartialAmount(values?.value);\n setPartialError(\"Partial amount must be greater than 0\");\n } else {\n setPartialAmount(values?.value);\n setPartialError(\"\");\n }\n // }\n\n }\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n\n }, []);\n // console.log(remainingAmount, \"remainingAmount\", Number(remainingAmount));\n\n // console.log(activeinCard === 'list', \"activeinCard\", activeList);\n\n const stateRef = useRef({\n activeinBank,\n activeinCard,\n activetab,\n });\n\n useEffect(() => {\n stateRef.current = {\n activeinBank,\n activeinCard,\n activetab,\n };\n }, [activeinBank, activeinCard, activetab]);\n\n const submit = useCallback(() => {\n const { activeinBank, activeinCard, activetab } = stateRef.current;\n // console.log('Submitt logic', activeinBank, \"activeinBank\", activeinCard, \"activeinCard\", activetab, \"activetab\");\n\n if (activetab === 'card') {\n if (activeinCard === 'form') {\n cardFormRef.current?.requestSubmit();\n } else if (activeinCard === 'list') {\n handlechargeCustomer()\n }\n } else if (activetab === 'ach') {\n if (activeinBank === 'form') {\n bankFormRef.current?.requestSubmit()\n } else if (activeinBank === 'list') {\n handlechargeCustomer()\n }\n }\n\n }, []); // ✅ stable unless method changes\n\n useEffect(() => {\n // console.log('Registering submit');\n onSubmit?.(submit);\n }, [onSubmit, submit]);\n\n\n function detectCardType(cardinput: any) {\n if (!cardinput) return null;\n\n const number = cardinput.replace(/\\D/g, '');\n\n const patterns = {\n visa: /^4/,\n mastercard: /^(5[1-5]|2[2-7][0-9]{2})/,\n amex: /^3[47]/,\n discover: /^(6011|65|64[4-9])/,\n diners: /^(30[0-5]|36|38)/,\n jcb: /^(35[2-8][0-9])/,\n unionpay: /^62/\n };\n\n for (const [type, regex] of Object.entries(patterns)) {\n if (regex.test(number)) {\n return type;\n }\n }\n\n return 'unknown';\n }\n\n function getCardImage(cardInput: string) {\n const cardType = detectCardType(cardInput);\n\n switch (cardType) {\n case 'visa':\n return <img src={visa} alt=\"visa\" width={33} />;\n\n case 'mastercard':\n return <img src={mastercard} width={33} alt=\"mastercard\" />;\n\n case 'amex':\n return <img src={americanexp} alt=\"amex\" width={33} />;\n\n case 'discover':\n return <img src={discover} width={33} alt=\"discover\" />;\n\n case 'diners':\n return <img src={dinersicon} alt=\"Diners Club\" />;\n\n case 'jcb':\n return <img src={jcbicon} alt=\"JCB\" />;\n\n case 'unionpay':\n return <img src={unionicon} alt=\"UnionPay\" />;\n\n default:\n return <img src={defualtcardborder} alt=\"card\" />;\n }\n }\n\n // console.log(loadingIframe, \"loadingIframe 222\");\n\n\n\n return (\n <>\n {/* initial loader screen */}\n {\n (initialLoader || !onLoad) && <Loader intensity={'dark'} loading={initialLoader || !onLoad} />\n }\n\n {\n paymentGateway == 32 && <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n }\n\n {\n paymentGateway == 31 && <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }}\n />\n }\n\n {/* Error screen */}\n {error &&\n <div>\n <ErrorCardOverlay error={error} onClose={handleClose} autoTrigger={autoTrigger} />\n </div>\n }\n\n {errorIframe &&\n <div>\n <ErrorCardOverlay error={errorIframe} onClose={() => { setErrorIframe(\"\") }} autoTrigger={onSubmit ? !(onSubmit) : autoTrigger} />\n </div>\n }\n\n {/* {error &&\n <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} autoTrigger={autoTrigger} />\n </div>\n }\n {errorIframe &&\n <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardOverlay error={errorIframe} onClose={() => { setErrorIframe(\"\") }} autoTrigger={autoTrigger} />\n </div>\n } */}\n {/* {!error && !errorIframe && */}\n <>\n {/* Loader Screen */}\n {(loading || loading2 || loadingIframe) && <Loader intensity='light' loading={loading || loading2 || loadingPrev || orderLoader || loadingIframe} />}\n {/* widget screen */}\n <div className='frac-card-payment-page frac-form frac-new-form'>\n <div ref={threeDSContainerRef} style={{ width: \"100%\", height: \"100%\" }} />\n {\n stripeResponse?.challenge_url ? (\n <ThreeDSChallenge\n containerRef={threeDSContainerRef} // 👈 pass ref\n challengeUrl={stripeResponse.challenge_url}\n fractalToken={stripeResponse.fractalToken}\n stripeIntentId={stripeResponse.id}\n onSuccess={handleSuccess}\n onError={handleError}\n />\n ) : (\n <div className='parent-pay-container'>\n <span style={{ display: autoTrigger ? 'none' : 'block' }} className=\"request-payment-close-popup\" onClick={handleClose}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <div className='pay-main-logo-res'>\n {/* space for logo responsive */}\n </div>\n <div className={onSubmit ? \"pay-container frac-pay-container \" : \"pay-container\"}>\n {!onSubmit &&\n <div className=\"pay-header pay-conatiner-one\">\n <div className=\"pay-conatiner-one-first\">\n <div className=\"pay-logo-container\" >\n <div className='pay-main-logo'>\n {/* space for logo */}\n </div>\n <h1 className='pay-heading' >Pay</h1>\n {cardList?.length > 0 && activetab !== \"cardList\" &&\n <button className='res-charge-payment-back-btn ' onClick={() => setActive('cardList')}> <IoArrowBack /> Back</button>\n }\n </div>\n <div className='amt-pay-con'>\n\n <div className='pay-amount-conatiner' >\n <small className='pay-payment-amount' >Select payment type</small>\n\n <div className='frac-card-bank-radio-main' >\n <CardBankRadio label='Card' amount={Number(amount)?.toFixed(2)} value='card' onChange={handletabchange} activetab={activetab} />\n {\n !isPreAuth && isBankActive && !isPartial &&\n <CardBankRadio label='Bank' amount={Number(bankAmount)?.toFixed(2)} value='ach' onChange={handletabchange} activetab={activetab} savingsText={bankSavingsText} />\n }\n </div>\n {/* <div className=\"frac-card-bank-radio-main\">\n <div className=\"frac-card-bank-radio frac-active\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src=\"https://fractal-userdata-upload.s3.us-east-1.amazonaws.com/widget/card.svg\"\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Card</div>\n <div className=\"frac-card-label-amount\">$3.39</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"card\" checked name=\"paymenttype\" />\n </div>\n </div>\n\n <div className=\"frac-card-bank-radio\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src={bankNew}\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Bank</div>\n <div className=\"frac-card-label-amount\">$3.20</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"ach\" name=\"paymenttype\" />\n </div>\n </div>\n </div> */}\n {\n isPartial && (\n <div className=\"frac-partial-payment-input\">\n <label htmlFor=\"partialpayment\">Partial Payment</label>\n <NumericFormat\n prefix='$'\n className='form-control-frac'\n value={partialAmount}\n onValueChange={(values) => {\n handlePartialChange(values)\n }}\n thousandSeparator\n placeholder='Enter partial amount'\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n isAllowed={(values) => {\n const { floatValue = 0, value } = values;\n\n // allow empty\n if (value === '') return true;\n\n // allow typing like 0, 0., 0.0 (intermediate states)\n if (value === '0' || value.startsWith('0.')) return true;\n\n // block final zero\n if (floatValue === 0) return false;\n\n return floatValue > 0;\n }}\n />\n\n {partialError && <span className='error-span'>{partialError}</span>}\n </div>\n )\n }\n\n </div>\n </div>\n {/* <div className='amt-pay-con'>\n\n <div className='pay-amount-conatiner' >\n <small className='pay-payment-amount' >Payment Amount</small>\n <strong className='pay-amount'>{formatUSD(Number(amount)?.toFixed(2))}</strong> }\n { <strong className='pay-amount'>${Number(amount)?.toFixed(2)}</strong>}\n </div>\n {\n activetab != \"ach\" &&\n <div style={{ display: 'flex', gap: '8px', margin: '8px 0' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>\n }\n </div> */}\n </div>\n <div className='pay-conatiner-one-last'>\n <img src={secure} alt=\"\" />\n <img src={pov} alt=\"\" />\n Secure payments powered by Fractal\n </div>\n </div>\n }\n <div className=\"pay-tab pay-conatiner-two\">\n <div className=\"col-md-12\">\n <div id='payment-form-div ' className={onSubmit ? \"frac-payment-form-div\" : \"\"} >\n {\n onSubmit && <div className='amt-pay-con'>\n\n <div className='pay-amount-conatiner' >\n {/* <small className='pay-payment-amount' >Select payment type</small> */}\n\n <div className='frac-card-bank-radio-main' >\n <CardBankRadio skydesign={true} label='Card' amount={Number(amount)?.toFixed(2)} value='card' onChange={handletabchange} activetab={activetab} />\n {\n !isPreAuth && isBankActive && !isPartial &&\n <CardBankRadio skydesign={true} label='Bank' amount={Number(bankAmount)?.toFixed(2)} value='ach' onChange={handletabchange} activetab={activetab} savingsText={bankSavingsText} />\n }\n </div>\n {/* <div className=\"frac-card-bank-radio-main\">\n <div className=\"frac-card-bank-radio frac-active\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src=\"https://fractal-userdata-upload.s3.us-east-1.amazonaws.com/widget/card.svg\"\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Card</div>\n <div className=\"frac-card-label-amount\">$3.39</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"card\" checked name=\"paymenttype\" />\n </div>\n </div>\n\n <div className=\"frac-card-bank-radio\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src={bankNew}\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Bank</div>\n <div className=\"frac-card-label-amount\">$3.20</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"ach\" name=\"paymenttype\" />\n </div>\n </div>\n </div> */}\n {\n isPartial && (\n <div className=\"frac-partial-payment-input\">\n <label htmlFor=\"partialpayment\">Partial Payment</label>\n <NumericFormat\n prefix='$'\n className='form-control-frac'\n value={partialAmount}\n onValueChange={(values) => {\n handlePartialChange(values)\n }}\n thousandSeparator\n placeholder='Enter partial amount'\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n />\n\n {partialError && <span className='error-span'>{partialError}</span>}\n </div>\n )\n }\n\n </div>\n </div>\n }\n\n {\n is3DSEnable ? (\n clientSecret && <CheckoutWrapper onSuccess={onSuccess} clientSecret={clientSecret} amount={amount} showLoader={showLoader} hideLoader={hideLoader} callback={callback} session_token={session_token} handleClose={handleClose} setError={setError} isPreAuth={isPreAuth} />\n ) : (\n <>\n {/* active tab card form */}\n <div id=\"ach\" style={{ display: activetab === 'card' ? 'block' : 'none' }} className=\"tabcontent\">\n\n {!onSubmit &&\n <>\n <div className=\"frac-heading-card-wrap\">\n <div className='frac-backarrow'>\n {cardList?.length > 0 && activeinCard === 'form' &&\n <button className='charge-payment-back-btn ' onClick={() => setActiveinCard('list')}> <IoArrowBack /></button>\n }\n </div>\n <h6 className='frac-card-payment-heading'>Card Payment</h6>\n </div>\n <div style={{ display: 'flex', gap: '8px', margin: '8px 0px 19px 0px' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>\n </>\n }\n\n {\n activeinCard === 'list' && cardList?.length > 0 ? (\n <>\n <CardList headingClass='card-ach-heading-frac' listHeading='Card' ListItems={cardList} selectedCard={selectedCard} setSelectedCard={setSelectedCard} handleDeleteCard={handleDeleteCard} otherButtonLabel='Pay With Other Card' otherButtonAction={() => { setActiveinCard('form') }} />\n <div className=\"form-group-frac\" style={{ padding: '0', display: onSubmit ? 'none' : 'block' }} >\n <button className='pay-button' style={{ margin: '0px' }} type='submit' onClick={handlechargeCustomer} >\n {partialAmount ? formatUSD(Number(partialAmount)?.toFixed(2)) : formatUSD(Number(amount)?.toFixed(2))}\n </button>\n </div>\n </>\n ) : (\n\n paymentGateway == 32 ? (\n <>\n {onSubmit &&\n <>\n <ApplePayButton\n applePayAmount={partialAmount ? partialAmount : amount}\n applePayMerchantId={applePayMerchantId}\n applePayMerchantName={merchantName}\n completeFractalFlow={completeFractalFlow}\n showLoader={showLoader}\n />\n {/* <GooglePayComponent amount={partialAmount ? partialAmount : amount} googlePayEnvironment={googlePayEnvironment} googlePayGatewayMerchantId={googlePayGatewayMerchantId}\n googlePayMerchantId={googlePayMerchantId} googlePayMerchantName={merchantName} completeFractalFlow={completeFractalFlow}\n setLoading={setLoading}\n /> */}\n <div id=\"digital-wallet-or\" className=\"frac-or\"><span>or</span></div>\n </>\n }\n <form id='paymentForm' style={{ textAlign: 'start' }} ref={cardFormRef} onSubmit={submitFunc} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}>\n <div className='ach-scrl' style={{ minHeight: '398px', maxHeight: '398px', overflow: 'auto', marginRight: '5px' }}>\n <div className=\"form-group-frac\">\n <label htmlFor=\"cardHolderName\">NAME ON CARD </label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"John Doe\" value={cardData?.cardName || \"\"} onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }} />\n {cardError?.cardName && <span className='error-span'>{cardError?.cardName}</span>}\n </div>\n\n <div className=\"form-group-frac\">\n <label htmlFor=\"cardNumber\">CARD NUMBER</label>\n <div className=\"toggle-num-wrapper toggle-num-wrapper-new\">\n {(show || autoTrigger) && paymentGateway === 32 && isTokenizerReady && (\n <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n isSky={true}\n />\n )}\n </div>\n </div>\n {/* <div className=\"form-group-frac\">\n <label htmlFor=\"OrderId\">Order ID / Description</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"OID123456\" disabled value={orderID ?? \"\"}\n style={{ background: '#F6F6F7', color: '#727272' }} />\n </div> */}\n <div className=\"form-group-frac\">\n <label htmlFor=\"zip\">ZIP</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? \"\"} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span'>{cardError?.zipCode}</span>}\n {pass_fee && cardFeeAmount > 0 && (\n <small className='frac-fee-text'>\n Cards include a fee amount of <span className='frac-fee-amount'>{formatUSD(cardFeeAmount.toFixed(2))}</span>.\n </small>\n )}\n </div>\n {\n customerId &&\n <div className='form-group-frac'>\n <div className=\"frac-tooltip-mn\" style={{ display: 'flex', alignItems: 'center', gap: '10px', paddingTop: '10px' }}>\n <input\n type=\"checkbox\"\n id=\"save_card\"\n className=\"toggle-checkbox\"\n checked={saveCardInfo}\n onChange={(e) => setSaveCardInfo(e.target.checked)}\n />\n <label htmlFor=\"save_card\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Save card for future payments </label>\n <div className=\"frac-tooltip-wrapper\">\n <div className=\"frac-tooltip-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#E0DFE2\"></circle>\n <path\n d=\"M9.03406 12.0979V12.0072C9.04055 11.4153 9.10057 10.9443 9.21411 10.5943C9.3309 10.2442 9.49635 9.96102 9.71046 9.74463C9.92457 9.52824 10.1825 9.33095 10.4842 9.15274C10.6788 9.03182 10.854 8.89658 11.0097 8.74702C11.1655 8.59745 11.2887 8.42562 11.3796 8.2315C11.4704 8.03739 11.5158 7.82259 11.5158 7.58711C11.5158 7.3039 11.4477 7.05887 11.3114 6.85203C11.1752 6.64519 10.9935 6.48608 10.7664 6.3747C10.5426 6.26014 10.2928 6.20286 10.017 6.20286C9.76723 6.20286 9.52879 6.25378 9.3017 6.35561C9.07461 6.45744 8.88646 6.61655 8.73723 6.83294C8.588 7.04614 8.50203 7.3214 8.47932 7.65871H7C7.02271 7.08592 7.17032 6.60223 7.44282 6.20764C7.71533 5.80986 8.07543 5.50915 8.52311 5.30549C8.97405 5.10183 9.47202 5 10.017 5C10.6139 5 11.1363 5.10979 11.5839 5.32936C12.0316 5.54574 12.3788 5.84964 12.6253 6.24105C12.8751 6.62928 13 7.08274 13 7.60143C13 7.95784 12.9432 8.27924 12.8297 8.56563C12.7161 8.84885 12.5539 9.10183 12.3431 9.32458C12.1354 9.54733 11.8856 9.74463 11.5937 9.91647C11.3179 10.0851 11.0941 10.2601 10.9221 10.4415C10.7534 10.6229 10.6302 10.8377 10.5523 11.0859C10.4745 11.3341 10.4323 11.6412 10.4258 12.0072V12.0979H9.03406ZM9.76886 15C9.50284 15 9.27413 14.9077 9.08273 14.7232C8.89132 14.5354 8.79562 14.3095 8.79562 14.0453C8.79562 13.7844 8.89132 13.5617 9.08273 13.3771C9.27413 13.1893 9.50284 13.0955 9.76886 13.0955C10.0316 13.0955 10.2587 13.1893 10.4501 13.3771C10.6448 13.5617 10.7421 13.7844 10.7421 14.0453C10.7421 14.2204 10.6967 14.3811 10.6058 14.5274C10.5182 14.6706 10.4015 14.7852 10.2555 14.8711C10.1095 14.957 9.94728 15 9.76886 15Z\"\n fill=\"#161616\"\n />\n </svg>\n </div>\n <div className=\"frac-tooltip-text\">\n <p>\n If checked, I agree to give the <b>{merchantName || 'merchant'}</b> permission to charge this credit card for agreed-upon purchases in the future.\n </p>\n </div>\n </div>\n\n </div>\n </div>\n }\n </div>\n <div className=\"form-group-frac\" style={{ marginTop: '20px', padding: '0' }}>\n <button type=\"submit\" style={{ margin: 0, display: onSubmit ? 'none' : 'block' }} className='pay-button'>{partialAmount ? formatUSD(Number(partialAmount)?.toFixed(2)) : formatUSD(Number(amount)?.toFixed(2))}</button>\n </div>\n </form>\n </>\n ) : (\n <form id='PaymentForm' style={{ textAlign: 'start' }} ref={cardFormRef} onSubmit={submitFunc} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}>\n {/* <div style={{minHeight: '482px'}}> */}\n <div className='ach-scrl' style={{ minHeight: '398px', maxHeight: '398px', overflow: 'auto', marginRight: '5px' }}>\n <div className=\"form-group-frac\">\n <label htmlFor=\"cardHolderName\">NAME ON CARD </label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"John Doe\" value={cardData?.cardName || \"\"} onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }} />\n {cardError?.cardName && <span className='error-span'>{cardError?.cardName}</span>}\n </div>\n\n <div className=\"form-group-frac\">\n\n {/* DC Iframes */}\n\n <DataCapFields\n isOpen={show || autoTrigger}\n tokenKey={dcToken}\n setLoader={activeinCard === 'form' ? setLoadingIframe : null}\n isEmbedded={onSubmit ? true : false}\n customCSS={customCSS}\n onError={(msg: string) => setError(msg || DcLoadingError)}\n />\n\n {/* <label htmlFor=\"cardNumber\">CARD NUMBER</label>\n <div className='toggle-num-wrapper'>\n <input className='form-control-frac card-number-new' type='text' maxLength={19} inputMode=\"numeric\" placeholder='0000 0000 0000 0000' value={cardData?.cardNumber || \"\"} onChange={(e) => handleCardNumberChange(e)}\n data-token=\"card_number\"\n />\n\n <div className='card-crdi card-expiry-new'>\n <div className=\"exp-date-year-container\">\n <div className=\"exp-date form-group-frac\">\n <input data-token=\"exp_month\" className=\"form-control-frac required card-cvv-in\" type=\"text\"\n style={{ maxHeight: '36px' }}\n placeholder=\"MM\" maxLength={2} value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)} />\n </div>\n <div className=\"exp-year form-group-frac\">\n <input data-token=\"exp_year\" className=\"form-control-frac required card-cvv-in\" type=\"text\"\n style={{ maxHeight: '36px' }}\n placeholder=\"YYYY\" maxLength={4} value={cardData?.expiryYear || \"\"} onChange={(e) => handleCardChange('expiryYear', e.target.value)} />\n </div>\n <div className=\"security-digit form-group-frac\">\n <input data-token=\"cvv\" className=\"form-control-frac card-cvv-in required\" type=\"text\"\n style={{ maxHeight: '36px' }}\n maxLength={4} placeholder=\"CVC\" value={cardData?.cvv || \"\"} onChange={(e) => handleCardChange('cvv', e.target.value)}\n />\n </div>\n </div>\n </div>\n {cardError?.cardNumber &&\n <span className='error-span'>{cardError?.cardNumber}</span>\n }\n <p style={{ margin: '0' }}>\n {cardError?.expiryMonth || cardError?.expiryYear ?\n <span className='error-span' style={{ paddingRight: '4px' }}>{cardError?.expiryMonth}</span>\n : \"\"\n }\n {cardError?.cvv &&\n <span className='error-span' >{cardError?.cvv}</span>\n\n }\n </p>\n\n </div> */}\n </div>\n {/* <div className=\"form-group-frac\">\n <label htmlFor=\"OrderId\">Order ID / Description</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"OID123456\" disabled value={orderID ?? \"\"}\n style={{ background: '#F6F6F7', color: '#727272' }} />\n </div> */}\n <div className=\"form-group-frac\">\n <label htmlFor=\"zip\">ZIP</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? \"\"} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span'>{cardError?.zipCode}</span>}\n {pass_fee && cardFeeAmount > 0 && (\n <small className='frac-fee-text'>\n Cards include a fee amount of <span className='frac-fee-amount'>{formatUSD(cardFeeAmount.toFixed(2))}</span>.\n </small>\n )}\n </div>\n {\n customerId &&\n <div className='form-group-frac'>\n <div className=\"frac-tooltip-mn\" style={{ display: 'flex', alignItems: 'center', gap: '10px', paddingTop: '10px' }}>\n <input\n type=\"checkbox\"\n id=\"save_card\"\n className=\"toggle-checkbox\"\n checked={saveCardInfo}\n onChange={(e) => setSaveCardInfo(e.target.checked)}\n />\n <label htmlFor=\"save_card\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Save card for future payments </label>\n <div className=\"frac-tooltip-wrapper\">\n <div className=\"frac-tooltip-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#E0DFE2\"></circle>\n <path\n d=\"M9.03406 12.0979V12.0072C9.04055 11.4153 9.10057 10.9443 9.21411 10.5943C9.3309 10.2442 9.49635 9.96102 9.71046 9.74463C9.92457 9.52824 10.1825 9.33095 10.4842 9.15274C10.6788 9.03182 10.854 8.89658 11.0097 8.74702C11.1655 8.59745 11.2887 8.42562 11.3796 8.2315C11.4704 8.03739 11.5158 7.82259 11.5158 7.58711C11.5158 7.3039 11.4477 7.05887 11.3114 6.85203C11.1752 6.64519 10.9935 6.48608 10.7664 6.3747C10.5426 6.26014 10.2928 6.20286 10.017 6.20286C9.76723 6.20286 9.52879 6.25378 9.3017 6.35561C9.07461 6.45744 8.88646 6.61655 8.73723 6.83294C8.588 7.04614 8.50203 7.3214 8.47932 7.65871H7C7.02271 7.08592 7.17032 6.60223 7.44282 6.20764C7.71533 5.80986 8.07543 5.50915 8.52311 5.30549C8.97405 5.10183 9.47202 5 10.017 5C10.6139 5 11.1363 5.10979 11.5839 5.32936C12.0316 5.54574 12.3788 5.84964 12.6253 6.24105C12.8751 6.62928 13 7.08274 13 7.60143C13 7.95784 12.9432 8.27924 12.8297 8.56563C12.7161 8.84885 12.5539 9.10183 12.3431 9.32458C12.1354 9.54733 11.8856 9.74463 11.5937 9.91647C11.3179 10.0851 11.0941 10.2601 10.9221 10.4415C10.7534 10.6229 10.6302 10.8377 10.5523 11.0859C10.4745 11.3341 10.4323 11.6412 10.4258 12.0072V12.0979H9.03406ZM9.76886 15C9.50284 15 9.27413 14.9077 9.08273 14.7232C8.89132 14.5354 8.79562 14.3095 8.79562 14.0453C8.79562 13.7844 8.89132 13.5617 9.08273 13.3771C9.27413 13.1893 9.50284 13.0955 9.76886 13.0955C10.0316 13.0955 10.2587 13.1893 10.4501 13.3771C10.6448 13.5617 10.7421 13.7844 10.7421 14.0453C10.7421 14.2204 10.6967 14.3811 10.6058 14.5274C10.5182 14.6706 10.4015 14.7852 10.2555 14.8711C10.1095 14.957 9.94728 15 9.76886 15Z\"\n fill=\"#161616\"\n />\n </svg>\n </div>\n <div className=\"frac-tooltip-text\">\n <p>\n If checked, I agree to give the <b>{merchantName || 'merchant'}</b> permission to charge this credit card for agreed-upon purchases in the future.\n </p>\n </div>\n </div>\n\n </div>\n </div>\n }\n </div>\n <div className=\"form-group-frac\" style={{ marginTop: '20px', padding: '0' }}>\n <button type=\"submit\" style={{ margin: 0, display: onSubmit ? 'none' : 'block' }} className='pay-button'>{partialAmount ? formatUSD(Number(partialAmount)?.toFixed(2)) : formatUSD(Number(amount)?.toFixed(2))}</button>\n </div>\n </form>\n )\n )\n }\n\n </div>\n\n {/* active tab ach */}\n <div id=\"ach\" style={{ display: activetab === 'ach' ? 'block' : 'none' }} className=\"tabcontent\">\n <>\n {\n !onSubmit && <div className=\"frac-heading-card-wrap\">\n <div className='frac-backarrow'>\n {bankList?.length > 0 && activeinBank === 'form' &&\n <button className='charge-payment-back-btn ' onClick={() => setActiveinBank('list')}> <IoArrowBack /></button>\n }\n </div>\n <h6 className='frac-card-payment-heading'>Bank Payment</h6>\n </div>\n }\n {/* {\n activetab != \"ach\" &&\n (<div style={{ display: 'flex', gap: '8px', margin: '8px 0px 19px 0px' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>)\n } */}\n\n {\n activeinBank === 'list' && bankList?.length > 0 ? (\n <>\n <CardList headingClass='card-ach-heading-frac' listHeading='Banks' ListItems={bankList} selectedCard={selectedCard} setSelectedCard={setSelectedCard} handleDeleteCard={handleDeleteCard} otherButtonLabel='Pay With Other Bank' otherButtonAction={() => { setActiveinBank('form') }} />\n <div className=\"form-group-frac\" style={{ padding: '0', display: onSubmit ? 'none' : 'block' }} >\n <button className='pay-button' style={{ margin: '0px' }} type='submit' onClick={handlechargeCustomer}>{formatUSD(Number(bankAmount)?.toFixed(2))}</button>\n </div>\n </>\n ) : (\n <form id='ACHPaymentForm' style={{ textAlign: 'start' }} ref={bankFormRef} onSubmit={submitFunc} autoComplete=\"off\" onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }} >\n <div className='ach-scrl' style={{\n minHeight: '444px',\n maxHeight: '444px',\n }}>\n\n <div className=\"form-group-frac\">\n <label htmlFor=\"nameonaccount\">Name on account</label>\n <input type=\"text\" id='nameonaccount' className='form-control-frac' maxLength={100} placeholder=\"John Doe\" name=\"name\" value={achData?.name ?? \"\"} onChange={handleChangeAch} />\n {achError?.name && <span className='error-span'>{achError?.name}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"routingnumber\">Routing number</label>\n <input type=\"text\" id='routingnumber' className='form-control-frac' maxLength={9} placeholder=\"000000000\"\n name=\"routingNumber\" value={achData?.routingNumber ?? \"\"} onChange={handleChangeAch} />\n {achError?.routingNumber && <span className='error-span'>{achError?.routingNumber}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"accountnumber\">Account number</label>\n <input type=\"text\" id='accountnumber' className='form-control-frac' maxLength={16} placeholder=\"0000000000\"\n name=\"accountNumber\" value={achData?.accountNumber ?? \"\"} onChange={handleChangeAch} />\n {achError?.accountNumber && <span className='error-span'>{achError?.accountNumber}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"confirmaccountnumber\">Confirm account number</label>\n <input type=\"text\" id='confirmaccountnumber' className='form-control-frac' maxLength={16} placeholder=\"0000000000\"\n name=\"confirmAccountNumber\" value={achData?.confirmAccountNumber ?? \"\"} onChange={handleChangeAch} />\n {achError?.confirmAccountNumber && <span className='error-span'>{achError?.confirmAccountNumber}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"bankname\">Bank name</label>\n <input type=\"text\" id='bankname' className='form-control-frac' maxLength={100} placeholder=\"My Bank\"\n name=\"bankName\" value={achData?.bankName ?? \"\"} onChange={handleChangeAch}\n />\n {achError?.bankName && <span className='error-span'>{achError?.bankName}</span>}\n </div>\n {(achData?.accountType === 'business saving' || achData?.accountType === 'business checking') && (\n <div className=\"form-group-frac\">\n <label htmlFor=\"companyName\">Company name</label>\n <input type=\"text\" id='companyName' className='form-control-frac' maxLength={100} placeholder=\"My Company\"\n name=\"companyName\" value={achData?.companyName ?? \"\"} onChange={handleChangeAch}\n />\n {achError?.companyName && <span className='error-span'>{achError?.companyName}</span>}\n </div>\n )}\n <div className=\"form-group-frac\">\n <label htmlFor=\"accounttype\">Select account type</label>\n <select name=\"accountType\" id=\"accounttype\" className='form-control-frac' value={achData?.accountType ?? \"\"} onChange={handleChangeAch} >\n <option value=\"\">Select account</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>\n {type.label}\n </option>\n ))}\n </select>\n {bankFeeAmount > 0 && (\n <small className='frac-fee-text'>\n There is a processing fee of <span className='frac-fee-amount'>{formatUSD(bankFeeAmount.toFixed(2))}</span>.\n </small>\n )}\n {/* <div className=\"form-group-frac\">\n <label htmlFor=\"accounttype\">Select account type</label>\n <select name=\"accountType\" id=\"accounttype\" className='form-control-frac' value={achData?.accountType ?? \"\"} onChange={handleChangeAch} >\n <option value=\"\">Select account</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>\n {type.label}\n </option>\n ))}\n </select>\n </div> */}\n {\n !saveACHinfo &&\n <>\n <div className=\"form-group-frac save-ach-div\" style={{ paddingTop: '5px' }}>\n <input type=\"checkbox\" id='achconsent' className='' checked={isBankConsentChecked} onChange={(e) => {\n setIsBankConsentChecked(e.target.checked);\n if (e.target.checked) {\n setErrorBankConsent('');\n }\n }} />\n <label className='saveachlabel' htmlFor=\"achconsent\">\n {`By selecting this box, I authorize SkyFi, on behalf of ${merchantName || 'merchant'}, to initiate a one-time electronic ACH debit from my bank account for the total amount displayed on this screen, including any applicable processing fee. I confirm that I am authorized to use this account and that the bank account information I provided is correct.`}\n </label>\n </div>\n {errorBankConsent && <span className='error-span'>{errorBankConsent}</span>}\n </>\n }\n {\n customerId && (\n <div className=\"form-group-frac save-ach-div\" style={{ paddingTop: '5px' }}>\n <input type=\"checkbox\" id='saveACH' className='' maxLength={100} placeholder=\"My Bank\" checked={saveACHinfo} onChange={(e) => {\n setSaveACHinfo(e.target.checked)\n if (!e.target.checked) {\n setSaveACHConsent1(false);\n setErrorBankConsentOther('');\n }\n }} />\n <label className='saveachlabel' htmlFor=\"saveACH\">\n Save for future use\n </label>\n </div>\n )\n }\n {saveACHinfo &&\n <>\n <div className=\"form-group-frac save-ach-div\" style={{ paddingTop: '5px' }}>\n <input type=\"checkbox\" id='saveACHConsent1' className='' maxLength={100} placeholder=\"My Bank\" checked={saveACHConsent1} onChange={(e) => {\n setSaveACHConsent1(e.target.checked);\n if (e.target.checked) {\n setErrorBankConsentOther('');\n }\n }} />\n <label className='saveachlabel' htmlFor=\"saveACHConsent1\">\n By providing my bank account information and selecting ‘Save for future payments’, I authorize {merchantName || 'merchant'} to store my bank account details for future ACH payments. I understand that future payments may be initiated using this saved account in accordance with my instructions. I confirm I am authorized to use this bank account.\n </label>\n </div>\n {errorBankConsentOther && <span className='error-span'>{errorBankConsentOther}</span>}\n\n </>\n // <div className=\"form-group-frac saveachtext\">\n // <p>\n // If checked, I agree to give the <b>{merchantName || 'merchant'}</b> permission to charge this bank account for agreed-upon purchases in the future.\n // </p>\n // </div>\n }\n\n\n\n\n </div>\n </div>\n <div className=\"form-group-frac \" >\n <button className='pay-button' style={{ margin: '20px 0 0', display: onSubmit ? 'none' : 'block' }} type='submit'>{formatUSD(Number(bankAmount)?.toFixed(2))}</button>\n </div>\n </form>\n )\n }\n </>\n </div>\n </>\n )\n }\n\n {/* {!isPreAuth &&\n <>\n \n <div className=\"tab\">\n <button className=\"tablinks cardicon-img\" onClick={(e) => { handletabchange('card') }} style={{ border: activetab === 'card' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='cardicon' src={cardicon} />Card</button>\n <button className=\"tablinks bankicon-img\" onClick={(e) => { handletabchange('ach') }} style={{ border: activetab === 'ach' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='bankicon' src={bankicon} />Bank</button>\n </div>\n </>\n } */}\n {/* {\n activetab !== \"cardList\" ?\n <>\n <div className=\"frac-heading-card-wrap\">\n <div className='frac-backarrow'>\n {cardList?.length > 0 &&\n <button className='charge-payment-back-btn ' onClick={() => setActive('cardList')}> <IoArrowBack /></button>\n }\n {!isPreAuth && (\n <div className=\"tab\">\n <button className=\"tablinks cardicon-img\" onClick={(e) => { handletabchange('card') }} style={{ border: activetab === 'card' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='cardicon' src={cardicon} />Card</button>\n <button className=\"tablinks bankicon-img\" onClick={(e) => { handletabchange('ach') }} style={{ border: activetab === 'ach' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='bankicon' src={bankicon} />Bank</button>\n </div>\n )}\n </div>\n <h6 className='frac-card-payment-heading'>Card Payment</h6>\n </div>\n {\n activetab != \"ach\" &&\n (<div style={{ display: 'flex', gap: '8px', margin: '8px 0px 19px 0px' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>)\n }\n </>\n :\n <div>\n <div className='charge-customer-name-frac' style={{ marginBottom: '16px !important' }}> Charge {paymentData?.customer_name}</div>\n <div className='card-ach-heading-frac' style={{ marginBottom: '10px !important' }}> {activeList === 'card' ? getHeading() : 'Readers'} </div>\n <div className='res-pay-con'>\n\n <div className='pay-amount-conatiner' style={{ margin: 0 }} >\n <small className='pay-payment-amount' >Payment Amount</small>\n <strong className='pay-amount'>{formatUSD(Number(amount)?.toFixed(2))}</strong>\n <strong className='pay-amount'>${Number(amount)?.toFixed(2)}</strong>\n </div>\n\n\n <div >\n <div >\n\n <img src={visa} alt=\"\" width={35} style={{ paddingRight: '5px' }} />\n <img src={mastercard} width={35} alt=\"\" />\n </div>\n <div>\n\n <img src={americanexp} alt=\"\" width={35} style={{ paddingRight: '5px' }} />\n <img src={discover} width={35} alt=\"\" />\n </div>\n </div>\n\n </div>\n </div>\n } */}\n\n\n {/* active tab home card list */}\n {/* <div id=\"ach\" style={{ display: activetab === 'cardList' ? 'block' : 'none' }} className=\"tabcontent\">\n\n\n <div className='card-lint-div-in'>\n <div className='card-list-div'>\n\n {\n\n cardList && cardList?.length > 0 &&\n cardList?.map((card: any, index) => (\n <div className='card-list-single-div' key={index}>\n <div className=\"card-number-radio\">\n <input disabled={paymentData?.paymentGateway != card?.payment_method_type && card?.card_type != \"Bank\"} type=\"radio\" className='cardRadio' name=\"selected_card\" id=\"\" checked={selectedCard === card}\n onChange={(e) => setSelectedCard(card)} />\n <label htmlFor=\"\" className='card-number-last-four'>**** {card?.cardlastfourdigit}</label>\n {\n card?.card_type != \"Bank\" && (<h6 className='card-expiry-date'>{card?.expmonth}/{card?.expyear}</h6>)\n }\n </div>\n <div className=\"card-number-radio\">\n <span className='visa-card'>\n <img src={getCardType(card?.card_type)} alt=\"\" />\n </span>\n\n <span className='visa-card' style={{ cursor: \"pointer\" }} onClick={() => handleDeleteCard(card?.id)}>\n <img src={trash} alt=\"\" />\n </span>\n </div>\n </div>\n ))\n\n }\n\n </div>\n <div className='pay-with-other-card' onClick={() => setActive('card')}>\n Pay With Other Card\n <img src={defaultcard} alt=\"\" />\n </div>\n\n </div>\n\n <div className=\"form-group-frac\" style={{ padding: '0' }} >\n <button className='pay-button' style={{ margin: '0px' }} type='submit' onClick={handlechargeCustomer}>{formatUSD(Number(amount)?.toFixed(2))}</button>\n </div>\n </div> */}\n\n\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n </div>\n </>\n {/* } */}\n </>\n )\n}\n\nexport default ModelContentSky","import { useEffect, useRef } from \"react\";\n\n// Updated version of ThreeDSChallenge.tsx\ninterface ThreeDSProps {\n challengeUrl: string;\n fractalToken: string;\n stripeIntentId: string;\n onSuccess: (token: string, intentId: string) => void;\n onError: (status: string) => void;\n containerRef: React.RefObject<HTMLDivElement>;\n}\n\nexport function ThreeDSChallenge({\n challengeUrl,\n fractalToken,\n stripeIntentId,\n onSuccess,\n onError,\n containerRef,\n}: ThreeDSProps) {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n\n useEffect(() => {\n if (!challengeUrl || typeof window === \"undefined\") return;\n const container = containerRef.current;\n if (!container) return;\n\n // Clean up old iframe if needed\n if (iframeRef.current && container.contains(iframeRef.current)) {\n container.removeChild(iframeRef.current);\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.className = \"challengeUrlclass-frac\"\n iframe.src = challengeUrl;\n // iframe.width = \"100%\";\n // iframe.height = \"400px\";\n // iframe.style.border = \"none\";\n // iframe.style.borderRadius = \"8px\";\n iframeRef.current = iframe;\n\n container.appendChild(iframe);\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === \"3ds-authentication-challenge-complete\") {\n container.innerHTML = \"\";\n if (event.data.status === \"succeeded\") {\n onSuccess(fractalToken, stripeIntentId);\n } else {\n onError(event.data.status);\n }\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n if (iframeRef.current && container.contains(iframeRef.current)) {\n container.removeChild(iframeRef.current);\n }\n };\n }, [challengeUrl, containerRef, fractalToken, stripeIntentId, onSuccess, onError]);\n\n return null;\n}\n","import React from 'react'\nimport { bankNew, defaultcard, formatUSD, pax } from '@/app/utils/Common'\n\ntype Props = {\n label: string\n amount: string\n value: string\n onChange: (resp: any) => void\n activetab: string\n skydesign?: boolean\n savingsText?: string\n}\n\nexport const CardBankRadio = ({ skydesign = false, savingsText, ...props }: Props) => {\n const savingsBadgeClass = `frac-saving-badge ${skydesign ? 'frac-saving-badge-corner' : 'frac-saving-badge-corner frac-saving-badge-with-radio'}`;\n\n return (\n <>\n <div\n className={`frac-card-bank-radio ${props.activetab === props.value ? 'frac-active' : ''}`}\n onClick={() => props.onChange(props.value)}\n role=\"radio\"\n >\n {skydesign ? (\n <>\n <div className='frac-card-title-main'>\n <div className=\"box-inner-card-text\">\n <img src={(props.label).toLowerCase() === 'card' ? defaultcard : (props.label).toLowerCase() === 'reader' ? pax : bankNew} className='frac-payment-type-logo' alt=\"\" />\n <div className='frac-card-label-text'>{props.label}</div>\n </div>\n <div className='frac-card-label'>\n <div className='frac-card-label-amount'>{formatUSD(props.amount)}</div>\n </div>\n </div>\n {/* {savingsText ? <button type=\"button\" className={savingsBadgeClass}>{savingsText}</button> : null} */}\n <div>\n <input name='paymenttype' checked={props.activetab === props.value} type=\"hidden\" value={props.value} onChange={(e) => { props.onChange(e.target.value) }} />\n </div>\n </>\n ) : (\n <>\n <div className='frac-card-title-main'>\n <img src={(props.label).toLowerCase() === 'card' ? defaultcard : (props.label).toLowerCase() === 'reader' ? pax : bankNew} className='frac-payment-type-logo' alt=\"\" />\n <div className='frac-card-label'>\n <div className='frac-card-label-text'>{props.label}</div>\n <div className='frac-card-label-amount'>{formatUSD(props.amount)}</div>\n </div>\n </div>\n {/* {savingsText ? <button type=\"button\" className={savingsBadgeClass}>{savingsText}</button> : null} */}\n <div>\n <input name='paymenttype' checked={props.activetab === props.value} type=\"radio\" value={props.value} onChange={(e) => { props.onChange(e.target.value) }} />\n </div>\n </>\n )}\n </div>\n </>\n )\n}\n","// CheckoutWrapper.tsx\n\"use client\"; // important if you’re using Next.js\n\nimport { Elements } from \"@stripe/react-stripe-js\";\n\ninterface CheckoutWrapperProps {\n clientSecret: string;\n onSuccess?: (paymentIntent: any) => void;\n showLoader: () => void;\n setError: (error: any) => void;\n session_token: string;\n callback: (callbackdata: any) => void;\n hideLoader: () => void;\n handleClose: () => void;\n amount: string;\n isPreAuth: boolean;\n}\n\nimport { loadStripe } from \"@stripe/stripe-js\";\nimport { CheckoutForm } from \"./CheckoutForm\";\nimport { threedsSecurePublicKey } from \"../../baseurl\";\n\nexport const stripePromise = loadStripe(\n threedsSecurePublicKey\n);\n\nexport default function CheckoutWrapper({ clientSecret, onSuccess, showLoader, setError, session_token, callback, hideLoader, handleClose, amount, isPreAuth }: CheckoutWrapperProps) {\n if (!clientSecret) return null;\n\n return (\n <Elements stripe={stripePromise} options={{ clientSecret }}>\n <CheckoutForm onSuccess={onSuccess} showLoader={showLoader} hideLoader={hideLoader} setError={setError} session_token={session_token} callback={callback} handleClose={handleClose} amount={amount} isPreAuth={isPreAuth} />\n </Elements>\n );\n}\n","import { formatUSD } from \"@/app/utils/Common\";\nimport { PaymentElement, useElements, useStripe } from \"@stripe/react-stripe-js\";\nimport axios from \"axios\";\nimport { useState } from \"react\";\nimport { masterBaseUrl } from \"../../baseurl\";\n\ninterface CheckoutFormProps {\n onSuccess?: (paymentIntent: any) => void;\n showLoader: () => void;\n setError: (error: any) => void;\n session_token: string;\n callback: (callbackdata: any) => void;\n hideLoader: () => void;\n handleClose: () => void;\n amount: string;\n isPreAuth: boolean;\n\n}\n\nexport const CheckoutForm: React.FC<CheckoutFormProps> = ({ onSuccess, showLoader, setError, session_token, callback, hideLoader, handleClose, amount, isPreAuth }) => {\n const stripe = useStripe();\n const elements = useElements();\n const [loading, setLoading] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!stripe || !elements) {\n console.warn(\"stripe nopt loaded\");\n return;\n }\n\n console.log(\"Stripe:\", stripe);\n console.log(\"Elements:\", elements);\n console.log(\"PaymentElement:\", elements.getElement(PaymentElement));\n\n showLoader()\n setLoading(true);\n try {\n const { error, paymentIntent } = await stripe.confirmPayment({\n elements,\n confirmParams: {},\n redirect: \"if_required\", // no redirect, works in popup\n });\n\n setLoading(false);\n if (error) {\n console.log(error, \"paymentIntent error\");\n setError(error.message || \"Payment failed.\");\n } else if (paymentIntent?.status === \"succeeded\") {\n setMessage(\"✅ Payment successful!\");\n if (onSuccess) {\n console.log(paymentIntent, \"paymentIntent\");\n try {\n const chargeDetails = await axios.post(`${masterBaseUrl}api/v1/gateway/secure-charge/${session_token}`, {\n stripe_id: paymentIntent?.id\n })\n\n console.log(chargeDetails, \"chargeDetails\");\n\n\n if (chargeDetails?.data?.result) {\n\n let callbackdata = chargeDetails?.data?.data\n console.log(callbackdata, \"callbackdata\");\n callback({\n ...callbackdata,\n isPreAuth\n })\n handleClose()\n hideLoader()\n // onSuccess(paymentIntent);\n }\n console.log(chargeDetails?.data?.data, \"chargeDetails\");\n } catch (error: any) {\n console.log(error?.response, \"error\");\n setError(error?.response?.data?.message || \"Something went wrong\")\n hideLoader()\n }\n\n }\n // Optional: close popup or postMessage to parent\n setTimeout(() => window.close(), 1500);\n } else {\n setMessage(\"Processing payment...\");\n }\n\n } catch (error: any) {\n console.log(error?.response, \"error\");\n setError(error?.response?.data?.message || \"Something went wrong\")\n hideLoader()\n }\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <PaymentElement />\n <button className='pay-button' disabled={loading || !stripe}>\n {loading ? \"Processing...\" : `${formatUSD(Number(amount)?.toFixed(2))}`}\n </button>\n {/* {message && <div style={{ marginTop: 10 }}>{message}</div>} */}\n </form>\n );\n};","import { defaultcard, getCardType } from '@/app/utils/Common';\nimport React from 'react'\nimport { S3Url } from '../../baseurl';\n\ninterface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n}\n\ninterface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n}\n\ntype Props = {\n listHeading: string\n ListItems: Card[] | undefined\n selectedCard: SelectedCard | undefined\n setSelectedCard: React.Dispatch<React.SetStateAction<SelectedCard | undefined>>\n paymentGateway?: number | undefined,\n handleDeleteCard: (resp: any) => void\n otherButtonAction: (resp: any) => void\n otherButtonLabel: string\n headingClass?: string\n}\n\nexport const CardList = ({ listHeading = 'Card', ListItems, selectedCard, setSelectedCard, paymentGateway, handleDeleteCard, otherButtonAction, otherButtonLabel,headingClass }: Props) => {\n\n let trash = S3Url + 'widget/Trash.svg'\n\n // console.log(selectedCard, \"selectedCard another\",ListItems);\n\n\n return (\n <>\n <h6 className={headingClass || 'card-ach-heading'} style={{ marginBottom: '10px !important' }}>{listHeading}</h6>\n <div className='card-lint-div-in'>\n <div className='card-list-div'>\n {\n ListItems && ListItems?.length > 0 && ListItems?.map((card: any, index) => {\n let isDisabled = false\n if(paymentGateway){\n isDisabled = paymentGateway != card?.payment_method_type && card?.card_type != \"Bank\"\n }\n return (\n <div key={card?.id} className='card-list-single-div'>\n <div className=\"card-number-radio\">\n <input\n disabled={isDisabled}\n type=\"radio\" className='cardRadio' name=\"selected_card\"\n id=\"\" checked={selectedCard?.id === card?.id}\n onChange={(e) => setSelectedCard(card)} />\n <label htmlFor=\"\" className='card-number-last-four'>**** {card?.cardlastfourdigit}</label>\n {\n card?.card_type != \"Bank\" && (<h6 className='card-expiry-date'>{card?.expmonth}/{card?.expyear}</h6>)\n }\n </div>\n <div className=\"card-number-radio\">\n <span className='visa-card'>\n <img src={getCardType(card?.card_type)} alt=\"\" />\n </span>\n <span className='visa-card' style={{ cursor: \"pointer\" }} onClick={() => handleDeleteCard(card?.id)}>\n <img src={trash} alt=\"\" />\n </span>\n </div>\n </div>\n )\n })\n }\n </div>\n <div className='pay-with-other-card' onClick={otherButtonAction}>\n {otherButtonLabel}\n <img src={defaultcard} alt=\"\" />\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\n\nexport default function ErrorCardOverlayStyle() {\n return (\n <style>\n {\n `\n .card-error-overlay .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .card-error-overlay .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n \n .card-error-overlay .error-icon-overlay {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n min-height: 116px;\n z-index: 2;\n }\n\n .card-error-overlay .circle {\n width: 50px;\n height: 50px;\n border: 1px solid red;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom:20px\n }\n\n .card-error-overlay .circle .fa-times {\n font-size: 30px;\n color: red;\n }\n\n .card-error-overlay .error-text-overlay {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n // width: 227px;\n }\n\n .card-error-overlay .payment-error-text-overlay {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .card-error-overlay .thank-you-text-overlay {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 16px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616 !important;\n opacity: 0.5;\n padding-top:10px\n }\n\n .card-error-overlay .error-btn-div-overlay{\n padding-top:20px;\n width: 100%;\n \n }\n .card-error-overlay .error-btn-div-overlay button{\n outline: 0;\n height: 46px;\n font-size: 16px;\n background: #727272;\n border: none;\n display: block;\n color: #fff;\n width: 100%;\n border-radius: 180px;\n margin: 10px 0;\n text-decoration: none;\n }\n .card-error-overlay .error-btn-div-overlay button:hover, .card-error-overlay .error-btn-div-overlay button:focus {\n background: #222;\n color: #fff;\n cursor: pointer;\n}\n .payment-error-container-overlay {\nwidth: fit-content;\n position: relative;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: #fff;\n border-radius: 12px;\n z-index: 11111;\n max-width: 240px;\n min-width: 224px;\n padding: 20px;\n margin-left: 17px !important;\n}\n.card-error-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgb(87 87 87 / 15%);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(12px);\n z-index: 1111;\n}\n `\n }\n </style>\n )\n}","import React from 'react'\nimport ErrorCardOverlayStyle from './ErrorCardOverlaystyle';\n// import SuccessCardMszStyle from './SuccessCardMszStyle'\n\ntype ErrorCardOverlay\n = {\n onClose: () => void;\n error: string;\n autoTrigger?: boolean;\n };\nconst ErrorCardOverlay\n : React.FC<ErrorCardOverlay\n > = ({ onClose, error, autoTrigger = false }) => {\n return (\n <>\n <ErrorCardOverlayStyle />\n <div className='card-error-overlay'>\n\n <div className=\"payment-error-container-overlay\"> \n <div className=\"error-icon-overlay\">\n <div className=\"circle\">\n {/* <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i> */}\n {/* <i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\"></i> */}\n <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n </div>\n <div className=\"error-text-overlay\">\n <div className=\"payment-error-text-overlay\">{error}</div>\n <div className=\"thank-you-text-overlay\">Try again later </div>\n </div>\n\n {\n !autoTrigger && (\n <div className=\"error-btn-div-overlay\">\n <button onClick={onClose}>OK</button>\n </div>\n )\n }\n </div>\n </div>\n </div>\n </>\n\n )\n }\nexport default ErrorCardOverlay\n","// \"use client\";\n\n// import { useEffect, useRef } from \"react\";\n// import { masterBaseUrl } from \"../../baseurl\";\n\n// /* -------------------- TYPES -------------------- */\n\n// type Props = {\n// applePayMerchantId: string;\n// applePayAmount: string;\n// applePayMerchantName: string;\n// showLoader: () => void;\n// completeFractalFlow: (\n// tokenizeData: string,\n// intentid?: string | null,\n// typeoftoken?: string | null\n// ) => Promise<any>;\n// };\n\n// type ApplePayValidationEvent = Event & {\n// validationURL: string;\n// complete: (session: any) => void;\n// };\n\n// type ApplePayPaymentRequest = PaymentRequest & {\n// onmerchantvalidation: (event: ApplePayValidationEvent) => void;\n// };\n\n// type PaymentResponseWithDetails = PaymentResponse & {\n// details: {\n// token: {\n// paymentData: any;\n// };\n// };\n// };\n\n// /* -------------------- COMPONENT -------------------- */\n\n// export default function ApplePayButton({\n// applePayMerchantId,\n// applePayAmount,\n// applePayMerchantName,\n// showLoader,\n// completeFractalFlow\n// }: Props) {\n\n// console.log(\"🔵 ApplePayButton mounted with props:\", {\n// applePayMerchantId,\n// applePayAmount,\n// applePayMerchantName\n// });\n\n\n// const applePayRef = useRef<any>(null);\n// /* -------------------- CONFIG -------------------- */\n\n// const paymentRequestMethods: PaymentMethodData[] = [\n// {\n// supportedMethods: \"https://apple.com/apple-pay\",\n// data: {\n// version: 3,\n// merchantIdentifier: \"merchant.com.apdemo\",\n// merchantCapabilities: [\"supports3DS\"],\n// supportedNetworks: [\"amex\", \"discover\", \"masterCard\", \"visa\"],\n// countryCode: \"US\",\n// },\n// },\n// ];\n\n// const paymentRequestOptions: PaymentOptions = {\n// requestPayerName: false,\n// requestPayerEmail: false,\n// requestPayerPhone: false,\n// requestShipping: false,\n// shippingType: \"shipping\",\n// };\n\n// /* -------------------- VALIDATION -------------------- */\n\n// function validateConfig(): boolean {\n// console.log(\"🟡 Validating config...\");\n\n// const missing: string[] = [];\n\n// if (!applePayMerchantId) missing.push(\"applePayMerchantId\");\n// if (!applePayAmount) missing.push(\"applePayAmount\");\n// if (!applePayMerchantName) missing.push(\"applePayMerchantName\");\n\n// if (missing.length > 0) {\n// console.error(\"❌ Missing Apple Pay config:\", missing);\n// return false;\n// }\n\n// console.log(\"✅ Config validation passed\");\n// return true;\n// }\n\n// /* -------------------- PAYMENT FLOW -------------------- */\n\n// function buildPaymentDetails(): PaymentDetailsInit {\n// console.log(\"🟡 Building payment details...\");\n\n// const details = {\n// total: {\n// label: applePayMerchantName,\n// amount: {\n// currency: \"USD\",\n// value: applePayAmount,\n// },\n// },\n// };\n\n// console.log(\"✅ Payment details:\", details);\n// return details;\n// }\n\n\n\n// async function validateMerchant(event: ApplePayValidationEvent) {\n// console.log(\"STEP 1: Merchant validation started\");\n\n// try {\n// const res = await fetch(\n// `${masterBaseUrl}api/v1/widget/generate-apple-pay-session`,\n// {\n// method: \"POST\",\n// headers: { \"Content-Type\": \"application/json\" },\n// body: JSON.stringify({\n// validationUrl: event.validationURL,\n// applePayMerchantId,\n// applepayDisplayName: applePayMerchantName,\n// requestDomain: window.location.hostname\n// }),\n// }\n// );\n\n// console.log(\"STEP 2: Response status: \" + res.status);\n\n// const data = await res.json();\n// console.log(JSON.stringify(data));\n// console.log(\"STEP 3: Got response\",);\n\n// if (!data || !data.data) {\n// console.log(\"❌ Invalid session data\");\n// event.complete(null);\n// return;\n// }\n\n// console.log(\"STEP 4: Completing validation\");\n\n// console.log(data, \"dataatdatda\");\n\n// event.complete(data.data);\n// } catch (err: any) {\n// console.log(err, \"Merchant validation failed:\");\n// console.log(\"❌ Merchant validation failed: \" + err?.message);\n// event.complete(null);\n// }\n// }\n\n\n// async function authorizePayment(\n// paymentResponse: PaymentResponseWithDetails\n// ) {\n// console.log(\"STEP D: Authorizing payment\");\n\n// try {\n// const token = paymentResponse.details.token.paymentData;\n\n// console.log(\"STEP E: Got token\");\n\n// completeFractalFlow(token, null, \"apple_pay\");\n\n// // TEMP TEST (VERY IMPORTANT)\n// // await paymentResponse.complete(\"success\");\n\n// // console.log(\"✅ Forced success\");\n\n// } catch (err: any) {\n// console.log(\"❌ Authorization failed: \" + err?.message);\n// await paymentResponse.complete(\"fail\");\n// }\n// }\n\n\n// async function handleApplePayClick() {\n// console.log(\"STEP A: Click detected\");\n\n// try {\n// const request = new PaymentRequest(\n// paymentRequestMethods,\n// buildPaymentDetails(),\n// paymentRequestOptions\n// ) as any;\n\n// request.onmerchantvalidation = validateMerchant;\n\n// console.log(\"STEP B: Calling show()\");\n\n// const response = await request.show();\n\n// console.log(\"STEP C: Payment sheet shown\");\n\n// await authorizePayment(response as PaymentResponseWithDetails);\n// } catch (err: any) {\n// console.log(\"❌ Apple Pay flow failed: \" + err?.message);\n// }\n// }\n\n// useEffect(() => {\n// console.log(\"ApplePaySession exists:\", !!(window as any).ApplePaySession);\n\n// if ((window as any).ApplePaySession) {\n// console.log(\n// \"canMakePayments:\",\n// (window as any).ApplePaySession.canMakePayments()\n// );\n// }\n// }, []);\n\n\n// useEffect(() => {\n// const btn = applePayRef.current;\n// if (!btn) return;\n\n// const handleClick = () => {\n// handleApplePayClick();\n// };\n\n// btn.addEventListener(\"click\", handleClick);\n\n// return () => {\n// btn.removeEventListener(\"click\", handleClick);\n// };\n// }, []);\n\n// return (\n// <div >\n// <apple-pay-button\n// ref={applePayRef}\n// buttonstyle=\"black\"\n// type=\"pay\"\n// locale=\"en-US\"\n// />\n// </div>\n// );\n// }\n\n\n\n\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { masterBaseUrl } from \"../../baseurl\";\n\n/* -------------------- TYPES -------------------- */\n\ntype Props = {\n applePayMerchantId: string;\n applePayAmount: string;\n applePayMerchantName: string;\n showLoader: () => void;\n completeFractalFlow: (\n tokenizeData: string,\n intentid?: string | null,\n typeoftoken?: string | null\n ) => Promise<any>;\n};\n\ntype ApplePayValidationEvent = Event & {\n validationURL: string;\n complete: (session: any) => void;\n};\n\ntype PaymentResponseWithDetails = PaymentResponse & {\n details: {\n token: {\n paymentData: any;\n };\n };\n};\n\n/* -------------------- COMPONENT -------------------- */\n\nexport default function ApplePayButton({\n applePayMerchantId,\n applePayAmount,\n applePayMerchantName,\n showLoader,\n completeFractalFlow,\n}: Props) {\n const applePayRef = useRef<any>(null);\n\n /* -------------------- CONFIG -------------------- */\n\n const paymentRequestMethods: PaymentMethodData[] = [\n {\n supportedMethods: \"https://apple.com/apple-pay\",\n data: {\n version: 3,\n merchantIdentifier: applePayMerchantId, // ✅ FIXED\n merchantCapabilities: [\"supports3DS\"],\n supportedNetworks: [\"amex\", \"discover\", \"mastercard\", \"visa\"], // ✅ FIXED\n countryCode: \"US\",\n },\n },\n ];\n\n const paymentRequestOptions: PaymentOptions = {\n requestPayerName: false,\n requestPayerEmail: false,\n requestPayerPhone: false,\n requestShipping: false,\n };\n\n /* -------------------- HELPERS -------------------- */\n\n function buildPaymentDetails(): PaymentDetailsInit {\n return {\n total: {\n label: applePayMerchantName,\n amount: {\n currency: \"USD\",\n value: applePayAmount,\n },\n },\n };\n }\n\n /* -------------------- MERCHANT VALIDATION -------------------- */\n\n async function validateMerchant(event: ApplePayValidationEvent) {\n console.log(\"🟡 STEP 1: Merchant validation started\");\n\n try {\n console.log(\"Validation URL:\", event.validationURL);\n console.log(\"Domain:\", window.location.hostname);\n\n const res = await fetch(\n `${masterBaseUrl}api/v1/widget/generate-apple-pay-session`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n validationUrl: event.validationURL,\n applePayMerchantId,\n applepayDisplayName: applePayMerchantName,\n requestDomain: window.location.hostname, // ✅ IMPORTANT\n }),\n }\n );\n\n console.log(\"🟡 STEP 2: Response status:\", res.status);\n\n const data = await res.json();\n console.log(\"RAW session response:\", JSON.stringify(data));\n console.log(\"🟢 STEP 3: Session response: data fetched\");\n // Handle both { data: session } and bare session shapes\n const merchantSession = data?.data ?? data;\n if (!merchantSession || typeof merchantSession !== \"object\") {\n console.error(\"❌ Bad session shape\");\n event.complete(null);\n return;\n }\n\n console.log(\"🟢 STEP 4.1: Completing merchant validation\");\n\n event.complete(merchantSession); // ✅ IMPORTANT (no data.data)\n\n console.log(\"🟢 STEP 4.2: Completed merchant validation\");\n\n } catch (err: any) {\n console.log(\"❌ Merchant validation failed:\", err?.message);\n event.complete(null);\n }\n }\n\n /* -------------------- PAYMENT AUTH -------------------- */\n\n async function authorizePayment(\n paymentResponse: PaymentResponseWithDetails\n ) {\n console.log(\"🟡 STEP 5: Authorizing payment\");\n\n try {\n const token = paymentResponse.details.token.paymentData;\n\n console.log(\"🟢 STEP 6: Got token\");\n\n await completeFractalFlow(token, null, \"apple_pay\");\n\n // ✅ REQUIRED\n await paymentResponse.complete(\"success\");\n\n console.log(\"✅ Payment completed successfully\");\n\n } catch (err: any) {\n console.log(\"❌ Authorization failed:\", err?.message);\n await paymentResponse.complete(\"fail\");\n }\n }\n\n /* -------------------- CLICK HANDLER -------------------- */\n\n async function handleApplePayClick() {\n console.log(\"🟡 STEP A: Click detected\");\n\n try {\n const request = new PaymentRequest(\n paymentRequestMethods,\n buildPaymentDetails(),\n paymentRequestOptions\n ) as any;\n\n request.onmerchantvalidation = validateMerchant;\n\n console.log(\"🟡 STEP B: Calling show()\");\n\n const response = await request.show();\n\n console.log(\"🟢 STEP C: Payment sheet opened\");\n\n await authorizePayment(response as PaymentResponseWithDetails);\n\n } catch (err: any) {\n console.log(\"❌ Apple Pay flow failed:\", err?.message);\n }\n }\n\n /* -------------------- INIT CHECK -------------------- */\n\n useEffect(() => {\n if (\n (window as any).ApplePaySession &&\n (window as any).ApplePaySession.canMakePayments()\n ) {\n console.log(\"✅ Apple Pay is available\");\n } else {\n console.log(\"❌ Apple Pay NOT available\");\n }\n }, []);\n\n /* -------------------- BUTTON EVENT -------------------- */\n\n // useEffect(() => {\n // const btn = applePayRef.current;\n // if (!btn) return;\n\n // const handleClick = () => handleApplePayClick();\n\n // btn.addEventListener(\"click\", handleClick);\n\n // return () => {\n // btn.removeEventListener(\"click\", handleClick);\n // };\n // }, []);\n\n useEffect(() => {\n const btn = applePayRef.current;\n if (!btn) return;\n const handleClick = () => handleApplePayClick();\n btn.addEventListener(\"click\", handleClick);\n return () => btn.removeEventListener(\"click\", handleClick);\n }, [applePayMerchantId, applePayAmount, applePayMerchantName]); // 👈 add deps\n\n /* -------------------- UI -------------------- */\n\n return (\n <div>\n <apple-pay-button\n ref={applePayRef}\n buttonstyle=\"black\"\n type=\"pay\"\n locale=\"en-US\"\n style={{ width: \"100%\" }}\n />\n </div>\n );\n}","'use client';\nimport React, { useEffect, useState, useMemo, useRef } from 'react';\nimport DataScript from '../Datascript';\nimport SkyChargewidgetstyles from './SkyChargewidgetstyles';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles';\nimport CustomModal2styles from '../CustomModal/CustomModal2styles';\nimport ModelContentSky from '../Atoms/ModelContentSky/ModelContentSky';\nimport axios from 'axios';\nimport { masterBaseUrl } from '../baseurl';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport { DataCapScriptLoader } from '../Datacap-Payment';\nimport EmbeddedCheckoutStyles from './EmbeddedCheckoutStyles';\nimport { ApplePayScriptLoader } from '../Atoms/Applepay/ApplePayScriptLoader';\n\ntype Props = {\n session_token: string;\n surcharge: string;\n amount: string;\n submitBtnText?: string;\n submitBtnClass?: string;\n customerId?: string;\n callback: (resp: any) => void;\n merchantName: string;\n isPreAuth: boolean;\n submitBtnIcon?: any;\n isRequest?: boolean;\n pass_fee?: boolean;\n pass_fee_amount?: number | string;\n bankAmount: string;\n bankSurcharge?: string;\n require3ds: boolean;\n autoTrigger: boolean;\n isPartial?: boolean;\n partialRef?: string;\n onSubmit?: (submitFn: () => void) => void;\n onLoad: boolean,\n customCSS?: string\n};\n\nexport const EmbeddedCheckout = ({\n amount,\n bankAmount,\n submitBtnText = 'Pay',\n session_token,\n customerId,\n callback,\n merchantName = 'merchant',\n isPreAuth,\n surcharge = '0',\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds = false,\n autoTrigger = false,\n isPartial,\n bankSurcharge,\n partialRef,\n onSubmit,\n onLoad,\n customCSS\n}: Props) => {\n\n const [show, setShow] = useState(false);\n const [loading, setLoading] = useState(false);\n const [childHandleClose, setChildHandleClose] = useState<() => void>(() => () => { });\n const [orderGuid, setOrderGuid] = useState(null);\n const [remainingAmount, setRemainingAmount] = useState(null)\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n // -----------------------------------------------\n // ✅ Build fresh commonProps whenever parent props change\n // -----------------------------------------------\n const initialCommonProps = useMemo(\n () => ({\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n setShow,\n setHandleCloseRef: setChildHandleClose,\n isPartial,\n bankSurcharge,\n partialRef\n }),\n [\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n isPartial,\n bankSurcharge,\n partialRef\n ]\n );\n // -----------------------------------------------\n // Current working props passed to modal content\n // -----------------------------------------------\n const [commonProps, setCommonProps] = useState(initialCommonProps);\n\n // -----------------------------------------------\n // Reset commonProps every time modal opens\n // -----------------------------------------------\n useEffect(() => {\n if (show) {\n setCommonProps(initialCommonProps);\n }\n }, [show, initialCommonProps]);\n\n // -----------------------------------------------\n // Fetch updated amounts for partial payments\n // -----------------------------------------------\n const getskyosOrderDetails = async () => {\n setLoading(true);\n try {\n const res = await axios.get(\n `${masterBaseUrl}api/v1/gateway/get-order-details/${session_token}`,\n { params: { isPartial, partialRef } }\n );\n\n if (res?.data?.result) {\n const data = res.data.data;\n if (data?.orderGuid) {\n setOrderGuid(data?.orderGuid);\n setRemainingAmount(data?.remainingAmount);\n }\n setCommonProps(prev => ({\n ...prev,\n amount: data.amount,\n pass_fee_amount: data.pass_fee_amount,\n pass_fee: data.pass_fee\n }));\n }\n } catch (error) {\n console.log('error while getting skyosorderdeatils', error);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (autoTrigger && isPartial && partialRef) {\n getskyosOrderDetails();\n }\n }, [autoTrigger, isPartial, partialRef]);\n\n console.log(onLoad, \"onLoad\");\n\n\n useEffect(() => {\n const supported = !!(window as any).ApplePaySession;\n let canPay = false;\n\n if (supported) {\n try {\n canPay = (window as any).ApplePaySession.canMakePayments();\n } catch (e) { }\n }\n\n console.log(`ApplePaySession: ${supported}, canMakePayments: ${canPay}`);\n }, []);\n // -----------------------------------------------\n // Render UI\n // -----------------------------------------------\n return (\n <>\n <link href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css\" />\n\n <DataScript />\n {/* <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} /> */}\n <SkyChargewidgetstyles />\n <CardBankRadioStyles />\n <CustomModal2styles />\n {/* <DataCapScriptLoader /> */}\n <ApplePayScriptLoader />\n <EmbeddedCheckoutStyles extraCustomCSS={customCSS} />\n\n {!autoTrigger && (\n <button className={submitBtnClass || 'paymentBtn'} onClick={() => setShow(true)}>\n {submitBtnText}\n {submitBtnIcon}\n </button>\n )}\n\n {!autoTrigger ? (\n <CustomModal2 open={show} onClose={childHandleClose}>\n <ModelContentSky onLoad={onLoad} onSubmit={onSubmit} show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n </CustomModal2>\n ) : (\n <ModelContentSky onLoad={onLoad} onSubmit={onSubmit} show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n )}\n </>\n );\n};\n","import React from \"react\";\n\ntype Props = {\n extraCustomCSS?: string;\n};\n\nexport default function EmbeddedCheckoutStyles({ extraCustomCSS }: Props) {\n\n return (\n <style>\n {`\n\n .pay-amount-conatiner{\n margin-top: 20px !important;\n margin-bottom: 20px !important ;\n }\n\n .frac-pay-container.pay-container {\n grid-template-columns:1fr;\n }\n\n\n /* Card */\n.plan-card {\n width: 100%;\n font-family: Inter, sans-serif;\n background: #fff;\n}\n\n/* Header */\n.card-header {\n padding: 12px 0 0 0;\n}\n\n/* Button */\n.collapse-btn {\n width: 100%;\n background: none;\n border: none;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n font-size: 15px;\n padding: 0;\n}\n\n/* Arrow */\n.arrow {\n transition: transform 0.3s ease;\n height: 8px;\n}\n\n/* Open State */\n.collapse-btn.open .arrow {\n transform: rotate(180deg); /* Down */\n}\n\n/* Body */\n.card-body {\n padding: 0;\n}\n\n/* Plan Header */\n.plan-header {\n font-size: 15px;\n font-weight: 600;\n}\n\n/* Scrollable List */\n.plan-list {\n max-height: 200px;\n overflow-y: auto;\n padding-right: 6px;\n}\n\n/* Items */\n.plan-item {\n display: flex;\n justify-content: space-between;\n padding: 6px 0;\n font-size: 14px;\n}\n\n/* Badges */\n.badge {\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.badge-included {\n background: #f1f3f5;\n color: #495057;\n}\n\n.badge-available {\n background: #f8f9fa;\n color: #212529;\n}\n\n/* Helpers */\n.row-between {\n display: flex;\n justify-content: space-between;\n}\n\n.text-end {\n text-align: right;\n}\n\n.text-muted {\n color: #6c757d;\n font-size: 12px;\n}\n\n.fw-semibold {\n font-weight: 600;\n}\n\n.mb-2 {\n margin-bottom: 8px;\n}\n\n/* Divider */\n.divider {\n height: 1px;\n background: #e5e7eb;\n margin: 8px 0;\n}\n\n/* Collapse Animation */\n.collapse {\n max-height: 0;\n overflow: hidden;\n transition: max-height 0.3s ease;\n}\n\n.collapse.show {\n max-height: 1000px;\n}\n .frac-pay-container.pay-container {\n grid-template-columns:1fr;\n}\n .frac-payment-form-div .amt-pay-con {\n padding-right: 0px;\n}\n .frac-payment-form-div .ach-scrl {\n padding-right: 0px;\n gap: 10px;\n max-height: fit-content !important;\n min-height: fit-content !important;\n overflow: hidden !important;\n}\n.frac-payment-form-div .frac-card-bank-radio-main {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n align-self: stretch;\n border-radius: 14px;\n border: none;\n overflow: visible;\n gap: 10px;\n}\n .frac-payment-form-div .frac-card-bank-radio {\n display: flex;\n padding: 12px 16px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n width: 50%;\n border: 1px solid #E0DFE2;\n border-radius: 10px;\n box-shadow: rgba(149, 157, 165, 0.2) 0px 1px 4px;\n}\n .frac-payment-form-div .frac-card-bank-radio.frac-active {\n background: #fff;\n border: 2px solid #004eab !important;\n}\n \n .frac-payment-form-div .form-control-frac {\n border: 1px solid #dee2e6 !important;\n border-radius: 0.375rem !important;\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1);\n}\n .frac-payment-form-div .form-control-frac:focus {\n border: 1px solid #004eab !important;\n }\n .frac-payment-form-div .card-expiry-new {\n border: none;\n gap: 10px;\n}\n .frac-payment-form-div .exp-date-year-container {\n gap: 10px;\n width: 100%;\n}\n .frac-payment-form-div .card-type-logo-wrap{\n position: absolute;\n right: 10px;\n max-width: 30px;\n}\n .detials-wrap.detials-wrap-1 {\n display: flex;\n flex-wrap: wrap;\n}\n@media screen and (max-width: 1280px) {\n.frac-pay-container.pay-container {\n grid-template-columns: 1fr;\n border: none;\n}\n}\n@media screen and (max-width: 899px) {\n.detials-wrap {\n grid-template-columns: 1fr !important;\n}\n.frac-payment-form-div .exp-date-year-container{\nwidth: 100%;}\n\n}\n@media screen and (max-width: 575px) {\n.frac-payment-form-div .card-type-logo-wrap{\nmax-width: 30px;\n}\nform#ACHPaymentForm .ach-scrl {\n grid-template-columns: 1fr !important;\n}\n @media screen and (max-width: 375px) {\n .frac-payment-form-div .exp-date-year-container {\n // flex-direction: column;\n}\n .parent-pay-container {\n padding: 10px;\n }\n }\n}\n.box-inner-card-text{\n display: flex;\n gap: 0px;\n flex-direction: column;\n}\n .box-inner-card-text .frac-payment-type-logo {\n width: 17px;\n height: 17px;\n aspect-ratio: 1/1;\n}\n .exp-date-year-wrap.form-control-frac input {\n background: transparent;\n border: none;\n outline: none;\n font-size: 1rem;\n font-weight: 400;\n}\n .exp-date-year-wrap.form-control-frac {\n display: flex;\n gap: 2px;\n}\n .exp-date-year-wrap input.exp-month {\n width: 32px;\n}\n .detials-wrap {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n .detials-wrap.detials-wrap-2{\n grid-template-columns: 1fr 1fr; \n }\n form#ACHPaymentForm .ach-scrl {\n display: grid;\n grid-gap: 0px 10px;\n grid-template-columns: 1fr;\n}\n .plan-list {\n max-height: 130px;\n min-height: 130px;\n overflow-y: auto;\n padding-right: 6px;\n }\n .plan-list::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .plan-list::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n div#cvv {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 0;\n }\n div#exp_year {\n height: 36px;\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid #dee2e6;\n }\n div#exp_month {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid #dee2e6;\n }\n .exp-date-year-container .form-group {\n flex: 1;\n }\n.input-main-wrap-frac{\nmargin:0px !important;\npadding:0px !important;\n}\n.toggle-num-wrapper.toggle-num-wrapper-new {\n border: 1px solid #dee2e6 !important;\n border-radius: 0.375rem !important;\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1);\n}\n .toggle-num-wrapper-new div#card_number {\n padding: 0px 10px;\n border: none;\n border-bottom: 1px solid #dee2e6;\n}\n .toggle-num-wrapper-new .card-crdi.card-expiry-new {\n padding: 0px 10px;\n}\n .toggle-num-wrapper-new .input-main-wrap-frac {\n height: 38px;\n}\n .toggle-num-wrapper-new:focus {\n border: 1px solid #004eab !important;\n}\n .frac-card-title-main {\n display: flex;\n align-items: start;\n gap: 4px;\n flex-direction: column;\n}\n .parent-pay-container {\n padding: 24px;\n background-color: #ffffff !important;\n border-radius: 15px;\n min-width: 300px;\n}\n\n\n ${extraCustomCSS}\n\n `}\n </style>\n )\n}","import { useEffect } from \"react\";\n\nlet applePayScriptLoaded = false;\n\nexport const ApplePayScriptLoader = () => {\n useEffect(() => {\n if (applePayScriptLoaded) return;\n\n const existingScript = document.querySelector(\n `script[src=\"https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js\"]`\n );\n\n if (!existingScript) {\n const script = document.createElement(\"script\");\n script.src = \"https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js\";\n script.async = true;\n\n script.onload = () => {\n console.log(\"✅ Apple Pay script loaded\");\n applePayScriptLoaded = true;\n\n // Debug check\n console.log(\"ApplePaySession:\", (window as any).ApplePaySession);\n };\n\n script.onerror = (err) => {\n console.error(\"❌ Apple Pay script failed\", err);\n };\n\n document.head.appendChild(script);\n } else {\n applePayScriptLoaded = true;\n }\n }, []);\n\n return null;\n};"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YA+PR;AAER;AAEA,IAAO,6BAA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoVP,cAAc;AAAA;AAAA,eAGZ;AAER;;;ACnWA,SAAS,aAAAC,mBAAiB;AAE1B,IAAI,uBAAuB;AAEpB,IAAM,uBAAuB,MAAM;AACxC,EAAAA,YAAU,MAAM;AACd,QAAI,qBAAsB;AAE1B,UAAM,iBAAiB,SAAS;AAAA,MAC9B;AAAA,IACF;AAEA,QAAI,CAAC,gBAAgB;AACnB,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,MAAM;AACb,aAAO,QAAQ;AAEf,aAAO,SAAS,MAAM;AACpB,gBAAQ,IAAI,gCAA2B;AACvC,+BAAuB;AAGvB,gBAAQ,IAAI,oBAAqB,OAAe,eAAe;AAAA,MACjE;AAEA,aAAO,UAAU,CAAC,QAAQ;AACxB,gBAAQ,MAAM,kCAA6B,GAAG;AAAA,MAChD;AAEA,eAAS,KAAK,YAAY,MAAM;AAAA,IAClC,OAAO;AACL,6BAAuB;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;AF0JQ,qBAAAC,YACI,OAAAC,OAYI,QAAAC,cAbR;AAtJD,IAAM,mBAAmB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAa;AAET,QAAM,CAAC,MAAM,OAAO,IAAIC,WAAS,KAAK;AACtC,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,KAAK;AAC5C,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,WAAqB,MAAM,MAAM;AAAA,EAAE,CAAC;AACpF,QAAM,CAAC,WAAW,YAAY,IAAIA,WAAS,IAAI;AAC/C,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,WAAS,IAAI;AAC3D,QAAM,CAAC,kBAAkB,iBAAiB,IAAIA,WAAS,KAAK;AAI5D,QAAM,qBAAqBC;AAAA,IACvB,OAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,IACA;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAIA,QAAM,CAAC,aAAa,cAAc,IAAID,WAAS,kBAAkB;AAKjE,EAAAE,YAAU,MAAM;AACZ,QAAI,MAAM;AACN,qBAAe,kBAAkB;AAAA,IACrC;AAAA,EACJ,GAAG,CAAC,MAAM,kBAAkB,CAAC;AAK7B,QAAM,uBAAuB,YAAY;AAzI7C;AA0IQ,eAAW,IAAI;AACf,QAAI;AACA,YAAM,MAAM,MAAMC,QAAM;AAAA,QACpB,GAAG,aAAa,oCAAoC,aAAa;AAAA,QACjE,EAAE,QAAQ,EAAE,WAAW,WAAW,EAAE;AAAA,MACxC;AAEA,WAAI,gCAAK,SAAL,mBAAW,QAAQ;AACnB,cAAM,OAAO,IAAI,KAAK;AACtB,YAAI,6BAAM,WAAW;AACjB,uBAAa,6BAAM,SAAS;AAC5B,6BAAmB,6BAAM,eAAe;AAAA,QAC5C;AACA,uBAAe,UAAS,iCACjB,OADiB;AAAA,UAEpB,QAAQ,KAAK;AAAA,UACb,iBAAiB,KAAK;AAAA,UACtB,UAAU,KAAK;AAAA,QACnB,EAAE;AAAA,MACN;AAAA,IACJ,SAAS,OAAO;AACZ,cAAQ,IAAI,yCAAyC,KAAK;AAAA,IAC9D,UAAE;AACE,iBAAW,KAAK;AAAA,IACpB;AAAA,EACJ;AAEA,EAAAD,YAAU,MAAM;AACZ,QAAI,eAAe,aAAa,YAAY;AACxC,2BAAqB;AAAA,IACzB;AAAA,EACJ,GAAG,CAAC,aAAa,WAAW,UAAU,CAAC;AAEvC,UAAQ,IAAI,QAAQ,QAAQ;AAG5B,EAAAA,YAAU,MAAM;AACZ,UAAM,YAAY,CAAC,CAAE,OAAe;AACpC,QAAI,SAAS;AAEb,QAAI,WAAW;AACX,UAAI;AACA,iBAAU,OAAe,gBAAgB,gBAAgB;AAAA,MAC7D,SAAS,GAAG;AAAA,MAAE;AAAA,IAClB;AAEA,YAAQ,IAAI,oBAAoB,SAAS,sBAAsB,MAAM,EAAE;AAAA,EAC3E,GAAG,CAAC,CAAC;AAIL,SACI,gBAAAH,OAAAF,YAAA,EACI;AAAA,oBAAAC,MAAC,UAAK,MAAK,8EAA6E;AAAA,IAExF,gBAAAA,MAAC,cAAW;AAAA,IAEZ,gBAAAA,MAAC,yBAAsB;AAAA,IACvB,gBAAAA,MAAC,uBAAoB;AAAA,IACrB,gBAAAA,MAAC,8BAAmB;AAAA,IAEpB,gBAAAA,MAAC,wBAAqB;AAAA,IACtB,gBAAAA,MAAC,0BAAuB,gBAAgB,WAAW;AAAA,IAElD,CAAC,eACE,gBAAAC,OAAC,YAAO,WAAW,kBAAkB,cAAc,SAAS,MAAM,QAAQ,IAAI,GACzE;AAAA;AAAA,MACA;AAAA,OACL;AAAA,IAGH,CAAC,cACE,gBAAAD,MAAC,wBAAa,MAAM,MAAM,SAAS,kBAC/B,0BAAAA,MAAC,wDAAgB,QAAgB,UAAoB,MAAY,aAAa,WAAa,cAA1F,EAAuG,WAAsB,kBAAkC,GACpK,IAEA,gBAAAA,MAAC,wDAAgB,QAAgB,UAAoB,MAAY,aAAa,WAAa,cAA1F,EAAuG,WAAsB,kBAAkC;AAAA,KAExK;AAER;","names":["jsx","jsx","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","amount","surcharge","useState","useEffect","axios","PatternFormat","Fragment","jsx","jsxs","useState","axios","useEffect","amount","PatternFormat","useEffect","useRef","useState","jsx","axios","jsx","Fragment","jsx","jsxs","useEffect","useEffect","jsx","Fragment","jsx","jsxs","jsx","useEffect","useEffect","useEffect","Fragment","jsx","jsxs","_a","_b","useEffect","useEffect","useEffect","useRef","useState","jsx","jsx","Fragment","jsx","jsxs","Fragment","jsx","jsxs","useState","mastercard","visa","americanexp","discover","defaultcard","trash","bank","secure","pov","pax","useRef","_a","axios","_b","useEffect","bankAmount","bankFeeAmount","bankSavingsAmount","name","_c","_d","_e","_f","_g","_h","_i","_j","feeExempt","requestOptions","result","paymentData","error","getCardType","jsx","useEffect","useRef","useState","Swal","axios","jsx","jsx","Fragment","jsx","jsxs","Fragment","jsx","jsxs","useState","useRef","Swal","_a","_b","name","paymentData","axios","useEffect","_c","useEffect","useRef","useState","axios","jsx","useEffect","useRef","Fragment","jsx","jsxs","Fragment","jsx","jsxs","useState","useRef","_a","_b","name","axios","error","paymentGateway","result","useEffect","useEffect","useRef","useState","axios","Swal","Fragment","jsx","jsxs","useRef","useEffect","mastercard","visa","americanexp","discover","defaultcard","trash","bank","secure","pov","pax","useState","_a","axios","_b","name","_c","_d","_e","_f","_g","_h","_i","_j","_k","requestOptions","paymentData","amount","error","Swal","getCardType","baseAmount","useEffect","useState","jsx","useEffect","useRef","useState","axios","Swal","useEffect","useRef","Fragment","jsx","jsxs","axios","useState","jsx","jsxs","useState","_a","axios","error","jsx","Fragment","jsx","jsxs","trash","NumericFormat","jsx","Fragment","jsx","jsxs","useEffect","useRef","jsx","applePayMerchantId","useRef","useEffect","Fragment","jsx","jsxs","useRef","useState","mastercard","visa","americanexp","discover","defaultcard","trash","bank","secure","pov","pax","amount","surcharge","_a","_b","_c","_d","_e","_f","_g","_h","_i","axios","error","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","paymentGateway","result","name","getCardType","Swal","useEffect","activeinBank","activeinCard","activetab","NumericFormat","axios","Fragment","jsx","jsxs","useState","useEffect","axios","useEffect","useState","useMemo","axios","jsx","useEffect","Fragment","jsx","jsxs","useState","useMemo","useEffect","axios"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/app/components/RequestPayment/RequestPayment.tsx","../src/app/components/Loader/LoaderStyle.tsx","../src/app/components/Loader/Loader.tsx","../src/app/components/baseurl.ts","../src/app/components/Errortext.ts","../src/app/components/CustomModal/CustomModal2styles.tsx","../src/app/components/CustomModal/CustomModal2.tsx","../src/app/components/RequestPayment/RequestPaymentstyles.tsx","../src/app/utils/Common.js","../src/app/components/RequestPayment/RequestPreAuthPayment.tsx","../src/app/components/Charge/GetPaymentPage.tsx","../src/app/components/Charge/Chargewidgetstyles.tsx","../src/app/components/SuccessMessage/SuccessMszStyle.tsx","../src/app/components/SuccessMessage/HandleSubmit.tsx","../src/app/components/SuccessMessage/SuccessMsz.tsx","../src/app/components/Datascript.tsx","../src/app/components/ErrorCardMessage/ErrorCardMessageStyle.tsx","../src/app/components/ErrorCardMessage/ErrorCardMessage.tsx","../src/app/components/socketClient.js","../src/app/components/Atoms/CardBankRadio/CardBankRadioStyles.tsx","../src/app/components/FractalTokenizer.tsx","../src/app/components/Atoms/FractalForm/FractalFields.tsx","../src/app/components/Datacap-Payment/DataCapScriptLoader.tsx","../src/app/components/Datacap-Payment/DataCapFields.tsx","../src/app/components/Charge/FractalWidgetStyles.tsx","../src/app/components/Fractal/FractalCheckoutUI.tsx","../src/app/utils/Constant.js","../src/app/components/PreAuthCharge/PreAuthPaymentPage.tsx","../src/app/components/AddCard/AddCardEasyPay.tsx","../src/app/components/AddCard/AddCardStyles.tsx","../src/app/components/SuccessCardMessage/SuccessCardMszStyle.tsx","../src/app/components/SuccessCardMessage/SuccessCardMsz.tsx","../src/app/components/AddCard/AddCardSky.tsx","../src/app/components/AddCard/AddCardSkyStyle.tsx","../src/app/components/Atoms/FractalForm/FractalFieldsAddCardSky.tsx","../src/app/components/PartialPayment/PartialPayment.tsx","../src/app/components/Skysystemz/PayButtonWithForm.tsx","../src/app/components/Skysystemz/SkyChargewidgetstyles.tsx","../src/app/components/Atoms/ModelContentSky/ModelContentSky.tsx","../src/app/components/Atoms/ThreedsCheckout/ThreeDSChallenge.tsx","../src/app/components/Atoms/CardBankRadio/CardBankRadio.tsx","../src/app/components/Atoms/ThreedsCheckout/ThreedsCheckout.tsx","../src/app/components/Atoms/ThreedsCheckout/CheckoutForm.tsx","../src/app/components/Atoms/CardList/CardList.tsx","../src/app/components/ErrorCardMessage/ErrorCardOverlaystyle.tsx","../src/app/components/ErrorCardMessage/ErrorCardOverlay.tsx","../src/app/components/Atoms/Applepay/ApplePayButton.tsx","../src/app/components/Skysystemz/EmbeddedCheckout.tsx","../src/app/components/Skysystemz/EmbeddedCheckoutStyles.tsx","../src/app/components/Atoms/Applepay/ApplePayScriptLoader.tsx"],"sourcesContent":["{\n \"name\": \"@fractalpay/fractalpay-next-dev\",\n \"version\": \"0.0.308\",\n \"private\": false,\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"next dev -p 4001\",\n \"build\": \"next build\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"bundle\": \"tsup src/app/index.ts\"\n },\n \"dependencies\": {\n \"@stripe/react-stripe-js\": \"^5.3.0\",\n \"@stripe/stripe-js\": \"^8.3.0\",\n \"axios\": \"^1.8.1\",\n \"bootstrap\": \"^5.3.3\",\n \"credit-card-type\": \"^10.0.1\",\n \"formik\": \"^2.4.6\",\n \"node-forge\": \"^1.3.1\",\n \"react-bootstrap\": \"^2.10.5\",\n \"react-bs-datatable\": \"^3.15.0\",\n \"react-datepicker\": \"^7.5.0\",\n \"react-icons\": \"^5.5.0\",\n \"react-number-format\": \"^5.4.3\",\n \"react-toastify\": \"^10.0.6\",\n \"socket.io-client\": \"^4.8.1\",\n \"styled-components\": \"^6.1.15\",\n \"sweetalert2\": \"^11.22.0\",\n \"yup\": \"^1.6.1\"\n },\n \"peerDependencies\": {\n \"react\": \">=18.0.0 <20.0.0\",\n \"react-dom\": \">=18.0.0 <20.0.0\"\n },\n \"devDependencies\": {\n \"@types/estree\": \"^1.0.8\",\n \"@types/node\": \"^20\",\n \"@types/node-forge\": \"^1.3.11\",\n \"@types/react\": \"^18\",\n \"@types/react-dom\": \"^18\",\n \"autoprefixer\": \"^10.4.20\",\n \"eslint\": \"^8\",\n \"eslint-config-next\": \"15.0.3\",\n \"next\": \"^15.0.5\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5\"\n },\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\"\n }\n },\n \"author\": \"Mukul\",\n \"license\": \"MIT\",\n \"keywords\": [\n \"nextjs\",\n \"next\",\n \"typescript\",\n \"tailwindcss\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}","'use client'\nimport 'bootstrap/dist/js/bootstrap.bundle.min.js';\nimport React, { useState, useEffect } from 'react';\nimport Loader from '../Loader/Loader';\nimport { baseUrl } from '../baseurl';\nimport { ErrorText } from '../Errortext';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport axios from 'axios';\nimport { PatternFormat } from 'react-number-format';\nimport RequestPaymentstyles from './RequestPaymentstyles';\nimport { formatUSD, numberToBoolean } from '@/app/utils/Common';\n\n\ninterface Props {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n name?: string;\n email?: string;\n phone?: string;\n from?: string;\n amount: string;\n webname?: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n require_3ds?: boolean,\n pass_fee?: boolean,\n sessionToken?: string,\n showSurcharge?: number,\n}\n\ninterface RequestDetails {\n email: string;\n amount: string | undefined;\n phone_number: string;\n order_id: string;\n name: string;\n fractalpayPublicKey: string;\n}\n\ninterface Errors {\n [key: string]: string;\n}\n\n\n\n// export const RequestPayment: React.FC<Props> = (props) => {\nexport function RequestPayment(props: Props) {\n const fractalpayClientKey = props.merchantPublicKey;\n const discount = props?.discount;\n const tax = props?.tax;\n const surcharge = props?.surcharge;\n // State definitions with types\n const [show, setShow] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [errors, setErrors] = useState<{ [key: string]: string }>({});\n const [phone, setPhone] = useState<string | null>(null);\n const [requestDetails, setRequestDetails] = useState({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n const [allowPartial, setAllowPartial] = useState<boolean>(false);\n const [cashDiscount, setCashDiscount] = useState<number | undefined>(undefined);\n const [amount, setAmount] = useState<string>('');\n const [showConfirmationModal, setShowConfirmationModal] = useState<boolean>(false);\n const [apiResponse, setApiResponse] = useState<any>(null);\n\n const phoneNumberRegex = (value: string) => /^\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/.test(value);\n const amoutRegex = /[+-]?([0-9]*[.])?[0-9]+/;\n const isValidEmail = (value: string) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n const isAlpha = (value: string) => /^[A-Za-z\\s]*$/.test(value);\n\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount / (1 + surchargeVal);\n return Math.round(originalAmount * 100) / 100; // rounding to 2 decimals\n };\n\n useEffect(() => {\n if (props?.pass_fee) {\n let cash_discount = CalculateCashDiscount(props?.amount, props?.surcharge);\n setCashDiscount(cash_discount);\n }\n }, [props?.pass_fee,show])\n\n const handleClose = () => {\n setShow(false);\n setCashDiscount(0.00);\n setErrors({});\n };\n\n const handleShow = () => setShow(true);\n\n const handleCloseConfirmationModal = () => {\n console.log(apiResponse, 'apiresponse');\n handleSubmit(apiResponse);\n setShowConfirmationModal(false);\n };\n\n function emptyFields() {\n setRequestDetails({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n setAmount('');\n }\n\n function handleSubmit(event: any) {\n // Send message to parent window\n let message = {\n type: 'preview.compiledcheck',\n other: { ...event, status: true }\n };\n\n window.parent.postMessage(message, '*');\n }\n\n const sendRequestPayment = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading) return;\n if (Object.keys(errors).length > 0) {\n return;\n }\n setErrors({});\n\n if (!requestDetails?.email && phone && !phoneNumberRegex(phone)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumbervalid\n }));\n return;\n }\n if (!validateForm()) {\n return;\n }\n\n try {\n setLoading(true);\n const formData = {\n fractalpayPublicKey: fractalpayClientKey,\n amount: amount,\n phone_number: phone,\n order_id: requestDetails.order_id,\n action: 'request',\n name: requestDetails.name,\n email: requestDetails.email,\n customer_id: props?.customerId ? props?.customerId : '',\n discount,\n surcharge,\n tax,\n require_3ds: props?.require_3ds,\n pass_fee: props?.pass_fee,\n allow_partial: allowPartial,\n };\n let response = await axios.post(`${baseUrl}create-widget-order`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n });\n if (response?.status === 200) {\n setShowConfirmationModal(true);\n setShow(false);\n emptyFields();\n setApiResponse(response?.data);\n }\n\n setLoading(false);\n } catch (error) {\n console.log(error);\n setLoading(false);\n }\n };\n\n let favicon_logo = baseUrl + 'images/logo-img.png';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n const token = e.target.dataset.token as string;\n setRequestDetails({ ...requestDetails, [token]: value });\n if ((token === 'name') && !isAlpha(value)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n [token]: ErrorText.onlylettersallowed\n }));\n return;\n }\n\n let errorobj = errors;\n\n if (token === 'email' && !phone) {\n delete errorobj.phone;\n setErrors(errorobj);\n }\n\n if (value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n\n if (token === 'email' && !value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n };\n\n const handleAmountChange = (data: { value: string }) => {\n const { value } = data;\n if (Number(value) > 0) {\n let errorobj = errors;\n delete errorobj.amount;\n setErrors(errorobj);\n }\n setAmount(value);\n };\n\n const validateForm = () => {\n let newErrors: { [key: string]: string } = {};\n\n if (!amount) newErrors.amount = ErrorText.amountrequired;\n if (requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (!phone && !requestDetails?.email) newErrors.phone = ErrorText.phoneoremailrequired;\n if (!phone && !requestDetails?.email) newErrors.email = ErrorText.phoneoremailrequired;\n if (!phone && requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (props.from === 'merchant' && !requestDetails.order_id) newErrors.order_id = ErrorText.orderidrequired;\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n useEffect(() => {\n if (props) {\n setRequestDetails((prev) => ({\n ...prev,\n order_id: props.orderID ? props.orderID : '',\n name: props?.name ? props?.name : '',\n email: props?.email ? props?.email : '',\n }));\n setAmount(props.amount ? props.amount : '');\n setPhone(props.phone ? `${props.phone}` : null);\n }\n }, [props]);\n\n const handlePhoneChange = (e: { value: string }) => {\n let value = e?.value;\n if (value && value?.length > 0 && value?.length !== 10) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumberlength\n }));\n setPhone(value);\n return;\n } else {\n setPhone(value);\n }\n let errorobj = errors;\n delete errorobj.phone;\n\n if (value && !requestDetails?.email) {\n delete errorobj.email;\n }\n\n setErrors(errorobj);\n };\n\n function formatAmount(amount: string) {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(Number(amount));\n }\n\n const handleAllowPartial = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.checked;\n setAllowPartial(value);\n }\n\n\n return (\n <>\n <RequestPaymentstyles />\n <Loader loading={loading} />\n <>\n <button className=\"paymentBtn\" onClick={handleShow}>\n Request Payment\n </button>\n\n <CustomModal2\n open={show}\n onClose={() => setShow(false)}\n maxWidth={'500px'}\n >\n <div style={{ maxWidth: '500px' }}>\n\n <div className=\"request-payment-amount-detail frac-form\">\n <p className=\"request-payment-merchantname\">Pay {props?.webname}</p>\n <p className=\"request-payment-amount\">{formatAmount(props?.amount)}</p>\n {\n cashDiscount && cashDiscount > 0 && <div className='frac-req-cash-discount' >\n {/* <div className='frac-cashlabel' >Cash Discount :</div> */}\n <div className='frac-cashlabel' >{numberToBoolean(props?.showSurcharge) ? 'Surcharge' : 'Cash Discount'} :</div>\n <div>{formatUSD((Number(props.amount) - cashDiscount).toFixed(2))}</div>\n </div>\n }\n {\n props?.from === 'merchant' && <p className=\"request-payment-orderid\" >{requestDetails?.order_id}</p>\n }\n <span className=\"request-payment-close-popup\" onClick={handleClose}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <form className=\"request-payment-input-form\" >\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n FULL NAME\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Full Name\"\n data-token=\"name\"\n onChange={handleChange}\n value={requestDetails?.name}\n />\n {errors.name && <small className=\"request-payment-error-msg\">{errors.name}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"requestPhoneNumber\" className=\"request-payment-input-label\">\n Phone Number\n </label>\n <PatternFormat\n className=\"request-payment-input-box\"\n placeholder=\"Mobile number\"\n format=\"+1 (###) ###-####\"\n value={phone}\n onValueChange={(e) => { handlePhoneChange(e) }}\n />\n {errors.phone && <small className=\"request-payment-error-msg\">{errors.phone}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n EMAIL\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Email\"\n onChange={handleChange}\n data-token=\"email\"\n value={requestDetails?.email}\n />\n {errors.email && <small className=\"request-payment-error-msg\">{errors.email}</small>}\n </div>\n <div className=\"partial-toggle-div\">\n <input className=\"partial-input\" type=\"checkbox\" role=\"switch\"\n style={{ cursor: 'pointer' }} checked={allowPartial}\n onChange={(e) => handleAllowPartial(e)} id=\"partialSwitch\" />\n <label className=\"partial-label\" htmlFor=\"partialSwitch\"\n style={{ cursor: 'pointer' }}>Allow Partial Payments?</label>\n </div>\n <button\n type=\"button\"\n className=\"request-payment-submit-button\"\n onClick={sendRequestPayment}\n disabled={loading}\n >\n {loading ? \"Loading...\" : \"Send Request\"}\n </button>\n <div className=\"request-payment-fractal-powerd-by\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M15.2165 4.11839C15.1973 3.69746 15.1973 3.29567 15.1973 2.89387C15.1973 2.56861 14.9486 2.31988 14.6234 2.31988C12.2317 2.31988 10.4141 1.63109 8.90257 0.157848C8.67298 -0.0526158 8.32858 -0.0526158 8.09898 0.157848C6.58748 1.63109 4.76984 2.31988 2.37821 2.31988C2.05295 2.31988 1.80422 2.56861 1.80422 2.89387C1.80422 3.29567 1.80422 3.69746 1.78508 4.11839C1.70855 8.13632 1.59375 13.6466 8.30945 15.9617L8.50078 16L8.69211 15.9617C15.3887 13.6466 15.293 8.15546 15.2165 4.11839ZM8.04159 9.6861C7.92679 9.78176 7.79286 9.83916 7.63979 9.83916H7.62066C7.46759 9.83916 7.31453 9.76263 7.21887 9.64783L5.43949 7.67713L6.30048 6.91181L7.69719 8.46158L10.7967 5.5151L11.5812 6.35695L8.04159 9.6861Z\" fill=\"#727272\" />\n </svg>\n Secure payments powered by <span>Fractal</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.4999 5.49758V7.01156C17.4999 7.05924 17.4595 7.09898 17.411 7.09898H12.3516C12.9169 6.54266 13.4781 5.99032 14.0434 5.434C14.0596 5.4181 14.0838 5.41016 14.104 5.41016H17.411C17.4595 5.41016 17.4999 5.44989 17.4999 5.49758Z\" fill=\"#61C699\" />\n <path d=\"M12.3462 10.9037V9.29836C12.3462 9.25067 12.3866 9.21094 12.435 9.21094H13.8523C13.929 9.21094 13.9694 9.30631 13.9129 9.35796C13.392 9.87455 12.8711 10.3911 12.3462 10.9037Z\" fill=\"#61C699\" />\n <path d=\"M12.4404 9.00523H15.6949C15.7434 9.00523 15.7838 8.96549 15.7838 8.91781V7.40383C15.7838 7.35614 15.7434 7.31641 15.6949 7.31641H12.4404C12.3919 7.31641 12.3516 7.35614 12.3516 7.40383V8.91781C12.3516 8.96549 12.3919 9.00523 12.4404 9.00523Z\" fill=\"#61C699\" />\n <path d=\"M10.1581 0.0120725L11.4906 0.77105C11.531 0.794892 11.5471 0.84655 11.5229 0.890261L8.99114 5.20173C8.78521 4.44275 8.57927 3.68775 8.37334 2.92877C8.36527 2.90493 8.3693 2.88109 8.38142 2.86122L10.0329 0.0438621C10.0612 0.000151419 10.1177 -0.0117697 10.1581 0.0120725Z\" fill=\"#61C699\" />\n <path d=\"M12.3382 7.10006L10.9289 6.29737C10.8886 6.27353 10.8724 6.22187 10.8966 6.17816L11.6033 4.97015C11.6436 4.9026 11.7446 4.91452 11.7648 4.99002C11.9546 5.69734 12.1484 6.40068 12.3382 7.10006Z\" fill=\"#61C699\" />\n <path d=\"M10.7107 6.0771L12.338 3.30345C12.3622 3.26372 12.346 3.20808 12.3057 3.18424L10.9732 2.42526C10.9328 2.40142 10.8763 2.41732 10.852 2.45705L9.22476 5.2307C9.20053 5.27044 9.21669 5.32607 9.25706 5.34991L10.5896 6.10889C10.634 6.13273 10.6865 6.11683 10.7107 6.0771Z\" fill=\"#61C699\" />\n <path d=\"M1.66713 3.51237L2.99963 2.75339C3.04001 2.72955 3.09654 2.74544 3.12077 2.78518L5.65251 7.09665C4.88128 6.89399 4.11408 6.69133 3.34285 6.48867C3.31862 6.4847 3.30247 6.4688 3.29036 6.44893L1.63483 3.63158C1.6106 3.58787 1.62271 3.53621 1.66713 3.51237Z\" fill=\"#61C699\" />\n <path d=\"M8.99793 5.20018L7.58871 5.99889C7.54833 6.02274 7.4918 6.00684 7.46757 5.9671L6.76095 4.76307C6.72057 4.69552 6.78517 4.61605 6.86189 4.63591C7.57256 4.82268 8.28726 5.00944 8.99793 5.20018Z\" fill=\"#61C699\" />\n <path d=\"M7.27986 6.07054L5.6526 3.2969C5.62837 3.25716 5.57588 3.24127 5.53146 3.26511L4.19896 4.02409C4.15858 4.04793 4.14243 4.09959 4.16666 4.1433L5.79392 6.91694C5.81815 6.95668 5.87064 6.97257 5.91506 6.94873L7.24756 6.18975C7.28794 6.16591 7.30409 6.11425 7.27986 6.07054Z\" fill=\"#61C699\" />\n <path d=\"M0.5 12.4998V10.9859C0.5 10.9382 0.540379 10.8984 0.588833 10.8984H5.64829C5.08299 11.4548 4.52172 12.0071 3.95642 12.5634C3.94027 12.5793 3.91604 12.5873 3.89585 12.5873H0.588833C0.540379 12.5873 0.5 12.5475 0.5 12.4998Z\" fill=\"#61C699\" />\n <path d=\"M5.65129 7.09766V8.70303C5.65129 8.75072 5.61091 8.79045 5.56246 8.79045H4.14516C4.06844 8.79045 4.02806 8.69508 4.08459 8.64343C4.60548 8.12685 5.12637 7.61424 5.65129 7.09766Z\" fill=\"#61C699\" />\n <path d=\"M5.55967 8.99609H2.30514C2.25669 8.99609 2.21631 9.03583 2.21631 9.08352V10.5975C2.21631 10.6452 2.25669 10.6849 2.30514 10.6849H5.55967C5.60813 10.6849 5.6485 10.6452 5.6485 10.5975V9.08352C5.6485 9.03583 5.60813 8.99609 5.55967 8.99609Z\" fill=\"#61C699\" />\n <path d=\"M7.82638 17.9865L6.49388 17.2276C6.4535 17.2037 6.43735 17.1521 6.46158 17.1083L8.99333 12.7969C9.19926 13.5559 9.40519 14.3109 9.61112 15.0698C9.6192 15.0937 9.61516 15.1175 9.60305 15.1374L7.95155 17.9547C7.91925 17.9985 7.86676 18.0104 7.82638 17.9865Z\" fill=\"#61C699\" />\n <path d=\"M5.64795 10.8984L7.05717 11.7011C7.09755 11.725 7.1137 11.7766 7.08947 11.8203L6.38284 13.0283C6.34246 13.0959 6.24152 13.084 6.22133 13.0085C6.02751 12.3012 5.83773 11.5978 5.64795 10.8984Z\" fill=\"#61C699\" />\n <path d=\"M7.2739 11.9258L5.64664 14.6994C5.62241 14.7392 5.63856 14.7948 5.67894 14.8187L7.01144 15.5776C7.05182 15.6015 7.10835 15.5856 7.13258 15.5458L8.75984 12.7722C8.78407 12.7325 8.76792 12.6768 8.72754 12.653L7.39504 11.894C7.35062 11.8702 7.29813 11.8861 7.2739 11.9258Z\" fill=\"#61C699\" />\n <path d=\"M16.3199 14.4866L14.9874 15.2456C14.947 15.2694 14.8904 15.2535 14.8662 15.2138L12.3345 10.9023C13.1057 11.105 13.8729 11.3077 14.6441 11.5103C14.6684 11.5143 14.6845 11.5302 14.6966 11.5501L16.3481 14.3674C16.3764 14.4111 16.3643 14.4628 16.3199 14.4866Z\" fill=\"#61C699\" />\n <path d=\"M8.99121 12.7983L10.4004 11.9956C10.4408 11.9717 10.4973 11.9876 10.5216 12.0274L11.2282 13.2354C11.2686 13.3029 11.204 13.3824 11.1272 13.3625C10.4166 13.1758 9.70188 12.989 8.99121 12.7983Z\" fill=\"#61C699\" />\n <path d=\"M10.7077 11.9285L12.3349 14.7021C12.3592 14.7418 12.4117 14.7577 12.4561 14.7339L13.7886 13.9749C13.829 13.9511 13.8451 13.8994 13.8209 13.8557L12.1936 11.0821C12.1694 11.0423 12.1169 11.0264 12.0725 11.0503L10.74 11.8092C10.6996 11.8331 10.6834 11.8847 10.7077 11.9285Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </form>\n </div>\n </CustomModal2>\n <CustomModal2\n open={showConfirmationModal}\n onClose={handleCloseConfirmationModal}\n maxWidth={'500px'}\n >\n <div className=\"fractal-popup-content\" style={{ padding: '0px', maxWidth: '500px' }}>\n <div className=\"request-payment-success-container\">\n <span className=\"request-payment-close-popup\" onClick={handleCloseConfirmationModal}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <div className=\"request-payment-success-tick-div\">\n <div className=\"request-payment-success-tick\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6.12669 13.9774C5.97396 14.131 5.76558 14.2167 5.54913 14.2167C5.33267 14.2167 5.1243 14.131 4.97157 13.9774L0.359012 9.36408C-0.119671 8.8854 -0.119671 8.10919 0.359012 7.6314L0.936573 7.05369C1.4154 6.57501 2.19072 6.57501 2.6694 7.05369L5.54913 9.93357L13.3306 2.15198C13.8094 1.6733 14.5855 1.6733 15.0634 2.15198L15.641 2.72969C16.1196 3.20837 16.1196 3.98444 15.641 4.46237L6.12669 13.9774Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </div>\n <h6 className=\"request-payment-success-text\">The request <br />\n was sent</h6>\n <h6 className=\"request-payment-success-subtext\">Please wait for the customer to pay</h6>\n <div className=\"request-payment-success-btn-div\">\n {/* <button className=\"request-payment-success-btn1\">Go to Transactions</button> */}\n <button onClick={handleCloseConfirmationModal} className=\"request-payment-success-btn2\">Close</button>\n </div>\n </div>\n </div>\n </CustomModal2>\n </>\n </>\n );\n};\n\n","// import React from 'react'\n\n// type Props = {}\n\n// const LoaderStyle = (props: Props) => {\n// return (\n// <style>\n// {`\n\n// .loader {\n// position: fixed; /* Fixed position to cover the viewport */\n// top: 0;\n// left: 0;\n// width: 100%;\n// height: 100%;\n// display: flex;\n// justify-content: center;\n// align-items: center;\n// /* background: rgba(255, 255, 0, 0.01); Adjust the blur effect */\n// background-color: rgba(31, 29, 29, 0.52); /* Semi-transparent black background */\n\n// backdrop-filter: blur(.5px); /* Blur effect */\n// z-index: 999999999999 !important; /* Ensure it's on top of other elements */\n// transform: translate(0%, 0%) !important\n// }\n\n// .lds-ellipsis {\n// display: inline-block;\n// position: relative;\n// width: 80px;\n// height: 80px;\n// }\n\n// .lds-ellipsis div {\n// position: absolute;\n// top: 33px;\n// width: 13px;\n// height: 13px;\n// border-radius: 50%;\n// background: #000;\n// animation-timing-function: cubic-bezier(0, 1, 1, 0);\n// }\n\n// .lds-ellipsis div:nth-child(1) {\n// left: 8px;\n// animation: lds-ellipsis1 0.6s infinite;\n// }\n\n// .lds-ellipsis div:nth-child(2) {\n// left: 8px;\n// animation: lds-ellipsis2 0.6s infinite;\n// }\n\n// .lds-ellipsis div:nth-child(3) {\n// left: 32px;\n// animation: lds-ellipsis2 0.6s infinite;\n// }\n\n// .lds-ellipsis div:nth-child(4) {\n// left: 56px;\n// animation: lds-ellipsis3 0.6s infinite;\n// }\n\n// @keyframes lds-ellipsis1 {\n// 0% {\n// transform: scale(0);\n// }\n// 100% {\n// transform: scale(1);\n// }\n// }\n\n// @keyframes lds-ellipsis2 {\n// 0% {\n// transform: translate(0, 0);\n// }\n// 100% {\n// transform: translate(24px, 0);\n// }\n// }\n\n// @keyframes lds-ellipsis3 {\n// 0% {\n// transform: scale(1);\n// }\n// 100% {\n// transform: scale(0);\n// }\n// }\n\n// `}\n// </style>\n// )\n// }\n\n// export default LoaderStyle\n\n\n\nimport React from 'react'\n\ntype Props = {}\n\nconst LoaderStyle = (props: Props) => {\n return (\n <style>\n {`\n \n .loader-light {\n position: fixed; /* Fixed position to cover the viewport */\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n /* background: rgba(255, 255, 0, 0.01); Adjust the blur effect */\n background-color: rgba(31, 29, 29, 0.52); /* Semi-transparent black background */\n\n backdrop-filter: blur(0.5px); /* Blur effect */\n z-index: 999999999999 !important; /* Ensure it's on top of other elements */\n transform: translate(0%, 0%) !important\n}\n \n .loader-dark {\n position: fixed; /* Fixed position to cover the viewport */\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n /* background: rgba(255, 255, 0, 0.01); Adjust the blur effect */\n background-color: rgba(31, 29, 29, 0.52); /* Semi-transparent black background */\n\n backdrop-filter: blur(6.5px); /* Blur effect */\n z-index: 999999999999 !important; /* Ensure it's on top of other elements */\n transform: translate(0%, 0%) !important\n}\n\n.lds-ellipsis {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.lds-ellipsis div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #000;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\n\n.lds-ellipsis div:nth-child(1) {\n left: 8px;\n animation: lds-ellipsis1 0.6s infinite;\n}\n\n.lds-ellipsis div:nth-child(2) {\n left: 8px;\n animation: lds-ellipsis2 0.6s infinite;\n}\n\n.lds-ellipsis div:nth-child(3) {\n left: 32px;\n animation: lds-ellipsis2 0.6s infinite;\n}\n\n.lds-ellipsis div:nth-child(4) {\n left: 56px;\n animation: lds-ellipsis3 0.6s infinite;\n}\n\n@keyframes lds-ellipsis1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes lds-ellipsis2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n}\n\n@keyframes lds-ellipsis3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n}\n\n\n.loader-text {\n margin-top: 8px;\n color: #1A1226;\n text-transform: uppercase;\n font-weight: 600;\n font-family: 'IBM Plex Mono', monospace;\n}\n\n.loader-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n `}\n </style>\n )\n}\n\nexport default LoaderStyle","import React from 'react'\nimport LoaderStyle from './LoaderStyle'\n\ntype Props = {\n loading: boolean;\n intensity?: 'dark' | 'light';\n loaderText?: string;\n}\n\nconst Loader = ({ intensity = 'light', loaderText, ...props }: Props) => {\n return (\n <>\n <LoaderStyle />\n {props?.loading && (\n <div className={`loader-${intensity}`}>\n <div className=\"loader-content\">\n <div className=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n {loaderText && <div className=\"loader-text\">{loaderText}</div>}\n </div>\n {/* <div className=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div> */}\n </div>\n )}\n </>\n )\n}\n\nexport default Loader","const { name } = require('../../../package.json');\n\n// console.log(name, \"dgijiisdfhg\");\n\n// export const fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\"\n\n// export const fractalGatewayUrl = \"https://api.merchant-trends.com/\"\n\nexport const S3Url = 'https://fractal-userdata-upload.s3.us-east-1.amazonaws.com/'\n\n// dev environment urls\n\n// export const masterBaseUrl = \"https://dev-sky-node.fractalpay.com/\";\n// export const baseUrl = \"https://dev-widget.fractalpay.com/\";\n\n//Staging environment urls\n\n// export const masterBaseUrl = \"https://testapi.fractalpay.com/\";\n// export const baseUrl = \"https://staging-widget.fractalpay.com/\";\n\n//test prod environment urls\n\n// export const masterBaseUrl = \"https://sky-node-prod.fractalpay.com/\";\n// export const baseUrl = \"https://widget-prod.fractalpay.com/\";\n\n\n//prod environment urls\n\n// export const masterBaseUrl = \"https://api.fractalpay.com/\";\n// export const baseUrl = \"https://widget.fractalpay.com/\";\n\n//Local environment urls\n\n// export const baseUrl = 'http://192.168.1.63:8082/'\n// export const masterBaseUrl = \"http://192.168.1.63:8081/\";\n\n// export const baseUrl = 'http://localhost:8082/'\n// export const masterBaseUrl = \"http://localhost:8081/\";\n\n// export const baseUrl = 'http://192.168.1.65:8082/'\n// export const masterBaseUrl = \"http://192.168.1.65:8081/\";\n\n\nif (name === '@fractalpay/fractalpay-next-dev') {\n masterBaseUrl = \"https://api.dev.fractalpay.com/\";\n baseUrl = \"https://widget.dev.fractalpay.com/\"\n // masterBaseUrl = \"https://dev-sky-node.fractalpay.com/\";\n // baseUrl = \"https://dev-widget.fractalpay.com/\";\n // baseUrl = 'http://192.168.1.97:8082/';\n // masterBaseUrl = \"http://192.168.1.97:8081/\";\n // baseUrl = 'http://192.168.1.65:8082/' \n // masterBaseUrl = \"http://192.168.1.65:8081/\";\n // baseUrl = 'http://192.168.1.74:8083/' \n // masterBaseUrl = \"http://192.168.1.74:8082/\";\n // baseUrl = 'http://localhost:8082/'\n // masterBaseUrl = \"http://localhost:8081/\";\n fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\";\n datacapUrl = \"https://token-cert.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_test_51RH5Wc2SlJvyNZ80hpUDy88r4rVdpijfKbNaWaUyQEE6rOrPmG2JQyAj7G5amBD5z5daC56WaeT4jfNhrrPcGOEP00UyKu6AOw\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"12345678901234567890\"\n googlePayEnvironment = \"TEST\"\n googlePayGatewayMerchantId = \"fractal\"\n\n} else if (name === '@fractalpay/fractalpay-next-test') {\n masterBaseUrl = \"https://testapi.fractalpay.com/\";\n baseUrl = \"https://staging-widget.fractalpay.com/\";\n fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\";\n datacapUrl = \"https://token-cert.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_test_51RH5Wc2SlJvyNZ80hpUDy88r4rVdpijfKbNaWaUyQEE6rOrPmG2JQyAj7G5amBD5z5daC56WaeT4jfNhrrPcGOEP00UyKu6AOw\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"12345678901234567890\"\n googlePayEnvironment = \"TEST\"\n googlePayGatewayMerchantId = \"fractal\"\n\n\n} else if (name === '@fractalpay/fractalpay-next-testprod') {\n masterBaseUrl = \"https://sky-node-prod.fractalpay.com/\";\n baseUrl = \"https://widget-prod.fractalpay.com/\";\n fractalGatewayUrl = \"https://api.merchant-trends.com/\";\n datacapUrl = \"https://token.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_live_51RH5WXCZ90rBGeaYwqmjWqgUmudTgxL6uKOE1keu617jvRx9OvW2ke6zGf6SKgv4ixsBLcIPQ4sQIEhp8MgBX39500CqULxOPB\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"BCR2DN4T6OC2TCQH\"\n googlePayEnvironment = \"PRODUCTION\"\n googlePayGatewayMerchantId = \"skysystemz\"\n\n\n} else if (name === \"@fractalpay/fractalpay-next\") {\n masterBaseUrl = \"https://api.fractalpay.com/\";\n baseUrl = \"https://widget.fractalpay.com/\";\n fractalGatewayUrl = \"https://api.merchant-trends.com/\";\n datacapUrl = \"https://token.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_live_51RH5WXCZ90rBGeaYwqmjWqgUmudTgxL6uKOE1keu617jvRx9OvW2ke6zGf6SKgv4ixsBLcIPQ4sQIEhp8MgBX39500CqULxOPB\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"BCR2DN4T6OC2TCQH\"\n googlePayEnvironment = \"PRODUCTION\"\n googlePayGatewayMerchantId = \"skysystemz\"\n\n} else {\n baseUrl = 'http://localhost:8082/'\n masterBaseUrl = \"http://localhost:8081/\";\n fractalGatewayUrl = \"https://api-dev.merchant-trends.com/\";\n datacapUrl = \"https://token-cert.dcap.com/v1/client\"\n threedsSecurePublicKey = \"pk_test_51RH5Wc2SlJvyNZ80hpUDy88r4rVdpijfKbNaWaUyQEE6rOrPmG2JQyAj7G5amBD5z5daC56WaeT4jfNhrrPcGOEP00UyKu6AOw\"\n\n //Apple pay \n\n applePayMerchantId = 'fractal'\n\n //Google pay\n\n googlePayMerchantId = \"12345678901234567890\"\n googlePayEnvironment = \"TEST\"\n googlePayGatewayMerchantId = \"fractal\"\n\n}\n\nexport var masterBaseUrl: string\nexport var baseUrl: string\nexport var fractalGatewayUrl: string\nexport var datacapUrl: string\nexport var threedsSecurePublicKey: string\nexport var applePayMerchantId: string\nexport var googlePayMerchantId: string\nexport var googlePayEnvironment: \"TEST\" | \"PRODUCTION\"\nexport var googlePayGatewayMerchantId: string","export const ErrorText = {\n\n namerequired: 'Full Name is required',\n amountrequired:'Amount is required',\n amountpositive:'Amount should be positive',\n amountzero:'Amount should not be zero',\n amountenter:'Please enter an amount',\n amountvalid:'Please enter a valid amount',\n phoneoremailrequired:'Phone or Email is required',\n invalidemail:'Please enter a valid email',\n invalidemailformat:'Invalid email format',\n onlylettersallowed:'Only letters are allowed',\n phonenumberlength:'Phone number should be 10 digits',\n phonenumberrequired:'Please enter a phone number',\n // phonenumbervalid:'Please enter a valid 10-digit phone number',\n phonenumbervalid:'Please enter a valid phone number',\n phonenumbervalidnumberonly:'Please enter a valid phone number (numbers only)',\n orderidenter:'Please enter an order ID',\n orderidrequired:'Order ID is required',\n networkresponseerror:'Network response was not ok',\n anerroroccured:'An error occurred. Please try again.',\n montherror:'Please write month only 1 to 12',\n fieldrequired:\"This field is required\",\n fractalpayclientidrequired:'Fractalpay client key is missing or empty.'\n\n\n\n\n}","import React from 'react'\n\ntype Props = {}\n\nconst CustomModal2styles = (props: Props) => {\n return (\n <style>\n {\n `\n.fractal-input::placeholder {\n color: #35254D;\n opacity: 1;\n font-size: 15px;\n}\n\n.fractal-input::-ms-input-placeholder {\n color: #35254D;\n font-size: 15px;\n}\n\n.trigger{\n text-align: center;\n padding: 7px 13px;\n background: #3e3e3e;\n color: #fff;\n font-size: 15px;\n outline: none;\n border: none;\n border-radius: 5px;\n font-family: cursive;\n}\n\n// .fractal-popup {\n// position: fixed;\n// z-index: 9999;\n// top: 0;\n// right: 0;\n// bottom: 0;\n// left: 0;\n// width: 100%;\n// // max-width:810px;\n// height: 100%;\n// background-color: rgba(0, 0, 0, 0.5);\n// transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;\n// display: flex;\n// justify-content: center;\n// align-items: center;\n// overflow:auto;\n// }\n\n .fractal-popup {\n position: fixed;\n z-index: 1050;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n background-color: rgba(0, 0, 0, 0.8);\n // padding:20px\n }\n\n.fractal-popup-content {\n margin:20px auto !important;\n transform :none;\n background-color: white;\n padding:20px;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); \n box-sizing: border-box;\n position: relative;\n // min-height : 585px;\n max-width:810px; \n width:90vw\n \n}\n \n\n// @media only screen and (min-width: 600px){\n// .fractal-popup-content {\n// max-width:810px; \n// }\n// }\n// @media only screen and (max-width: 600px){\n// .fractal-popup-content {\n// width: 350px;\n// }\n// }\n// @media only screen and (max-width: 450px){\n// .fractal-popup-content {\n// width: 300px;\n// }\n// }\n.close-popup {\n max-height:25px;\n width:25px;\n height: 25px;\n color: #999;\n position: absolute;\n top: 2px;\n right: 4px;\n z-index: 7;\n text-align: center;\n cursor: pointer;\n border-radius: 0.25rem;\n font-size: 30px;\n line-height: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-popup:hover {\n color: #000;\n}\n\n.fractal-inpt-list {\n margin-bottom: 15px;\n}\n\n.fractal-label {\n color: #727272;\n margin-bottom: 3px;\n font-family: \"Inter\", sans-serif;\n font-weight: 500;\n font-size: 12px;\n display: block;\n text-align: left;\n}\n\n.fractal-input {\n display: block;\n width: 100%;\n padding: .320rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #35254D;\n appearance: none;\n background-color:#ffffff;\n background-clip: padding-box;\n border:1px solid #dee2e6;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n.fractal-input:focus {border:#86b7fe 1px solid; outline: none;}\n\n.fractal-group {\n position: relative;\n display: flex;\n align-items: stretch;\n width: 100%;\n}\n\n.fractal-group-icons {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #f8f9fa;\n border:#dee2e6 1px solid;\n border-radius: 0.375rem 0 0 0.375rem ;\n}\n\n.fractal-group .fractal-input{\n border-radius:0 0.375rem 0.375rem 0;\n}\n\n\n.pay-button {\n outline: 0;\n height: 46px;\n font-size: 16px;\n background: #727272;\n border: none;\n display: block;\n color: #fff;\n width: 100%;\n border-radius: 180px;\n margin: 10px 0;\n text-decoration: none;\n cursor:pointer,\n font-family:\n}\n\n.pay-button:hover, .pay-button:focus {background: #222; color: #fff; cursor:pointer}\n\n.fractal-powerd-by {\n display: flex;\n font-size: 12px;\n text-align: center;\n align-items: center;\n justify-content: center;\n margin: 5px 0 20px 0;\n}\n\n\n\n\n\n\n\n/* ................................................................ */\n\n.fractal-pay-popup {\n position: fixed;\n z-index: 9999;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.fractal-pay-popup-content {\n background-color: white;\n padding:0px;\n border-radius: 0.5rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); \n box-sizing: border-box;\n position: relative;\n height: 100%;\n max-height:90%;\n overflow: hidden;\n}\n.fractal-pay-popup-content iframe{height: 100% !important; }\n.fractal-pay-popup-content iframe body{overflow: hidden;}\n@media only screen and (min-width: 768px){\n .fractal-pay-popup-content iframe{width: 768px;}\n .fractal-pay-popup-content {\n width: 750px; \n\n }\n}\n@media only screen and (max-width: 600px){\n .fractal-pay-popup-content {\n width: 350px;\n }\n}\n@media only screen and (max-width: 450px){\n .fractal-pay-popup-content {\n width: 300px;\n }\n}\n\n.request-payment-popup-container {\n padding: 0px !important;\n border-radius: 12px !important;\n}\n `\n }\n </style>\n )\n}\n\nexport default CustomModal2styles","import React from \"react\";\nimport RequestPaymentstyles from \"../RequestPayment/RequestPaymentstyles\";\nimport CustomModal2styles from \"./CustomModal2styles\";\n\ntype CustomModalProps = {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n cancelText?: string;\n maxWidth?: string;\n};\n\nconst CustomModal2: React.FC<CustomModalProps> = ({\n open,\n onClose,\n children,\n maxWidth\n}) => {\n if (!open) return null;\n\n\n // console.log(maxWidth);\n \n return (\n <>\n <CustomModal2styles />\n <div className=\"fractal-popup\">\n <div className=\"fractal-popup-content request-payment-popup-container\" style={{maxWidth : `${maxWidth ?? \"auto\"}`}}>\n {children}\n </div>\n\n </div>\n </>\n );\n};\n\nexport default CustomModal2;\n","import React from 'react'\n\ntype Props = {}\n\nconst RequestPaymentstyles = (props: Props) => {\n return (\n <style>\n {\n `\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n body {\n font-family: 'Inter', sans-serif !important;\n }\n input{\n font-family: 'Inter', sans-serif !important;\n } \n\n .paymentBtn {\n background-color: black;\n border: none;\n color: white;\n padding: 15px 32px;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n font-size: 16px;\n margin: 4px 2px;\n cursor: pointer;\n border-radius: 180px;\n /* width: auto; */\n } \n/*****************************************REDESIGNING STYLES **************************************/\n\n.request-payment-amount {\n color: #161616;\n text-align: center;\n font-size: 42px;\n font-style: normal;\n font-weight: 600;\n text-transform: uppercase;\n margin: 8px 0px !important;\n}\n\n.request-payment-orderid {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin: 0px;\n}\n\n.request-payment-pre-auth-merchantname {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin-top: 10px !important;\n margin-bottom: 0px !important;\n}\n\n.request-payment-merchantname {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin-top: 20px !important;\n margin-bottom: 0px !important;\n}\n\n.request-payment-close-popup {\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n}\n\n.request-payment-amount-detail {\n padding: 32px 0px;\n border-bottom: 1px solid #E0DFE2;\n}\n\n.request-payment-popup-container {\n padding: 0px !important;\n border-radius: 12px !important;\n}\n\n.request-payment-input-form {\n padding: 24px 48px 32px 48px;\n}\n\n.request-payment-input-label {\n color: #727272;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n margin-bottom: 6px !important;\n text-align: start !important;\n width: 100% !important;\n margin-bottom: 6px !important;\n text-transform: uppercase;\n}\n\n.request-payment-input-box {\n border-radius: 8px;\n border: 1px solid #E0DFE2;\n padding: 11px;\n display: block;\n width: 100%;\n color: #161616;\n margin-top: 6px !important;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n box-sizing: border-box;\n}\n\n.request-payment-list-div {\n margin-bottom: 12px;\n}\n\n.request-payment-submit-button {\n border-radius: 80px;\n background: #161616;\n height: 48px;\n padding: 12px 24px;\n margin-top: 20px;\n color: #fff;\n width: 100% !important;\n border: none !important;\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n cursor: pointer;\n}\n\n.request-payment-submit-button:disabled {\n cursor: not-allowed;\n}\n\n.request-payment-fractal-powerd-by {\n color: #727272;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n margin-top: 16px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.request-payment-fractal-powerd-by span {\n color: #61C699;\n}\n\n.request-payment-success-container {\n display: flex;\n padding: 120px 48px 32px 48px;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.request-payment-success-tick {\n border-radius: 1000px;\n background: rgba(97, 198, 153, 0.14);\n display: flex;\n width: 60px;\n height: 60px;\n justify-content: center;\n align-items: center;\n}\n\n.request-payment-success-text {\n color: #161616;\n text-align: center;\n font-size: 32px;\n font-style: normal;\n font-weight: 500;\n line-height: 36px;\n /* 112.5% */\n letter-spacing: -0.64px;\n margin-top: 20px;\n margin-bottom: 5px !important;\n}\n\n.request-payment-success-subtext {\n color: #727272;\n text-align: center;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.28px;\n margin-bottom: 6rem !important;\n margin-top: 8px !important;\n}\n\n.request-payment-success-btn-div {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n}\n\n.request-payment-success-tick-div {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 32px;\n}\n\n.request-payment-success-btn1 {\n cursor: pointer;\n border-radius: 80px;\n border: 1px solid #E0DFE2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #fff;\n}\n\n.request-payment-success-btn2 {\n border-radius: 80px;\n cursor: pointer;\n border: 1px solid #E0DFE2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #161616;\n color: #fff;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n}\n\n.request-payment-error-msg{\n color: #dc3545;\n\n font-size: 12px;\n}\n\n .frac-req-cash-discount{\n justify-content: center;\n gap: 8px;\n align-items: center;\n display: flex;\n padding: 9px 14px 9px 10px;\n font-family: Inter;\n color: #161616;\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n}\n\n.frac-req-cash-discount .frac-cashlabel{\n color: #727272;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n}\n\n.partial-toggle-div {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n}\n\n.partial-input[type=\"checkbox\"] {\n appearance: none;\n -webkit-appearance: none;\n width: 50px;\n height: 26px;\n background-color: #ccc;\n border-radius: 13px;\n position: relative;\n cursor: pointer;\n transition: background-color 0.3s ease;\n border: none;\n outline: none;\n margin-right: 10px;\n}\n\n.partial-input[type=\"checkbox\"]::before {\n content: '';\n position: absolute;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background-color: white;\n top: 2px;\n left: 2px;\n transition: transform 0.3s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.partial-input[type=\"checkbox\"]:checked {\n background-color: #000000;\n}\n\n.partial-input[type=\"checkbox\"]:checked::before {\n transform: translateX(24px);\n}\n\n.partial-input[type=\"checkbox\"]:focus {\n box-shadow: 0 0 0 3px rgba(13, 110, 253, 0.25);\n}\n\n.partial-label {\n user-select: none;\n font-size: 14px;\n}\n `\n }\n </style>\n )\n}\n\nexport default RequestPaymentstyles","import { S3Url } from \"../components/baseurl\";\n\nexport const isValidJson = (jsonString) => {\n try {\n const parsed = JSON.parse(jsonString);\n // Optionally check that parsed is an object or array\n return typeof parsed === 'object' && parsed !== null;\n } catch (e) {\n return false;\n }\n}\n\nexport const accountTypes = [\n // { value: \"personal saving\", label: \"Personal Saving\" },\n // { value: \"business saving\", label: \"Business Saving\" },\n { value: \"personal checking\", label: \"Personal Checking\" },\n { value: \"business checking\", label: \"Business Checking\" }\n];\n\n\nexport function formatUSD(num) {\n // Convert string numbers to actual numbers\n const value = Number(num);\n\n if (isNaN(value)) {\n return `$${num}`; // return empty if not a valid number\n }\n\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(value);\n}\n\nexport let mastercard = S3Url + 'widget/mc-img.svg'\nexport let visa = S3Url + 'widget/visa-img.svg'\nexport let americanexp = S3Url + 'widget/ae-img.svg'\nexport let discover = S3Url + 'widget/discover-img.svg'\nexport let defaultcard = S3Url + 'widget/card.svg'\nexport let bank = S3Url + 'widget/bank.svg'\nexport let trash = S3Url + 'widget/Trash.svg'\nexport let secure = S3Url + 'widget/secure-img.png'\nexport let pov = S3Url + 'widget/pov-by.png'\nexport let pax = S3Url + 'widget/pax.svg'\nexport let bankNew = S3Url + 'widget/Bank _New.svg'\n\n\nexport const getCardType = (card) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return defaultcard;\n }\n};\n\n\nexport const formatCardNumberWithCursor = (value, cursorPos) => {\n const raw = value.replace(/\\D/g, \"\");\n\n const digitsBeforeCursor = value\n .slice(0, cursorPos)\n .replace(/\\D/g, \"\").length;\n\n let trimmed = \"\";\n let formatted = \"\";\n\n const isAmex = /^3[47]/.test(raw);\n\n if (isAmex) {\n trimmed = raw.slice(0, 15);\n formatted = trimmed.replace(\n /^(\\d{1,4})(\\d{1,6})?(\\d{1,5})?$/,\n (_, g1, g2, g3) => [g1, g2, g3].filter(Boolean).join(\" \")\n );\n } else {\n trimmed = raw.slice(0, 16);\n formatted = trimmed.replace(\n /^(\\d{1,4})(\\d{1,4})?(\\d{1,4})?(\\d{1,4})?$/,\n (_, g1, g2, g3, g4) => [g1, g2, g3, g4].filter(Boolean).join(\" \")\n );\n }\n\n // ✅ CRITICAL FIX: zero-digit cursor case\n if (digitsBeforeCursor === 0) {\n return { formatted, cursor: 0 };\n }\n\n let newCursorPos = formatted.length;\n let digitsSeen = 0;\n\n for (let i = 0; i < formatted.length; i++) {\n if (/\\d/.test(formatted[i])) digitsSeen++;\n if (digitsSeen === digitsBeforeCursor) {\n newCursorPos = i + 1;\n break;\n }\n }\n\n return { formatted, cursor: newCursorPos };\n};\n\n\n\nexport const numberToBoolean = (value) => {\n if (value == 1) return false;\n if (value == 0) return true;\n return true; // fallback\n};\n\n\n\n","'use client'\nimport 'bootstrap/dist/js/bootstrap.bundle.min.js';\nimport React, { useState, useEffect } from 'react';\nimport Loader from '../Loader/Loader';\nimport RequestPaymentstyles from './RequestPaymentstyles';\nimport { baseUrl } from '../baseurl';\nimport { ErrorText } from '../Errortext';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport axios from 'axios';\nimport { PatternFormat } from 'react-number-format';\n\n\ninterface Props {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n name?: string;\n email?: string;\n phone?: string;\n from?: string;\n amount: string;\n webname?: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n require_3ds?: boolean;\n sessionToken?: string;\n}\n\ninterface RequestDetails {\n email: string;\n amount: string | undefined;\n phone_number: string;\n order_id: string;\n name: string;\n fractalpayPublicKey: string;\n}\n\ninterface Errors {\n [key: string]: string;\n}\n\n\n// export const RequestPayment: React.FC<Props> = (props) => {\nexport function RequestPreAuthPayment(props: Props) {\n const fractalpayClientKey = props.merchantPublicKey;\n const discount = props?.discount;\n const tax = props?.tax;\n const surcharge = props?.surcharge;\n // State definitions with types\n const [show, setShow] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [errors, setErrors] = useState<{ [key: string]: string }>({});\n const [phone, setPhone] = useState<string | null>(null);\n const [requestDetails, setRequestDetails] = useState({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n\n const [amount, setAmount] = useState<string>('');\n const [showConfirmationModal, setShowConfirmationModal] = useState<boolean>(false);\n const [apiResponse, setApiResponse] = useState<any>(null);\n\n const phoneNumberRegex = (value: string) => /^\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/.test(value);\n const amoutRegex = /[+-]?([0-9]*[.])?[0-9]+/;\n const isValidEmail = (value: string) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n const isAlpha = (value: string) => /^[A-Za-z\\s]*$/.test(value);\n\n const handleClose = () => {\n setShow(false);\n setErrors({});\n };\n\n const handleShow = () => setShow(true);\n\n const handleCloseConfirmationModal = () => {\n handleSubmit(apiResponse);\n setShowConfirmationModal(false);\n };\n\n function emptyFields() {\n setRequestDetails({\n email: '',\n phone_number: '',\n order_id: '',\n name: '',\n fractalpayPublicKey: fractalpayClientKey,\n });\n setAmount('');\n }\n\n function handleSubmit(event: any) {\n // Send message to parent window\n let message = {\n type: 'preview.compiledcheck',\n other: { ...event, status: true }\n };\n\n window.parent.postMessage(message, '*');\n }\n\n const sendRequestPayment = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading) return;\n if (Object.keys(errors).length > 0) {\n return;\n }\n setErrors({});\n\n if (!requestDetails?.email && phone && !phoneNumberRegex(phone)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumbervalid\n }));\n return;\n }\n if (!validateForm()) {\n return;\n }\n\n try {\n setLoading(true);\n const formData = {\n fractalpayPublicKey: fractalpayClientKey,\n amount: amount,\n phone_number: phone,\n order_id: requestDetails.order_id,\n action: 'request',\n name: requestDetails.name,\n email: requestDetails.email,\n customer_id: props?.customerId ? props?.customerId : '',\n discount,\n surcharge,\n tax,\n require_3ds: props?.require_3ds,\n };\n let response = await axios.post(`${baseUrl}send-request-pre-auth-payment`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n });\n if (response?.status === 200) {\n setShowConfirmationModal(true);\n setShow(false);\n emptyFields();\n setApiResponse(response?.data);\n }\n setLoading(false);\n } catch (error) {\n console.log(error);\n setLoading(false);\n }\n };\n\n let favicon_logo = baseUrl + 'images/logo-img.png';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n const token = e.target.dataset.token as string;\n setRequestDetails({ ...requestDetails, [token]: value });\n if ((token === 'name') && !isAlpha(value)) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n [token]: ErrorText.onlylettersallowed\n }));\n return;\n }\n\n let errorobj = errors;\n\n if (token === 'email' && !phone) {\n delete errorobj.phone;\n setErrors(errorobj);\n }\n\n if (value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n\n if (token === 'email' && !value) {\n delete errorobj[token];\n setErrors(errorobj);\n }\n };\n\n const handleAmountChange = (data: { value: string }) => {\n const { value } = data;\n if (Number(value) > 0) {\n let errorobj = errors;\n delete errorobj.amount;\n setErrors(errorobj);\n }\n setAmount(value);\n };\n\n const validateForm = () => {\n let newErrors: { [key: string]: string } = {};\n\n if (!amount) newErrors.amount = ErrorText.amountrequired;\n if (requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (!phone && !requestDetails?.email) newErrors.phone = ErrorText.phoneoremailrequired;\n if (!phone && !requestDetails?.email) newErrors.email = ErrorText.phoneoremailrequired;\n if (!phone && requestDetails.email && !isValidEmail(requestDetails?.email)) newErrors.email = ErrorText.invalidemail;\n if (props.from === 'merchant' && !requestDetails.order_id) newErrors.order_id = ErrorText.orderidrequired;\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n useEffect(() => {\n if (props) {\n setRequestDetails((prev) => ({\n ...prev,\n order_id: props.orderID ? props.orderID : '',\n name: props?.name ? props?.name : '',\n email: props?.email ? props?.email : '',\n }));\n setAmount(props.amount ? props.amount : '');\n setPhone(props.phone ? `${props.phone}` : null);\n }\n }, [props]);\n\n const handlePhoneChange = (e: { value: string }) => {\n let value = e?.value;\n if (value && value?.length > 0 && value?.length !== 10) {\n setErrors((prevErrors) => ({\n ...prevErrors,\n phone: ErrorText.phonenumberlength\n }));\n setPhone(value);\n return;\n } else {\n setPhone(value);\n }\n let errorobj = errors;\n delete errorobj.phone;\n\n if (value && !requestDetails?.email) {\n delete errorobj.email;\n }\n\n setErrors(errorobj);\n };\n\n function formatAmount(amount: string) {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(Number(amount));\n }\n\n\n return (\n <>\n <RequestPaymentstyles />\n <Loader loading={loading} />\n <>\n <button className=\"paymentBtn\" onClick={handleShow}>\n Send Request\n </button>\n <div className='frac-form'>\n <CustomModal2\n open={show}\n onClose={() => setShow(false)}\n maxWidth={'500px'}\n >\n <div className=\"request-payment-amount-detail\">\n <p className=\"request-payment-merchantname\">Authorization Request</p>\n <p className=\"request-payment-pre-auth-merchantname\">Pay {props?.webname}</p>\n <p className=\"request-payment-amount\">{formatAmount(props?.amount)}</p>\n {\n props?.from === 'merchant' && <p className=\"request-payment-orderid\" >{requestDetails?.order_id}</p>\n }\n <span className=\"request-payment-close-popup\" onClick={handleClose}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <form className=\"request-payment-input-form\" >\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n FULL NAME\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Full Name\"\n data-token=\"name\"\n onChange={handleChange}\n value={requestDetails?.name}\n />\n {errors.name && <small className=\"request-payment-error-msg\">{errors.name}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"requestPhoneNumber\" className=\"request-payment-input-label\">\n Phone Number\n </label>\n <PatternFormat\n className=\"request-payment-input-box\"\n placeholder=\"Mobile number\"\n format=\"+1 (###) ###-####\"\n value={phone}\n onValueChange={(e) => { handlePhoneChange(e) }}\n />\n {errors.phone && <small className=\"request-payment-error-msg\">{errors.phone}</small>}\n </div>\n\n <div className=\"request-payment-list-div\">\n <label htmlFor=\"exampleFormControlInput2\" className=\"request-payment-input-label\">\n EMAIL\n </label>\n <input\n className=\"request-payment-input-box\"\n type=\"text\"\n placeholder=\"Email\"\n onChange={handleChange}\n data-token=\"email\"\n value={requestDetails?.email}\n />\n {errors.email && <small className=\"request-payment-error-msg\">{errors.email}</small>}\n </div>\n <button\n type=\"button\"\n className=\"request-payment-submit-button\"\n onClick={sendRequestPayment}\n disabled={loading}\n >\n {loading ? \"Loading...\" : \"Send Request\"}\n </button>\n <div className=\"request-payment-fractal-powerd-by\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M15.2165 4.11839C15.1973 3.69746 15.1973 3.29567 15.1973 2.89387C15.1973 2.56861 14.9486 2.31988 14.6234 2.31988C12.2317 2.31988 10.4141 1.63109 8.90257 0.157848C8.67298 -0.0526158 8.32858 -0.0526158 8.09898 0.157848C6.58748 1.63109 4.76984 2.31988 2.37821 2.31988C2.05295 2.31988 1.80422 2.56861 1.80422 2.89387C1.80422 3.29567 1.80422 3.69746 1.78508 4.11839C1.70855 8.13632 1.59375 13.6466 8.30945 15.9617L8.50078 16L8.69211 15.9617C15.3887 13.6466 15.293 8.15546 15.2165 4.11839ZM8.04159 9.6861C7.92679 9.78176 7.79286 9.83916 7.63979 9.83916H7.62066C7.46759 9.83916 7.31453 9.76263 7.21887 9.64783L5.43949 7.67713L6.30048 6.91181L7.69719 8.46158L10.7967 5.5151L11.5812 6.35695L8.04159 9.6861Z\" fill=\"#727272\" />\n </svg>\n Secure payments powered by <span>Fractal</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.4999 5.49758V7.01156C17.4999 7.05924 17.4595 7.09898 17.411 7.09898H12.3516C12.9169 6.54266 13.4781 5.99032 14.0434 5.434C14.0596 5.4181 14.0838 5.41016 14.104 5.41016H17.411C17.4595 5.41016 17.4999 5.44989 17.4999 5.49758Z\" fill=\"#61C699\" />\n <path d=\"M12.3462 10.9037V9.29836C12.3462 9.25067 12.3866 9.21094 12.435 9.21094H13.8523C13.929 9.21094 13.9694 9.30631 13.9129 9.35796C13.392 9.87455 12.8711 10.3911 12.3462 10.9037Z\" fill=\"#61C699\" />\n <path d=\"M12.4404 9.00523H15.6949C15.7434 9.00523 15.7838 8.96549 15.7838 8.91781V7.40383C15.7838 7.35614 15.7434 7.31641 15.6949 7.31641H12.4404C12.3919 7.31641 12.3516 7.35614 12.3516 7.40383V8.91781C12.3516 8.96549 12.3919 9.00523 12.4404 9.00523Z\" fill=\"#61C699\" />\n <path d=\"M10.1581 0.0120725L11.4906 0.77105C11.531 0.794892 11.5471 0.84655 11.5229 0.890261L8.99114 5.20173C8.78521 4.44275 8.57927 3.68775 8.37334 2.92877C8.36527 2.90493 8.3693 2.88109 8.38142 2.86122L10.0329 0.0438621C10.0612 0.000151419 10.1177 -0.0117697 10.1581 0.0120725Z\" fill=\"#61C699\" />\n <path d=\"M12.3382 7.10006L10.9289 6.29737C10.8886 6.27353 10.8724 6.22187 10.8966 6.17816L11.6033 4.97015C11.6436 4.9026 11.7446 4.91452 11.7648 4.99002C11.9546 5.69734 12.1484 6.40068 12.3382 7.10006Z\" fill=\"#61C699\" />\n <path d=\"M10.7107 6.0771L12.338 3.30345C12.3622 3.26372 12.346 3.20808 12.3057 3.18424L10.9732 2.42526C10.9328 2.40142 10.8763 2.41732 10.852 2.45705L9.22476 5.2307C9.20053 5.27044 9.21669 5.32607 9.25706 5.34991L10.5896 6.10889C10.634 6.13273 10.6865 6.11683 10.7107 6.0771Z\" fill=\"#61C699\" />\n <path d=\"M1.66713 3.51237L2.99963 2.75339C3.04001 2.72955 3.09654 2.74544 3.12077 2.78518L5.65251 7.09665C4.88128 6.89399 4.11408 6.69133 3.34285 6.48867C3.31862 6.4847 3.30247 6.4688 3.29036 6.44893L1.63483 3.63158C1.6106 3.58787 1.62271 3.53621 1.66713 3.51237Z\" fill=\"#61C699\" />\n <path d=\"M8.99793 5.20018L7.58871 5.99889C7.54833 6.02274 7.4918 6.00684 7.46757 5.9671L6.76095 4.76307C6.72057 4.69552 6.78517 4.61605 6.86189 4.63591C7.57256 4.82268 8.28726 5.00944 8.99793 5.20018Z\" fill=\"#61C699\" />\n <path d=\"M7.27986 6.07054L5.6526 3.2969C5.62837 3.25716 5.57588 3.24127 5.53146 3.26511L4.19896 4.02409C4.15858 4.04793 4.14243 4.09959 4.16666 4.1433L5.79392 6.91694C5.81815 6.95668 5.87064 6.97257 5.91506 6.94873L7.24756 6.18975C7.28794 6.16591 7.30409 6.11425 7.27986 6.07054Z\" fill=\"#61C699\" />\n <path d=\"M0.5 12.4998V10.9859C0.5 10.9382 0.540379 10.8984 0.588833 10.8984H5.64829C5.08299 11.4548 4.52172 12.0071 3.95642 12.5634C3.94027 12.5793 3.91604 12.5873 3.89585 12.5873H0.588833C0.540379 12.5873 0.5 12.5475 0.5 12.4998Z\" fill=\"#61C699\" />\n <path d=\"M5.65129 7.09766V8.70303C5.65129 8.75072 5.61091 8.79045 5.56246 8.79045H4.14516C4.06844 8.79045 4.02806 8.69508 4.08459 8.64343C4.60548 8.12685 5.12637 7.61424 5.65129 7.09766Z\" fill=\"#61C699\" />\n <path d=\"M5.55967 8.99609H2.30514C2.25669 8.99609 2.21631 9.03583 2.21631 9.08352V10.5975C2.21631 10.6452 2.25669 10.6849 2.30514 10.6849H5.55967C5.60813 10.6849 5.6485 10.6452 5.6485 10.5975V9.08352C5.6485 9.03583 5.60813 8.99609 5.55967 8.99609Z\" fill=\"#61C699\" />\n <path d=\"M7.82638 17.9865L6.49388 17.2276C6.4535 17.2037 6.43735 17.1521 6.46158 17.1083L8.99333 12.7969C9.19926 13.5559 9.40519 14.3109 9.61112 15.0698C9.6192 15.0937 9.61516 15.1175 9.60305 15.1374L7.95155 17.9547C7.91925 17.9985 7.86676 18.0104 7.82638 17.9865Z\" fill=\"#61C699\" />\n <path d=\"M5.64795 10.8984L7.05717 11.7011C7.09755 11.725 7.1137 11.7766 7.08947 11.8203L6.38284 13.0283C6.34246 13.0959 6.24152 13.084 6.22133 13.0085C6.02751 12.3012 5.83773 11.5978 5.64795 10.8984Z\" fill=\"#61C699\" />\n <path d=\"M7.2739 11.9258L5.64664 14.6994C5.62241 14.7392 5.63856 14.7948 5.67894 14.8187L7.01144 15.5776C7.05182 15.6015 7.10835 15.5856 7.13258 15.5458L8.75984 12.7722C8.78407 12.7325 8.76792 12.6768 8.72754 12.653L7.39504 11.894C7.35062 11.8702 7.29813 11.8861 7.2739 11.9258Z\" fill=\"#61C699\" />\n <path d=\"M16.3199 14.4866L14.9874 15.2456C14.947 15.2694 14.8904 15.2535 14.8662 15.2138L12.3345 10.9023C13.1057 11.105 13.8729 11.3077 14.6441 11.5103C14.6684 11.5143 14.6845 11.5302 14.6966 11.5501L16.3481 14.3674C16.3764 14.4111 16.3643 14.4628 16.3199 14.4866Z\" fill=\"#61C699\" />\n <path d=\"M8.99121 12.7983L10.4004 11.9956C10.4408 11.9717 10.4973 11.9876 10.5216 12.0274L11.2282 13.2354C11.2686 13.3029 11.204 13.3824 11.1272 13.3625C10.4166 13.1758 9.70188 12.989 8.99121 12.7983Z\" fill=\"#61C699\" />\n <path d=\"M10.7077 11.9285L12.3349 14.7021C12.3592 14.7418 12.4117 14.7577 12.4561 14.7339L13.7886 13.9749C13.829 13.9511 13.8451 13.8994 13.8209 13.8557L12.1936 11.0821C12.1694 11.0423 12.1169 11.0264 12.0725 11.0503L10.74 11.8092C10.6996 11.8331 10.6834 11.8847 10.7077 11.9285Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </form>\n </CustomModal2>\n <CustomModal2\n open={showConfirmationModal}\n onClose={handleCloseConfirmationModal}\n maxWidth={'500px'}\n >\n <div className=\"fractal-popup-content\" style={{ padding: '0px', maxWidth: '500px' }}>\n <div className=\"request-payment-success-container\">\n <span className=\"request-payment-close-popup\" onClick={handleCloseConfirmationModal}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <div className=\"request-payment-success-tick-div\">\n <div className=\"request-payment-success-tick\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6.12669 13.9774C5.97396 14.131 5.76558 14.2167 5.54913 14.2167C5.33267 14.2167 5.1243 14.131 4.97157 13.9774L0.359012 9.36408C-0.119671 8.8854 -0.119671 8.10919 0.359012 7.6314L0.936573 7.05369C1.4154 6.57501 2.19072 6.57501 2.6694 7.05369L5.54913 9.93357L13.3306 2.15198C13.8094 1.6733 14.5855 1.6733 15.0634 2.15198L15.641 2.72969C16.1196 3.20837 16.1196 3.98444 15.641 4.46237L6.12669 13.9774Z\" fill=\"#61C699\" />\n </svg>\n </div>\n </div>\n <h6 className=\"request-payment-success-text\">The request <br />\n was sent</h6>\n <h6 className=\"request-payment-success-subtext\">Please wait for the customer to pay</h6>\n <div className=\"request-payment-success-btn-div\">\n {/* <button className=\"request-payment-success-btn1\">Go to Transactions</button> */}\n <button onClick={handleCloseConfirmationModal} className=\"request-payment-success-btn2\">Close</button>\n </div>\n </div>\n </div>\n </CustomModal2>\n </div>\n </>\n </>\n );\n};\n\n","'use client'\nimport React, { useEffect, useRef, useState } from 'react'\nimport Chargewidgetstyles from './Chargewidgetstyles';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport { baseUrl, masterBaseUrl, fractalGatewayUrl, S3Url } from '../baseurl';\nimport axios, { AxiosError } from 'axios';\nimport Loader from '../Loader/Loader';\nimport SuccessMsz from '../SuccessMessage/SuccessMsz';\nimport Swal from 'sweetalert2';\nimport DataScript from '../Datascript';\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage';\nimport socket from '../socketClient'\nimport { accountTypes, formatCardNumberWithCursor, formatUSD, isValidJson } from '../../utils/Common'\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport FractalFields, { SurchargeLookupOptions, SurchargeLookupResult, TokenizerSession } from '../Atoms/FractalForm/FractalFields';\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment';\nimport FractalWidgetStyles from './FractalWidgetStyles';\nimport {\n FractalOrderSummary, FractalSavingsNote, FractalModalHeader, FractalMethodToggle,\n FractalSavedMethods, FractalReaderList, FractalFooter, FractalField, FractalCheckbox,\n SummaryLine,\n} from '../Fractal/FractalCheckoutUI';\nimport { DcLoadingError } from '@/app/utils/Constant';\n\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\ndeclare let FractalTokenizer: any;\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n from?: string;\n amount: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n pass_fee?: boolean;\n isReader?: boolean;\n sessionToken?: string;\n bankFeeAmount?: string;\n // Pre-authorization mode: when true this widget runs the \"authorize / hold\"\n // flow instead of a charge (replaces the standalone PreAuthPayment component).\n isPreAuth?: boolean;\n preauthId?: string;\n onTriggerPay?: (fn: () => void) => void;\n showButton?: boolean;\n}\n\ntype activeinTabs = 'form' | 'list'\n\n\nexport function GetPaymentPage(props: Props) {\n const [loading, setLoading] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [loading2, setLoading2] = useState<boolean>(false);\n const [surchargeLookupLoading, setSurchargeLookupLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>(\"\");\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n const [show, setShow] = useState<boolean>(false);\n const [activetab, setActive] = useState<string>('card');\n const [activeList, setActiveList] = useState<string>('card')\n const [activeinCard, setActiveinCard] = useState<activeinTabs>('form')\n const [activeinBank, setActiveinBank] = useState<activeinTabs>('form')\n const [activeForm, setActiveForm] = useState<boolean>(true)\n const [saveCardInfo, setSaveCardInfo] = useState<boolean>(false);\n const [saveACHinfo, setSaveACHinfo] = useState<boolean>(false);\n const [isBankConsentChecked, setIsBankConsentChecked] = useState<boolean>(false);\n const [errorBankConsent, setErrorBankConsent] = useState<string>(\"\");\n const [saveACHConsent1, setSaveACHConsent1] = useState<boolean>(false);\n const [errorBankConsentOther, setErrorBankConsentOther] = useState<string>(\"\");\n const [loaderText, setLoderText] = useState<string>(\"\");\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n const fractalpayClientKey = props.merchantPublicKey;\n const isPreAuth = !!props.isPreAuth;\n const showButton = props.showButton !== false;\n interface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n }\n interface achDetails {\n name: string;\n routingNumber: string;\n accountNumber: string;\n confirmAccountNumber: string;\n bankName: string;\n accountType: string;\n companyName?: string;\n }\n\n interface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n card_issue_type?: string | null;\n }\n\n interface PaymentDevice {\n id: number;\n device_id: number;\n device_name: string;\n }\n\n interface PaymentData {\n paymentGateway: number;\n isSkyFiAccount: boolean;\n logo: string;\n bname: string;\n card_list: Card[];\n customer_name: string;\n is_primary: string;\n paymentDeviceList: PaymentDevice[];\n showSurcharge?: number;\n surchargeProgram?: number;\n dctoken?: string,\n }\n interface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n card_issue_type?: string | null;\n }\n\n interface SelectedReader {\n id?: number;\n device_id?: number;\n device_name?: string;\n }\n\n let mastercard = S3Url + 'widget/mc-img.svg'\n let visa = S3Url + 'widget/visa-img.svg'\n let americanexp = S3Url + 'widget/ae-img.svg'\n let discover = S3Url + 'widget/discover-img.svg'\n let defaultcard = S3Url + 'widget/card.svg'\n let trash = S3Url + 'widget/Trash.svg'\n let bank = S3Url + 'widget/bank.svg'\n let secure = S3Url + 'widget/secure-img.png'\n let pov = S3Url + 'widget/pov-by.png'\n let pax = S3Url + 'widget/pax.svg'\n\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [achData, setAchData] = useState<achDetails>()\n const [achError, setAchError] = useState<Partial<Record<keyof achDetails, string>>>({});\n const [cardList, setCardList] = useState([])\n const [bankList, setBankList] = useState([])\n const [selectedCard, setSelectedCard] = useState<SelectedCard>()\n const [selectedReader, setSelectedReader] = useState<PaymentDevice | null | undefined>(undefined)\n const [cashDiscount, setCashDiscount] = useState<number | undefined>(Number(props?.amount));\n const [bankAmount, setBankAmount] = useState<number | undefined>(Number(props?.amount));\n const [bankFeeAmount, setBankFeeAmount] = useState<number>(0.00);\n const [bankSavingsAmount, setBankSavingsAmount] = useState<number>(0.00);\n // console.log(selectedCard, \"selectedCard\");\n\n\n const [paymentData, setPaymentData] = useState<PaymentData>()\n let [tranId, setTranId] = useState(\"\");\n let [isDebitAdjusted, setIsDebitAdjusted] = useState<boolean>(false);\n // Pre-charge surcharge assessment from the tokenizer (PAN-complete lookup).\n const [surchargeResult, setSurchargeResult] = useState<SurchargeLookupResult | null>(null);\n\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '14px',\n 'letter-spacing': '-0.14px',\n 'color': '#221730',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#221730',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#a39bb0'\n }\n };\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount / (1 + surchargeVal);\n return Math.round(originalAmount * 100) / 100; // rounding to 2 decimals\n };\n\n // Mints a tokenized session for the surcharge lookup — same endpoint and shape as the\n // createToken charge flow. Resolves null on failure so the lookup fails soft.\n const createSurchargeSession = async (): Promise<TokenizerSession | null> => {\n try {\n const requestOptions = { method: \"POST\", redirect: \"follow\" };\n const res = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions);\n const data = res?.data?.data;\n const public_key_pem = data?.publicKeyPem || data?.public_key_pem;\n const session_key = data?.session_key;\n if (!public_key_pem || !session_key) return null;\n return { session_key, public_key_pem };\n } catch (err) {\n console.error(\"Surcharge session error\", err);\n return null;\n }\n };\n\n // Lookup inputs, read lazily at lookup time. amount is the pre-fee subtotal in cents;\n // merchant_location_zip isn't available on this surface (tokenizer Phase 2 / optional).\n const getSurchargeOptions = (): SurchargeLookupOptions => ({\n amount: Math.round(Number(cashDiscount ?? props?.amount ?? 0) * 100),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n\n // Surcharge assessment for a saved card (card-on-file) — there's no PAN to run through the\n // tokenizer iframe for a saved card, so this hits the backend by card_id instead. Fails soft,\n // same as createSurchargeSession/lookupSurcharge.\n const runCofSurchargeLookup = async (cardId: string): Promise<SurchargeLookupResult | null> => {\n try {\n const res = await axios.post(`${baseUrl}surcharge-lookup-cof`, {\n fractalpayPublicKey: fractalpayClientKey,\n customer_id: props?.customerId,\n card_id: cardId,\n amount: Number(cashDiscount ?? props?.amount ?? 0),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n const data = res?.data?.data;\n if (!data) return null;\n // Same field-by-field shape the tokenizer's own SURCHARGE_LOOKUP_RESULT handler\n // builds for the live-PAN lookup (FractalTokenizer's onmessage handler). This\n // branch's SurchargeLookupResult doesn't carry surcharge_lookup_status/engine_error,\n // so only the fields it declares are mapped here.\n return {\n card_brand: data.card_brand,\n card_issue_type: data.card_issue_type,\n surcharge_allowed: data.surcharge_allowed,\n max_surcharge_percent: data.max_surcharge_percent,\n max_surcharge_amount: data.max_surcharge_amount,\n };\n } catch (err) {\n console.error(\"COF surcharge lookup failed\", err);\n return null;\n }\n };\n\n // Fires whenever the customer picks a saved card, mirroring FractalFields' own\n // surchargeEnabled gate. Bank accounts are never card-surcharged, so skip the call\n // entirely for those — same waiver the live-PAN path applies. Feeds the same\n // setSurchargeResult state the live-PAN lookup uses, so surchargeBlocked/cardTotal\n // above need no changes regardless of which path populated it.\n useEffect(() => {\n const surchargingOn = Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee;\n if (!surchargingOn || !selectedCard?.id || selectedCard.card_type === 'Bank') {\n setSurchargeResult(null);\n return;\n }\n let cancelled = false;\n setSurchargeLookupLoading(true);\n runCofSurchargeLookup(selectedCard.id).then((result) => {\n if (cancelled) return;\n setSurchargeResult(result);\n setSurchargeLookupLoading(false);\n });\n return () => { cancelled = true; };\n }, [selectedCard?.id, selectedCard?.card_type, paymentData?.surchargeProgram, props?.pass_fee]);\n\n useEffect(() => {\n if (show) {\n // The dashboard always passes the total (credit/banked price). Derive the pre-fee base.\n let cash_discount = CalculateCashDiscount(props?.amount, (props?.surcharge || 0));\n let bankAmount = cash_discount\n if (props?.bankFeeAmount && Number(props?.bankFeeAmount) > 0) {\n bankAmount = Number(cash_discount) + Number(props?.bankFeeAmount);\n }\n setBankAmount(bankAmount);\n setCashDiscount(cash_discount);\n const cardFeeAmount = Number((Number(props?.amount) - Number(cash_discount || 0)).toFixed(2));\n const bankFeeAmount = Number(props?.bankFeeAmount || 0);\n const bankSavingsAmount = Math.max(bankFeeAmount > 0 ? cardFeeAmount - bankFeeAmount : cardFeeAmount, 0);\n const bankSavingsText = bankSavingsAmount > 0 ? `Save ${formatUSD(bankSavingsAmount.toFixed(2))}` : '';\n setBankFeeAmount(bankFeeAmount)\n setBankSavingsAmount(bankSavingsAmount)\n console.log({\n cash_discount,\n bankAmount, \n cardFeeAmount,\n bankFeeAmount,\n bankSavingsAmount,\n bankSavingsText,\n amount : props?.amount,\n });\n\n }\n // if (props?.pass_fee) {\n // } else {\n // setCashDiscount(undefined);\n // }\n }, [show, props?.pass_fee, props?.amount, props?.surcharge])\n\n\n // for payment popup\n const handleClose = () => {\n\n // if (tokenizerRef.current) {\n // try {\n // tokenizerRef.current.destroy?.(); \n // tokenizerRef.current.unmount?.();\n // } catch (err) {\n // console.warn(\"Tokenizer cleanup error:\", err);\n // }\n\n // tokenizerRef.current = null;\n // }\n // [\"card_number\", \"exp_month\", \"exp_year\", \"cvv\"].forEach((id) => {\n // const el = document.getElementById(id);\n // if (el) el.innerHTML = \"\";\n // });\n\n setShow(false);\n setActive('card')\n setError(\"\")\n setSuccess(false)\n setTranId(\"\")\n setSurchargeResult(null)\n setPaymentData(undefined)\n setLoadingIframe(false)\n setAchData({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setAchError({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setCardError({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveACHinfo(false)\n setSaveCardInfo(false)\n setSelectedCard({\n card_type: \"\",\n cardlastfourdigit: \"\",\n expmonth: 1,\n expyear: 2025,\n primary_card: 0,\n firstname: \"\",\n id: \"\",\n lastname: \"\",\n })\n setSelectedReader(null)\n setCashDiscount(0)\n setActiveList('card')\n setActiveForm(true)\n setActiveinBank('form')\n setActiveinCard('form')\n setLoading2(false);\n setLoading(false);\n setBankList([]);\n setCardList([]);\n setIsBankConsentChecked(false);\n setErrorBankConsent('');\n setSaveACHConsent1(false)\n setErrorBankConsentOther('');\n setLoderText(\"\");\n setIsDebitAdjusted(false);\n };\n const handleShow = () => setShow(true);\n\n // Pre-auth hosts can grab the open() handler to trigger the modal themselves.\n useEffect(() => {\n if (props.onTriggerPay) {\n props.onTriggerPay(() => { handleShow(); });\n }\n }, [props.onTriggerPay]);\n\n\n const handletabchange = (id: string) => {\n setActive(id)\n }\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n const handleChangeAch = (e: any) => {\n const { name, value } = e.target\n const numericFields = [\"routingNumber\", \"accountNumber\", \"confirmAccountNumber\"];\n if (name == \"name\") {\n\n\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return\n\n }\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentData?.paymentGateway !== 32) {\n\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Card number is required\";\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.expiryMonth?.trim() || !data?.expiryYear?.trim()) {\n // errors.expiryMonth = \"Invalid Expiration Date.\"\n // } else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n // if (!data?.cvv?.trim()) errors.cvv = \"CVV is required\";\n // // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n // }\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n setCardError(errors);\n\n // Return true if there is any error\n return Object.keys(errors).length > 0;\n };\n const validateAchData = (): boolean => {\n const errors: Partial<Record<keyof achDetails, string>> = {};\n const data = achData\n if (!data?.name?.trim()) errors.name = \"Name is required\";\n if (!data?.accountNumber?.trim()) errors.accountNumber = \"Account number is required\";\n if (data?.accountNumber?.trim() && data?.accountNumber?.trim() !== data?.confirmAccountNumber?.trim()) errors.confirmAccountNumber = \"Account numbers must match\";\n if (!data?.bankName?.trim()) errors.bankName = \"Bank name is required\";\n if (!data?.routingNumber?.trim()) errors.routingNumber = \"Routing Number is required\";\n\n\n if (data?.routingNumber && data?.routingNumber?.length !== 9) errors.routingNumber = \"Routing number must be 9 digits\";\n\n\n if ((data?.accountType === 'business saving' || data?.accountType === 'business checking')) {\n if (!data?.companyName || data?.companyName === \"\") {\n errors.companyName = \"Company Name is required for business accounts\";\n }\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n setErrorBankConsent('Above consent is required');\n }\n\n if (saveACHinfo && !saveACHConsent1) {\n setErrorBankConsentOther('Your consent is required to save your bank details for future use');\n }\n\n // Routing Number Validation removed du to new validation \n // if (data?.routingNumber?.length == 9) {\n\n // let routingNumber = data?.routingNumber\n // const weights = [3, 7, 1];\n // let sum = 0;\n\n // for (let i = 0; i < routingNumber.length; i++) {\n // sum += parseInt(routingNumber[i], 10) * weights[i % 3];\n // }\n // if (sum % 10 !== 0) {\n // errors.routingNumber = \"Invalid routing number\"\n // }\n\n // }\n setAchError(errors);\n return (Object.keys(errors).length > 0);\n };\n\n // ---- Pre-authorization card submit (replaces standalone PreAuthPayment) ----\n // Unlike a charge, pre-auth does NOT create a widget order; it tokenizes and\n // emits an authorize/hold socket request (fractal-charge-preauth / charge-preauth).\n const submitPreAuthCard = async () => {\n const hasError = validateCardData()\n if (hasError) return\n setLoading2(true)\n try {\n const tokenCallback = async function (response: any) {\n if (response.Error) {\n setError(response.Error)\n setLoading2(false)\n } else {\n response.name = cardData?.cardName;\n response.postal_code = cardData?.zipCode;\n response.fractalpayPublicKey = props?.merchantPublicKey;\n response.amount = props?.amount;\n response.order_id = props?.orderID;\n response.preAuth_id = props?.preauthId || \"\";\n response.isCardSave = saveCardInfo;\n response.customer_id = props?.customerId;\n response.link_token = \"\";\n response.gateway_id = paymentData?.paymentGateway;\n response.discount = props?.discount;\n response.tax = props?.tax;\n response.surcharge = props?.surcharge;\n response.pass_fee = props?.pass_fee;\n const requestOptions = { method: \"POST\", body: JSON.stringify(response), redirect: \"follow\" };\n socket.emit(\"sendMessage\", { ...requestOptions, \"isChargePreauth\": true, ...(props?.sessionToken && { sessionToken: props.sessionToken }) })\n socket.on('charge-preauth', (data: any) => {\n if (data?.status == \"Failed\") {\n setLoading2(false)\n setError(data?.message || \"Something went wrong. Please try again later.\")\n } else {\n setSuccess(true)\n setTranId(data?.data?.transaction_id)\n setLoading2(false)\n setCardData({ cardName: \"\", cardNumber: \"\", expiryMonth: \"\", expiryYear: \"\", cvv: \"\", orderId: \"\", zipCode: \"\" })\n }\n })\n }\n }\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = { method: \"POST\", redirect: \"follow\" };\n try {\n const sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n try {\n let tokenizeData;\n try {\n tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n } catch (err: any) {\n setLoading2(false);\n setErrorIframe(err?.response?.data?.message || err?.message || \"Something went wrong.\");\n return\n }\n const reqData = JSON.stringify({\n ...tokenizeData,\n name: cardData?.cardName,\n postal_code: cardData?.zipCode,\n customer_id: props?.customerId,\n amount: props?.amount,\n Token: `${tokenizeData?.token}`,\n fractalpayPublicKey: fractalpayClientKey,\n order_id: props?.orderID,\n preAuth_id: props?.preauthId || \"\",\n isCardSave: saveCardInfo,\n discount: props?.discount,\n surcharge: props?.surcharge,\n tax: props?.tax,\n link_token: \"\",\n ExpirationYear: cardData?.expiryYear,\n ExpirationMonth: cardData?.expiryMonth,\n CVV: cardData?.cvv,\n Last4: tokenizeData?.last4,\n Brand: tokenizeData?.brand,\n gateway_id: paymentData?.paymentGateway,\n pass_fee: props?.pass_fee,\n })\n const requestOptions2 = { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: reqData, redirect: \"follow\" };\n socket.emit(\"sendMessage\", { ...requestOptions2, \"isFractalPreauth\": true, ...(props?.sessionToken && { sessionToken: props.sessionToken }) })\n socket.on('fractal-charge-preauth', (data: any) => {\n if (data?.status == \"Failed\") {\n setLoading2(false)\n setError(data?.message || \"Something went wrong , Try again later\")\n } else {\n setTranId(data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n }\n })\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong , Try again later\")\n }\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong , Try again later\")\n }\n } else {\n try {\n const result = await (window as any).requestDcToken();\n if (result.Token) { tokenCallback(result); }\n } catch (err: any) {\n setErrorIframe(err);\n setLoading2(false);\n }\n }\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n\n // ---- Pre-authorization with a saved card (authorize-by-card REST, no socket) ----\n const handleAuthorizeSavedCard = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n const customer_id = props?.customerId\n const fractalpayPublicKey = props?.merchantPublicKey\n const order_id = props?.orderID\n const amount = leftTotal\n const card_id = selectedCard?.id\n const card_type = selectedCard?.card_type\n const preAuth_id = props?.preauthId || ''\n if (fractalpayPublicKey && order_id && amount) {\n if (customer_id) {\n if (card_id) {\n const chargeobj = {\n amount, order_id, customer_id, card_id, fractalpayPublicKey,\n isCardSave: card_type != \"Bank\",\n discount: props?.discount, surcharge: props?.surcharge, tax: props?.tax, preAuth_id\n }\n const { isCardSave, ...rest } = chargeobj\n const chargeurl = baseUrl + \"authorize-by-card\"\n const headers = { 'Content-Type': 'application/json', ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken }) }\n setLoading2(true)\n try {\n const result = await axios.post(chargeurl, card_type == 'Bank' ? rest : chargeobj, { headers })\n if (result?.data?.result) {\n setTranId(result?.data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(result?.data?.message || \"Something went wrong.\")\n }\n } catch (err: any) {\n setLoading2(false)\n setError(err?.response?.data?.message || err?.response?.data?.status || \"Something went wrong\")\n }\n } else {\n setError(\"Please Select A Card/ACH\")\n }\n } else {\n setError(\"Please Select Customer\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n const submitFunc = async (e: any) => {\n e.preventDefault()\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (isPreAuth) { await submitPreAuthCard(); return; }\n if (activetab !== 'ach') {\n const hasError = validateCardData()\n if (hasError) return\n else {\n let validCard = true;\n let validExpirationDate = true;\n let validCVV = true;\n\n // if (paymentData?.paymentGateway !== 32) {\n // let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n // let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n // let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n // let errors: Partial<Record<keyof CardDetails, string>> = {}\n // if (!validCard) errors.cardNumber = \"Invalid card Number\"\n // if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n // if (!validCVV) errors.cvv = \"Invalid CVV\"\n // setCardError(errors)\n // }\n\n if (validCard && validCVV && validExpirationDate) {\n\n // showLoader()\n setLoading2(true)\n try {\n const formData = {\n // amount: `${props.amount || 0}`,\n amount: `${orderAmount}`,\n fractalpayPublicKey: fractalpayClientKey,\n orderId: props?.orderID,\n customer_id: props?.customerId,\n discount: props?.discount,\n surcharge: props?.surcharge,\n tax: props?.tax,\n pass_fee: props?.pass_fee\n }\n const result = await axios.post(`${baseUrl}create-widget-order`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n })\n let tokenCallback = async function (response: any) {\n\n if (response.Error) {\n setError(response.Error)\n // hideLoader();\n setLoading2(false)\n\n\n } else {\n let name = cardData?.cardName;\n let postal_code = cardData?.zipCode;\n\n response.name = name;\n response.postal_code = postal_code;\n response.isCardSave = `${saveCardInfo}`\n response.isCharge = true;\n response.posSalesIdEncode = result?.data.data.posSalesIdEncode;\n\n\n socket.emit(\"sendMessage\", response)\n socket.on(result?.data.data.posSalesIdEncode, (data: any) => {\n if (isValidJson(data?.data)) {\n let apiResponse = JSON.parse(data.data);\n if (apiResponse?.result) {\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveCardInfo(false)\n setTranId(apiResponse?.transactionId)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(apiResponse?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n\n // try {\n // let apiResponse = await axios.post(`${masterBaseUrl}quick-pay/${result?.data.data.posSalesIdEncode}`, response)\n // setCardData({\n // cardName: \"\",\n // cardNumber: \"\",\n // expiryMonth: \"\",\n // expiryYear: \"\",\n // cvv: \"\",\n // orderId: \"\",\n // zipCode: \"\"\n // })\n // setSaveCardInfo(false)\n // setTranId(apiResponse?.data?.transactionId)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n\n // } catch (err: any) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n\n // }\n\n }\n }\n\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n try {\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber;\n // cardNumber = cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: {\n // md: forge.md.sha1.create()\n // }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n // // Create Token\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // const raw = JSON.stringify({\n // \"enc_track2_data\": `${encryptedBase64}`,\n // \"algorithm\": \"RSAES_OAEP_SHA_1\",\n // session_key: `${sesionResult?.data?.data?.session_key}`\n // });\n\n try {\n console.log(sesionResult, \"sesionResult\");\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders })\n\n let tokenizeData;\n\n try {\n tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n\n } catch (err: any) {\n setErrorIframe(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n setLoading2(false)\n return;\n }\n\n const card_issue_type = tokenizeData?.bin_lookup_result?.card_issue_type || null;\n\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExempt = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExempt && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`);\n }\n\n console.log(tokenizeData, \"tokenizeData\");\n const reqData = JSON.stringify({\n ...tokenizeData,\n isSaveCardChecked: saveCardInfo,\n name: cardData?.cardName,\n postal_code: cardData?.zipCode,\n customer_id: props?.customerId,\n card_issue_type\n })\n\n const reqData2 = JSON.stringify({\n \"pre_sales_id\": `${result?.data?.data?.posSalesIdEncode}`,\n \"token\": `${tokenizeData?.token}`,\n \"json_response\": `${reqData}`\n })\n let myHeaders2 = JSON.stringify({\n \"Content-Type\": \"application/json\"\n })\n const requestOptions = {\n method: \"POST\",\n headers: myHeaders2,\n body: reqData2,\n redirect: \"follow\",\n isChargeviafractal: true,\n };\n\n socket.emit(\"sendMessage\", requestOptions)\n socket.on('chargeviafractalgateway', (data: any) => {\n if (isValidJson(data?.data)) {\n let paymentRes = JSON.parse(data?.data);\n console.log(paymentRes, \"paymentRes\");\n if (paymentRes?.result) {\n setTranId(paymentRes?.data?.transactionId);\n setIsDebitAdjusted(paymentRes?.data?.is_debit_adjusted);\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(paymentRes?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n\n // try {\n // let paymentRes = await axios.post(`${masterBaseUrl}api/v1/payment-gateway/charge`, requestOptions,\n // {\n // headers: myHeaders2\n // }\n // )\n // if (paymentRes?.data?.result) {\n // setTranId(paymentRes?.data?.data?.transactionId)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n\n // }\n\n // } catch (err: any) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n // }\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } else {\n try {\n const result = await (window as any).requestDcToken();;\n console.log(\"Token:\", result.Token);\n if (result.Token) {\n tokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading2(false);\n }\n\n // if (typeof DatacapWebToken !== 'undefined') {\n\n // DatacapWebToken.requestToken(result?.data.data.dctoken, \"PaymentForm\", tokenCallback);\n // }\n }\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n } else {\n let hasError = validateAchData()\n if (saveACHinfo && !saveACHConsent1) {\n hasError = true;\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n hasError = true;\n }\n if (hasError) return\n else {\n setLoading2(true)\n let dataForm = {\n fractalpayPublicKey: fractalpayClientKey,\n label: achData?.name || \"John Doe\",\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n amount: String(bankAmount || 0),\n isSaveAch: saveACHinfo,\n customer_id: props?.customerId,\n order_id: props?.orderID,\n tax: props?.tax,\n discount: props?.discount,\n surcharge: props?.surcharge,\n isChargeACH: true,\n company_name: achData?.companyName || \"\",\n ...(props?.sessionToken && { sessionToken: props.sessionToken })\n }\n // showLoader()\n socket.emit(\"sendMessage\", dataForm)\n socket.on('ach-incoming', (data: any) => {\n if (data?.status == \"Failed\") {\n if (typeof (data?.message) == \"object\") {\n Object.values(data?.message).forEach((message: any) => {\n setError(message || \"Something went wrong\");\n });\n } else {\n setError(data?.message || \"Something went wrong\")\n }\n } else {\n setTranId(data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n // Swal.fire({\n // icon: 'success',\n // title: 'Congrats...',\n // text: data?.message,\n // }).then((res) => {\n // if (res.isConfirmed) {\n // // OK button was clicked\n // handleClose()\n // }\n // });\n }\n })\n\n // try {\n // let result = await axios.post(`${baseUrl}ach-incoming`, dataForm)\n // // hideLoader()\n // setLoading2(false)\n\n // Swal.fire({\n // icon: 'success',\n // title: 'Congrats...',\n // text: result?.data?.message,\n // }).then((res) => {\n // if (res.isConfirmed) {\n // // OK button was clicked\n // handleClose()\n // }\n // });\n // } catch (error) {\n // if (axios.isAxiosError(error)) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(error.response?.data?.message?.error ?? error.response?.data?.message?.amount ?? \"Something went wrong\")\n // }\n // else {\n // console.error('Unexpected error', error);\n // }\n // }\n }\n }\n\n }\n\n\n const getPaymentDetails = async () => {\n showLoader()\n try {\n const data = {\n fractalpayPublicKey: fractalpayClientKey,\n \"customer_id\": props?.customerId,\n pass_fee: props?.pass_fee,\n isReader: props?.isReader\n }\n let paymentData = await axios.post(`${baseUrl}get-payment-details`, data)\n setPaymentData(paymentData?.data?.data)\n if (!paymentData?.data?.data?.paymentGateway) {\n handleClose()\n setError(\"Something went wrong.\")\n }\n let willShowCardForm = true\n if (paymentData?.data?.data?.card_list && paymentData?.data?.data?.card_list?.length > 0) {\n // setActive('cardList')\n let banklists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type == 'Bank')\n let cardlists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type !== 'Bank')\n // console.log(banklists, \"hohgohoo\", cardlists);\n // Keep both flags in sync so the unified saved-methods list opens\n // whenever the customer has any saved card or bank.\n if (cardlists?.length > 0 || banklists?.length > 0) {\n setActiveinCard('list')\n setActiveinBank('list')\n willShowCardForm = false\n }\n setCardList(cardlists)\n setBankList(banklists)\n // let primary_card = paymentData?.data?.data?.card_list?.filter((card: any) => card?.primary_card == 1)\n // if (primary_card?.[0] && primary_card?.[0]?.payment_method_type == paymentData?.data?.data?.paymentGateway) {\n // setSelectedCard(primary_card[0])\n // } else if (primary_card?.[0]?.card_type === \"Bank\") {\n // setSelectedCard(primary_card[0])\n // }\n } else {\n setActive('card')\n }\n\n if (paymentData?.data?.data?.paymentDeviceList && paymentData?.data?.data?.paymentDeviceList?.length > 0) {\n setSelectedReader(paymentData?.data?.data?.paymentDeviceList[0])\n }\n\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no gap frame with every\n // loading flag false while DataCapFields' own effect spins up.\n // Only when the card form (not the saved-methods list) will\n // actually render DataCapFields, otherwise this would get stuck\n // true forever since DataCapFields never mounts to clear it.\n if (willShowCardForm && paymentData?.data?.data?.paymentGateway === 31 && paymentData?.data?.data?.dctoken) {\n setLoadingIframe(true)\n }\n\n hideLoader()\n } catch (err: any) {\n console.log(err);\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong\")\n }\n }\n\n const handlechargeCustomer = async (e: React.MouseEvent<HTMLButtonElement>) => {\n if (isPreAuth) { return handleAuthorizeSavedCard(e); }\n e.currentTarget.blur();\n if (loading2) return;\n let customer_id = props?.customerId\n let discount = String(props?.discount)\n let surcharge = String(props?.surcharge)\n let tax = String(props?.tax)\n let fractalpayPublicKey = props?.merchantPublicKey\n let order_id = props?.orderID\n let amount = String(props?.amount)\n let card_id = selectedCard?.id\n let card_type = selectedCard?.card_type\n let card_issue_type = selectedCard?.card_issue_type\n if (fractalpayPublicKey && order_id && amount && bankAmount) {\n if (customer_id) {\n if (card_id) {\n setLoading2(true);\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExempt = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExempt && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`)\n }\n let resultofOrderCreate\n if (!(card_type === \"Bank\")) {\n const formData = {\n // amount: `${props.amount || 0}`,\n amount: `${orderAmount}`,\n fractalpayPublicKey: fractalpayClientKey,\n orderId: props?.orderID,\n customer_id: props?.customerId,\n discount: props?.discount,\n surcharge: props?.surcharge,\n tax: props?.tax,\n pass_fee: props?.pass_fee\n }\n resultofOrderCreate = await axios.post(`${baseUrl}create-widget-order`, formData, {\n headers: {\n ...(props?.sessionToken && { 'X-Session-Token': props.sessionToken })\n }\n })\n\n console.log(resultofOrderCreate, \"vfndsjkfvhg\", resultofOrderCreate?.data.data.posSalesIdEncode);\n }\n\n let chargeobj = {\n amount: `${leftTotal}`,\n order_id,\n customer_id,\n card_id,\n fractalpayPublicKey,\n isCardSave: saveCardInfo,\n discount,\n surcharge,\n tax,\n pass_fee: props?.pass_fee,\n require3ds: false,\n ...(props?.sessionToken && { sessionToken: props.sessionToken }),\n ...(resultofOrderCreate?.data?.data?.posSalesIdEncode && { enOrderId: resultofOrderCreate?.data.data.posSalesIdEncode }),\n }\n let { isCardSave, pass_fee, require3ds, ...rest } = chargeobj\n\n\n let endpoint = card_type === \"Bank\" ? \"charge-ach\" : \"charge-by-card\"\n\n let chargeurl = baseUrl + endpoint\n const headers = {\n 'Content-Type': 'application/json'\n }\n // showLoader()\n\n socket.emit(\"sendMessage\", { url: chargeurl, body: card_type == 'Bank' ? rest : chargeobj, isChargebycard: true })\n socket.on('charge-by-card', (response: any) => {\n if (response?.result == true || response?.status == true) {\n setIsDebitAdjusted(response.data?.adjustedForDebit);\n setTranId(response.data?.transaction_id);\n setSuccess(true);\n // hideLoader()\n setLoading2(false);\n } else {\n setError(response?.message || \"Something went wrong.\")\n }\n })\n // try {\n // let result = await axios.post(chargeurl, card_type == 'Bank' ? rest : chargeobj, { headers })\n // if (result?.data?.result) {\n // setTranId(result?.data?.data?.transaction_id)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n\n // }\n // // hideLoader()\n\n // } catch (err: any) {\n // // hideLoader()\n // setLoading2(false)\n\n // setError(err?.response?.data?.message || err?.response?.data?.status || \"Something went erong\")\n\n // }\n\n } else {\n setError(\"Please Select A Card/ACH\")\n // swal(\"Please Select A Card/ACH\", '', \"error\");\n }\n } else {\n // swal(\"Please Select Customer\", '', \"error\");\n setError(\"Please Select Customer\")\n }\n } else {\n // swal(\"Something went wrong\", 'Please try again later !!!', \"error\");\n setError(\"Something went wrong.\")\n }\n }\n\n const handleChargewithEMV = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n let fractalpayPublicKey = props?.merchantPublicKey\n let customer_order_id = props?.orderID\n let amount = String(props?.amount)\n let customer_id = props?.customerId\n\n if (!selectedReader?.device_id) {\n setError(\"Please Select A Payment Device\")\n return\n }\n\n if (fractalpayPublicKey && customer_order_id && amount) {\n setLoading2(true)\n let obj = {\n amount,\n fractalpayPublicKey,\n customer_order_id,\n device_id: selectedReader?.device_id,\n customer_id: customer_id || \"\",\n ...(isPreAuth && { is_auth: true })\n }\n\n try {\n let response = await axios.post(`${baseUrl}charge-with-reader`, obj)\n\n\n if (response?.data?.result == true) {\n setTranId(response?.data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n } else {\n setError(response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n const handlepayment = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (activeList === 'card') {\n handlechargeCustomer(e)\n } else if (activeList === 'reader') {\n handleChargewithEMV(e)\n }\n }\n\n\n useEffect(() => {\n if (show && fractalpayClientKey) {\n\n getPaymentDetails()\n }\n }, [fractalpayClientKey, show])\n\n const handleDeleteCard = async (cardId: any) => {\n Swal.fire({\n icon: 'warning',\n text: 'Do you want to delete the card?',\n showCancelButton: true,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n reverseButtons: true,\n buttonsStyling: false,\n customClass: {\n confirmButton: 'swal2-confirm btn btn-dark',\n cancelButton: 'swal2-cancel btn btn-dark',\n popup: 'custom-swal-popup',\n icon: 'custom-swal-icon'\n }\n }).then(async (result) => {\n if (result.isConfirmed) {\n // 👇 Yahan aap apna API call karo\n // showLoader()\n setLoading2(true)\n try {\n let obj = {\n card_id: cardId,\n customer_id: props?.customerId,\n fractalpayPublicKey: props?.merchantPublicKey\n }\n\n const res = await axios.post(`${baseUrl}delete-customer-card`, obj)\n // hideLoader()\n setLoading2(false)\n\n getPaymentDetails()\n Swal.fire({\n icon: 'success',\n title: 'Deleted!',\n text: 'Card deleted.',\n confirmButtonText: 'OK',\n showConfirmButton: true,\n timer: 1000, // auto-close after 1 second\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n\n } catch (err) {\n // hideLoader()\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Error!',\n text: 'Failed to delete the card.',\n confirmButtonText: 'OK',\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n });\n }\n\n\n } else if (result.dismiss === Swal.DismissReason.cancel) {\n // 👇 Show new popup on \"No\"\n Swal.fire({\n icon: 'info',\n text: 'Card not deleted',\n confirmButtonText: 'OK',\n buttonsStyling: false,\n customClass: {\n confirmButton: 'btn btn-dark float-end',\n actions: 'swal2-actions-end'\n }\n });\n\n }\n });\n };\n\n const getCardType = (card: string) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return card;\n }\n };\n\n const getCashDiscount = () => {\n let cashDiscountNew = cashDiscount || 0\n let diff = Number(props.amount) - cashDiscountNew\n return diff.toFixed(0)\n }\n\n // ---- derived display values for the redesigned surcharge modal ----\n const merchantName = paymentData?.bname || paymentData?.customer_name || 'the merchant'\n // Avoid \"Invoice #Invoice123\" when the order id already carries an \"Invoice\" prefix.\n const invoiceNo = String(props?.orderID || '').replace(/^\\s*invoice\\s*#?\\s*/i, '').trim()\n const invoiceLabel = invoiceNo ? `Invoice #${invoiceNo}` : 'Invoice'\n const isSurchargeProgram = Number(paymentData?.surchargeProgram) === 1\n // The dashboard always passes the total (credit/banked price). The pre-fee base is the\n // discounted/cash base, derived from that total for both surcharge program and cash discount.\n const baseAmount = Number(cashDiscount ?? props?.amount ?? 0)\n const fundingType = surchargeResult?.card_issue_type?.toLowerCase()\n const feeExempt = fundingType === 'debit' || fundingType === 'prepaid'\n\n let cardTotal\n if (isSurchargeProgram) {\n cardTotal = feeExempt\n ? baseAmount\n : parseFloat((baseAmount * (1 + (Number(props?.surcharge || 0) / 100))).toFixed(2))\n } else {\n // Cash discount: always show the full price ($103) regardless of card type.\n cardTotal = Number(props?.amount || 0)\n }\n\n const surchargeFee = Math.max(cardTotal - baseAmount, 0)\n // The saved-methods list mixes cards and bank accounts on the 'card' tab (goToList always\n // forces activetab to 'card'), so once a saved method is selected there, its own card_type\n // decides bank vs. card — not the tab. Falls back to the tab when the list isn't showing a\n // selection (form entry, reader, or list with nothing picked yet).\n const isBankView = activetab !== 'reader' && activeinCard === 'list' && !!selectedCard?.id\n ? selectedCard?.card_type === 'Bank'\n : activetab === 'ach'\n const discountNum = Number(props?.discount || 0)\n const taxNum = Number(props?.tax || 0)\n const leftTotal = isBankView ? Number(bankAmount || 0) : cardTotal\n // Surcharge-program: create the order at the pre-fee subtotal ($100) so the backend can add\n // the surcharge for credit cards. Cash-discount: always create at the full price ($103) so\n // the backend's removeSurcharge correctly derives the discounted base — even for debit.\n const orderAmount = isSurchargeProgram ? baseAmount : Number(props?.amount || 0)\n const fmtNum = (n: number) => Number(n).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })\n // surcharge_program (from pos_sales_setting) flips the framing: ON = true surcharging\n // (itemized \"Surcharge\" added to a pre-fee subtotal); OFF = cash-discount (the price already\n // includes the fee, and debit/bank gets a discount). Same dollars, different presentation.\n const hasFee = surchargeFee > 0 && !!props?.pass_fee\n const showSurchargeLine = isSurchargeProgram && !isBankView && hasFee\n // Surcharge program subtotal is the pre-fee base; cash-discount subtotal is the full price.\n const summarySubtotal = (isSurchargeProgram || isBankView) ? baseAmount : cardTotal\n\n const savedMethods: any[] = [...(cardList || []), ...(bankList || [])]\n const hasSaved = savedMethods.length > 0\n // `activeinCard`/`activeinBank` are kept in sync (both 'list' or both 'form'),\n // so the unified saved-methods list shows regardless of the active card/bank tab.\n const showList = hasSaved && activetab !== 'reader' && activeinCard === 'list'\n\n const availableMethods: string[] = [\n 'card',\n ...(!isPreAuth && paymentData?.isSkyFiAccount ? ['ach'] : []),\n ...(props?.isReader && paymentData?.paymentDeviceList && paymentData.paymentDeviceList.length > 0 ? ['reader'] : []),\n ]\n\n const goToList = () => { setActive('card'); setActiveinCard('list'); setActiveinBank('list'); setError(''); }\n const payWithOther = () => { setActive('card'); setActiveinCard('form'); setActiveinBank('form'); setError(''); }\n const switchMethod = (m: string) => {\n setActive(m)\n if (m === 'card' || m === 'ach') { setActiveinCard('form'); setActiveinBank('form'); }\n setError('')\n }\n\n const rightTitle = showList\n ? 'Payment methods'\n : activetab === 'reader'\n ? (isPreAuth ? 'Reader authorization' : 'Reader payment')\n : activetab === 'ach'\n ? 'Bank payment'\n : (isPreAuth ? 'Card authorization' : 'Card payment')\n\n const showBack = hasSaved && !showList\n\n const MethodToggle = (\n <FractalMethodToggle\n methods={[\n { value: 'card', label: 'Card' },\n ...(availableMethods.includes('ach') ? [{ value: 'ach', label: 'Bank' }] : []),\n ...(availableMethods.includes('reader') ? [{ value: 'reader', label: 'Reader' }] : []),\n ]}\n active={activetab}\n onChange={switchMethod}\n />\n )\n\n const summaryLines: SummaryLine[] = [\n { label: 'Subtotal', value: fmtNum(summarySubtotal) },\n { label: 'Discount', value: fmtNum(discountNum), muted: true },\n { label: 'Tax', value: fmtNum(taxNum), muted: true },\n ...(showSurchargeLine ? [{ label: 'Surcharge', value: formatUSD(surchargeFee.toFixed(2)) }] : []),\n ]\n\n const summaryNote = isBankView\n ? (bankSavingsAmount > 0\n ? <FractalSavingsNote label={isSurchargeProgram ? 'Savings' : 'Cash discount savings'} amount={formatUSD(bankSavingsAmount.toFixed(2))} />\n : null)\n : !hasFee ? null\n : isSurchargeProgram\n // Debit never carries a bank fee, so it always settles at the pre-fee base. Bank\n // does when bankFeeAmount is set — call that out separately instead of implying\n // debit and bank land on the same number.\n ? (bankFeeAmount > 0\n ? <div className=\"fps-note\"><b>{formatUSD(baseAmount.toFixed(2))}</b> if customer pays with debit (no surcharge), or <b>{formatUSD(Number(bankAmount || 0).toFixed(2))}</b> if by bank.</div>\n : <div className=\"fps-note\"><b>{formatUSD(baseAmount.toFixed(2))}</b> if customer pays with debit or by bank (no surcharge).</div>)\n : <div className=\"fps-note\"><b>{formatUSD(Number(bankAmount || 0).toFixed(2))}</b> if customer pays by bank (cash discount price).</div>\n\n const LeftSummary = (\n <FractalOrderSummary\n logo={paymentData?.logo}\n invoiceLabel={invoiceLabel}\n lines={summaryLines}\n total={formatUSD(leftTotal.toFixed(2))}\n cardIcons={isBankView ? null : { visa, mastercard, amex: americanexp, discover }}\n note={summaryNote}\n secureIcon={secure}\n />\n )\n\n const AuthText = isPreAuth ? (\n <p className=\"fps-auth\">\n By authorizing, you allow {merchantName} to place a hold of {formatUSD(cardTotal.toFixed(2))} on your card. <u>Refund policy</u>.\n </p>\n ) : (\n <p className=\"fps-auth\">\n By paying, you authorize {merchantName} to charge {formatUSD((isBankView ? Number(bankAmount || 0) : cardTotal).toFixed(2))} to your {isBankView ? 'account' : 'card'}. <u>Refund policy</u>.\n </p>\n )\n\n return (\n <>\n <DataScript />\n {\n paymentData?.paymentGateway === 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n\n {\n paymentData?.paymentGateway === 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }} />\n )\n }\n <Chargewidgetstyles />\n <CardBankRadioStyles />\n <FractalWidgetStyles />\n <>\n {showButton && (\n <button className=\"paymentBtn\" onClick={handleShow}>\n {isPreAuth ? 'PreAuth Payment' : 'Pay'}\n </button>\n )}\n\n <CustomModal2\n open={show}\n onClose={handleClose}\n maxWidth=\"760px\"\n >\n {\n error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>\n }\n {\n errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>\n }\n {success && <SuccessMsz onClose={handleClose} tranId={tranId} isDebitAdjusted={isDebitAdjusted} />}\n {!error && !errorIframe && !success &&\n <>\n {(loading || loading2 || loadingIframe || surchargeLookupLoading) && <Loader loading={loading || loading2 || loadingIframe || surchargeLookupLoading} loaderText={loaderText} />}\n\n <div className=\"fps-modal\">\n {LeftSummary}\n\n <section className=\"fps-content\">\n <FractalModalHeader title={rightTitle} onBack={showBack ? goToList : undefined} onClose={handleClose} />\n\n {/* ---------- Saved methods list ---------- */}\n {showList ? (\n <>\n <FractalSavedMethods\n sectionLabel=\"Cards / bank accounts\"\n items={savedMethods.map((card: any) => {\n const isBankCard = card?.card_type === 'Bank'\n let isDisabled = false\n if (paymentData?.paymentGateway) {\n isDisabled = paymentData?.paymentGateway != card?.payment_method_type && !isBankCard\n }\n return {\n id: card?.id,\n primaryText: `**** ${card?.cardlastfourdigit}`,\n secondaryText: isBankCard ? undefined : `${card?.expmonth}/${card?.expyear}`,\n badge: isBankCard ? 'BANK' : (card?.card_issue_type || 'CARD'),\n brandLogo: isBankCard ? undefined : getCardType(card?.card_type),\n disabled: isDisabled,\n }\n })}\n selectedId={selectedCard?.id}\n onSelect={(id) => setSelectedCard(savedMethods.find((c: any) => c?.id === id))}\n onRemove={(id) => handleDeleteCard(id)}\n removeIcon={trash}\n otherLabel=\"Pay with other method\"\n onOther={payWithOther}\n otherIcon={defaultcard}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2 || !selectedCard?.id || surchargeLookupLoading}\n onPay={handlechargeCustomer}\n buttonLabel={isPreAuth\n ? `Authorize ${formatUSD(cardTotal.toFixed(2))}`\n : `Pay ${formatUSD((selectedCard?.card_type === 'Bank' ? Number(bankAmount || 0) : cardTotal).toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'reader' ? (\n /* ---------- Reader ---------- */\n <>\n {MethodToggle}\n <FractalReaderList\n sectionLabel=\"Readers\"\n items={(paymentData?.paymentDeviceList || []).map((r: any) => ({ id: String(r?.id), name: r?.device_name }))}\n selectedId={selectedReader?.id != null ? String(selectedReader?.id) : undefined}\n onSelect={(id) => setSelectedReader((paymentData?.paymentDeviceList || []).find((r: any) => String(r?.id) === id))}\n icon={pax}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2}\n onPay={handleChargewithEMV}\n buttonLabel={isPreAuth ? `Authorize ${formatUSD(cardTotal.toFixed(2))}` : `Pay ${formatUSD(cardTotal.toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'ach' ? (\n /* ---------- Bank form ---------- */\n <form\n id=\"ACHPaymentForm\"\n autoComplete=\"off\"\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on account\" htmlFor=\"nameonaccount\" error={achError?.name}>\n <input id=\"nameonaccount\" className=\"fps-input\" maxLength={100} placeholder=\"John Doe\" name=\"name\" value={achData?.name ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Routing number\" htmlFor=\"routingnumber\" error={achError?.routingNumber}>\n <input id=\"routingnumber\" className=\"fps-input\" maxLength={9} placeholder=\"000000000\" name=\"routingNumber\" value={achData?.routingNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Account number\" htmlFor=\"accountnumber\" error={achError?.accountNumber}>\n <input id=\"accountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"accountNumber\" value={achData?.accountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Confirm account number\" htmlFor=\"confirmaccountnumber\" error={achError?.confirmAccountNumber}>\n <input id=\"confirmaccountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"confirmAccountNumber\" value={achData?.confirmAccountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Bank name\" htmlFor=\"bankname\" error={achError?.bankName}>\n <input id=\"bankname\" className=\"fps-input\" maxLength={100} placeholder=\"My Bank\" name=\"bankName\" value={achData?.bankName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n {(achData?.accountType === 'business saving' || achData?.accountType === 'business checking') && (\n <FractalField label=\"Company name\" htmlFor=\"companyName\" error={achError?.companyName}>\n <input id=\"companyName\" className=\"fps-input\" maxLength={100} placeholder=\"My Company\" name=\"companyName\" value={achData?.companyName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n )}\n <FractalField label=\"Account type\" htmlFor=\"accounttype\">\n <select id=\"accounttype\" name=\"accountType\" className=\"fps-input\" value={achData?.accountType ?? ''} onChange={handleChangeAch}>\n <option value=\"\">Select</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>{type.label}</option>\n ))}\n </select>\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"saveACH\" checked={saveACHinfo} onChange={(v) => {\n setSaveACHinfo(v)\n if (!v) { setSaveACHConsent1(false); setErrorBankConsentOther('') }\n }}>\n Save this bank account. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n {saveACHinfo && (\n <>\n <FractalCheckbox id=\"saveACHConsent1\" checked={saveACHConsent1} onChange={(v) => {\n setSaveACHConsent1(v)\n if (v) setErrorBankConsentOther('')\n }}>\n By providing my bank account information and selecting ‘Save for future payments’, I authorize {merchantName} to store my bank account details for future ACH payments. I understand that future payments may be initiated using this saved account in accordance with my instructions. I confirm I am authorized to use this bank account.\n </FractalCheckbox>\n {errorBankConsentOther && <span className=\"fps-error\">{errorBankConsentOther}</span>}\n </>\n )}\n {!saveACHinfo && (\n <>\n <FractalCheckbox id=\"achconsent\" checked={isBankConsentChecked} onChange={(v) => {\n setIsBankConsentChecked(v)\n if (v) setErrorBankConsent('')\n }}>\n By selecting this box, I authorize SkyFi, on behalf of {paymentData?.bname || 'merchant'}, to initiate a one-time electronic ACH debit from my bank account for the total amount displayed on this screen, including any applicable processing fee. I confirm that I am authorized to use this account and that the bank account information I provided is correct.\n </FractalCheckbox>\n {errorBankConsent && <span className=\"fps-error\">{errorBankConsent}</span>}\n </>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2}\n buttonLabel={`Pay ${formatUSD(Number(bankAmount || 0).toFixed(2))} to ${merchantName}`}\n />\n </form>\n ) : (\n /* ---------- Card form ---------- */\n <form\n id={paymentData?.paymentGateway === 32 ? 'paymentForm' : 'PaymentForm'}\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on card\" htmlFor=\"cardHolderName\" error={cardError?.cardName}>\n <input\n id=\"cardHolderName\"\n className=\"fps-input\"\n maxLength={100}\n placeholder=\"John Doe\"\n value={cardData?.cardName || ''}\n onChange={(e: any) => {\n const value = e.target.value\n if (/^[a-zA-Z\\s]*$/.test(value)) handleCardChange('cardName', value)\n }}\n />\n </FractalField>\n\n <FractalField label={paymentData?.paymentGateway === 32 ? \"Card number\" : \"\"} error={cardError?.cardNumber}>\n <div className={`fps-tokenizer ${paymentData?.paymentGateway !== 32 ? 'dc-tokenizer' : ''}`}>\n {paymentData?.paymentGateway === 32 ? (\n show && isTokenizerReady && <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n surchargeEnabled={Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee}\n createSurchargeSession={createSurchargeSession}\n getSurchargeOptions={getSurchargeOptions}\n onSurchargeResult={setSurchargeResult}\n />\n ) : (\n <DataCapFields isOpen={show} tokenKey={paymentData?.dctoken} setLoader={setLoadingIframe} onError={(msg: string) => setError(msg || DcLoadingError)} />\n )}\n </div>\n </FractalField>\n\n <FractalField label=\"Zip\" htmlFor=\"zip\" error={cardError?.zipCode}>\n <input id=\"zip\" className=\"fps-input\" maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? ''} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"save_card\" checked={saveCardInfo} onChange={(v) => setSaveCardInfo(v)}>\n Save this card. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2}\n buttonLabel={isPreAuth ? `Authorize ${formatUSD(cardTotal.toFixed(2))}` : `Pay ${formatUSD(cardTotal.toFixed(2))} to ${merchantName}`}\n />\n </form>\n )}\n </section>\n </div>\n </>\n }\n </CustomModal2>\n </>\n </>\n )\n}","import React from \"react\";\n\nexport default function Chargewidgetstyles() {\n const primarycolor = \"#000\";\n const primarybgcolor = \"#fff\";\n const primarybodycolor = \"#212529\";\n const primarybordercolor = \"#dee2e6\";\n return (\n <style>\n {`\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n body\n {\n font-family: 'Inter', sans-serif !important;\n }\n input\n {\n font-family: 'Inter', sans-serif !important;\n } \n .frac-form .form-group{\n margin:0 !important\n }\n .frac-form .mb-4{\n margin-bottom : 10px !important\n }\n .frac-form .save-ach-div{\n display:flex !important;\n gap:5px !important;\n align-items:start;\n }\n .save-ach-div label{\n margin-top: -4px;\n }\n .frac-form .card-cvv-in{\n height : 36px !importantt; \n }\n\n .frac-form .pay-payment-amount{\n text-align:start !important\n }\n .frac-form .pay-amount{\n text-align:start !important\n }\n .frac-form .pay-main-logo{\n text-align:start !important\n }\n\n\n \n .paymentBtn {\n background-color: black;\n border: none;\n color: white;\n padding: 15px 32px;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n font-size: 16px;\n margin: 4px 2px;\n cursor: pointer;\n border-radius: 180px;\n /* width: auto; */\n } \n \n .main-logo {\n text-align: center;\n margin-bottom: 20px;\n }\n\n .main-logo img {\n max-width: 180px;\n }\n\n .pay-main-box {\n width: 365px !important;\n height: 93%;\n background: 0 0 #ffffff;\n border-radius: 12px;\n\n\n border: 1px solid #E0DFE2;\n margin: 0 auto;\n display: block;\n padding: 0px 26px !important\n }\n .pay-main-box .pay-header {\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n }\n \n .pay-main-box .pay-header button {\n border: 0;\n background: none;\n padding: 0;\n box-shadow: 0;\n outline: inherit;\n }\n \n .pay-main-box h1 {\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .tab {\n overflow: hidden;\n padding: 5px;\n border-radius: 8px;\n display: flex;\n justify-content: space-around;\n margin-bottom:12px\n }\n\n /* Style the buttons inside the tab */\n .tab button {\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n background:white;\n padding: 11px 16px;\n transition: 0.3s;\n font-size: 16px;\n width: 143px;\n border-radius: 5px;\n box-shadow: inherit;\n outline: none;\n color: ${primarycolor};\n }\n\n /* Change background color of buttons on hover */\n .tab button:hover {\n background-color: #f0f0f0;\n }\n\n /* Create an active/current tablink class */\n // .tab button.active {\n // background-color: #ccc;\n // }\n\n /* Style the tab content */\n \n \n .parent-pay-container{\n padding: 24px;\n }\n .pay-container{\n display: grid;\n grid-template-columns: 2fr 3fr;\n \n }\n .pay-main{\n padding-y: 20px}\n\n .request-payment-close-popup {\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n}\n .pay-conatiner-one{\n border-right: 1px solid #E0DFE2;\n }\n .pay-conatiner-one-first{\n min-height:530px\n }\n .pay-conatiner-one-last{\n display:flex;\n font-size:12px;\n gap:5px;\n max-width:250px;\n align-items:center;\n color:black !important\n }\n .pay-conatiner-one-last img{\n width : 17px;\n height:17px\n }\n .pay-conatiner-two{\n padding: 0 5% 0;\n }\n .pay-logo-container{\n border-bottom: 1px solid #E0DFE2\n }\n .pay-heading{\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .pay-main-logo > img{\n width: 50%;\n }\n .pay-main-logo-res > img{\n width: 50%;\n display : none\n }\n \n .pay-payment-amount{\n display: block;\n font-size: 12px;\n color: #727272;\n margin-bottom: 8px;\n }\n .pay-amount-conatiner{\n margin-top: 6%;\n }\n .pay-amount{\n color: #000000;\n font-size: 38px;\n display: block;\n line-height: 110%;\n letter-spacing: -1px;\n }\n .frac-form label{\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n margin-bottom: 2px !important;\n font-weight: 600 !important;\n font-size: 12px !important;\n display:block !important;\n text-align : left !important;\n text-transform: uppercase !important;\n }\n .form-control{\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: ${primarybodycolor};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: ${primarybgcolor};\n background-clip: padding-box;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n }\n .form-control:focus{\n border-color: #86b7fe;\n outline: 0;\n }\n .toggle-num-wrapper {\n position: relative;\n }\n .card-number-new{\n border-bottom: none;\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n .card-crdi {\n display: flex;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .exp-date-year-container{\n display: flex;\n flex-wrap: wrap;\n }\n .exp-date-year-container .form-group{\n flex:1;\n \n }\n\n .exp-date {\n float: left;\n // width: 30%\n }\n\n .exp-date input {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n\n .exp-year {\n float: left;\n // width: 30%\n }\n\n .exp-year input {\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n .exp-date input:focus {\n position: relative;\n z-index: 10;\n }\n\n .security-digit {\n float: right;\n // width: 40%;\n position: relative;\n }\n\n .security-digit input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right:0;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .form-control{box-sizing: border-box ;}\n #PaymentForm .form-group{\n padding:5px 0 ;\n matgin: 0 !important\n }\n\n #paymentForm .form-group{\n padding:5px 0 ;\n matgin: 0 !important\n }\n \n .toggle-label {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 24px;\n background-color: #ccc;\n border-radius: 12px;\n cursor: pointer;\n transition: background-color 0.3s;\n }\n\n .toggle-label::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: left 300ms linear;\n }\n\n .toggle-checkbox {\n display: none;\n }\n\n .toggle-checkbox:checked + .toggle-label {\n background-color: #4caf50;\n }\n\n .toggle-checkbox:checked + .toggle-label::before {\n left: 18px;\n }\n .ach-scrl {\n max-height: 380px;\n min-height: 380px;\n overflow-y: auto;\n padding-right: 6px;\n }\n .mb-4{\n margin-bottom:4px\n }\n .ach-scrl::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .ach-scrl::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n\n .error-span{\n color:red !important;\n font-size:12px !important;\n text-align: left !important;\n width: 100% !important;\n display: block;\n }\n\n .charge-customer-name{\n color: #161616;\n font-family: Inter;\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n line-height: 32px;\n letter-spacing: -0.48px;\n text-transform: capitalize;\n margin-top:0;\n margin-bottom:16px !important;\n text-align:left !important\n }\n .card-ach-heading {\n color: #727272;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.24px;\n margin : 0 0 10px !important; \n text-align : left\n}\n .card-list-div{\n max-height : 190px;\n overflow-y : auto;\n border:1px solid #E0DFE2;\n border-radius : 8px\n }\n \n \n .card-list-div::-webkit-scrollbar{\n width:2px;\n background-color:#F5F5F5\n }\n .card-list-div::-webkit-scrollbar-thumb{\n background-color:#35254D\n }\n \n .card-list-single-div{\n border-bottom: 1px solid #E0DFE2;\n padding : 8px 11px;\n display : flex ;\n align-items:center;\n justify-content : space-between;\n gap:12px\n }\n .card-list-single-div:last-child {\n border-bottom: none;\n}\n .card-lint-div-in{\n min-height:444px}\n .card-number-radio{\n display:flex;\n gap:12px;\n }\n .card-number-radio .card-number-last-four{\n color:#161616 !important;\n font-family:Inter !important;\n font-size:14px !important;\n font-weight:500 !important;\n font-style:normal !important;\n line-height : 18px !important;\n latter-spacing:-0.18px !important\n }\n .card-expiry-date{\n margin:0;\n color:#00000080;\n font-family:Inter;\n font-size:14px;\n font-weight:500;\n font-style\"normal;\n line-height : 18px;\n latter-spacing:-0.18px\n }\n .pay-with-other-card {\n margin-top : 12px;\n padding:12px 32px;\n border :1px solid #E0DFE2;\n border-radius : 1000px;\n display: flex;\n justify-content : center;\n align-items:center;\n gap:10px;\n // width:100%;\n background:white;\n cursor:pointer;\n color:#161616;\n text-align:center\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.28px;\n // margin-bottom: 50px;\n }\n .charge-payment-back-btn {\n display: flex;\n padding: 5px 10px;\n align-items: center;\n gap: 6px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n cursor:pointer;\n color:black\n}\n .res-charge-payment-back-btn{\n padding: 9px 16px;\n align-items: center;\n gap: 6px;\n margin-bottom: 20px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n curso:pointer;\n color:black;\n display:none \n }\n .btn {\n padding: 11px 23px;\n background-color: black;\n color: white;\n border: none;\n border-radius: 6px;\n font-weight: bold;\n margin: 0 10px;\n cursor: pointer;\n}\n\n.custom-swal-icon {\n margin: 20px auto;\n}\n\n.custom-swal-popup {\n font-size: 16px;\n text-align: center;\n}\n\n .frac-form .res-pay-con{\n display:none\n }\n\n .frac-cash-discount{\n border-radius: 8px;\n background: #F6F6F7;\n justify-content: space-between;\n align-items: center;\n display: flex;\n padding: 9px 14px 9px 10px;\n font-family: Inter;\n color: #161616;\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n margin: 12px 0;\n }\n.frac-cash-discount .frac-cashlabel{\n color: #727272;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n}\n\nfrac-tooltip-wrapper {\n position: absolute;\n right:0;\n}\n\n.frac-tooltip-icon {\n cursor: pointer;\n}\n.frac-tooltip-mn{\nposition:relative;\n}\n.frac-tooltip-text {\n display: none;\n position: absolute;\n top:-15px;\n right: 22px;\n background: #161616;\n color: white;\n padding: 15px;\n border-radius: 10px;\n width: 200px;\n font-size:12px;\n word-break: break-word;\n white-space: normal;\n z-index: 999;\n}\n\n.frac-tooltip-wrapper:hover .frac-tooltip-text {\n display: block;\n}\n\n.frac-tooltip-text p,.frac-tooltip-text b {\n font-size : 12px !important;\n line-height : 1.5 !important;\n margin-bottom : 10px !important;\n}\n\n@media (max-width: 768px) {\n .parent-pay-container{\n padding: 20px 5%;\n }\n .pay-container {\n grid-template-columns: 1fr;\n padding: 10px 5%;\n border:1px solid #E0DFE2;\n border-radius : 12px;\n gap:24px;\n }\n .pay-conatiner-one{\n border-right: none;\n }\n .pay-conatiner-one-first{\n min-height:0\n }\n .pay-main-logo > img{\n display: none;\n }\n .pay-main-logo-res > img {\n display:block;\n margin:auto\n }\n \n .pay-logo-container{\n border :none\n }\n // .res-charge-payment-back-btn {\n // display:flex !important\n // }\n // .charge-payment-back-btn{\n // display:none !important\n // }\n .fractal-popup-content{\n width: 90%;\n }\n // .frac-form .res-pay-con{\n // display:flex;\n // justify-content :space-between;\n // align-items:center;\n // padding-bottom : 10px\n // }\n // .frac-form .amt-pay-con{\n // display:none\n // }\n .pay-conatiner-one-last{\n display:none}\n .pay-conatiner-two{\n padding:0\n }\n \n \n }\n .amt-pay-con {\n padding-right: 24px;\n }\n @media (max-width : 512px){\n .tab button {\n padding: 6px 16px;\n }\n .amt-pay-con {\n padding-right: 0;\n }\n}\n \n \n .frac-cash-discount-fee {\n display: flex;\n padding: 11px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n border-radius: 8px;\n border: 1px solid #E0DFE2;\n background: #F6F6F7;\n margin-top: 24px;\n }\n .frac-cash-discount-fee small {\n color:#727272;\n font-size: 12px;\n font-weight: 500;\n }\n .frac-cash-discount-fee p{\n margin:0px;\n font-size: 14px;\n font-weight: 500;\n }\n .frac-card-payment-heading {\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n margin:0px;\n }\n .exp-date-year-container .form-group {\n padding: 0px !important;\n }\n .frac-heading-card-wrap {\n display: flex;\n align-items: center;\n margin-bottom:12px;\n }\n .frac-backarrow {\n margin-right: 10px;\n }\n .frac-charge-payment-back-btn-wrap , .frac-tab-2{\n display: none;\n }\n .frac-pay-conatiner-one{\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n min-height: auto;\n }\n\n .frac-partial-payment-input{\n margin-top: 12px !important; \n }\n div#cvv {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 0;\n }\n div#exp_year {\n height: 36px;\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid #dee2e6;\n }\n div#exp_month {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid #dee2e6;\n }\n\n .frac-fee-text{\n display: block;\n padding: 10px 0 4px;\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n font-size: 12px;\n line-height: 1.4;\n text-align: start !important;\n }\n .frac-fee-amount{\n color: #c62828 !important;\n }\n\n .surcharge-program-notice-text{\n margin: 10px 0 4px;\n padding: 8px 12px;\n background: #f6f6f7;\n border-radius: 8px;\n font-family: 'Inter', sans-serif;\n font-size: 12px;\n color: #727272;\n line-height: 1.5;\n }\n\n .surcharge-program-notice-text-att {\n font-weight: 700;\n color: #161616;\n }\n\n `}\n </style>\n );\n}\n","import React from 'react'\n\nexport default function SuccessMszStyle() {\n return (\n <style>\n {\n `\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n \n body{\n display: flex;\n justify-content: center;\n align-items: center;\n padding-top: 30px;\n margin: 0;\n /* background-color: #f8f9fa; */\n flex-direction: column;\n }\n .payment-msg-container{\n min-height : 550px\n }\n\n .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n .payment-success-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 18px 20px 24px;\n width: 335px;\n height: 400px; /* Fixed height */\n background: #ffffff;\n border-radius: 12px;\n position: relative;\n /* box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n border: 1px solid #e3e3e3; */\n justify-content: center;\n text-align: center;\n margin-top: 50px; /* Adjust this to move the content down */\n }\n\n .success-icon {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n width: 227px;\n height: 116px;\n z-index: 2;\n }\n\n .circle {\n width: 40px;\n height: 40px;\n border: 1px solid #49b182;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .circle .fa-check-circle {\n font-size: 20px;\n color: #49b182;\n }\n\n .success-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n width: 227px;\n }\n\n .payment-success-text {\n font-family: \"Inter\", sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .thank-you-text {\n font-family: \"Inter\", sans-serif;\n font-weight: 500;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n opacity: 0.5;\n }\n\n .charge-payment-success-tick-div {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 32px;\n }\n .charge-payment-success-tick {\n border-radius: 1000px;\n background: rgba(97, 198, 153, 0.14);\n display: flex;\n width: 60px;\n height: 60px;\n justify-content: center;\n align-items: center;\n }\n .charge-payment-success-text {\n color: #161616;\n text-align: center;\n font-family: Inter;\n font-size: 32px;\n font-style: normal;\n font-weight: 500;\n line-height: 36px;\n letter-spacing: -0.64px;\n margin-top: 20px;\n margin-bottom: 5px !important;\n }\n .charge-payment-success-container {\n display: flex;\n padding: 120px 48px 32px 48px;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n .charge-payment-success-subtext {\n color: #727272;\n text-align: center;\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px; /* 128.571% */\n letter-spacing: -0.28px;\n margin:14px 0 !important\n\n }\n .charge-success-payment-button-div {\n display: flex;\n gap: 10px;\n align-items: baseline;\n }\n .charge-success-btn1 {\n display: flex;\n padding: 9px 16px;\n align-items: center;\n gap: 6px;\n border-radius: 1000px;\n border: 1px solid #e0dfe2;\n background: #fff;\n color: #161616;\n }\n\n .charge-payment-success-btn-div {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 8px;\n }\n\n .charge-payment-success-btn1 {\n cursor: pointer;\n border-radius: 80px;\n border: 1px solid #e0dfe2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #fff;\n }\n\n .charge-payment-success-btn2 {\n border-radius: 80px;\n cursor: pointer;\n border: 1px solid #e0dfe2;\n display: flex;\n padding: 12px 32px;\n justify-content: center;\n align-items: center;\n gap: 6px;\n background-color: #161616;\n color: #fff;\n } \n \n \n #receipt-debit-note {\n font-family: 'Inter', sans-serif;\n font-size: 11px;\n color: #49B182;\n margin-top: 2px;\n }\n\n `\n }\n </style>\n )\n}\n","\nexport function HandleSubmit(event: React.FormEvent, key: string, tranId: string): void {\n event.preventDefault();\n\n const status = key === 'close';\n\n const message = {\n type: 'preview.compiledcheck',\n other: {\n msg: 'Payment success!',\n status,\n data: {\n tran_id: tranId,\n key,\n },\n },\n };\n\n console.log('message:', message);\n window.parent.postMessage(message, '*');\n}\n","import React from 'react'\nimport SuccessMszStyle from './SuccessMszStyle'\nimport { HandleSubmit } from './HandleSubmit'\n\n\ninterface SuccessMszProps {\n onClose: () => void;\n tranId: string;\n isDebitAdjusted?: boolean;\n}\nexport default function SuccessMsz({ onClose, tranId, isDebitAdjusted = false }: SuccessMszProps) {\n\n\n return (\n <>\n <SuccessMszStyle />\n <div className='payment-msg-container'>\n\n <div className=\"charge-payment-success-container\">\n <div className=\"charge-payment-success-tick-div\">\n <div className=\"charge-payment-success-tick\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M6.12669 13.9774C5.97396 14.131 5.76558 14.2167 5.54913 14.2167C5.33267 14.2167 5.1243 14.131 4.97157 13.9774L0.359012 9.36408C-0.119671 8.8854 -0.119671 8.10919 0.359012 7.6314L0.936573 7.05369C1.4154 6.57501 2.19072 6.57501 2.6694 7.05369L5.54913 9.93357L13.3306 2.15198C13.8094 1.6733 14.5855 1.6733 15.0634 2.15198L15.641 2.72969C16.1196 3.20837 16.1196 3.98444 15.641 4.46237L6.12669 13.9774Z\"\n fill=\"#61C699\"\n />\n </svg>\n </div>\n </div>\n <h6 className=\"charge-payment-success-text\">\n Your charge<br />\n was successful\n </h6>\n <h6 className=\"charge-payment-success-subtext\">We’ve processed your charge\n {isDebitAdjusted &&\n <>\n <br/>\n <span\n id=\"receipt-debit-note\"\n className='charge-payment-success-subtext'\n >\n No surcharge — debit card\n </span>\n </>\n }\n </h6>\n <div className=\"charge-success-payment-button-div\">\n <button className=\"charge-success-btn1\" onClick={(e) => HandleSubmit(e, 'print', tranId)} >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n >\n <path\n d=\"M15.7729 8.7272C15.58 8.7272 15.395 8.80383 15.2586 8.94022C15.1222 9.07661 15.0456 9.2616 15.0456 9.45448V12.5185C15.045 13.0559 14.8313 13.5711 14.4513 13.9511C14.0713 14.3311 13.5561 14.5449 13.0187 14.5454H3.98149C3.44409 14.5449 2.92887 14.3311 2.54887 13.9511C2.16887 13.5711 1.95514 13.0559 1.95456 12.5185V9.45448C1.95456 9.2616 1.87794 9.07661 1.74154 8.94022C1.60515 8.80383 1.42017 8.7272 1.22728 8.7272C1.03439 8.7272 0.849407 8.80383 0.713015 8.94022C0.576624 9.07661 0.5 9.2616 0.5 9.45448V12.5185C0.500963 13.4416 0.86807 14.3265 1.52077 14.9792C2.17346 15.6319 3.05844 15.999 3.98149 16H13.0187C13.9417 15.999 14.8267 15.6319 15.4794 14.9792C16.1321 14.3265 16.4992 13.4416 16.5002 12.5185V9.45448C16.5002 9.2616 16.4235 9.07661 16.2871 8.94022C16.1507 8.80383 15.9658 8.7272 15.7729 8.7272Z\"\n fill=\"#161616\"\n />\n <path\n d=\"M4.65059 6.75861L7.7728 9.88082V0.72728C7.7728 0.534394 7.84942 0.349407 7.98581 0.213015C8.1222 0.0766239 8.30719 0 8.50008 0C8.69296 0 8.87795 0.0766239 9.01434 0.213015C9.15073 0.349407 9.22736 0.534394 9.22736 0.72728V9.88082L12.3496 6.75861C12.4867 6.62613 12.6704 6.55283 12.8611 6.55448C13.0518 6.55614 13.2342 6.63263 13.3691 6.76747C13.5039 6.90231 13.5804 7.08472 13.5821 7.27541C13.5837 7.46611 13.5104 7.64982 13.3779 7.78698L9.01427 12.1507C8.87788 12.287 8.69293 12.3636 8.50008 12.3636C8.30723 12.3636 8.12228 12.287 7.98589 12.1507L3.62221 7.78698C3.48973 7.64982 3.41643 7.46611 3.41808 7.27541C3.41974 7.08472 3.49623 6.90231 3.63107 6.76747C3.76592 6.63263 3.94833 6.55614 4.13902 6.55448C4.32971 6.55283 4.51342 6.62613 4.65059 6.75861Z\"\n fill=\"#161616\"\n />\n </svg>\n Print receipt\n </button>\n <button className=\"charge-success-btn1\" onClick={(e) => HandleSubmit(e, 'share', tranId)}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n >\n <g clipPath=\"url(#clip0_12420_50683)\">\n <path\n d=\"M9.30194 4.78664V2.31152C9.30194 2.09629 9.3862 1.88988 9.53631 1.73768C9.68634 1.5855 9.8899 1.5 10.1021 1.5C10.312 1.50089 10.5132 1.58542 10.6622 1.73534L16.2633 7.41595C16.3383 7.49142 16.3978 7.58117 16.4385 7.68001C16.4791 7.77894 16.5 7.885 16.5 7.99212C16.5 8.09924 16.4791 8.20531 16.4385 8.30423C16.3978 8.40307 16.3383 8.49283 16.2633 8.5683L10.6622 14.2489C10.5499 14.3606 10.4076 14.4362 10.2531 14.4663C10.0987 14.4964 9.93887 14.4797 9.79372 14.4182C9.64857 14.3568 9.52455 14.2532 9.43701 14.1206C9.34955 13.9881 9.30258 13.8323 9.30194 13.6727V11.157H8.62181C7.35764 11.1379 6.10443 11.3981 4.94932 11.9193C3.79422 12.4406 2.76481 13.2107 1.93249 14.1759C1.83215 14.3113 1.6926 14.4115 1.53337 14.4624C1.37406 14.5134 1.20306 14.5125 1.04431 14.4599C0.882759 14.4046 0.742811 14.2984 0.644952 14.1568C0.547092 14.0152 0.496363 13.8456 0.500203 13.6727C0.500203 6.27171 6.96548 5.00575 9.30194 4.78664ZM8.62181 9.51777C9.15695 9.51607 9.69162 9.55129 10.2221 9.62327C10.4115 9.6524 10.5844 9.74954 10.7092 9.89699C10.834 10.0444 10.9025 10.2324 10.9023 10.4267V11.717L14.567 7.99212L10.9023 4.26727V5.55758C10.9023 5.77281 10.8179 5.97922 10.6679 6.13141C10.5178 6.28359 10.3143 6.36909 10.1021 6.36909C9.37396 6.36909 3.61282 6.5314 2.36457 11.5871C4.17637 10.2324 6.3708 9.50665 8.62181 9.51777Z\"\n fill=\"#161616\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_12420_50683\">\n <rect\n width=\"16\"\n height=\"16\"\n fill=\"white\"\n transform=\"translate(0.5)\"\n />\n </clipPath>\n </defs>\n </svg>\n Send receipt\n </button>\n </div>\n </div>\n <div className=\"charge-payment-success-btn-div\">\n <button className=\"charge-payment-success-btn1\" onClick={(e) => HandleSubmit(e, 'tran', tranId)}>Go to Transactions</button>\n <button className=\"charge-payment-success-btn2\" onClick={(e) => {\n onClose()\n HandleSubmit(e, 'close', tranId)\n }}>Close</button>\n </div>\n </div>\n </>\n )\n}\n","\n// 'use client'\n// import Script from 'next/script';\n// import { useEffect } from 'react';\n\n// // Add a declaration for the DatacapWebToken to avoid TypeScript errors\n// declare global {\n// interface Window {\n// DatacapWebToken: any; // You can replace 'any' with a more specific type if you know the shape of DatacapWebToken\n// }\n// }\n\n// export default function DataScript() {\n// const src = \"https://token-cert.dcap.com/v1/client\";\n// useEffect(() => {\n// console.log(\"datacap useeffect called\");\n \n// if (!document.querySelector(`script[src=\"${src}\"]`)) {\n// console.log(\"datacap useeffect called an if section called\");\n\n// alert(\"in data\")\n// const script = document.createElement(\"script\");\n// script.src = src;\n// script.onload = () => console.log(\"Script loaded\");\n// script.onerror = (e) => console.error(\"Failed to load script\", e);\n// document.head.appendChild(script);\n// }\n// }, []);\n// return (\n// <>\n// hi</>\n// )\n\n// }\n\n'use client';\n\nimport { useEffect } from 'react';\nimport { datacapUrl } from './baseurl';\n\n// Add a declaration for the DatacapWebToken\ndeclare global {\n interface Window {\n DatacapWebToken: any;\n }\n \n\n interface Window {\n forge: any;\n }\n}\n\nexport default function DataScript() {\n useEffect(() => {\n const src = datacapUrl;\n\n if (typeof window === 'undefined') return;\n\n if (window.DatacapWebToken) {\n // console.log('✅ Datacap already available');\n return;\n }\n\n if (!document.querySelector(`script[src=\"${src}\"]`)) {\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n script.onload = () => {\n // console.log('✅ Datacap script loaded');\n\n if (window.DatacapWebToken) {\n // console.log('✅ DatacapWebToken is ready:', window.DatacapWebToken);\n } else {\n console.warn('⚠️ Script loaded, but DatacapWebToken not found');\n }\n };\n\n script.onerror = (err) => {\n console.error('❌ Failed to load Datacap script', err);\n };\n\n document.head.appendChild(script);\n } else {\n // console.log('ℹ️ Script already in DOM, waiting for Datacap...');\n }\n }, []);\n\nuseEffect(() => {\n const scriptId = 'forge-cdn-script';\n\n // Avoid re-injecting the script\n if (!document.getElementById(scriptId)) {\n const forgeScript = document.createElement('script');\n forgeScript.src = 'https://cdn.jsdelivr.net/npm/node-forge@1.0.0/dist/forge.min.js';\n forgeScript.id = scriptId;\n forgeScript.async = true;\n document.head.appendChild(forgeScript);\n }\n\n // Optional cleanup\n return () => {\n const existingScript = document.getElementById(scriptId);\n if (existingScript) {\n document.head.removeChild(existingScript);\n }\n };\n}, []);\n\n return null; // ⚠️ No need to return <Script />, it's handled manually\n}\n","import React from 'react'\n\nexport default function ErrorCardMszStyle() {\n return (\n <style>\n {\n `\n .card-error .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .card-error .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n .card-error .payment-error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 18px 20px 24px;\n // width: 335px;\n min-height: 250px; /* Fixed height */\n background: #FFFFFF;\n border-radius: 12px;\n position: relative;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n border: 1px solid #e3e3e3;\n justify-content: center;\n text-align: center;\n // margin-top: 50px; /* Adjust this to move the content down */\n margin: 50px auto 0 auto !important;\n }\n\n .card-error .error-icon {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n min-height: 116px;\n z-index: 2;\n }\n\n .card-error .circle {\n width: 50px;\n height: 50px;\n border: 1px solid red;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom:20px\n }\n\n .card-error .circle .fa-times {\n font-size: 30px;\n color: red;\n }\n\n .card-error .error-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n // width: 227px;\n }\n\n .card-error .payment-error-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .card-error .thank-you-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 16px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616 !important;\n opacity: 0.5;\n padding-top:10px\n }\n\n .card-error .error-btn-div{\n padding-top:30px;\n \n }\n .card-error .error-btn-div button{\n border-radius: 0.25em;\n border:none;\n background: initial;\n background-color: #7066e0;\n box-shadow: var(--swal2-confirm-button-box-shadow);\n color: white;\n font-size: 1em;\n padding:10px 17px;\n cursor:pointer;\n }\n `\n }\n </style>\n )}","// import React from 'react'\n// import ErrorCardMszStyle from './ErrorCardMessageStyle';\n// // import SuccessCardMszStyle from './SuccessCardMszStyle'\n\n// type ErrorCardMessage = {\n// onClose: () => void;\n// error : string\n// };\n// const ErrorCardMessage: React.FC<ErrorCardMessage> = ({ onClose , error }) => {\n// return (\n// <>\n// <ErrorCardMszStyle/>\n// <div className='card-error'>\n \n// <div className=\"payment-error-container\">\n// <div className=\"error-icon\">\n// <div className=\"circle\">\n// {/* <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i> */}\n// {/* <i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\"></i> */}\n// <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n// </div>\n// <div className=\"error-text\">\n// <div className=\"payment-error-text\">{error}</div>\n// <div className=\"thank-you-text\">Try again later </div>\n// </div>\n \n// <div className=\"error-btn-div\">\n// <button onClick={onClose}>OK</button>\n// </div>\n// </div>\n// </div>\n// </div>\n// </>\n \n// )\n// }\n// export default ErrorCardMessage\n\n\nimport React from 'react'\nimport ErrorCardMszStyle from './ErrorCardMessageStyle';\n// import SuccessCardMszStyle from './SuccessCardMszStyle'\n\ntype ErrorCardMessage = {\n onClose: () => void;\n error: string;\n autoTrigger?: boolean;\n};\nconst ErrorCardMessage: React.FC<ErrorCardMessage> = ({ onClose, error, autoTrigger = false }) => {\n return (\n <>\n <ErrorCardMszStyle />\n <div className='card-error'>\n\n <div className=\"payment-error-container\">\n <div className=\"error-icon\">\n <div className=\"circle\">\n {/* <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i> */}\n {/* <i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\"></i> */}\n <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n </div>\n <div className=\"error-text\">\n <div className=\"payment-error-text\">{error}</div>\n <div className=\"thank-you-text\">Try again later </div>\n </div>\n\n {\n !autoTrigger && (\n <div className=\"error-btn-div\">\n <button onClick={onClose}>OK</button>\n </div>\n )\n }\n </div>\n </div>\n </div>\n </>\n\n )\n}\nexport default ErrorCardMessage","// socketClient.js\nimport { io } from 'socket.io-client';\nimport { baseUrl } from './baseurl';\n\nconst socket = io(baseUrl, {\n transports: ['websocket'], // Optional: force WebSocket\n withCredentials: false,\n});\n\nexport default socket;\n","import React from 'react'\n\ntype Props = {}\n\nexport default function CardBankRadioStyles({ }: Props) {\n return (\n <style>\n {\n `\n .frac-card-bank-radio-main{\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n align-self: stretch;\n border-radius: 14px;\n border: 1px solid #E0DFE2;\n overflow: hidden;\n }\n\n .frac-card-bank-radio{\n display: flex;\n padding: 12px 16px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n position: relative;\n }\n \n input[type=\"radio\"] {\n accent-color: #000;\n }\n\n .frac-card-title-main{\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .frac-card-label{\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n }\n\n .frac-card-label-text{\n color: #727272;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.24px;\n }\n\n .frac-card-label-amount{\n color: #161616;\n text-align: center;\n font-family: Inter;\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n line-height: 140%;\n letter-spacing: -0.32px;\n }\n\n .frac-payment-type-logo{\n width: 24px;\n height: 24px;\n aspect-ratio: 1/1;\n }\n\n .frac-card-bank-radio-main .frac-card-bank-radio:nth-child(2) {\n border-top: 1px solid #E0DFE2;\n }\n\n .frac-card-bank-radio-main .frac-card-bank-radio:nth-child(3) {\n border-top: 1px solid #E0DFE2;\n }\n\n .frac-card-bank-radio.frac-active {\n background: #F6F6F7;\n }\n\n .frac-saving-badge {\n padding: 1px 7px !important;\n border: 1px solid #9ad7ab;\n border-radius: 999px;\n background: #e8f8ec;\n color: #1e6a34;\n font-size: 10px;\n font-weight: 600;\n line-height: 15px;\n pointer-events: none;\n }\n\n .frac-saving-badge-corner {\n position: absolute;\n top: 8px;\n right: 10px;\n }\n\n .frac-saving-badge-with-radio {\n right: 34px;\n }\n `\n \n }\n </style>\n )\n}","// 'use client';\n\n// import { useEffect } from 'react';\n// import { fractalGatewayUrl } from './baseurl';\n\n// export default function FractalTokenizerScript() {\n// useEffect(() => {\n// const src = `${fractalGatewayUrl}tokenizer/static/js/fractal_tokenizer.js`;\n\n// if (document.querySelector(`script[src=\"${src}\"]`)) return;\n\n// const script = document.createElement('script');\n// script.src = src;\n// script.async = true;\n\n// script.onload = () => {\n// try {\n// // Grab class from global scope\n// // eslint-disable-next-line no-eval\n// const TokenizerClass = eval('FractalTokenizer');\n\n// if (TokenizerClass) {\n// (window as any).FractalTokenizer = TokenizerClass;\n// }\n// } catch (err) {\n// console.error('FractalTokenizer not accessible:', err);\n// }\n// };\n\n// document.head.appendChild(script);\n// }, []);\n\n// return null;\n// }\n\n\n'use client';\n\nimport { useEffect } from 'react';\nimport { fractalGatewayUrl } from './baseurl';\n\nexport default function FractalTokenizerScript({ onLoad }: { onLoad?: () => void }) {\n useEffect(() => {\n const src = `${fractalGatewayUrl}tokenizer/static/js/fractal_tokenizer.js`;\n\n // If already available → trigger immediately\n if ((window as any).FractalTokenizer) {\n onLoad?.();\n return;\n }\n\n // Prevent duplicate script injection\n const existing = document.querySelector(`script[src=\"${src}\"]`) as HTMLScriptElement;\n\n if (existing) {\n existing.addEventListener('load', () => onLoad?.());\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n script.onload = () => {\n try {\n if (typeof FractalTokenizer !== \"undefined\") {\n (window as any).FractalTokenizer = FractalTokenizer;\n onLoad?.();\n } else {\n console.error(\"FractalTokenizer not defined in global scope\");\n }\n } catch (err) {\n console.error(err);\n }\n };\n\n document.head.appendChild(script);\n }, []);\n\n return null;\n}","'use client'\nimport { useEffect, useRef } from \"react\";\n\n/** Backend-minted tokenizer session — the shape both createToken and lookupSurcharge consume. */\nexport interface TokenizerSession {\n session_key: string;\n public_key_pem: string;\n}\n\n/** Inputs for a surcharge lookup. `amount` is in the smallest currency unit (cents). */\nexport interface SurchargeLookupOptions {\n amount: number;\n /** Reserved for the tokenizer's Phase-2 state-based rules; omit if unavailable. */\n merchant_location_zip?: string;\n cardholder_billing_zip?: string;\n}\n\n/** Surcharge assessment from the tokenizer's onSurchargeLookup callback. */\nexport interface SurchargeLookupResult {\n card_brand?: string;\n card_issue_type?: string;\n surcharge_allowed?: boolean;\n max_surcharge_percent?: number;\n max_surcharge_amount?: number;\n}\n\ninterface Props {\n fractalStyles: any;\n tokenizerRef: React.MutableRefObject<any>;\n isAddCard?: boolean;\n isSky?: boolean;\n /**\n * Opts this instance into surcharge lookups. Safe to enable after mount (e.g. once the\n * merchant's surcharge-program flag resolves): if the PAN is already complete, the lookup\n * runs immediately via the tokenizer's isSurchargeLookupReady().\n */\n surchargeEnabled?: boolean;\n /** Mints a tokenized session via the Fractal backend. Resolve null to abort the lookup. */\n createSurchargeSession?: () => Promise<TokenizerSession | null>;\n /** Latest lookup inputs, read lazily at lookup time (avoids stale-closure amounts/ZIPs). */\n getSurchargeOptions?: () => SurchargeLookupOptions;\n /** Surcharge assessment, or null when the cardholder edits the PAN (prior result invalid). */\n onSurchargeResult?: (result: SurchargeLookupResult | null) => void;\n}\n\nconst FractalFields = ({\n fractalStyles,\n tokenizerRef,\n isAddCard = false,\n isSky = false,\n surchargeEnabled = false,\n createSurchargeSession,\n getSurchargeOptions,\n onSurchargeResult,\n}: Props) => {\n const instanceRef = useRef<any>(null);\n\n // The tokenizer's surcharge callbacks are registered once at mount but must always\n // see the latest props, so we mirror them into refs that update every render.\n const runLookupRef = useRef<(() => void) | null>(null);\n const surchargeEnabledRef = useRef(surchargeEnabled);\n const createSessionRef = useRef(createSurchargeSession);\n const getOptionsRef = useRef(getSurchargeOptions);\n const onResultRef = useRef(onSurchargeResult);\n surchargeEnabledRef.current = surchargeEnabled;\n createSessionRef.current = createSurchargeSession;\n getOptionsRef.current = getSurchargeOptions;\n onResultRef.current = onSurchargeResult;\n\n useEffect(() => {\n if (!(window as any).FractalTokenizer) return;\n\n const instance = new (window as any).FractalTokenizer({\n styles: fractalStyles,\n });\n\n instanceRef.current = instance;\n tokenizerRef.current = instance;\n\n instance.mountField(\"card_number\", \"card_number\");\n instance.mountField(\"exp_month\", \"exp_month\");\n instance.mountField(\"exp_year\", \"exp_year\");\n instance.mountField(\"cvv\", \"cvv\");\n\n console.log(\"Fractal fields mounted\");\n\n // --- Surcharge lookup -----------------------------------------------------------------\n // The tokenizer iframe fires onSurchargeLookupReady the moment a complete, valid PAN is\n // entered; we respond by minting a session and running the lookup, then surface the\n // assessment via onSurchargeResult (null when the cardholder edits the PAN). No-op unless\n // the parent opts in with surchargeEnabled + the callbacks.\n //\n // Caveat: readiness is driven by the iframe's own `input` event, so a PAN placed by\n // browser autofill (which may not dispatch `input` cross-origin) won't trigger a lookup.\n // The backend still applies the debit adjustment at charge time, so this only affects the\n // pre-charge preview — never what's actually charged.\n const runLookup = async () => {\n if (!surchargeEnabledRef.current) return;\n try {\n const session = await createSessionRef.current?.();\n if (!session) return;\n instance.lookupSurcharge?.(session, getOptionsRef.current?.() ?? {});\n } catch (err) {\n console.error(\"Surcharge lookup failed\", err);\n }\n };\n runLookupRef.current = runLookup;\n\n instance.onSurchargeLookupReady?.(() => runLookup());\n instance.onSurchargeLookup?.((result: SurchargeLookupResult | null) => onResultRef.current?.(result));\n\n return () => {\n try {\n instance.destroy?.();\n } catch (err) { }\n\n tokenizerRef.current = null;\n };\n }, []);\n\n // Covers surcharging being enabled mid-transaction: if the PAN was already\n // complete before the program flag resolved, the ready callback has already\n // fired, so kick off the lookup now.\n useEffect(() => {\n const instance = instanceRef.current;\n if (surchargeEnabled && instance?.isSurchargeLookupReady?.()) {\n runLookupRef.current?.();\n }\n }, [surchargeEnabled]);\n\n return (\n <>\n {\n isAddCard ? (\n <>\n <div\n id=\"card_number\"\n className=\"form-control card-number-new\"\n style={{ height: \"46px\", display: 'inline-block' }}\n />\n <div className=\"card-dtl\">\n <div className=\"exp-cvc-container exp-cvc-container-wrap\" style={{ margin: 0 }}>\n <div className=\"form-group\" style={{ marginTop: 0 }}>\n <label htmlFor=\"expMonth\">MM</label>\n <div\n id=\"exp_month\"\n className=\"form-control required card-cvv-in\"\n\n />\n </div>\n\n <div className=\"form-group\" style={{ marginTop: 0 }}>\n <label htmlFor=\"expYear\">YY</label>\n <div\n id=\"exp_year\"\n className=\"form-control required card-cvv-in\"\n\n />\n </div>\n\n <div className=\"form-group\" style={{ marginTop: 0 }}>\n <label htmlFor=\"cvc\">CVC</label>\n <div\n id=\"cvv\"\n className=\"form-control card-cvv-in required\"\n\n />\n </div>\n </div>\n </div>\n </>) : (\n <>\n\n <div\n id=\"card_number\"\n className=\"form-control card-number-new\"\n style={{ height: `${isSky ? \"36px\" : \"46px\"}` }}\n />\n\n <div className=\"card-crdi card-expiry-new\">\n <div className=\"exp-date-year-container\">\n <div className=\"exp-date form-group input-main-wrap-frac\">\n <div\n id=\"exp_month\"\n className=\"form-control required card-cvv-in\"\n style={{ height: \"46px\", display: 'block', minHeight: \"46px\" }}\n />\n </div>\n\n <div className=\"exp-year form-group input-main-wrap-frac\">\n <div\n id=\"exp_year\"\n className=\"form-control required card-cvv-in\"\n style={{ height: \"46px\", display: 'block', minHeight: \"46px\" }}\n />\n </div>\n\n <div className=\"security-digit form-group input-main-wrap-frac\">\n <div\n id=\"cvv\"\n className=\"form-control card-cvv-in required\"\n style={{ height: \"46px\", display: 'block', minHeight: \"46px\" }}\n />\n </div>\n </div>\n </div>\n </>\n )\n }\n </>\n );\n};\n\nexport default FractalFields;\n","// import { useEffect } from \"react\";\n// import { datacapUrl } from \"../baseurl\";\n\n// let scriptLoaded = false;\n\n// export const DataCapScriptLoader = () => {\n// useEffect(() => {\n// // console.log(\"🔵 DataCapScriptLoader mounted\");\n// // console.log(\"🔵 scriptLoaded flag:\", scriptLoaded);\n\n// if (scriptLoaded) {\n// // console.log(\"🟡 Script already marked as loaded. Skipping injection.\");\n// return;\n// }\n\n// const existingScript = document.querySelector(\n// `script[src=\"${datacapUrl}/hosted\"]`\n// );\n\n// console.log(\"🔵 existingScript found:\", !!existingScript);\n\n// if (!existingScript) {\n// // console.log(\"🟢 Injecting DataCap hosted script...\");\n\n// const script = document.createElement(\"script\");\n// script.src = `${datacapUrl}/hosted`;\n// script.async = true;\n\n// script.onload = () => {\n// console.log(\"✅ DataCap script loaded successfully\");\n// scriptLoaded = true;\n// // console.log(\"🔵 scriptLoaded flag updated to:\", scriptLoaded);\n// // console.log(\"🔵 window.dcap:\", (window as any).DatacapHostedWebToken);\n// };\n\n// script.onerror = (err) => {\n// console.error(\"❌ DataCap script failed to load\", err);\n// };\n\n// document.head.appendChild(script);\n// } else {\n// // console.log(\"🟡 Script already exists in DOM.\");\n// scriptLoaded = true;\n// // console.log(\"🔵 scriptLoaded flag updated to:\", scriptLoaded);\n// // console.log(\"🔵 window.dcap:\", (window as any).dcap);\n// }\n// }, []);\n\n// return null;\n// };\n\n\n'use client';\n\nimport { useEffect } from 'react';\nimport { datacapUrl } from '../baseurl';\n\ndeclare global {\n interface Window {\n DatacapHostedWebToken?: any;\n __DATACAP_SCRIPT_LOADING__?: boolean;\n __DATACAP_SCRIPT_LOADED__?: boolean;\n }\n}\n\nexport const DataCapScriptLoader = ({\n onReady,\n onError,\n}: {\n onReady?: () => void;\n onError?: (err: any) => void;\n}) => {\n useEffect(() => {\n const src = `${datacapUrl}/hosted`;\n\n // Already loaded\n if (\n window.__DATACAP_SCRIPT_LOADED__ &&\n window.DatacapHostedWebToken\n ) {\n onReady?.();\n return;\n }\n\n // Already loading\n if (window.__DATACAP_SCRIPT_LOADING__) {\n const interval = setInterval(() => {\n if (window.DatacapHostedWebToken) {\n clearInterval(interval);\n onReady?.();\n }\n }, 100);\n\n return () => clearInterval(interval);\n }\n\n window.__DATACAP_SCRIPT_LOADING__ = true;\n\n const existingScript = document.querySelector(\n `script[src=\"${src}\"]`\n ) as HTMLScriptElement | null;\n\n if (existingScript) {\n waitForSDK();\n return;\n }\n\n const script = document.createElement('script');\n\n script.src = src;\n script.async = true;\n\n script.onload = () => {\n waitForSDK();\n };\n\n script.onerror = (err) => {\n console.error('Datacap script failed');\n\n window.__DATACAP_SCRIPT_LOADING__ = false;\n\n onError?.(err);\n };\n\n document.head.appendChild(script);\n\n function waitForSDK() {\n let attempts = 0;\n\n const interval = setInterval(() => {\n attempts++;\n\n if (window.DatacapHostedWebToken) {\n clearInterval(interval);\n\n window.__DATACAP_SCRIPT_LOADING__ = false;\n window.__DATACAP_SCRIPT_LOADED__ = true;\n\n console.log('✅ Datacap SDK Ready');\n\n onReady?.();\n }\n\n if (attempts > 100) {\n clearInterval(interval);\n\n window.__DATACAP_SCRIPT_LOADING__ = false;\n\n onError?.('SDK bootstrap timeout');\n }\n }, 100);\n }\n }, []);\n\n return null;\n};","'use client'\n// import React, { useEffect, useRef } from \"react\";\n\n// const customCSS = `\n// body { \n// margin: 0; \n// font-family: 'IBM Plex Mono', monospace !important; \n// }\n\n// .card-data {\n// display: flex;\n// flex-direction: column;\n// gap: 12px;\n// padding: 6px;\n// }\n\n// input {\n// height: 40px !important;\n// width: 100% !important;\n// border: 1px solid #d1d5db !important;\n// border-radius: 8px !important;\n// padding: 10px !important;\n// font-size: 14px !important;\n// }\n\n// input:focus {\n// border-color: #2563eb !important;\n// outline: none !important;\n// }\n// `;\n\n// export const DataCapFields = ({ isOpen, tokenKey }: any) => {\n// const iframeId = \"datacap-iframe\";\n// const resolverRef = useRef<any>(null);\n\n// useEffect(() => {\n// if (!isOpen || !tokenKey) return;\n\n// const initialize = async () => {\n// // 1️⃣ Wait until SDK is ready\n// const waitForSDK = () =>\n// new Promise<void>((resolve) => {\n// const interval = setInterval(() => {\n// if ((window as any).DatacapHostedWebToken) {\n// clearInterval(interval);\n// resolve();\n// }\n// }, 100);\n// });\n\n// await waitForSDK();\n\n// // 2️⃣ Wait until iframe exists in DOM\n// const waitForIframe = () =>\n// new Promise<void>((resolve) => {\n// const interval = setInterval(() => {\n// const iframe = document.getElementById(iframeId);\n// if (iframe) {\n// clearInterval(interval);\n// resolve();\n// }\n// }, 100);\n// });\n\n// await waitForIframe();\n\n// console.log(\"🟢 Iframe found. Initializing Datacap...\");\n\n// const sdk = (window as any).DatacapHostedWebToken;\n\n// sdk.init(\n// tokenKey,\n// iframeId,\n// (response: any) => {\n\n// if (!resolverRef.current) return;\n\n// if (response?.Error || response?.Errors) {\n// console.log(\"📦 Datacap response:\", response);\n// resolverRef.current.reject(response.Error || response.Errors);\n// } else {\n// resolverRef.current.resolve(response);\n// }\n\n// resolverRef.current = null;\n// },\n// customCSS\n// );\n// };\n\n// initialize();\n// }, [isOpen, tokenKey]);\n\n// // Promise-based request\n// (window as any).requestDcToken = () => {\n// return new Promise((resolve, reject) => {\n// resolverRef.current = { resolve, reject };\n// (window as any).DatacapHostedWebToken.requestToken();\n// });\n// };\n\n// return (\n// <iframe\n// id={iframeId}\n// style={{ width: \"100%\", height: \"300px\", border: \"none\" }}\n// />\n// );\n// };\n\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nconst baseCSS = `\n body { \n margin: 0; \n font-family: 'IBM Plex Mono', monospace !important; \n }\n\n \n\n input {\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n margin-bottom: 10px;\n box-sizing: border-box;\n }\n\n input:focus {\n border-color: #2563eb !important;\n outline: none !important;\n }\n select {\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n\n transition: border-color .15s ease-in-out,\n box-shadow .15s ease-in-out;\n margin-bottom: 10px;\n}\n select:focus {\n border-color: #2563eb !important;\n outline: none !important;\n }\n label {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 12px !important;\n letter-spacing: 1.1px !important;\n color: #867c94 !important;\n font-weight: 500 !important;\n line-height: normal;\n margin: 0 0 2px 0 !important;\n text-align: start !important;\n display: block !important;\n text-transform: uppercase !important;\n}\n input.card-data.card-data-cvv{\n margin-bottom: 0px;\n }\n\n right-col{\n width : 10px !important;\n }\n\n `;\n\nexport const DataCapFields = ({\n isOpen,\n tokenKey,\n setLoader,\n isAddCard,\n isEmbedded,\n customCSS: extraCss,\n height,\n onError\n}: any) => {\n const iframeId = \"datacap-iframe\";\n const resolverRef = useRef<any>(null);\n const [iframeReady, setIframeReady] = useState(false);\n const [mountKey, setMountKey] = useState(0);\n const initGenRef = useRef(0);\n const initTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n let customCSS = baseCSS;\n useEffect(() => {\n if (!isOpen || !tokenKey) return;\n if (isAddCard) {\n customCSS += `\n label {\n display: block !important;\n text-align: left !important;\n font-weight: 400 !important;\n text-transform: uppercase;\n color: #35254D !important;\n margin-bottom: 6px;\n}\n input::placeholder {\n font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;\n color: #9ca3af !important;\n font-weight: 400 !important; \n font-size: 14px !important;\n}\n \n `\n }\n\n if (isEmbedded) {\n customCSS += `\n \n input {\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1;\n }\n \n select {\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1);\n }\n `\n }\n\n if (extraCss) {\n customCSS += extraCss\n }\n\n // console.log(customCSS, \"customCSS1555\");\n\n\n // console.log(customCSS,\"customcss\");\n\n\n // Each open cycle gets its own generation id and a brand-new <iframe>\n // DOM node (via the key bump below). Datacap's hosted-fields SDK does\n // not reliably reinitialize against an iframe it already initialized\n // once (e.g. after the modal is closed and reopened) — reusing the same\n // node leaves the form stuck \"loading\" forever. A fresh node forces the\n // SDK to treat every open as the first one.\n const myGen = ++initGenRef.current;\n setMountKey(myGen);\n\n const initialize = async () => {\n setLoader?.(true);\n setIframeReady(false);\n\n const waitForSDK = () =>\n new Promise<void>((resolve, reject) => {\n let attempts = 0;\n\n const interval = setInterval(() => {\n attempts++;\n\n if ((window as any).DatacapHostedWebToken) {\n clearInterval(interval);\n\n console.log(\"✅ Datacap SDK Ready\");\n\n resolve();\n }\n\n if (attempts > 100) {\n clearInterval(interval);\n\n reject(\"Datacap SDK not loaded\");\n }\n }, 100);\n });\n\n const waitForIframe = () =>\n new Promise<void>((resolve, reject) => {\n let attempts = 0;\n\n const interval = setInterval(() => {\n attempts++;\n\n if (document.getElementById(iframeId)) {\n clearInterval(interval);\n resolve();\n }\n\n if (attempts > 100) {\n clearInterval(interval);\n reject(\"Datacap iframe not found\");\n }\n }, 50);\n });\n\n try {\n await waitForSDK();\n await waitForIframe();\n } catch (err) {\n if (initGenRef.current !== myGen) return;\n\n console.error(\"❌ Datacap failed to become ready:\", err);\n\n setLoader?.(false);\n onError?.(\"Unable to load payment form. Please try again.\");\n return;\n }\n\n // A newer open/close cycle superseded this one while we were waiting.\n if (initGenRef.current !== myGen) return;\n\n const sdk = (window as any).DatacapHostedWebToken;\n\n // This watchdog only guards whether the iframe itself renders — it is\n // cleared by the iframe's onLoad handler below. It is NOT a signal for\n // \"user submitted and got a token back\", so it must not wait on the\n // sdk.init() response callback, which only fires after requestToken()\n // is called (i.e. on form submit, which can happen much later).\n initTimeoutRef.current = setTimeout(() => {\n if (initGenRef.current !== myGen) return;\n\n console.error(\"❌ Datacap iframe load timeout\");\n\n initTimeoutRef.current = null;\n setLoader?.(false);\n onError?.(\"Unable to load payment form. Please try again.\");\n\n resolverRef.current?.reject?.(\n \"Unable to load payment form\"\n );\n }, 15000);\n\n sdk.init(\n tokenKey,\n iframeId,\n (response: any) => {\n\n if (initGenRef.current !== myGen) return;\n\n setLoader?.(false);\n\n if (!resolverRef.current) return;\n\n if (response?.Error || response?.Errors) {\n resolverRef.current.reject(response.Error || response.Errors);\n } else {\n resolverRef.current.resolve(response);\n }\n\n resolverRef.current = null;\n },\n customCSS\n );\n };\n\n initialize();\n\n return () => {\n resolverRef.current = null;\n\n if (initTimeoutRef.current) {\n clearTimeout(initTimeoutRef.current);\n initTimeoutRef.current = null;\n }\n };\n\n }, [isOpen, tokenKey]);\n\n // useEffect(() => {\n // (window as any).requestDcToken = () => {\n // return new Promise((resolve, reject) => {\n // setLoader?.(true);\n // resolverRef.current = { resolve, reject };\n // });\n // };\n\n // return () => {\n // delete (window as any).requestDcToken;\n // };\n // }, []);\n\n useEffect(() => {\n const uniqueId = Math.random();\n\n const fn = () => {\n // console.log(\"🔥 FUNCTION CALLED, ID:\", uniqueId);\n\n return new Promise((resolve, reject) => {\n // console.log(\"✅ Promise executor running\");\n\n setLoader?.(true);\n resolverRef.current = { resolve, reject };\n\n // 🔥 IMPORTANT: trigger Datacap 11-05-26\n // (window as any).DatacapHostedWebToken.requestToken();\n\n if (!(window as any).DatacapHostedWebToken) {\n reject(\"Datacap SDK unavailable\");\n return;\n }\n\n try {\n (window as any).DatacapHostedWebToken.requestToken();\n } catch (err) {\n reject(err);\n }\n });\n };\n\n (window as any).requestDcToken = fn;\n\n // console.log(\"✅ Function registered with ID:\", uniqueId);\n\n return () => {\n delete (window as any).requestDcToken;\n };\n }, []);\n\n // console.log(setLoader, \"loadingIframe\");\n\n return (\n // <iframe\n // id={iframeId}\n // onLoad={() => {\n // console.log(\"🟢 Iframe visually loaded\");\n // setIframeReady(true);\n // setLoader?.(false);\n // }}\n // style={{\n // width: \"100%\",\n // height: `${height || \"250px\"}`,\n // border: \"none\",\n // opacity: iframeReady ? 1 : 0,\n // transition: \"opacity 0.3s ease\",\n // }}\n // />\n\n <iframe\n key={mountKey}\n id={iframeId}\n onLoad={() => {\n console.log(\"🟢 Iframe visually loaded\");\n\n if (initTimeoutRef.current) {\n clearTimeout(initTimeoutRef.current);\n initTimeoutRef.current = null;\n }\n\n setIframeReady(true);\n\n setLoader?.(false);\n }}\n onError={() => {\n console.error(\"❌ iframe failed\");\n\n if (initTimeoutRef.current) {\n clearTimeout(initTimeoutRef.current);\n initTimeoutRef.current = null;\n }\n\n setLoader?.(false);\n onError?.(\"Payment form failed to load\");\n\n resolverRef.current?.reject?.(\n \"Payment form failed to load\"\n );\n }}\n style={{\n width: \"100%\",\n height: `${height || \"250px\"}`,\n border: \"none\",\n opacity: iframeReady ? 1 : 0,\n transition: \"opacity 0.3s ease\",\n }}\n />\n\n );\n};","import React from \"react\";\n\n/**\n * Shared styles for the redesigned Fractal payment widgets (Figma \"Modal / Surcharge\").\n * Two-panel layout: left = order summary, right = payment method / form.\n * Used by both GetPaymentPage and PreAuthPaymentPage so they stay visually consistent.\n * All classes are prefixed `fps-` (fractal payment styles) to avoid clashing with the\n * legacy widget styles in Chargewidgetstyles.\n */\nexport default function FractalWidgetStyles() {\n return (\n <style>\n {`\n .fps-modal {\n --fps-border: #e5e0ef;\n --fps-text-tertiary: #867c94;\n --fps-text-secondary: #484a4d;\n --fps-text-primary: #221730;\n --fps-bg-page: #f9f5ff;\n --fps-brand: #7b5fb0;\n --fps-dark: #221730;\n --fps-green-text: #1b4a33;\n --fps-green-bg: rgba(97, 198, 153, 0.08);\n\n display: flex;\n align-items: stretch;\n width: 100%;\n background: #fff;\n border-radius: 12px;\n overflow: hidden;\n font-family: 'Inter', sans-serif;\n color: var(--fps-text-primary);\n max-height: 88vh;\n box-sizing: border-box;\n }\n .fps-modal *, .fps-modal *::before, .fps-modal *::after { box-sizing: border-box; }\n\n /* ---------- Left: order summary ---------- */\n .fps-summary {\n width: 301px;\n flex-shrink: 0;\n border-right: 1px solid var(--fps-border);\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 24px;\n overflow-y: auto;\n }\n .fps-logo { height: 43px; display: flex; align-items: center; }\n .fps-logo img { max-height: 43px; max-width: 160px; object-fit: contain; }\n .fps-divider { width: 100%; height: 1px; background: var(--fps-border); flex-shrink: 0; }\n .fps-invoice { font-size: 14px; font-weight: 500; color: var(--fps-text-tertiary); text-align: start !important; }\n .fps-lines { display: flex; flex-direction: column; gap: 8px; width: 100%; font-size: 14px; font-weight: 500; text-align: start !important; }\n .fps-line { display: flex; align-items: center; justify-content: space-between; }\n .fps-line .fps-lbl { color: var(--fps-text-tertiary); }\n .fps-line .fps-val { color: var(--fps-text-primary); }\n .fps-line.fps-muted .fps-val { color: var(--fps-text-tertiary); }\n .fps-total-label { font-size: 14px; font-weight: 500; color: var(--fps-text-tertiary); margin-bottom: 4px; }\n .fps-total { font-size: 32px; font-weight: 700; letter-spacing: -0.32px; color: var(--fps-text-primary); line-height: 1.1; }\n .fps-cards { display: flex; gap: 6px; align-items: center; }\n .fps-cards img { height: 22px; width: 33px; object-fit: contain; border-radius: 4px; }\n .fps-note {\n background: var(--fps-green-bg);\n border-radius: 8px;\n padding: 9px 12px;\n font-size: 11px;\n line-height: 16px;\n color: var(--fps-green-text);\n text-align: start !important;\n }\n .fps-note b { font-weight: 700; }\n .fps-note-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n .fps-note-label { display: flex; align-items: center; gap: 4px; font-weight: 500; }\n .fps-note-label svg { display: block; flex-shrink: 0; }\n .fps-note-amount { font-weight: 700; white-space: nowrap; }\n .fps-secure {\n margin-top: auto;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n color: var(--fps-text-tertiary);\n }\n .fps-secure img { height: 16px; width: auto; object-fit: contain; }\n .fps-total-div { text-align: start !important; }\n\n /* ---------- Right: content ---------- */\n .fps-content {\n flex: 1 0 0;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 24px;\n overflow: hidden;\n }\n .fps-head { display: flex; align-items: center; justify-content: space-between; width: 100%; }\n .fps-head-left { display: flex; align-items: center; gap: 8px; }\n .fps-back {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 9px 16px;\n border: 1px solid #e0dfe2;\n border-radius: 1000px;\n background: #fff;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n cursor: pointer;\n }\n .fps-back svg { display: block; }\n .fps-title { font-size: 18px; font-weight: 600; letter-spacing: -0.18px; color: var(--fps-text-primary); margin: 0; }\n .fps-close {\n width: 32px; height: 32px;\n display: flex; align-items: center; justify-content: center;\n border: none; background: none; cursor: pointer;\n color: var(--fps-text-tertiary); font-size: 18px; line-height: 1; border-radius: 16px;\n }\n .fps-close:hover { color: var(--fps-text-primary); }\n .fps-section-label {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 12px;\n letter-spacing: 1.1px;\n text-transform: uppercase;\n color: var(--fps-text-tertiary);\n font-weight: 500;\n line-height: normal;\n margin: 0;\n text-align: start !important;\n }\n\n /* scrollable middle region between header and footer */\n .fps-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n padding-right: 4px;\n }\n .fps-scroll::-webkit-scrollbar { width: 3px; }\n .fps-scroll::-webkit-scrollbar-thumb { background: var(--fps-brand); border-radius: 3px; }\n\n /* ---------- Card/Bank toggle ---------- */\n .fps-toggle {\n display: flex;\n background: var(--fps-bg-page);\n border: 1px solid var(--fps-border);\n border-radius: 9999px;\n padding: 4px;\n width: 100%;\n }\n .fps-toggle button {\n flex: 1 0 0;\n border: none;\n background: transparent;\n padding: 8px;\n border-radius: 9999px;\n font-size: 13px;\n font-weight: 500;\n color: var(--fps-text-secondary);\n cursor: pointer;\n font-family: 'Inter', sans-serif;\n transition: background 0.15s ease, color 0.15s ease;\n }\n .fps-toggle button.fps-active { background: var(--fps-dark); color: #fff; }\n\n /* ---------- Form fields ---------- */\n .fps-field { display: flex; flex-direction: column; gap: 8px; width: 100%; }\n .fps-input {\n height: 40px;\n border: 1px solid var(--fps-border);\n border-radius: 8px;\n padding: 0 16px;\n font-size: 14px;\n letter-spacing: -0.14px;\n color: var(--fps-text-primary);\n background: #fff;\n width: 100%;\n font-family: 'Inter', sans-serif;\n }\n .fps-input::placeholder { color: #a39bb0; }\n .fps-input:focus { outline: none; border-color: var(--fps-brand); }\n .fps-input:disabled { background: var(--fps-bg-page); color: var(--fps-text-tertiary); }\n select.fps-input {\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23867c94' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");\n background-repeat: no-repeat;\n background-position: right 12px center;\n padding-right: 40px;\n }\n\n /* Tokenizer (card number / exp / cvc): the inputs render inside iframes,\n so we style the wrapper divs we own to match the Figma input design.\n Card number sits on top (rounded top); MM / YY / CVV share one bordered\n container below (rounded bottom) with thin dividers between cells. */\n .fps-tokenizer { width: 100%; }\n .fps-tokenizer .form-control {\n border: 1px solid var(--fps-border) !important;\n border-radius: 8px;\n background: #fff !important;\n color: var(--fps-text-primary);\n font-family: 'Inter', sans-serif;\n box-shadow: none !important;\n }\n .fps-tokenizer #card_number,\n .fps-tokenizer .card-number-new {\n height: 44px !important;\n min-height: 44px !important;\n display: flex !important;\n align-items: center;\n padding: 0 16px !important;\n border: 1px solid var(--fps-border) !important;\n border-bottom: 1px solid var(--fps-border) !important;\n border-radius: 8px 8px 0 0 !important;\n background: #fff !important;\n overflow: hidden;\n }\n /* iframes carry the actual inputs — never let their default border draw a line */\n .fps-tokenizer iframe { border: 0 !important; display: block; width: 100% !important; min-width: 0 !important; height: 100% !important; }\n .dc-tokenizer iframe { height: 250px !important; }\n .fps-tokenizer .card-crdi,\n .fps-tokenizer .card-expiry-new {\n border: 1px solid var(--fps-border) !important;\n border-top: none !important;\n border-radius: 0 0 8px 8px !important;\n overflow: hidden;\n background: #fff !important;\n }\n /* Keep MM / YY / CVV on a single row (override the legacy flex-wrap:wrap)\n and let the cells shrink (iframes default to 300px intrinsic width). */\n .fps-tokenizer .exp-date-year-container {\n display: flex !important;\n flex-wrap: nowrap !important;\n width: 100%;\n align-items: stretch;\n }\n .fps-tokenizer .exp-date-year-container .form-group { padding: 0 !important; margin: 0 !important; min-width: 0 !important; }\n /* Figma layout: MM + YY tight on the LEFT half, CVV on the RIGHT half with a\n centered divider. margin-left:auto pushes the 50%-wide CVV cell to the right. */\n .fps-tokenizer .exp-date-year-container .exp-date { flex: 0 0 50px !important; }\n .fps-tokenizer .exp-date-year-container .exp-year { flex: 0 0 58px !important; position: relative; }\n /* custom \"/\" separator between MM and YY (the fields are separate iframes) */\n .fps-tokenizer .exp-date-year-container .exp-year::before {\n content: \"/\";\n position: absolute;\n left: -7px;\n top: 0;\n height: 44px;\n display: flex;\n align-items: center;\n font-family: 'Inter', sans-serif;\n font-size: 14px;\n color: var(--fps-text-tertiary);\n pointer-events: none;\n z-index: 2;\n }\n .fps-tokenizer .exp-date-year-container .security-digit {\n flex: 0 0 50% !important;\n margin-left: auto !important;\n min-width: 0 !important;\n border-left: 1px solid var(--fps-border) !important;\n }\n .fps-tokenizer #exp_month,\n .fps-tokenizer #exp_year,\n .fps-tokenizer #cvv,\n .fps-tokenizer .card-cvv-in {\n height: 44px !important;\n min-height: 44px !important;\n width: 100% !important;\n min-width: 0 !important;\n display: flex !important;\n align-items: center;\n border: none !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n background: #fff !important;\n overflow: hidden;\n }\n .fps-tokenizer #exp_month { padding: 0 2px 0 16px !important; }\n .fps-tokenizer #exp_year { padding: 0 2px 0 2px !important; }\n .fps-tokenizer #cvv { padding: 0 16px !important; }\n .fps-tokenizer .error-span { margin-top: 4px; }\n\n /* ---------- Saved methods list ---------- */\n .fps-list {\n display: flex;\n flex-direction: column;\n width: 100%;\n border: 1px solid var(--fps-border);\n border-radius: 8px;\n overflow: hidden;\n }\n .fps-list-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 11px;\n border-bottom: 1px solid var(--fps-border);\n gap: 12px;\n cursor: pointer;\n }\n .fps-list-row:last-child { border-bottom: none; }\n .fps-list-row.fps-disabled { opacity: 0.5; cursor: not-allowed; }\n .fps-list-left { display: flex; align-items: center; gap: 12px; min-width: 0; }\n .fps-list-right { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }\n .fps-radio {\n width: 16px; height: 16px;\n border-radius: 50%;\n border: 1.2px solid var(--fps-border);\n background: var(--fps-bg-page);\n flex-shrink: 0;\n position: relative;\n }\n .fps-radio.fps-checked { border-color: var(--fps-brand); }\n .fps-radio.fps-checked::after {\n content: \"\";\n position: absolute;\n width: 10px; height: 10px;\n border-radius: 50%;\n background: var(--fps-brand);\n top: 50%; left: 50%;\n transform: translate(-50%, -50%);\n }\n .fps-pm-meta { display: flex; align-items: center; gap: 12px; }\n .fps-pm-last4 { font-size: 14px; font-weight: 500; color: var(--fps-text-primary); letter-spacing: -0.28px; }\n .fps-pm-exp { font-size: 14px; font-weight: 500; color: var(--fps-text-tertiary); letter-spacing: -0.28px; }\n .fps-badge {\n border: 1px solid var(--fps-border);\n background: var(--fps-bg-page);\n border-radius: 4px;\n padding: 2px 4px;\n font-size: 11px;\n font-weight: 600;\n color: var(--fps-text-tertiary);\n letter-spacing: -0.22px;\n text-transform: uppercase;\n white-space: nowrap;\n }\n .fps-brand-logo { height: 20px; width: 30px; object-fit: contain; }\n .fps-remove { cursor: pointer; display: flex; align-items: center; }\n .fps-remove img { width: 14px; height: 14px; }\n\n /* ---------- Buttons ---------- */\n .fps-other-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n height: 44px;\n border: 1px solid var(--fps-border);\n border-radius: 9999px;\n background: #fff;\n font-size: 14px;\n font-weight: 600;\n color: var(--fps-text-primary);\n cursor: pointer;\n width: 100%;\n font-family: 'Inter', sans-serif;\n }\n .fps-other-btn img { width: 20px; height: 20px; object-fit: contain; }\n\n .fps-footer {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n margin-top: auto;\n }\n .fps-auth { font-size: 11px; font-weight: 500; color: var(--fps-text-tertiary); line-height: 1.45; margin: 0; text-align: start !important; }\n .fps-auth u, .fps-auth a { text-decoration: underline; cursor: pointer; color: inherit; }\n .fps-pay-btn {\n height: 44px;\n border: none;\n border-radius: 9999px;\n background: var(--fps-dark);\n color: #fff;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: -0.025px;\n cursor: pointer;\n width: 100%;\n font-family: 'Inter', sans-serif;\n }\n .fps-pay-btn:hover { opacity: 0.92; }\n .fps-pay-btn:disabled { opacity: 0.55; cursor: not-allowed; }\n\n /* ---------- Checkbox rows ---------- */\n .fps-check { display: flex; gap: 12px; align-items: flex-start; width: 100%; }\n .fps-check input[type=\"checkbox\"] {\n width: 16px; height: 16px; margin: 0; margin-top: 1px;\n flex-shrink: 0; accent-color: var(--fps-brand); cursor: pointer;\n }\n .fps-check label { font-size: 12px; font-weight: 500; color: var(--fps-text-primary); line-height: 1.4; cursor: pointer; margin: 0; font-family: 'Inter', sans-serif; text-transform: none; text-align: start !important; }\n .fps-check u, .fps-check a { text-decoration: underline; cursor: pointer; }\n .fps-error { color: #dc2626; font-size: 12px; display: block; }\n\n /* ---------- Responsive ---------- */\n @media (max-width: 640px) {\n .fps-modal { flex-direction: column; max-height: none; }\n .fps-summary { width: 100%; border-right: none; border-bottom: 1px solid var(--fps-border); }\n .fps-content { overflow: visible; }\n .fps-scroll { overflow: visible; }\n }\n `}\n </style>\n );\n}\n","import React from 'react'\n\n/**\n * Shared, backend-agnostic presentational components for the redesigned Fractal\n * checkout (the `.fps-*` two-panel design in FractalWidgetStyles).\n *\n * These are pure UI: data comes in as already-formatted props and user actions go\n * out as callbacks. They hold NO charge/auth logic, so any container — the Gen-A\n * socket widgets (GetPaymentPage / PreAuthPayment) or the Gen-B REST widget\n * (ModelContentSky) — can render the same UI with its own data/charge layer.\n */\n\n/* ----------------------------- Order summary (left) ----------------------------- */\n\nexport type SummaryLine = { label: string; value: string; muted?: boolean }\nexport type CardIcons = { visa: string; mastercard: string; amex: string; discover: string }\n\ntype OrderSummaryProps = {\n logo?: string\n invoiceLabel: string\n lines: SummaryLine[]\n totalLabel?: string\n total: string\n cardIcons?: CardIcons | null // null/undefined hides the accepted-cards row\n note?: React.ReactNode | null // green savings note (text or savings row); null hides it\n secureIcon: string\n secureText?: string\n extra?: React.ReactNode | null // optional content rendered directly below the total (e.g. a partial-amount field)\n}\n\nexport function FractalOrderSummary({\n logo, invoiceLabel, lines, totalLabel = 'Total', total,\n cardIcons, note, secureIcon, secureText = 'Secure payment powered by Fractal', extra,\n}: OrderSummaryProps) {\n return (\n <aside className=\"fps-summary\">\n <div className=\"fps-logo\">{logo && <img src={logo} alt=\"\" />}</div>\n <div className=\"fps-divider\" />\n <div className=\"fps-invoice\">{invoiceLabel}</div>\n <div className=\"fps-lines\">\n {lines.map((l, i) => (\n <div key={i} className={`fps-line${l.muted ? ' fps-muted' : ''}`}>\n <span className=\"fps-lbl\">{l.label}</span>\n <span className=\"fps-val\">{l.value}</span>\n </div>\n ))}\n </div>\n <div className=\"fps-divider\" />\n <div className='fps-total-div' >\n <div className=\"fps-total-label\">{totalLabel}</div>\n <div className=\"fps-total\">{total}</div>\n </div>\n {extra}\n {cardIcons && (\n <div className=\"fps-cards\">\n <img src={cardIcons.visa} alt=\"Visa\" />\n <img src={cardIcons.mastercard} alt=\"Mastercard\" />\n <img src={cardIcons.amex} alt=\"Amex\" />\n <img src={cardIcons.discover} alt=\"Discover\" />\n </div>\n )}\n {note && (\n <>\n <div className=\"fps-divider\" />\n {note}\n </>\n )}\n <div className=\"fps-secure\">\n <img src={secureIcon} alt=\"\" />\n {secureText}\n </div>\n </aside>\n )\n}\n\n/** Green \"savings\" pill used on the bank side (Figma 141:6503). */\nexport function FractalSavingsNote({ label, amount }: { label: string; amount: string }) {\n return (\n <div className=\"fps-note fps-note-row\">\n <span className=\"fps-note-label\">\n {label}\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1b4a33\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n </span>\n <span className=\"fps-note-amount\">{amount}</span>\n </div>\n )\n}\n\n/* ----------------------------- Header (right top) ----------------------------- */\n\nexport function FractalModalHeader({ title, onBack, onClose }: { title: string; onBack?: () => void; onClose: () => void }) {\n return (\n <>\n <div className=\"fps-head\">\n <div className=\"fps-head-left\">\n {onBack && (\n <div className=\"fps-back\" onClick={onBack} role=\"button\" aria-label=\"Back\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#221730\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </div>\n )}\n <h2 className=\"fps-title\">{title}</h2>\n </div>\n <button className=\"fps-close\" onClick={onClose} aria-label=\"Close\">✕</button>\n </div>\n <div className=\"fps-divider\" />\n </>\n )\n}\n\n/* ----------------------------- Card / Bank / Reader toggle ----------------------------- */\n\nexport type ToggleMethod = { value: string; label: string }\n\nexport function FractalMethodToggle({ methods, active, onChange }: { methods: ToggleMethod[]; active: string; onChange: (v: string) => void }) {\n if (methods.length <= 1) return null\n return (\n <div className=\"fps-toggle\">\n {methods.map((m) => (\n <button key={m.value} type=\"button\" className={active === m.value ? 'fps-active' : ''} onClick={() => onChange(m.value)}>\n {m.label}\n </button>\n ))}\n </div>\n )\n}\n\n/* ----------------------------- Saved methods list ----------------------------- */\n\nexport type SavedMethodItem = {\n id: string\n primaryText: string // e.g. \"**** 7890\"\n secondaryText?: string // e.g. \"01/27\"\n badge?: string // e.g. \"CREDIT\" / \"DEBIT\" / \"BANK\"\n brandLogo?: string // brand chip image (omit for bank)\n disabled?: boolean\n}\n\nexport function FractalSavedMethods({\n sectionLabel, items, selectedId, onSelect, onRemove, removeIcon,\n otherLabel, onOther, otherIcon,\n}: {\n sectionLabel: string\n items: SavedMethodItem[]\n selectedId?: string\n onSelect: (id: string) => void\n onRemove?: (id: string) => void\n removeIcon: string\n otherLabel: string\n onOther: () => void\n otherIcon: string\n}) {\n return (\n <>\n <div className=\"fps-section-label\">{sectionLabel}</div>\n <div className=\"fps-scroll\">\n <div className=\"fps-list\">\n {items.map((it) => {\n const checked = selectedId === it.id\n return (\n <div\n key={it.id}\n className={`fps-list-row${it.disabled ? ' fps-disabled' : ''}`}\n onClick={() => { if (!it.disabled) onSelect(it.id) }}\n >\n <div className=\"fps-list-left\">\n <span className={`fps-radio${checked ? ' fps-checked' : ''}`} />\n <div className=\"fps-pm-meta\">\n <span className=\"fps-pm-last4\">{it.primaryText}</span>\n {it.secondaryText && <span className=\"fps-pm-exp\">{it.secondaryText}</span>}\n </div>\n </div>\n <div className=\"fps-list-right\">\n {it.badge && <span className=\"fps-badge\">{it.badge}</span>}\n {it.brandLogo && <img className=\"fps-brand-logo\" src={it.brandLogo} alt=\"\" />}\n {onRemove && (\n <span className=\"fps-remove\" onClick={(e) => { e.stopPropagation(); onRemove(it.id) }}>\n <img src={removeIcon} alt=\"Remove\" />\n </span>\n )}\n </div>\n </div>\n )\n })}\n </div>\n <button type=\"button\" className=\"fps-other-btn\" onClick={onOther}>\n {otherLabel}\n <img src={otherIcon} alt=\"\" />\n </button>\n </div>\n </>\n )\n}\n\n/** Simple reader/device selection list (no badge/logo/remove). */\nexport function FractalReaderList({\n sectionLabel, items, selectedId, onSelect, icon,\n}: {\n sectionLabel: string\n items: { id: string; name: string }[]\n selectedId?: string\n onSelect: (id: string) => void\n icon: string\n}) {\n return (\n <>\n <div className=\"fps-section-label\">{sectionLabel}</div>\n <div className=\"fps-scroll\">\n <div className=\"fps-list\">\n {items.map((it) => {\n const checked = selectedId === it.id\n return (\n <div key={it.id} className=\"fps-list-row\" onClick={() => onSelect(it.id)}>\n <div className=\"fps-list-left\">\n <span className={`fps-radio${checked ? ' fps-checked' : ''}`} />\n <span className=\"fps-pm-last4\">{it.name}</span>\n </div>\n <div className=\"fps-list-right\">\n <img className=\"fps-brand-logo\" src={icon} alt=\"\" />\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </>\n )\n}\n\n/* ----------------------------- Footer (auth text + pay button) ----------------------------- */\n\nexport function FractalFooter({\n authText, buttonLabel, onPay, disabled, submit = false,\n}: {\n authText?: React.ReactNode\n buttonLabel: React.ReactNode\n onPay?: (e: React.MouseEvent<HTMLButtonElement>) => void\n disabled?: boolean\n submit?: boolean\n}) {\n return (\n <div className=\"fps-footer\">\n {authText}\n <button type={submit ? 'submit' : 'button'} className=\"fps-pay-btn\" disabled={disabled} onClick={submit ? undefined : onPay}>\n {buttonLabel}\n </button>\n </div>\n )\n}\n\n/* ----------------------------- Labelled field + checkbox row ----------------------------- */\n\nexport function FractalField({ label, htmlFor, children, error }: { label: string; htmlFor?: string; children: React.ReactNode; error?: string }) {\n return (\n <div className=\"fps-field\">\n {label &&\n <label className=\"fps-section-label\" htmlFor={htmlFor}>{label}</label>\n }\n {children}\n {error && <span className=\"fps-error\">{error}</span>}\n </div>\n )\n}\n\nexport function FractalCheckbox({ id, checked, onChange, children }: { id: string; checked: boolean; onChange: (v: boolean) => void; children: React.ReactNode }) {\n return (\n <div className=\"fps-check\">\n <input type=\"checkbox\" id={id} checked={checked} onChange={(e) => onChange(e.target.checked)} />\n <label htmlFor={id}>{children}</label>\n </div>\n )\n}\n","export const PaymentMethodKeys = {\n PROPAYKEY: '25',\n PAYARCKEY: '26',\n STRIPEKEYCC: '27',\n PAYRIXKEY: '28',\n SKYFIACHKEY: '29',\n JUSTIFIKEY: '30',\n INFINICEPTKEY: '31',\n FRACTALKEY: '32'\n}\n\nexport const DcLoadingError = \"Something went wrong while loading the payment form. Please try again after some time.\"","'use client'\nimport React from 'react'\nimport { GetPaymentPage } from '../Charge/GetPaymentPage'\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n from?: string;\n amount: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n pass_fee?: boolean;\n isReader?: boolean;\n onTriggerPay?: (fn: () => void) => void;\n preauthId?: string;\n showButton?: boolean;\n sessionToken?: string;\n}\n\n/**\n * PreAuthPayment is now a thin alias over the unified GetPaymentPage widget:\n * passing `isPreAuth` runs the authorize/hold flow (authorize-by-card /\n * fractal-charge-preauth / charge-preauth) instead of a charge, hides the bank\n * tab, and switches the copy to \"Authorize\". Kept as a separate export so existing\n * host integrations that import PreAuthPayment keep working unchanged.\n */\nexport function PreAuthPayment(props: Props) {\n return <GetPaymentPage {...props} isPreAuth />\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport DataScript from '../Datascript';\nimport Swal from 'sweetalert2';\nimport axios, { AxiosError } from 'axios';\nimport { baseUrl, masterBaseUrl, fractalGatewayUrl } from '../baseurl';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport Loader from '../Loader/Loader';\nimport SuccessMsz from '../SuccessMessage/SuccessMsz';\nimport AddCardStyle from './AddCardStyles';\nimport CustomModal from '../CustomModal/CustomModal';\nimport SuccessCardMsz from '../SuccessCardMessage/SuccessCardMsz';\nimport { HandleSubmit } from '../SuccessMessage/HandleSubmit';\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage';\nimport { formatCardNumberWithCursor } from '@/app/utils/Common';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport FractalFields from '../Atoms/FractalForm/FractalFields';\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment';\nimport { DcLoadingError } from '@/app/utils/Constant';\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n}\n\nexport function AddCardEasyPay(props: Props) {\n const [loading, setLoading] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n const [error, setError] = useState<string>(\"\");\n const [show, setShow] = useState<boolean>(false);\n const card_number_ref = useRef<HTMLInputElement>(null)\n const exp_month_ref = useRef<HTMLInputElement>(null)\n const exp_year_ref = useRef<HTMLInputElement>(null)\n const cvv_ref = useRef<HTMLInputElement>(null)\n const name_ref = useRef<HTMLInputElement>(null)\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '14px',\n 'font-weight': '500',\n 'color': '#35254D',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#35254D',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#35254D'\n }\n };\n\n interface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n }\n\n interface PaymentData {\n paymentGateway: number;\n isSkyFiAccount: boolean;\n logo: string;\n bname: string;\n card_list: Card[];\n customer_name: string;\n is_primary: string;\n dctoken: string\n }\n interface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n }\n\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [paymentData, setPaymentData] = useState<PaymentData>()\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n\n const showError = (msz: string) => {\n Swal.fire({\n icon: 'error',\n text: msz,\n customClass: {\n popup: 'custom-z-index'\n }\n });\n };\n\n\n\n // for payment popup\n const handleClose = () => {\n setShow(false);\n setSuccess(false)\n setError(\"\")\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n // setActive('cardList')\n };\n const handleShow = () => setShow(true);\n\n const handleCloseSeccess = () => {\n handleClose()\n }\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n // console.log(name, value?.length, \"dfih\", name === 'expiryMonth' && value?.length === 2);\n\n if (name === 'expiryMonth' && value?.length === 2) {\n exp_year_ref?.current?.focus();\n }\n\n if (name === 'expiryYear' && value?.length === 4) {\n cvv_ref?.current?.focus();\n }\n\n if (name === 'cvv' && value?.length === 3) {\n name_ref?.current?.focus();\n }\n\n\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n // console.log(value, name);\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n // console.log(rawValue?.length, \"length\");\n\n if (rawValue?.length === 16) {\n exp_month_ref?.current?.focus()\n }\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n\n };\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentData?.paymentGateway !== 32) {\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Card number is required\";\n // if (!data?.expiryMonth?.trim()) {\n // errors.expiryMonth = \"Expiration month is required\"\n // } else if (Number(data?.expiryMonth) > 12 || Number(data?.expiryMonth) < 1) {\n // errors.expiryMonth = \"Invalid Expiration Month.\"\n // }\n // if (!data?.expiryYear?.trim()) {\n // errors.expiryYear = \"Expiration year is required\"\n // } else if (data?.expiryYear?.trim().length !== 4 || Number(data?.expiryYear) < 2025) {\n // errors.expiryYear = \"Invalid Expiration Year.\"\n // }\n\n // else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n\n // if (!data?.cvv?.trim()) errors.cvv = \"CVC is required\";\n\n // // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n\n // }\n\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n // if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n setCardError(errors);\n\n // Return true if there is any error\n\n\n return Object.keys(errors).length > 0;\n };\n\n\n const getPaymentDetails = async () => {\n showLoader()\n try {\n const data = {\n fractalpayPublicKey: props?.merchantPublicKey,\n \"customer_id\": props?.customerId,\n addcard: true\n }\n let paymentData = await axios.post(`${baseUrl}get-payment-details`, data)\n // console.log(paymentData);\n setPaymentData(paymentData?.data?.data)\n if (!paymentData?.data?.data?.paymentGateway) {\n handleClose()\n setError(\"Something went wrong.\")\n }\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no gap frame with every\n // loading flag false while DataCapFields' own effect spins up.\n if (paymentData?.data?.data?.paymentGateway === 31 && paymentData?.data?.data?.dctoken) {\n setLoadingIframe(true);\n }\n hideLoader()\n\n\n } catch (err: any) {\n console.log(err);\n hideLoader()\n handleClose()\n setError(\"Something went wrong.\")\n }\n }\n\n useEffect(() => {\n if (props?.merchantPublicKey) {\n\n getPaymentDetails()\n }\n }, [props?.merchantPublicKey])\n\n\n const addCardFunc = async (e: any) => {\n e.preventDefault();\n e.currentTarget.blur();\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading) return;\n const hasError = validateCardData()\n // console.log(cardData)\n if (hasError) return\n else {\n\n let validCard = true;\n let validExpirationDate = true;\n let validCVV = true;\n\n // if (paymentData?.paymentGateway !== 32) {\n // let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n // let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n // let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n // let errors: Partial<Record<keyof CardDetails, string>> = {}\n // if (!validCard) errors.cardNumber = \"Invalid card Number\"\n // if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n // if (!validCVV) errors.cvv = \"Invalid CVV\"\n // setCardError(errors)\n // }\n\n if (validCard && validCVV && validExpirationDate) {\n showLoader()\n try {\n let getTokenCallback = async function (token: any) {\n // console.log(token)\n if (token.Error) {\n // console.log(token?.Error);\n setError(token.Error)\n hideLoader();\n } else {\n const reqData = {\n userId: props?.customerId,\n cardName: cardData?.cardName,\n zip: cardData?.zipCode,\n fractalpayPublicKey: props?.merchantPublicKey,\n token: token\n }\n try {\n let apiResponse = await axios.post(`${baseUrl}add-card`, reqData)\n // console.log(apiResponse);\n if (apiResponse?.data?.result) {\n setSuccess(true)\n hideLoader()\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n HandleSubmit(e, 'close', \"\")\n }\n // let formData = {\n // fractalpayPublicKey: props?.merchantPublicKey,\n // wallet_id: '',\n // card_number: cardData?.cardNumber.replaceAll(\" \", ''),\n // exp_month: cardData?.expiryMonth,\n // exp_year: cardData?.expiryYear?.slice(-2),\n // cvv: cardData?.cvv,\n // }\n // try {\n // const result = await axios.post(`${baseUrl}link-wallet`, formData)\n // console.log(result);\n // setSuccess(true)\n // hideLoader()\n // setCardData({\n // cardName: \"\",\n // cardNumber: \"\",\n // expiryMonth: \"\",\n // expiryYear: \"\",\n // cvv: \"\",\n // orderId: \"\",\n // zipCode: \"\"\n // })\n // HandleSubmit(e, 'close', \"\")\n // } catch (err: any) {\n // console.log(err);\n // hideLoader()\n // setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n // }\n } catch (err: any) {\n console.log(err);\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n try {\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber;\n // cardNumber = cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: {\n // md: forge.md.sha1.create()\n // }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n // // Create Token\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // const raw = JSON.stringify({\n // \"enc_track2_data\": `${encryptedBase64}`,\n // \"algorithm\": \"RSAES_OAEP_SHA_1\",\n // session_key: `${sesionResult?.data?.data?.session_key}`\n // });\n\n try {\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders })\n\n const tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n const reqData = JSON.stringify({\n ...tokenizeData,\n cvv: cardData?.cvv,\n cardName: cardData?.cardName,\n zip: cardData?.zipCode,\n userId: props?.customerId,\n fractalpayPublicKey: props?.merchantPublicKey,\n })\n\n\n let myHeaders2 = {\n \"Content-Type\": \"application/json\"\n }\n\n\n try {\n let addCardRes = await axios.post(`${baseUrl}add-card`, reqData,\n {\n headers: myHeaders2\n }\n )\n // console.log((addCardRes));\n if (addCardRes?.data?.result) {\n setSuccess(true)\n hideLoader()\n HandleSubmit(e, 'close', \"\")\n }\n\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } else {\n // if (typeof DatacapWebToken !== 'undefined') {\n // DatacapWebToken.requestToken(paymentData?.dctoken, \"creditCardForm\", getTokenCallback);\n // }\n\n try {\n const result = await (window as any).requestDcToken();;\n // console.log(\"Token:\", result.Token);\n if (result.Token) {\n getTokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n hideLoader()\n }\n\n }\n } catch (err: any) {\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n }\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n\n\n }, []);\n\n return (\n\n <>\n {/* data cap */}\n <DataScript />\n {/* Fractal Gateway */}\n {\n paymentData?.paymentGateway === 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n {/* Datacap Ifrmaes */}\n\n {\n paymentData?.paymentGateway === 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }}\n />\n )\n }\n {/* STYLE */}\n <AddCardStyle />\n\n\n {/* <button className=\"paymentBtn\" onClick={handleShow}\n >\n Pay\n </button> */}\n\n\n {/* <CustomModal\n open={show}\n onClose={handleClose}\n\n > */}\n\n <Loader loading={loading || loadingIframe} />\n\n {\n error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>\n }\n\n\n {\n errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>\n }\n\n {success && <SuccessCardMsz onClose={handleCloseSeccess} />}\n {!error && !success && !errorIframe &&\n <>\n\n\n\n <div\n className=\"container-creditcard add-card modal-content\"\n id=\"add-credit-card-panel\" style={{ margin: 'auto' }}\n >\n {\n paymentData?.paymentGateway === 32 ? (\n <form\n id=\"paymentForm\"\n onSubmit={addCardFunc}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n >\n <div style={{ maxHeight: '350px', minHeight: '0' }} className='card-scrl'>\n <div className=\"form-group\" style={{ marginTop: '0', marginBottom: '10px' }}>\n <label htmlFor=\"cardNumber\" >Card Number</label>\n {paymentData?.paymentGateway === 32 && isTokenizerReady &&\n <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n isAddCard={true}\n />\n }\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"cardholderName\">Name on card<sup style={{ fontSize: '12px' }}>*</sup></label>\n <input\n type=\"text\"\n id=\"cardholderName\"\n name=\"cardholderName\"\n placeholder=\"Name on card\"\n value={cardData?.cardName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }}\n ref={name_ref}\n />\n {cardError?.cardName && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cardName}</span>}\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"zipcode\">Zip</label>\n <input type=\"text\"\n id=\"\"\n name=\"zipcode\"\n placeholder=\"Zip\"\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.zipCode}</span>}\n </div>\n </div>\n <input\n type=\"submit\"\n // onClick=\"handleCardFormSubmission()\"\n className=\"idle-green-btn w-100\"\n defaultValue=\"Submit\"\n disabled={loading}\n />\n </form>\n ) : (\n <form id=\"creditCardForm\" onSubmit={addCardFunc} onKeyDown={\n (e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}>\n\n <div style={{ maxHeight: '450px', minHeight: '0' }} className='card-scrl'>\n\n {/* Dc Ifrmaes */}\n\n <div className=\"form-group\" style={{ marginTop: '0', marginBottom: '0' }}>\n <DataCapFields\n isOpen={true}\n tokenKey={paymentData?.dctoken}\n setLoader={setLoadingIframe}\n isAddCard={true}\n onError={(msg: string) => setError(msg || DcLoadingError)}\n />\n </div>\n\n {/* <div className=\"form-group\" style={{ marginTop: '0', marginBottom: '10px' }}>\n <label htmlFor=\"cardNumber\" >Card Number</label>\n <input\n type=\"text\"\n data-token=\"card_number\"\n placeholder=\"Enter card number\"\n maxLength={19}\n inputMode=\"numeric\"\n value={cardData?.cardNumber || \"\"}\n onChange={(e) => handleCardNumberChange(e)}\n ref={card_number_ref}\n // onInput=\"formatCardNumber(this)\"\n // required=\"\"\n />\n {cardError?.cardNumber &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cardNumber}</span>\n }\n <br />\n </div>\n <div className=\"form-group\">\n <div className=\"card-dtl\">\n <div className=\"exp-cvc-container\" style={{ margin: '0' }}>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"expMonth\">MM</label>\n <input\n data-token=\"exp_month\"\n className=\"form-control required\"\n type=\"text\"\n placeholder=\"MM\"\n maxLength={2}\n value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)}\n ref={exp_month_ref}\n\n />\n {cardError?.expiryMonth &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.expiryMonth}</span>\n }\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"expYear\">YYYY</label>\n <input\n data-token=\"exp_year\"\n className=\"form-control required\"\n type=\"text\"\n placeholder=\"YYYY\"\n maxLength={4}\n value={cardData?.expiryYear || \"\"}\n onChange={(e) => handleCardChange('expiryYear', e.target.value)}\n ref={exp_year_ref}\n />\n {cardError?.expiryYear &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.expiryYear}</span>\n }\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"cvc\">CVC</label>\n <input\n data-token=\"cvv\"\n className=\"form-control required\"\n type=\"text\"\n placeholder=\"CVC\"\n maxLength={4}\n value={cardData?.cvv || \"\"}\n onChange={(e) => handleCardChange('cvv', e.target.value)}\n ref={cvv_ref}\n />\n {cardError?.cvv &&\n <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cvv}</span>\n\n }\n <span id=\"cvv-error\" style={{ color: \"red\", display: \"none\" }} />\n </div>\n </div>\n </div>\n </div> */}\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"cardholderName\">Name on card<sup style={{ fontSize: '12px' }} >*</sup></label>\n <input\n type=\"text\"\n id=\"cardholderName\"\n name=\"cardholderName\"\n placeholder=\"Name on card\"\n value={cardData?.cardName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }}\n ref={name_ref}\n />\n {cardError?.cardName && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.cardName}</span>}\n </div>\n <div className=\"form-group\" style={{ marginTop: '0' }}>\n <label htmlFor=\"zipcode\">Zip</label>\n <input type=\"text\"\n id=\"\"\n name=\"zipcode\"\n placeholder=\"Zip\"\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span' style={{ color: 'red', fontSize: '12px' }}>{cardError?.zipCode}</span>}\n </div>\n </div>\n\n\n <input\n type=\"submit\"\n // onClick=\"handleCardFormSubmission()\"\n className=\"idle-green-btn w-100\"\n defaultValue=\"Submit\"\n disabled={loading}\n />\n </form>\n )\n }\n\n </div>\n\n </>\n }\n {/* </CustomModal> */}\n </>\n )\n}\n","import React from \"react\";\n\nexport default function AddCardStyle() {\n const primarycolor = \"#000\";\n const primarybgcolor = \"#fff\";\n const primarybodycolor = \"#212529\";\n const primarybordercolor = \"#dee2e6\";\n return (\n <style>\n {`\n .add-card {\n max-width:380px;\n padding: 0 20px\n }\n .add-card .form-group {\n // margin-bottom: 5px;\n }\n\n .add-card .idle-green-btn {\n color: white;\n background-color: rgba(97, 198, 153, 1);\n border-radius: 100px;\n border: none !important;\n padding: 12px 24px 12px 24px;\n width: 100%;\n cursor:pointer\n }\n\n .add-card .idle-green-btn:hover {\n background-color: rgba(65, 164, 120, 1) !important;\n }\n\n .add-card .idle-green-btn:focus {\n border: 2px solid rgba(90, 172, 136, 1) !important;\n background-color: rgba(97, 198, 153, 1) !important;\n padding: 10px 24px 10px 24px;\n }\n \n .add-card .container-creditcard {\n width: 426px;\n padding: 24px;\n background-color: #FFFFFF;\n border-radius: 24px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n .add-card .container-creditcard .request-payment-close-popup{\n position:absolute;\n // background:red\n }\n \n .add-card h2 {\n font-size: 24px;\n line-height: 32px;\n font-weight: 500;\n color: #35254D;\n margin-bottom: 24px;\n text-align: center;\n }\n .add-card .form-group {\n margin-top: 20px;\n margin-bottom : 10px\n }\n \n .add-card .credit-card {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n padding: 20px;\n background-color: #35254D;\n color: #FFFFFF;\n border-radius: 15px;\n margin-bottom: 20px;\n }\n \n .add-card .credit-card .chip {\n width: 50px;\n height: 30px;\n background-image: url('https://raw.githubusercontent.com/danieldasilvaa/creditcard-html-css/main/chip.png');\n background-size: cover;\n margin-bottom: 10px;\n }\n \n .add-card .credit-card .card-number {\n font-size: 18px;\n letter-spacing: 2px;\n margin-bottom: 10px;\n }\n \n .add-card .credit-card .card-info {\n font-size: 14px;\n margin-bottom: 5px;\n }\n \n .add-card label {\n font-size: 12px;\n font-family: 'IBM Plex Mono', monospace;\n font-weight: 400;\n text-transform: uppercase;\n color: #35254D;\n margin-bottom: 6px;\n }\n \n .add-card input[type=\"text\"],\n .add-card input[type=\"number\"],\n .add-card input[type=\"date\"],\n .add-card input[type=\"email\"],\n .add-card select {\n width: 100%;\n padding: 12px;\n font-size: 14px;\n font-weight: 500;\n color: #35254D;\n border: 1px solid #D4CDDF;\n border-radius: 6px;\n background-color: #FFFFFF;\n box-sizing: border-box;\n // margin-bottom: 20px;\n }\n \n .add-card input[type=\"text\"]::placeholder {\n color: #867C94;\n }\n \n // .add-card input[type=\"submit\"] {\n // width: 100%;\n // padding: 12px;\n // background-color: #161616;\n // color: #FFFFFF;\n // font-size: 14px;\n // font-weight: 500;\n // border: none;\n // border-radius: 1000px;\n // cursor: pointer;\n // text-align: center;\n // }\n \n .add-card input[type=\"submit\"]:hover {\n background-color: #000000;\n }\n \n .add-card .error {\n font-size: 12px;\n color: red;\n margin-top: -15px;\n margin-bottom: 15px;\n }\n \n /* Tab Styling */\n .add-card .tabs {\n display: flex;\n gap: 4px;\n margin-bottom: 24px;\n justify-content: center;\n }\n \n .add-card .tab {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 6px 16px;\n font-size: 14px;\n font-weight: 500;\n border: 1px solid #D4CDDF;\n border-radius: 1000px;\n cursor: pointer;\n }\n \n .add-card .tab.active {\n border-color: #35254D;\n color: #35254D;\n }\n \n .add-card .tab:hover {\n border-color: #867C94;\n }\n \n /* Buttons */\n .add-card .button-close {\n display: inline-block;\n background-color: #161616;\n color: #FFFFFF;\n font-size: 14px;\n font-weight: 500;\n padding: 12px 32px;\n border-radius: 1000px;\n text-align: center;\n cursor: pointer;\n width: 48%;\n box-sizing: border-box;\n }\n \n .add-card .button-close:hover {\n background-color: #000000;\n }\n \n .add-card .btn-add1 {\n display: inline-block;\n background-color: #61c699;\n color: #FFFFFF;\n font-size: 14px;\n font-weight: 500;\n padding: 12px 32px;\n border-radius: 1000px;\n text-align: center;\n cursor: pointer;\n width: 48%;\n box-sizing: border-box;\n }\n \n .add-card .btn-add1:hover {\n background-color: #B5E1CB;\n }\n \n /* Combined Expiration Date and CVC Row */\n .add-card .exp-cvc-container {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 5px;\n }\n \n .add-card .exp-cvc-container input {\n flex: 1;\n padding: 12px;\n font-size: 14px;\n font-weight: 500;\n color: #35254D;\n border: 1px solid #D4CDDF;\n border-radius: 6px;\n background-color: #FFFFFF;\n box-sizing: border-box;\n }\n \n .add-card .exp-cvc-container input::placeholder {\n color: #867C94;\n }\n \n .card-scrl {\n overflow-y: auto;\n padding-right: 6px !important;\n }\n .card-scrl::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .card-scrl::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n\n .custom-z-index {\n z-index: 9999 !important;\n}\n #add-credit-card-panel{\n padding: 15px !important}\n /* Responsive Design */\n @media screen and (max-width: 768px) {\n .add-card .container-creditcard {\n width: 90%;\n padding: 20px;\n }\n \n .add-card input[type=\"submit\"] {\n font-size: 12px;\n padding: 10px;\n }\n }\n .exp-cvc-container-wrap div#exp_month, .exp-cvc-container-wrap div#exp_year, .exp-cvc-container-wrap div#cvv {\n border: 1px solid #dee2e6;\n height: 47px;\n border-radius: 0.375rem;\n padding: 0px 12px;\n\n}\ndiv#card_number{\n border: 1px solid #dee2e6 !important;\n border-radius: 0.375rem !important;\n padding: 0px 12px;\n}\n input#cardholderName::placeholder , input#zipcode::placeholder {\n font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;\n color: #9ca3af !important;\n font-weight: 400 !important; \n font-size: 14px !important; \n}\n \n `}\n </style>\n );\n}\n","import React from 'react'\n\nexport default function SuccessCardMszStyle() {\n return (\n <style>\n {\n `\n .card-success .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .card-success .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n .card-success .payment-success-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 18px 20px 24px;\n width: 335px;\n height: 400px; /* Fixed height */\n background: #FFFFFF;\n border-radius: 12px;\n position: relative;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n border: 1px solid #e3e3e3;\n justify-content: center;\n text-align: center;\n // margin-top: 50px; /* Adjust this to move the content down */\n margin: 50px auto 0 auto !important;\n }\n\n .card-success .success-icon {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n width: 227px;\n height: 116px;\n z-index: 2;\n }\n\n .card-success .circle {\n width: 40px;\n height: 40px;\n border: 1px solid #49B182;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .card-success .circle .fa-check-circle {\n font-size: 20px;\n color: #49B182;\n }\n\n .card-success .success-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n width: 227px;\n }\n\n .card-success .payment-success-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .card-success .thank-you-text {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n opacity: 0.5;\n }\n `\n }\n </style>\n )}","import React from 'react'\nimport SuccessCardMszStyle from './SuccessCardMszStyle'\n\ntype SuccessCardMszProps = {\n onClose: () => void;\n};\nconst SuccessCardMsz: React.FC<SuccessCardMszProps> = ({ onClose }) => {\n return (\n <>\n <SuccessCardMszStyle/>\n <div className='card-success'>\n {/* <div className=\"logo-container\">\n <img src=\"<%= merchant_logo %>\" alt=\"\" className=\"client-logo\" />\n\n\n\n </div> */}\n <div className=\"payment-success-container\">\n <div className=\"success-icon\">\n <div className=\"circle\">\n <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i>\n </div>\n <div className=\"success-text\">\n <div className=\"payment-success-text\">Your card was added successfully.</div>\n <div className=\"thank-you-text\">Thank you </div>\n </div>\n </div>\n </div>\n </div>\n </>\n )\n}\nexport default SuccessCardMsz","import React, { useEffect, useRef, useState } from 'react'\nimport DataScript from '../Datascript';\nimport Loader from '../Loader/Loader';\nimport axios from 'axios';\nimport { fractalGatewayUrl, masterBaseUrl } from '../baseurl';\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage';\nimport { DcLoadingError, PaymentMethodKeys } from '../../utils/Constant'\nimport AddCardSkyStyle from './AddCardSkyStyle'\nimport { formatCardNumberWithCursor } from '@/app/utils/Common';\nimport FractalFieldsAddCardSky from '../Atoms/FractalForm/FractalFieldsAddCardSky';\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment';\nimport FractalTokenizerScript from '../FractalTokenizer';\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\n\ntype Props = {\n session_token: string,\n callback: (resp: any) => void,\n isloading: boolean,\n onCancel: () => void,\n showChecks: boolean,\n merchantName: string,\n signCheckbox: boolean,\n checkedSignCheckbox: boolean,\n onCheckSign: (val: boolean) => void,\n cancelbtnClass: string,\n savebtnClass: string,\n inputClass: string,\n isDual?: boolean,\n customCSS?: string,\n height?: string\n}\n\ninterface CardDetails {\n firstName: string,\n lastName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n zipCode: string;\n authHold: boolean;\n authorise: boolean;\n checkSign: boolean\n\n}\n\nexport function CardOnFile({ session_token, callback, isloading, onCancel, showChecks, merchantName, signCheckbox, checkedSignCheckbox, onCheckSign, cancelbtnClass, savebtnClass, inputClass, isDual, customCSS, height }: Props) {\n const [loading, setLoading] = useState<boolean>(false);\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [seeMore, setSeeMore] = useState<boolean>(false)\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [error, setError] = useState<string>(\"\");\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n const [passFee, setPassFee] = useState<boolean | null>(null);\n const [paymentGateway, setPaymentGateway] = useState<number | undefined>();\n const [dcToken, setDCToken] = useState<number | undefined>();\n const tokenizerRef = useRef<any>(null);\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '14px',\n 'font-weight': '500',\n 'color': '#35254D',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#35254D',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#35254D'\n }\n };\n\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentGateway != 32) {\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Please enter a card number.\";\n // if (!data?.expiryMonth?.trim()) {\n // errors.expiryMonth = \"Please enter an expiry month.\"\n // } else if (Number(data?.expiryMonth) > 12 || Number(data?.expiryMonth) < 1) {\n // errors.expiryMonth = \"Invalid Expiration Month.\"\n // }\n // if (!data?.expiryYear?.trim()) {\n // errors.expiryYear = \"Please enter an expiry year.\"\n // } else if (data?.expiryYear?.trim().length !== 4 || Number(data?.expiryYear) < 2025) {\n // errors.expiryYear = \"Invalid Expiration Year.\"\n // }\n\n // else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n\n // if (!data?.cvv?.trim()) errors.cvv = \"Please enter a CVV.\";\n\n // }\n if (!data?.firstName?.trim()) errors.firstName = \"Please enter a first name.\";\n if (!data?.lastName?.trim()) errors.lastName = \"Please enter a last name.\";\n if (!data?.zipCode?.trim()) errors.zipCode = \"Please enter a zip code.\";\n\n if (signCheckbox && !checkedSignCheckbox) errors.checkSign = \"You must authorize this before proceeding.\";\n if (showChecks && !data?.authHold) errors.authHold = \"You must authorize this before proceeding.\";\n if (showChecks && !data?.authorise) errors.authorise = \"Please confirm your authorization to continue.\";\n\n // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n setCardError(errors);\n\n // Return true if there is any error\n\n\n return Object.keys(errors).length > 0;\n };\n\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n // console.log(value, name);\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const validateCardInputs = (): boolean => {\n let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n\n let errors: Partial<Record<keyof CardDetails, string>> = {}\n if (!validCard) errors.cardNumber = \"Invalid card Number\"\n if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n if (!validCVV) errors.cvv = \"Invalid CVV\"\n\n setCardError(errors)\n\n return validCard && validCVV && validExpirationDate\n }\n\n const handleTokenCallback = async (token: any) => {\n if (token.Error) {\n // console.log(token?.Error);\n setError(token.Error);\n hideLoader();\n } else {\n let data = {\n token: token.Token,\n resp: token\n };\n const updateToken = await axios.post(`${masterBaseUrl}api/v1/gateway/update/token/${session_token}`, data);\n // console.log(updateToken, \"jkdvfhsdjkhf\");\n\n if (updateToken?.status == 200) {\n let respData = {\n Token: updateToken?.data?.data?.gateway_token,\n Brand: token.Brand,\n ExpirationMonth: token.ExpirationMonth,\n ExpirationYear: token.ExpirationYear,\n Last4: token.Last4,\n Bin: token.Bin,\n CVV: token.CVV,\n postalCode: cardData?.zipCode,\n ...(showChecks && { authHold: cardData?.authHold }),\n ...(showChecks && { authorise: cardData?.authorise }),\n };\n hideLoader();\n // console.log(respData, \"respspsp\");\n callback(respData);\n }\n }\n };\n\n const handleFractalTokenFlow = async () => {\n try {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: { md: forge.md.sha1.create() }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // const raw = JSON.stringify({\n // enc_track2_data: encryptedBase64,\n // algorithm: \"RSAES_OAEP_SHA_1\",\n // session_key: sesionResult?.data?.data?.session_key\n // });\n\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders });\n let tokenizeData;\n try {\n tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n\n } catch (err: any) {\n setErrorIframe(err);\n hideLoader();\n }\n\n // console.log(tokenizeData, \"tokeni\");\n\n if (tokenizeData?.token) {\n let token = tokenizeData?.token;\n try {\n let verifyandsaveresp = await axios.post(`${masterBaseUrl}api/v1/gateway/verify-and-save/${session_token}`, { token });\n // console.log(verifyandsaveresp, \"verifyandsaveresp\");\n\n if (verifyandsaveresp?.status == 200) {\n let responsetemp = verifyandsaveresp?.data?.data;\n let respData = {\n Token: responsetemp.gateway_token,\n Brand: responsetemp.card_data.brand,\n ExpirationMonth: responsetemp.card_data.expire_mm,\n ExpirationYear: responsetemp.card_data.expire_yy,\n Last4: responsetemp.card_data.last4,\n Bin: responsetemp.card_data.bin,\n postalCode: cardData?.zipCode\n };\n callback(respData);\n hideLoader();\n }\n } catch (error) {\n console.log(error, \"error\");\n hideLoader();\n }\n }\n } catch (error: any) {\n\n let readableMessage = \"Something went wrong!\";\n\n try {\n const rawError = error?.response?.data || error?.message || \"\";\n\n // Convert to string safely\n const errorText = typeof rawError === \"string\" ? rawError : JSON.stringify(rawError);\n\n // Split safely (avoid crashes even if empty or non-string)\n const lines = errorText.split?.(\"\\n\")?.filter(Boolean) || [];\n const lastLine = lines.at(-1) || \"\";\n\n // Extract message after last colon (if any)\n const parts: any = lastLine.split?.(\": \");\n readableMessage = parts?.length > 1 ? parts.pop().trim() : lastLine.trim() || readableMessage;\n } catch {\n // If *anything* above fails, fallback to a generic message\n readableMessage = \"Something went wrong!\";\n }\n hideLoader()\n setError(readableMessage)\n }\n };\n\n\n\n const handleCardAdd = async (e: any) => {\n e.preventDefault();\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading) return;\n const hasError = validateCardData();\n if (hasError) return;\n\n let isValid = true;\n // if (paymentGateway != 32) {\n // isValid = validateCardInputs();\n // }\n if (!isValid) return;\n showLoader();\n try {\n const result = await axios.get(`${masterBaseUrl}api/v1/gateway/token/${session_token}`, {\n params: {\n pass_fee: passFee\n }\n });\n if (result?.status == 200) {\n const gatewayToken = result?.data?.data?.gateway_token;\n const paymentGateway = result?.data?.data?.paymentGateway;\n\n if (paymentGateway == PaymentMethodKeys?.FRACTALKEY) {\n await handleFractalTokenFlow();\n } else {\n // DatacapWebToken.requestToken(gatewayToken, 'creditCardForm', handleTokenCallback);\n\n try {\n const result = await (window as any).requestDcToken();;\n // console.log(\"Token:\", result.Token);\n if (result.Token) {\n handleTokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading(false);\n }\n }\n }\n } catch (error: any) {\n // console.log(error, \"svuiuhd\");\n hideLoader();\n setError(error?.response?.data?.message || \"Something went wrong!\");\n }\n }\n\n // console.log(cardData, \"uifgudasgf\", cardError);\n\n const handleClose = () => {\n setError(\"\")\n // setCardData({\n // firstName: \"\",\n // lastName: \"\",\n // cardNumber: \"\",\n // expiryMonth: \"\",\n // expiryYear: \"\",\n // cvv: \"\",\n // zipCode: \"\"\n // })\n };\n\n const handleCancel = () => {\n setError(\"\")\n setCardData({\n firstName: \"\",\n lastName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n zipCode: \"\",\n authHold: false,\n authorise: false,\n checkSign: false\n })\n onCancel()\n }\n\n // console.log(passFee, \"aoapoaa\");\n\n const getPaymentDetails = async () => {\n try {\n showLoader()\n const res = await axios.get(`${masterBaseUrl}api/v1/gateway/get-payment-details/${session_token}`);\n // console.log(res, \"respinse\");\n if (res?.status == 200) {\n setPaymentGateway(res?.data?.data?.paymentGateway);\n setDCToken(res?.data?.data?.dctoken)\n // Hand off to the Datacap iframe loader in the same batch\n // that clears the page loader, so there's no gap frame with\n // every loading flag false while DataCapFields' own effect\n // spins up.\n if (res?.data?.data?.paymentGateway === 31 && res?.data?.data?.dctoken) {\n setLoadingIframe(true);\n }\n hideLoader();\n }\n\n } catch (error: any) {\n console.log(error?.response?.data?.result, \"error while getting payment details\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n // setError(error?.response?.data?.message || error?.message || \"Something went wrong\")\n hideLoader()\n }\n\n }\n\n useEffect(() => {\n getPaymentDetails();\n }, [])\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n }, []);\n\n\n return (\n <>\n <DataScript />\n {\n paymentGateway == 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n {\n paymentGateway == 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }}\n />\n )\n }\n <AddCardSkyStyle />\n <Loader loading={loading || isloading || loadingIframe} />\n {error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>}\n {errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>}\n {\n !error && !errorIframe && (\n <div className='creditformbox'>\n {\n paymentGateway == 32 ? (\n <form id='paymentForm' onSubmit={handleCardAdd} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }} >\n <div className=\"name-row\">\n <div className=\"form-group\">\n <label> First Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='first_name'\n placeholder='First Name'\n value={cardData?.firstName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('firstName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.firstName && (\n <small className='error'>{cardError?.firstName}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Last Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='last_name'\n placeholder='Last Name'\n value={cardData?.lastName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('lastName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.lastName && (\n <small className='error'>{cardError?.lastName}</small>\n )\n }\n </div>\n </div>\n {isTokenizerReady &&\n <FractalFieldsAddCardSky\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n extraInputs={\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n }\n />\n }\n {/* <div className=\"form-pay-row\">\n <div className=\"form-group\">\n <label> Card Number <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"card_number\"\n placeholder='Card Number'\n maxLength={19}\n inputMode=\"numeric\"\n value={cardData?.cardNumber || \"\"}\n onChange={(e) => handleCardNumberChange(e)}\n className={inputClass}\n />\n {\n cardError?.cardNumber && (\n <small className='error'>{cardError?.cardNumber}</small>\n )\n }\n </div>\n </div>\n <div className=\"card-pay-row\">\n <div className=\"form-group\">\n <label> Exp Month <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_month\"\n placeholder='MM'\n maxLength={2}\n value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryMonth && (\n <small className='error'>{cardError?.expiryMonth}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Exp Year <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_year\"\n placeholder='YYYY'\n maxLength={4}\n value={cardData?.expiryYear || \"\"}\n onChange={(e) => handleCardChange('expiryYear', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryYear && (\n <small className='error'>{cardError?.expiryYear}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> CVV <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"cvv\"\n placeholder='CVV'\n maxLength={4}\n value={cardData?.cvv || \"\"}\n onChange={(e) => handleCardChange('cvv', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.cvv && (\n <small className='error'>{cardError?.cvv}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n </div> */}\n {\n isDual && (\n <div className='pass-fee-toggle-div'>\n <input\n type=\"checkbox\"\n id=\"pass_fee\"\n className=\"toggle-checkbox\"\n checked={passFee ?? false}\n onChange={(e) => { setPassFee(e.target.checked) }}\n />\n <label htmlFor=\"pass_fee\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Cash Discount</label>\n </div>\n )\n }\n {signCheckbox &&\n <div className=\"checks-row\">\n <input\n name=\"discalosure\"\n type=\"checkbox\"\n id=\"disclosureCheck\"\n checked={checkedSignCheckbox}\n onChange={(e) => onCheckSign(e.target.checked)}\n />\n <label htmlFor=\"disclosureCheck\" className=\"form-check-label\">\n Please agree to the following in order to add Payment method.\n </label>\n </div>}\n {\n signCheckbox && cardError?.checkSign && (\n <small className='check-error'>{cardError?.checkSign}</small>\n )\n }\n {showChecks &&\n <>\n <div className=\"checks-row\">\n <input\n name=\"authHold\"\n type=\"checkbox\"\n id=\"authHold\"\n checked={!!cardData?.authHold}\n onChange={(e) => handleCardChange('authHold', e.target.checked)}\n />\n <label htmlFor=\"authHold\" className=\"form-check-label\">\n To securely save your card on file, we will place a temporary\n authorization hold of $1.00. This is not a charge and will be released\n by your card issuer shortly after verification.\n </label>\n </div>\n {\n cardError?.authHold && (\n <small className='check-error'>{cardError?.authHold}</small>\n )\n }\n <div className=\"checks-row \">\n <input\n name=\"authorise\"\n type=\"checkbox\"\n id=\"authorise\"\n checked={!!cardData?.authorise}\n onChange={(e) => handleCardChange('authorise', e.target.checked)} />\n\n <label htmlFor=\"authorise\" className=\"form-check-label see-more\">\n {!seeMore ?\n <>\n <span>\n By providing your payment information, you authorize {merchantName}, a\n Sky Systemz merchant, to securely store your card on file for future\n pay...{\" \"}\n </span>\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(true); }}>See more ...</a>\n </>\n :\n <>\n <span >\n By providing your payment information, you authorize{\" \"}\n <strong>{merchantName}</strong>, a Sky Systemz merchant, to securely\n store your card on file for future payments. Your card information\n will be encrypted and stored in compliance with PCI-DSS (Payment\n Card Industry Data Security Standard) regulations using Sky\n Systemz’s secure payment technology. This information will be used\n solely for transactions you authorize with{\" \"}\n <strong>{merchantName}</strong>. You may request the removal of your\n stored payment information at any time by contacting{\" \"}\n <strong>{merchantName}</strong> directly. By signing or proceeding with\n this transaction, you acknowledge and agree to this card on file\n authorization.\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(false); }}>See less ...</a>\n </span>\n </>\n\n }\n </label>\n </div>\n {\n cardError?.authorise && (\n <small className='check-error'>{cardError?.authorise}</small>\n )\n }\n </>\n }\n <div className='button-row'>\n <button className={`cancelbtn ${cancelbtnClass} `} type=\"button\" onClick={handleCancel} >Cancel</button>\n <button className={`savebtn ${savebtnClass} `} disabled={loading} type='submit' >Save</button>\n </div>\n </form>\n ) : (\n <form id='creditCardForm' onSubmit={handleCardAdd} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }} >\n <div className=\"name-row\">\n <div className=\"form-group\">\n <label> First Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='first_name'\n placeholder='First Name'\n value={cardData?.firstName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('firstName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.firstName && (\n <small className='error'>{cardError?.firstName}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Last Name <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name='last_name'\n placeholder='Last Name'\n value={cardData?.lastName || \"\"}\n onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('lastName', value);\n }\n }}\n className={inputClass}\n />\n {\n cardError?.lastName && (\n <small className='error'>{cardError?.lastName}</small>\n )\n }\n </div>\n </div>\n <div className=\"form-pay-row\">\n <DataCapFields\n isOpen={true}\n tokenKey={dcToken}\n setLoader={setLoadingIframe}\n customCSS={customCSS}\n height={height}\n onError={(msg: string) => setError(msg || DcLoadingError)}\n />\n </div>\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n {/* <div className=\"form-pay-row\">\n <div className=\"form-group\">\n <label> Card Number <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"card_number\"\n placeholder='Card Number'\n maxLength={19}\n inputMode=\"numeric\"\n value={cardData?.cardNumber || \"\"}\n onChange={(e) => handleCardNumberChange(e)}\n className={inputClass}\n />\n {\n cardError?.cardNumber && (\n <small className='error'>{cardError?.cardNumber}</small>\n )\n }\n </div>\n </div>\n <div className=\"card-pay-row\">\n <div className=\"form-group\">\n <label> Exp Month <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_month\"\n placeholder='MM'\n maxLength={2}\n value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryMonth && (\n <small className='error'>{cardError?.expiryMonth}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Exp Year <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"exp_year\"\n placeholder='YYYY'\n maxLength={4}\n value={cardData?.expiryYear || \"\"}\n onChange={(e) => handleCardChange('expiryYear', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.expiryYear && (\n <small className='error'>{cardError?.expiryYear}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> CVV <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n data-token=\"cvv\"\n placeholder='CVV'\n maxLength={4}\n value={cardData?.cvv || \"\"}\n onChange={(e) => handleCardChange('cvv', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.cvv && (\n <small className='error'>{cardError?.cvv}</small>\n )\n }\n </div>\n <div className=\"form-group\">\n <label> Zip <span className=\"text-danger\">*</span></label>\n <input\n type=\"text\"\n name=\"zipcode\"\n placeholder='Zip Code'\n value={cardData?.zipCode ?? \"\"}\n onChange={(e) => handleCardChange('zipCode', e.target.value)}\n className={inputClass}\n />\n {\n cardError?.zipCode && (\n <small className='error'>{cardError?.zipCode}</small>\n )\n }\n </div>\n </div> */}\n {\n isDual && (\n <div className='pass-fee-toggle-div'>\n <input\n type=\"checkbox\"\n id=\"pass_fee\"\n className=\"toggle-checkbox\"\n checked={passFee ?? false}\n onChange={(e) => { setPassFee(e.target.checked) }}\n />\n <label htmlFor=\"pass_fee\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Cash Discount</label>\n </div>\n )\n }\n {signCheckbox &&\n <div className=\"checks-row\">\n <input\n name=\"discalosure\"\n type=\"checkbox\"\n id=\"disclosureCheck\"\n checked={checkedSignCheckbox}\n onChange={(e) => onCheckSign(e.target.checked)}\n />\n <label htmlFor=\"disclosureCheck\" className=\"form-check-label\">\n Please agree to the following in order to add Payment method.\n </label>\n </div>}\n {\n signCheckbox && cardError?.checkSign && (\n <small className='check-error'>{cardError?.checkSign}</small>\n )\n }\n {showChecks &&\n <>\n <div className=\"checks-row\">\n <input\n name=\"authHold\"\n type=\"checkbox\"\n id=\"authHold\"\n checked={!!cardData?.authHold}\n onChange={(e) => handleCardChange('authHold', e.target.checked)}\n />\n <label htmlFor=\"authHold\" className=\"form-check-label\">\n To securely save your card on file, we will place a temporary\n authorization hold of $1.00. This is not a charge and will be released\n by your card issuer shortly after verification.\n </label>\n </div>\n {\n cardError?.authHold && (\n <small className='check-error'>{cardError?.authHold}</small>\n )\n }\n <div className=\"checks-row \">\n <input\n name=\"authorise\"\n type=\"checkbox\"\n id=\"authorise\"\n checked={!!cardData?.authorise}\n onChange={(e) => handleCardChange('authorise', e.target.checked)} />\n\n <label htmlFor=\"authorise\" className=\"form-check-label see-more\">\n {!seeMore ?\n <>\n <span>\n By providing your payment information, you authorize {merchantName}, a\n Sky Systemz merchant, to securely store your card on file for future\n pay...{\" \"}\n </span>\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(true); }}>See more ...</a>\n </>\n :\n <>\n <span >\n By providing your payment information, you authorize{\" \"}\n <strong>{merchantName}</strong>, a Sky Systemz merchant, to securely\n store your card on file for future payments. Your card information\n will be encrypted and stored in compliance with PCI-DSS (Payment\n Card Industry Data Security Standard) regulations using Sky\n Systemz’s secure payment technology. This information will be used\n solely for transactions you authorize with{\" \"}\n <strong>{merchantName}</strong>. You may request the removal of your\n stored payment information at any time by contacting{\" \"}\n <strong>{merchantName}</strong> directly. By signing or proceeding with\n this transaction, you acknowledge and agree to this card on file\n authorization.\n <a href=\"#\" onClick={(e) => { e.preventDefault(); setSeeMore(false); }}>See less ...</a>\n </span>\n </>\n\n }\n </label>\n </div>\n {\n cardError?.authorise && (\n <small className='check-error'>{cardError?.authorise}</small>\n )\n }\n </>\n }\n <div className='button-row'>\n <button className={`cancelbtn ${cancelbtnClass} `} type=\"button\" onClick={handleCancel} >Cancel</button>\n <button className={`savebtn ${savebtnClass} `} disabled={loading} type='submit' >Save</button>\n </div>\n </form>\n )\n }\n </div>\n )\n }\n </>\n )\n}","import React from 'react'\n\ntype Props = {}\n\nexport default function AddCardSkyStyle({ }: Props) {\n return (\n <style>\n {`\n @import url(\"https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap\");\n\n .creditformbox {\n // max-width: 550px;\n margin: 0 auto;\n font-family: Poppins !important;\n }\n\n .name-row {\n display: grid;\n grid-gap: 10px;\n grid-template-columns:1fr 1fr;\n }\n\n label {\n display: block;\n color: #383838;\n font-size: 16px;\n }\n\n .form-group span.text-danger{\n color:red;\n }\n .form-group small.error{\n color:red;\n font-size:11px;\n }\n .name-row .form-group {\n display: block;\n width: 100%;\n margin-bottom: 15px;\n }\n\n .creditformbox input, .creditformbox select {\n border: 1.25px solid rgba(234, 236, 239, 1);\n color: rgba(94, 94, 94, 0.75);\n border-radius: 10px;\n width: -webkit-fill-available;\n padding: 10px 12px;\n font-size: .875rem;\n min-height: 20px;\n }\n\n .form-pay-row {\n display: block;\n width: 100%;\n }\n\n .form-pay-row .form-group {\n display: block;\n width: 100%;\n margin-bottom: 15px;\n }\n\n .card-pay-row {\n display: flex;\n width: 100%;\n gap: 10px;\n flex-wrap: wrap;\n }\n\n .card-pay-row .form-group {\n flex: 1;\n margin-bottom: 15px;\n min-width: 100px;\n }\n .card-pay-row #exp_month , .card-pay-row #exp_year, .card-pay-row #cvv , .form-pay-row #card_number{\n height: 20px;\n border: 1.25px solid rgba(234, 236, 239, 1);\n color: rgba(94, 94, 94, 0.75);\n border-radius: 10px;\n width: -webkit-fill-available;\n padding: 10px 12px;\n font-size: .875rem;\n }\n\n .creditformbox input:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);\n }\n\n .checks-row{\n display:flex;\n align-items:start;\n gap:10px\n }\n .checks-row input {\n border: 1.25px solid rgba(234, 236, 239, 1);\n color: rgba(94, 94, 94, 0.75);\n border-radius: 10px;\n min-width: 16px !important;\n width:16px !important;\n padding: 10px 12px;\n font-size: .875rem;\n max-height: 16px !important;\n height: 16px !important;\n }\n // .checks-row input.is-valid:checked{\n // background-color: #198754;\n // border-color: #198754;\n // background-image: url(data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e);\n // }\n .check-error{\n color:red;\n font-size:11px;\n padding-left:25px\n }\n .button-row{\n display: flex;\n width: 100%;\n gap: 10px;\n flex-wrap: wrap;\n margin-top: 20px !important\n }\n .button-row .btn{\n flex: 1;\n margin-top:20px;\n }\n\n .cancelbtn {\n font-size:15px;\n color: #000000 !important;\n background-color: transparent !important;\n background: transparent !important;\n border:1px solid #000000 !important;\n border-radius: 10px !important;\n padding: 10px 25px !important;\n cursor:pointer;\n font-size: 16px;\n }\n .cancelbtn:hover {\n background:#000000 !important;\n color:#ffffff !important;\n }\n\n .savebtn {\n font-size:15px;\n color: #2979FF;\n background-color: transparent;\n background: transparent;\n border:1px solid #2979FF;\n border-radius: 10px;\n padding: 10px 25px;\n cursor:pointer;\n font-size: 16px;\n }\n .savebtn:hover {\n background:#2979FF;\n color:#ffffff;\n }\n \n .toggle-label {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 24px;\n background-color: #ccc;\n border-radius: 12px;\n cursor: pointer;\n transition: background-color 0.3s;\n }\n\n .toggle-label::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: left 300ms linear;\n }\n\n .toggle-checkbox {\n display: none;\n }\n\n .toggle-checkbox:checked + .toggle-label {\n background-color: #4caf50;\n }\n\n .toggle-checkbox:checked + .toggle-label::before {\n left: 18px;\n }\n .pass-fee-toggle-div {\n display: flex;\n align-items: center;\n gap: 10px;\n padding-top: 10px;\n }\n `}\n\n\n </style>\n )\n}","'use client'\nimport { useEffect, useRef } from \"react\";\n\ninterface Props {\n fractalStyles: any;\n tokenizerRef: React.MutableRefObject<any>;\n extraInputs?: any;\n}\n\nconst FractalFieldsAddCardSky = ({ fractalStyles, tokenizerRef, extraInputs }: Props) => {\n const instanceRef = useRef<any>(null);\n\n useEffect(() => {\n const Tokenizer = (window as any).FractalTokenizer;\n\n if (!Tokenizer) {\n console.error(\"Tokenizer not available\");\n return;\n }\n\n const instance = new Tokenizer({\n styles: fractalStyles,\n });\n\n instanceRef.current = instance;\n tokenizerRef.current = instance;\n\n instance.mountField(\"card_number\", \"card_number\");\n instance.mountField(\"exp_month\", \"exp_month\");\n instance.mountField(\"exp_year\", \"exp_year\");\n instance.mountField(\"cvv\", \"cvv\");\n\n console.log(\"Fractal fields mounted\");\n\n return () => {\n try {\n instance.destroy?.();\n } catch (err) { }\n\n tokenizerRef.current = null;\n };\n }, []);\n\n return (\n <>\n <div className=\"form-pay-row\">\n <div className=\"form-group\" >\n <label> Card Number <span className=\"text-danger\">*</span></label>\n <div\n id=\"card_number\"\n className=\"form-control card-number-new\"\n style={{ display: \"inline-block\" }}\n\n />\n </div>\n </div>\n <div className=\"card-pay-row\">\n <div className=\"form-group\">\n <label> Exp Month <span className=\"text-danger\">*</span></label>\n <div\n id=\"exp_month\"\n className=\"form-control required card-cvv-in\"\n style={{ display: \"inline-block\" }}\n />\n </div>\n <div className=\"form-group\">\n <label> Exp Year <span className=\"text-danger\">*</span></label>\n <div\n id=\"exp_year\"\n className=\"form-control required card-cvv-in\"\n style={{ display: \"inline-block\" }}\n\n />\n </div>\n <div className=\"form-group\">\n <label> CVV <span className=\"text-danger\">*</span></label>\n <div\n id=\"cvv\"\n className=\"form-control card-cvv-in required\"\n style={{ display: \"inline-block\" }}\n\n />\n </div>\n {extraInputs}\n </div>\n </>\n );\n};\n\nexport default FractalFieldsAddCardSky;\n","import React, { useEffect, useRef, useState } from 'react'\nimport DataScript from '../Datascript'\nimport Chargewidgetstyles from '../Charge/Chargewidgetstyles'\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles'\nimport FractalWidgetStyles from '../Charge/FractalWidgetStyles'\nimport { baseUrl, fractalGatewayUrl, masterBaseUrl, S3Url } from '../baseurl'\nimport axios from 'axios'\nimport socket from '../socketClient'\nimport { accountTypes, formatCardNumberWithCursor, formatUSD, isValidJson } from '@/app/utils/Common'\nimport Swal from 'sweetalert2'\nimport CustomModal2 from '../CustomModal/CustomModal2'\nimport ErrorCardMessage from '../ErrorCardMessage/ErrorCardMessage'\nimport SuccessMsz from '../SuccessMessage/SuccessMsz'\nimport Loader from '../Loader/Loader'\nimport { NumericFormat } from 'react-number-format'\nimport FractalFields, { SurchargeLookupOptions, SurchargeLookupResult, TokenizerSession } from '../Atoms/FractalForm/FractalFields'\nimport FractalTokenizerScript from '../FractalTokenizer'\nimport { DataCapFields, DataCapScriptLoader } from '../Datacap-Payment'\nimport { DcLoadingError } from '@/app/utils/Constant'\nimport {\n FractalOrderSummary, FractalModalHeader, FractalMethodToggle,\n FractalSavedMethods, FractalReaderList, FractalFooter, FractalField, FractalCheckbox,\n SummaryLine,\n} from '../Fractal/FractalCheckoutUI'\n\n\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\ndeclare let FractalTokenizer: any;\n\ntype Props = {\n merchantPublicKey: string;\n customerId?: string;\n orderID?: string;\n from?: string;\n amount: string;\n discount?: string;\n tax?: string;\n surcharge?: string;\n pass_fee?: boolean;\n orderGuid: string;\n onTriggerPay?: (fn: () => void) => void;\n allowPartial: boolean;\n cashDiscount?: string;\n}\n\ntype activeinTabs = 'form' | 'list'\n\n\ninterface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n}\ninterface achDetails {\n name: string;\n routingNumber: string;\n accountNumber: string;\n confirmAccountNumber: string;\n bankName: string;\n accountType: string;\n companyName?: string;\n}\n\ninterface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n card_issue_type?: string | null;\n}\n\ninterface PaymentDevice {\n id: number;\n device_id: number;\n device_name: string;\n}\n\ninterface OrderDetails {\n orderId?: string;\n}\n\ninterface PaymentData {\n paymentGateway: number;\n isSkyFiAccount: boolean;\n logo: string;\n bname: string;\n card_list: Card[];\n customer_name: string;\n is_primary: string;\n paymentDeviceList: PaymentDevice[];\n orderDetails: OrderDetails;\n dctoken: string;\n showSurcharge?: number;\n surchargeProgram?: number;\n}\ninterface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n card_issue_type?: string | null;\n}\n\ninterface SelectedReader {\n id?: number;\n device_id?: number;\n device_name?: string;\n}\n\nexport function PartialPayment(props: Props) {\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (props.onTriggerPay) {\n props.onTriggerPay(() => {\n handleShow();\n });\n }\n }, [props]);\n\n let mastercard = S3Url + 'widget/mc-img.svg'\n let visa = S3Url + 'widget/visa-img.svg'\n let americanexp = S3Url + 'widget/ae-img.svg'\n let discover = S3Url + 'widget/discover-img.svg'\n let defaultcard = S3Url + 'widget/card.svg'\n let trash = S3Url + 'widget/Trash.svg'\n let bank = S3Url + 'widget/bank.svg'\n let secure = S3Url + 'widget/secure-img.png'\n let pov = S3Url + 'widget/pov-by.png'\n let pax = S3Url + 'widget/pax.svg'\n\n const [loading, setLoading] = useState<boolean>(false);\n const [loading2, setLoading2] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [surchargeLookupLoading, setSurchargeLookupLoading] = useState<boolean>(false);\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n const [show, setShow] = useState<boolean>(false);\n const [activetab, setActive] = useState<string>('card');\n const [activeinCard, setActiveinCard] = useState<activeinTabs>('form')\n const [activeinBank, setActiveinBank] = useState<activeinTabs>('form')\n const [saveCardInfo, setSaveCardInfo] = useState<boolean>(false);\n const [saveACHinfo, setSaveACHinfo] = useState<boolean>(false);\n const fractalpayClientKey = props.merchantPublicKey;\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [achData, setAchData] = useState<achDetails>()\n const [achError, setAchError] = useState<Partial<Record<keyof achDetails, string>>>({});\n const [cardList, setCardList] = useState([])\n const [bankList, setBankList] = useState([])\n const [selectedCard, setSelectedCard] = useState<SelectedCard>()\n const [selectedReader, setSelectedReader] = useState<SelectedReader>()\n const [cashDiscount, setCashDiscount] = useState<number | undefined>(Number(props?.amount));\n const [aftertaxAmount, setAfterTaxAmount] = useState<number>(Number(props?.amount));\n const [partialAmount, setPartialAmount] = useState<string | undefined>('');\n const [partialError, setPartialError] = useState<string>(\"\");\n const [isBankConsentChecked, setIsBankConsentChecked] = useState<boolean>(false);\n const [errorBankConsent, setErrorBankConsent] = useState<string>(\"\");\n const [saveACHConsent1, setSaveACHConsent1] = useState<boolean>(false);\n const [errorBankConsentOther, setErrorBankConsentOther] = useState<string>(\"\");\n const [loaderText, setLoderText] = useState<string>(\"\");\n let [isDebitAdjusted, setIsDebitAdjusted] = useState<boolean>(false);\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '16px',\n 'color': '#212529',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#212529',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#212529'\n }\n };\n\n\n const [paymentData, setPaymentData] = useState<PaymentData>()\n let [tranId, setTranId] = useState(\"\")\n // Pre-charge surcharge assessment from the tokenizer (PAN-complete lookup) or COF lookup.\n const [surchargeResult, setSurchargeResult] = useState<SurchargeLookupResult | null>(null);\n\n // ---- surcharge-lookup-aware card total ----\n // Surcharging only reduces the card price when the merchant runs a true surcharge program;\n // cash-discount merchants always show/charge the full price regardless of card type, same\n // as GetPaymentPage.\n const isSurchargeProgram = Number(paymentData?.surchargeProgram) === 1\n const fundingType = surchargeResult?.card_issue_type?.toLowerCase()\n const feeExempt = fundingType === 'debit' || fundingType === 'prepaid'\n const cardTotal = isSurchargeProgram && feeExempt ? Number(cashDiscount ?? props?.amount ?? 0) : Number(aftertaxAmount)\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount - (amount * surchargeVal);\n return originalAmount; // rounding to 2 decimals\n };\n\n\n const CalculateAfterTaxAmount = (amount: any, surcharge: any) => {\n const surchargeVal = (Number(surcharge) || 0) / 100;\n const originalAmount = +amount + +(amount * surchargeVal);\n return originalAmount; // rounding to 2 decimals\n };\n\n // Mints a tokenized session for the surcharge lookup — same endpoint and shape as the\n // charge flow. Resolves null on failure so the lookup fails soft.\n const createSurchargeSession = async (): Promise<TokenizerSession | null> => {\n try {\n const requestOptions = { method: \"POST\", redirect: \"follow\" };\n const res = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions);\n const data = res?.data?.data;\n const public_key_pem = data?.publicKeyPem || data?.public_key_pem;\n const session_key = data?.session_key;\n if (!public_key_pem || !session_key) return null;\n return { session_key, public_key_pem };\n } catch (err) {\n console.error(\"Surcharge session error\", err);\n return null;\n }\n };\n\n // Lookup inputs, read lazily at lookup time. amount is the pre-fee subtotal in cents,\n // preferring the partial amount when one is set and valid.\n const getSurchargeOptions = (): SurchargeLookupOptions => ({\n amount: Math.round((partialAmount && !partialError ? Number(partialAmount) : Number(cashDiscount ?? props?.amount ?? 0)) * 100),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n\n // Surcharge assessment for a saved card (card-on-file) — there's no PAN to run through the\n // tokenizer iframe for a saved card, so this hits the backend by card_id instead. Fails soft,\n // same as createSurchargeSession/lookupSurcharge.\n const runCofSurchargeLookup = async (cardId: string): Promise<SurchargeLookupResult | null> => {\n try {\n const res = await axios.post(`${baseUrl}surcharge-lookup-cof`, {\n fractalpayPublicKey: fractalpayClientKey,\n customer_id: props?.customerId,\n card_id: cardId,\n amount: partialAmount && !partialError ? Number(partialAmount) : Number(cashDiscount ?? props?.amount ?? 0),\n cardholder_billing_zip: cardData?.zipCode || undefined,\n });\n const data = res?.data?.data;\n if (!data) return null;\n return {\n card_brand: data.card_brand,\n card_issue_type: data.card_issue_type,\n surcharge_allowed: data.surcharge_allowed,\n max_surcharge_percent: data.max_surcharge_percent,\n max_surcharge_amount: data.max_surcharge_amount,\n };\n } catch (err) {\n console.error(\"COF surcharge lookup failed\", err);\n return null;\n }\n };\n\n // Fires whenever the customer picks a saved card. Bank accounts are never card-surcharged,\n // so skip the call entirely for those — same waiver the live-PAN path applies.\n useEffect(() => {\n const surchargingOn = Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee;\n if (!surchargingOn || !selectedCard?.id || selectedCard.card_type === 'Bank') {\n setSurchargeResult(null);\n return;\n }\n let cancelled = false;\n setSurchargeLookupLoading(true);\n runCofSurchargeLookup(selectedCard.id).then((result) => {\n if (cancelled) return;\n setSurchargeResult(result);\n setSurchargeLookupLoading(false);\n });\n return () => { cancelled = true; };\n }, [selectedCard?.id, selectedCard?.card_type, paymentData?.surchargeProgram, props?.pass_fee]);\n\n useEffect(() => {\n if (show) {\n if (props?.pass_fee) {\n setAfterTaxAmount(Number(props?.amount));\n setCashDiscount(Number(props?.cashDiscount));\n } else {\n setAfterTaxAmount(Number(props?.amount));\n setCashDiscount(Number(props?.amount));\n }\n }\n\n // if (props?.pass_fee) {\n // } else {\n // setCashDiscount(undefined);\n // }\n }, [show, props?.pass_fee, props?.amount, props?.surcharge])\n\n // for payment popup\n const handleClose = () => {\n setShow(false);\n setActive('card')\n setError(\"\")\n setSuccess(false)\n setTranId(\"\")\n setSurchargeResult(null)\n setPaymentData(undefined)\n setLoadingIframe(false)\n setAchData({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setAchError({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setCardError({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveACHinfo(false)\n setSaveCardInfo(false)\n setSelectedCard({\n card_type: \"\",\n cardlastfourdigit: \"\",\n expmonth: 1,\n expyear: 2025,\n primary_card: 0,\n firstname: \"\",\n id: \"\",\n lastname: \"\",\n })\n setSelectedReader({})\n setCashDiscount(0)\n setActiveinBank('form')\n setActiveinCard('form')\n setLoading2(false);\n setLoading(false);\n setBankList([]);\n setCardList([]);\n setPartialAmount('');\n setPartialError('');\n setIsBankConsentChecked(false);\n setErrorBankConsent('');\n setSaveACHConsent1(false)\n setErrorBankConsentOther('');\n setLoderText(\"\");\n };\n const handleShow = () => setShow(true);\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n\n const handleChangeAch = (e: any) => {\n const { name, value } = e.target\n const numericFields = [\"routingNumber\", \"accountNumber\", \"confirmAccountNumber\"];\n if (name == \"name\") {\n\n\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return\n\n }\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n setCardError(errors);\n\n // Return true if there is any error\n return Object.keys(errors).length > 0;\n };\n const validateAchData = (): boolean => {\n const errors: Partial<Record<keyof achDetails, string>> = {};\n const data = achData\n if (!data?.name?.trim()) errors.name = \"Name is required\";\n if (!data?.accountNumber?.trim()) errors.accountNumber = \"Account number is required\";\n if (data?.accountNumber?.trim() && data?.accountNumber?.trim() !== data?.confirmAccountNumber?.trim()) errors.confirmAccountNumber = \"Account numbers must match\";\n if (!data?.bankName?.trim()) errors.bankName = \"Bank name is required\";\n if (!data?.routingNumber?.trim()) errors.routingNumber = \"Routing Number is required\";\n\n\n if (data?.routingNumber && data?.routingNumber?.length !== 9) errors.routingNumber = \"Routing number must be 9 digits\";\n\n\n if ((data?.accountType === 'business saving' || data?.accountType === 'business checking')) {\n if (!data?.companyName || data?.companyName === \"\") {\n errors.companyName = \"Company Name is required for business accounts\";\n }\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n setErrorBankConsent('Above consent is required');\n }\n\n if (saveACHinfo && !saveACHConsent1) {\n setErrorBankConsentOther('Your consent is required to save your bank details for future use');\n }\n\n setAchError(errors);\n return (Object.keys(errors).length > 0);\n };\n\n\n\n const submitFunc = async (e: any) => {\n e.preventDefault();\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading2) return;\n if (partialError) {\n return\n }\n if (activetab !== 'ach') {\n const hasError = validateCardData()\n if (hasError) return\n else {\n let validCard = true;\n let validExpirationDate = true;\n let validCVV = true;\n\n if (validCard && validCVV && validExpirationDate) {\n\n // showLoader()\n setLoading2(true)\n try {\n let tokenCallback = async function (response: any) {\n\n if (response.Error) {\n setError(response.Error)\n // hideLoader();\n setLoading2(false)\n\n\n } else {\n let name = cardData?.cardName;\n let postal_code = cardData?.zipCode;\n\n response.name = name;\n response.postal_code = postal_code;\n response.isCardSave = `${saveCardInfo}`\n response.isCharge = true;\n response.posSalesIdEncode = paymentData?.orderDetails?.orderId;\n response.partial_amount = partialAmount && !partialError ? partialAmount : cardTotal\n\n\n socket.emit(\"sendMessage\", response)\n let eventName: string = paymentData?.orderDetails?.orderId!\n socket.on(eventName, (data: any) => {\n if (isValidJson(data?.data)) {\n let apiResponse = JSON.parse(data.data);\n if (apiResponse?.result) {\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveCardInfo(false)\n setTranId(apiResponse?.transactionId)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(apiResponse?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n }\n }\n\n if (paymentData?.paymentGateway === 32) {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n try {\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n\n try {\n const tokenizeData = await tokenizerRef.current.createToken({\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n });\n\n const card_issue_type = tokenizeData?.bin_lookup_result?.card_issue_type || null;\n\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExemptCard = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExemptCard && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`);\n }\n const reqData = JSON.stringify({\n ...tokenizeData,\n isSaveCardChecked: saveCardInfo,\n name: cardData?.cardName,\n postal_code: cardData?.zipCode,\n customer_id: props?.customerId,\n partial_amount: partialAmount && !partialError ? partialAmount : cardTotal,\n card_issue_type\n })\n\n const reqData2 = JSON.stringify({\n \"pre_sales_id\": `${paymentData?.orderDetails?.orderId!}`,\n \"token\": `${tokenizeData?.token}`,\n \"json_response\": `${reqData}`\n })\n let myHeaders2 = JSON.stringify({\n \"Content-Type\": \"application/json\"\n })\n const requestOptions = {\n method: \"POST\",\n headers: myHeaders2,\n body: reqData2,\n redirect: \"follow\",\n isChargeviafractal: true,\n };\n\n socket.emit(\"sendMessage\", requestOptions)\n socket.on('chargeviafractalgateway', (data: any) => {\n if (isValidJson(data?.data)) {\n let paymentRes = JSON.parse(data?.data)\n if (paymentRes?.result) {\n setTranId(paymentRes?.data?.transactionId)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setLoading2(false)\n setError(paymentRes?.message || \"Something went wrong.\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n })\n\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n } else {\n try {\n const result = await (window as any).requestDcToken();;\n // console.log(\"Token:\", result.Token);\n if (result.Token) {\n tokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading2(false);\n }\n }\n } catch (err: any) {\n // hideLoader()\n setLoading2(false)\n\n setError(err?.response?.data?.message || err?.message || \"Something went wrong.\")\n }\n }\n }\n } else {\n let hasError = validateAchData()\n if (saveACHinfo && !saveACHConsent1) {\n hasError = true;\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n hasError = true;\n }\n if (hasError) return\n else {\n setLoading2(true)\n let dataForm = {\n fractalpayPublicKey: fractalpayClientKey,\n label: achData?.name || \"John Doe\",\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n amount: partialAmount && !partialError ? partialAmount : String(cashDiscount || 0),\n isSaveAch: saveACHinfo,\n customer_id: props?.customerId,\n order_id: props?.orderID,\n tax: props?.tax,\n discount: props?.discount,\n surcharge: props?.surcharge,\n isChargeACH: true,\n company_name: achData?.companyName || \"\",\n orderGuid: props?.orderGuid\n }\n // showLoader()\n socket.emit(\"sendMessage\", dataForm)\n socket.on('ach-incoming', (data: any) => {\n if (data?.status == \"Failed\") {\n if (typeof (data?.message) == \"object\") {\n Object.values(data?.message).forEach((message: any) => {\n setError(message || \"Something went wrong\");\n });\n } else {\n setError(data?.message || \"Something went wrong\")\n }\n } else {\n setTranId(data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n }\n })\n }\n }\n\n }\n\n\n const getPaymentDetails = async () => {\n showLoader()\n try {\n const data = {\n fractalpayPublicKey: fractalpayClientKey,\n \"customer_id\": props?.customerId,\n pass_fee: props?.pass_fee,\n orderGuid: props?.orderGuid\n }\n let paymentData = await axios.post(`${baseUrl}get-payment-details`, data)\n setPaymentData(paymentData?.data?.data)\n if (!paymentData?.data?.data?.paymentGateway) {\n handleClose()\n setError(\"Something went wrong.\")\n }\n let willShowCardForm = true\n if (paymentData?.data?.data?.card_list && paymentData?.data?.data?.card_list?.length > 0) {\n let banklists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type == 'Bank')\n let cardlists = paymentData?.data?.data?.card_list?.filter((card: any) => card?.card_type !== 'Bank')\n if (cardlists?.length > 0) {\n setActiveinCard('list')\n willShowCardForm = false\n }\n if (banklists?.length > 0) {\n setActiveinBank('list')\n }\n setCardList(cardlists)\n setBankList(banklists)\n } else {\n setActive('card')\n }\n\n if (paymentData?.data?.data?.paymentDeviceList && paymentData?.data?.data?.paymentDeviceList?.length > 0) {\n setSelectedReader(paymentData?.data?.data?.paymentDeviceList[0])\n }\n\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no gap frame with every\n // loading flag false while DataCapFields' own effect spins up.\n // Only when the card form (not the saved-methods list) will\n // actually render DataCapFields, otherwise this would get stuck\n // true forever since DataCapFields never mounts to clear it.\n if (willShowCardForm && paymentData?.data?.data?.paymentGateway === 31 && paymentData?.data?.data?.dctoken) {\n setLoadingIframe(true)\n }\n\n hideLoader()\n } catch (err: any) {\n console.log(err);\n hideLoader()\n setError(err?.response?.data?.message || err?.message || \"Something went wrong\")\n }\n }\n\n const handlechargeCustomer = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n let customer_id = props?.customerId\n let discount = String(props?.discount)\n let surcharge = String(props?.surcharge)\n let tax = String(props?.tax)\n let fractalpayPublicKey = props?.merchantPublicKey\n let order_id = props?.orderID\n let amount = partialAmount && !partialError ? partialAmount : String(aftertaxAmount)\n let card_id = selectedCard?.id\n let card_type = selectedCard?.card_type\n let card_issue_type = selectedCard?.card_issue_type\n\n if (partialError) {\n return\n }\n\n if (fractalpayPublicKey && order_id && amount && cashDiscount) {\n if (customer_id) {\n if (card_id) {\n let amount\n if (partialAmount && !partialError) {\n amount = partialAmount;\n } else if (card_type === \"Bank\") {\n amount = cashDiscount;\n } else {\n amount = cardTotal;\n }\n\n let chargeobj: any = {\n amount: amount,\n order_id,\n customer_id,\n card_id,\n fractalpayPublicKey,\n isCardSave: saveCardInfo,\n discount,\n surcharge,\n tax,\n orderGuid: props?.orderGuid,\n pass_fee: props?.pass_fee,\n require3ds: false\n }\n\n if (partialAmount && !partialError && card_type !== \"Bank\") {\n chargeobj.ispartialPayment = true;\n }\n\n let { isCardSave, ...rest } = chargeobj\n\n\n let endpoint = card_type === \"Bank\" ? \"charge-ach\" : \"charge-by-card\"\n\n let chargeurl = baseUrl + endpoint\n const headers = {\n 'Content-Type': 'application/json'\n }\n // showLoader()\n setLoading2(true)\n // Debit and prepaid are both fee-exempt (never surcharged).\n const feeExemptCard = ['debit', 'prepaid'].includes(String(card_issue_type || '').toLowerCase());\n if (feeExemptCard && props?.pass_fee && paymentData?.surchargeProgram == 1) {\n setLoderText(`Processing ${card_issue_type} card without fee`)\n }\n socket.emit(\"sendMessage\", { url: chargeurl, body: card_type == 'Bank' ? rest : chargeobj, isChargebycard: true })\n socket.on('charge-by-card', (response: any) => {\n if (response?.result == true || response?.status == true) {\n setIsDebitAdjusted(response.data?.adjustedForDebit);\n setTranId(response.data?.transaction_id)\n setSuccess(true)\n // hideLoader()\n setLoading2(false)\n } else {\n setError(response?.message || \"Something went wrong.\")\n }\n })\n\n } else {\n setError(\"Please Select A Card/ACH\")\n }\n } else {\n setError(\"Please Select Customer\")\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n const handleChargewithEMV = async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.currentTarget.blur();\n if (loading2) return;\n let fractalpayPublicKey = props?.merchantPublicKey\n let customer_order_id = props?.orderID\n let amount = partialAmount && !partialError ? partialAmount : String(aftertaxAmount)\n let customer_id = props?.customerId\n\n if (!selectedReader?.device_id) {\n setError(\"Please Select A Payment Device\")\n return\n }\n\n if (fractalpayPublicKey && customer_order_id && amount) {\n setLoading2(true)\n let obj = {\n amount,\n fractalpayPublicKey,\n customer_order_id,\n device_id: selectedReader?.device_id,\n customer_id: customer_id || \"\"\n }\n\n try {\n let response = await axios.post(`${baseUrl}charge-with-reader`, obj)\n\n\n if (response?.data?.result == true) {\n setTranId(response?.data?.data?.transaction_id)\n setSuccess(true)\n setLoading2(false)\n } else {\n setError(response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong.\")\n setLoading2(false)\n }\n } else {\n setError(\"Something went wrong.\")\n }\n }\n\n useEffect(() => {\n if (show && fractalpayClientKey) {\n\n getPaymentDetails()\n }\n }, [fractalpayClientKey, show])\n\n const handleDeleteCard = async (cardId: any) => {\n Swal.fire({\n icon: 'warning',\n text: 'Do you want to delete the card?',\n showCancelButton: true,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n reverseButtons: true,\n buttonsStyling: false,\n customClass: {\n confirmButton: 'swal2-confirm btn btn-dark',\n cancelButton: 'swal2-cancel btn btn-dark',\n popup: 'custom-swal-popup',\n icon: 'custom-swal-icon'\n }\n }).then(async (result) => {\n if (result.isConfirmed) {\n setLoading2(true)\n try {\n let obj = {\n card_id: cardId,\n customer_id: props?.customerId,\n fractalpayPublicKey: props?.merchantPublicKey\n }\n\n const res = await axios.post(`${baseUrl}delete-customer-card`, obj)\n setLoading2(false)\n\n getPaymentDetails()\n Swal.fire({\n icon: 'success',\n title: 'Deleted!',\n text: 'Card deleted.',\n confirmButtonText: 'OK',\n showConfirmButton: true,\n timer: 1000,\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n\n } catch (err) {\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Error!',\n text: 'Failed to delete the card.',\n confirmButtonText: 'OK',\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n });\n }\n\n\n } else if (result.dismiss === Swal.DismissReason.cancel) {\n Swal.fire({\n icon: 'info',\n text: 'Card not deleted',\n confirmButtonText: 'OK',\n buttonsStyling: false,\n customClass: {\n confirmButton: 'btn btn-dark float-end',\n actions: 'swal2-actions-end'\n }\n });\n\n }\n });\n };\n\n const getCardType = (card: string) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return card;\n }\n };\n\n // console.log(activeinCard, \"activeinCard\", \"activeinBank\", activeinBank);\n\n const handlePartialChange = (values: any) => {\n // console.log(values, \"values\");\n if (activetab === 'ach') {\n if ((Number(cashDiscount)?.toFixed(2) < values?.floatValue) || (values?.floatValue <= 0)) {\n setPartialAmount(values?.value);\n setPartialError(`Partial amount cannot exceed ${formatUSD(Number(cashDiscount)?.toFixed(2))}`);\n } else {\n setPartialAmount(values?.value);\n setPartialError(\"\");\n }\n } else {\n // cardTotal already drops the surcharge when the entered/selected card came back\n // debit or prepaid from the surcharge lookup, so the cap follows suit.\n if ((Number(cardTotal)?.toFixed(2) < values?.floatValue) || (values?.floatValue <= 0)) {\n setPartialAmount(values?.value);\n setPartialError(`Partial amount cannot exceed ${formatUSD(Number(cardTotal)?.toFixed(2))}`);\n } else {\n setPartialAmount(values?.value);\n setPartialError(\"\");\n }\n }\n\n }\n\n useEffect(() => {\n // cardTotal already drops the surcharge when the entered/selected card came back\n // debit or prepaid from the surcharge lookup, so the cap follows suit.\n const baseAmount = activetab === \"ach\"\n ? Number(cashDiscount)\n : Number(cardTotal);\n\n const partial = Number(partialAmount);\n\n if (partialAmount) {\n if (partial <= 0 || partial > baseAmount) {\n setPartialError(`Partial amount cannot exceed ${formatUSD(baseAmount.toFixed(2))}`);\n } else {\n setPartialError(\"\");\n }\n } else {\n setPartialError(\"\");\n }\n }, [activetab, partialAmount, cashDiscount, cardTotal]);\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n\n\n }, []);\n\n // ---- derived display values for the redesigned checkout UI (mirrors GetPaymentPage.tsx) ----\n const merchantName = paymentData?.bname || paymentData?.customer_name || 'the merchant'\n // Avoid \"Invoice #Invoice123\" when the order id already carries an \"Invoice\" prefix.\n const invoiceNo = String(props?.orderID || '').replace(/^\\s*invoice\\s*#?\\s*/i, '').trim()\n const invoiceLabel = invoiceNo ? `Invoice #${invoiceNo}` : 'Invoice'\n const baseAmount = Number(cashDiscount ?? props?.amount ?? 0)\n const surchargeFee = Math.max(cardTotal - baseAmount, 0)\n // Once a saved method is selected in the merged list, its own card_type decides bank vs.\n // card — not the tab. Falls back to the tab when the list isn't showing a selection.\n const isBankView = activetab !== 'reader' && activeinCard === 'list' && !!selectedCard?.id\n ? selectedCard?.card_type === 'Bank'\n : activetab === 'ach'\n const discountNum = Number(props?.discount || 0)\n const taxNum = Number(props?.tax || 0)\n const hasFee = surchargeFee > 0 && !!props?.pass_fee\n const showSurchargeLine = isSurchargeProgram && !isBankView && hasFee\n const summarySubtotal = (isSurchargeProgram || isBankView) ? baseAmount : cardTotal\n const fmtNum = (n: number) => Number(n).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })\n\n // The partial-amount input, when set and valid, overrides whatever the selected method\n // would otherwise charge.\n const partialOverride = partialAmount && !partialError ? Number(partialAmount) : null\n const methodTotal = isBankView ? Number(cashDiscount || 0) : cardTotal\n const effectiveTotal = partialOverride ?? methodTotal\n\n // Bank/ACH is temporarily hidden for partial payment — saved bank accounts are dropped\n // from the merged list and the Bank toggle tab isn't offered. Flip this back to\n // `paymentData?.isSkyFiAccount` to restore it.\n const hideBank = true\n const savedMethods: any[] = [...(cardList || []), ...(hideBank ? [] : (bankList || []))]\n const hasSaved = savedMethods.length > 0\n const showList = hasSaved && activetab !== 'reader' && activeinCard === 'list'\n\n const availableMethods: string[] = [\n 'card',\n ...(!hideBank && paymentData?.isSkyFiAccount ? ['ach'] : []),\n ...(paymentData?.paymentDeviceList && paymentData.paymentDeviceList.length > 0 ? ['reader'] : []),\n ]\n\n const goToList = () => { setActive('card'); setActiveinCard('list'); setActiveinBank('list'); setError(''); }\n const payWithOther = () => { setActive('card'); setActiveinCard('form'); setActiveinBank('form'); setError(''); }\n const switchMethod = (m: string) => {\n setActive(m)\n if (m === 'card' || m === 'ach') { setActiveinCard('form'); setActiveinBank('form'); }\n setError('')\n }\n\n const rightTitle = showList\n ? 'Payment methods'\n : activetab === 'reader'\n ? 'Reader payment'\n : activetab === 'ach'\n ? 'Bank payment'\n : 'Card payment'\n\n const showBack = hasSaved && !showList\n\n const MethodToggle = (\n <FractalMethodToggle\n methods={[\n { value: 'card', label: 'Card' },\n ...(availableMethods.includes('ach') ? [{ value: 'ach', label: 'Bank' }] : []),\n ...(availableMethods.includes('reader') ? [{ value: 'reader', label: 'Reader' }] : []),\n ]}\n active={activetab}\n onChange={switchMethod}\n />\n )\n\n const summaryLines: SummaryLine[] = [\n { label: 'Subtotal', value: fmtNum(summarySubtotal) },\n { label: 'Discount', value: fmtNum(discountNum), muted: true },\n { label: 'Tax', value: fmtNum(taxNum), muted: true },\n ...(showSurchargeLine ? [{ label: 'Surcharge', value: formatUSD(surchargeFee.toFixed(2)) }] : []),\n ]\n\n const summaryNote = isBankView\n ? null\n : !hasFee ? null\n : <div className=\"fps-note\"><b>{formatUSD(baseAmount.toFixed(2))}</b> if customer pays with debit or by bank (no surcharge).</div>\n\n const partialInput = props?.allowPartial ? (\n <FractalField label=\"Partial payment\" htmlFor=\"partialpayment\" error={partialError}>\n <NumericFormat\n id=\"partialpayment\"\n className=\"fps-input\"\n prefix=\"$\"\n thousandSeparator\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n placeholder=\"Enter partial amount\"\n value={partialAmount}\n onValueChange={handlePartialChange}\n />\n </FractalField>\n ) : null\n\n const LeftSummary = (\n <FractalOrderSummary\n logo={paymentData?.logo}\n invoiceLabel={invoiceLabel}\n lines={summaryLines}\n total={formatUSD(effectiveTotal.toFixed(2))}\n cardIcons={isBankView ? null : { visa, mastercard, amex: americanexp, discover }}\n note={summaryNote}\n secureIcon={secure}\n extra={partialInput}\n />\n )\n\n const AuthText = (\n <p className=\"fps-auth\">\n By paying, you authorize {merchantName} to charge {formatUSD(effectiveTotal.toFixed(2))} to your {isBankView ? 'account' : 'card'}. <u>Refund policy</u>.\n </p>\n )\n\n return (\n <>\n <DataScript />\n {\n paymentData?.paymentGateway === 32 && (\n <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n )\n }\n\n {\n paymentData?.paymentGateway === 31 && (\n <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }} />\n )\n }\n <Chargewidgetstyles />\n <CardBankRadioStyles />\n <FractalWidgetStyles />\n <>\n <button ref={buttonRef} style={{ display: 'none' }} className=\"paymentBtn\" onClick={handleShow}>\n Pay\n </button>\n\n <CustomModal2\n open={show}\n onClose={handleClose}\n maxWidth=\"760px\"\n >\n {error && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} />\n </div>}\n {errorIframe && <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={errorIframe} onClose={() => { setErrorIframe(\"\") }} />\n </div>}\n {success && <SuccessMsz onClose={handleClose} tranId={tranId} isDebitAdjusted={isDebitAdjusted} />}\n {!error && !success && !errorIframe &&\n <>\n {(loading || loading2 || loadingIframe || surchargeLookupLoading) && <Loader loading={loading || loading2 || loadingIframe || surchargeLookupLoading} loaderText={loaderText} />}\n\n <div className=\"fps-modal\">\n {LeftSummary}\n\n <section className=\"fps-content\">\n <FractalModalHeader title={rightTitle} onBack={showBack ? goToList : undefined} onClose={handleClose} />\n\n {/* ---------- Saved methods list ---------- */}\n {showList ? (\n <>\n <FractalSavedMethods\n sectionLabel=\"Cards / bank accounts\"\n items={savedMethods.map((card: any) => {\n const isBankCard = card?.card_type === 'Bank'\n let isDisabled = false\n if (paymentData?.paymentGateway) {\n isDisabled = paymentData?.paymentGateway != card?.payment_method_type && !isBankCard\n }\n return {\n id: card?.id,\n primaryText: `**** ${card?.cardlastfourdigit}`,\n secondaryText: isBankCard ? undefined : `${card?.expmonth}/${card?.expyear}`,\n badge: isBankCard ? 'BANK' : (card?.card_issue_type || 'CARD'),\n brandLogo: isBankCard ? undefined : getCardType(card?.card_type),\n disabled: isDisabled,\n }\n })}\n selectedId={selectedCard?.id}\n onSelect={(id) => setSelectedCard(savedMethods.find((c: any) => c?.id === id))}\n onRemove={(id) => handleDeleteCard(id)}\n removeIcon={trash}\n otherLabel=\"Pay with other method\"\n onOther={payWithOther}\n otherIcon={defaultcard}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2 || !selectedCard?.id || surchargeLookupLoading}\n onPay={handlechargeCustomer}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'reader' ? (\n /* ---------- Reader ---------- */\n <>\n {MethodToggle}\n <FractalReaderList\n sectionLabel=\"Readers\"\n items={(paymentData?.paymentDeviceList || []).map((r: any) => ({ id: String(r?.id), name: r?.device_name }))}\n selectedId={selectedReader?.id != null ? String(selectedReader?.id) : undefined}\n onSelect={(id) => setSelectedReader((paymentData?.paymentDeviceList || []).find((r: any) => String(r?.id) === id))}\n icon={pax}\n />\n <FractalFooter\n authText={AuthText}\n disabled={loading2}\n onPay={handleChargewithEMV}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </>\n ) : activetab === 'ach' ? (\n /* ---------- Bank form ---------- */\n <form\n id=\"ACHPaymentForm\"\n autoComplete=\"off\"\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on account\" htmlFor=\"nameonaccount\" error={achError?.name}>\n <input id=\"nameonaccount\" className=\"fps-input\" maxLength={100} placeholder=\"John Doe\" name=\"name\" value={achData?.name ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Routing number\" htmlFor=\"routingnumber\" error={achError?.routingNumber}>\n <input id=\"routingnumber\" className=\"fps-input\" maxLength={9} placeholder=\"000000000\" name=\"routingNumber\" value={achData?.routingNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Account number\" htmlFor=\"accountnumber\" error={achError?.accountNumber}>\n <input id=\"accountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"accountNumber\" value={achData?.accountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Confirm account number\" htmlFor=\"confirmaccountnumber\" error={achError?.confirmAccountNumber}>\n <input id=\"confirmaccountnumber\" className=\"fps-input\" maxLength={16} placeholder=\"0000000000\" name=\"confirmAccountNumber\" value={achData?.confirmAccountNumber ?? ''} onChange={handleChangeAch} />\n </FractalField>\n <FractalField label=\"Bank name\" htmlFor=\"bankname\" error={achError?.bankName}>\n <input id=\"bankname\" className=\"fps-input\" maxLength={100} placeholder=\"My Bank\" name=\"bankName\" value={achData?.bankName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n {(achData?.accountType === 'business saving' || achData?.accountType === 'business checking') && (\n <FractalField label=\"Company name\" htmlFor=\"companyName\" error={achError?.companyName}>\n <input id=\"companyName\" className=\"fps-input\" maxLength={100} placeholder=\"My Company\" name=\"companyName\" value={achData?.companyName ?? ''} onChange={handleChangeAch} />\n </FractalField>\n )}\n <FractalField label=\"Account type\" htmlFor=\"accounttype\">\n <select id=\"accounttype\" name=\"accountType\" className=\"fps-input\" value={achData?.accountType ?? ''} onChange={handleChangeAch}>\n <option value=\"\">Select</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>{type.label}</option>\n ))}\n </select>\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"saveACH\" checked={saveACHinfo} onChange={(v) => {\n setSaveACHinfo(v)\n if (!v) { setSaveACHConsent1(false); setErrorBankConsentOther('') }\n }}>\n Save this bank account. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n {saveACHinfo && (\n <>\n <FractalCheckbox id=\"saveACHConsent1\" checked={saveACHConsent1} onChange={(v) => {\n setSaveACHConsent1(v)\n if (v) setErrorBankConsentOther('')\n }}>\n By providing my bank account information and selecting ‘Save for future payments’, I authorize {merchantName} to store my bank account details for future ACH payments. I understand that future payments may be initiated using this saved account in accordance with my instructions. I confirm I am authorized to use this bank account.\n </FractalCheckbox>\n {errorBankConsentOther && <span className=\"fps-error\">{errorBankConsentOther}</span>}\n </>\n )}\n {!saveACHinfo && (\n <>\n <FractalCheckbox id=\"achconsent\" checked={isBankConsentChecked} onChange={(v) => {\n setIsBankConsentChecked(v)\n if (v) setErrorBankConsent('')\n }}>\n By selecting this box, I authorize {merchantName} to initiate a one-time electronic ACH debit from my bank account for the total amount displayed on this screen, including any applicable processing fee. I confirm that I am authorized to use this account and that the bank account information I provided is correct.\n </FractalCheckbox>\n {errorBankConsent && <span className=\"fps-error\">{errorBankConsent}</span>}\n </>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </form>\n ) : (\n /* ---------- Card form ---------- */\n <form\n id={paymentData?.paymentGateway === 32 ? 'paymentForm' : 'PaymentForm'}\n onSubmit={submitFunc}\n onKeyDown={(e) => { if (e.key === 'Enter' && loading2) { e.preventDefault(); e.stopPropagation(); } }}\n style={{ display: 'flex', flexDirection: 'column', gap: '20px', flex: '1 1 auto', minHeight: 0, width: '100%' }}\n >\n {MethodToggle}\n <div className=\"fps-scroll\">\n <FractalField label=\"Name on card\" htmlFor=\"cardHolderName\" error={cardError?.cardName}>\n <input\n id=\"cardHolderName\"\n className=\"fps-input\"\n maxLength={100}\n placeholder=\"John Doe\"\n value={cardData?.cardName || ''}\n onChange={(e: any) => {\n const value = e.target.value\n if (/^[a-zA-Z\\s]*$/.test(value)) handleCardChange('cardName', value)\n }}\n />\n </FractalField>\n\n <FractalField label={paymentData?.paymentGateway === 32 ? \"Card number\" : \"\"} error={cardError?.cardNumber}>\n <div className={`fps-tokenizer ${paymentData?.paymentGateway !== 32 ? 'dc-tokenizer' : ''}`}>\n {paymentData?.paymentGateway === 32 ? (\n show && isTokenizerReady && <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n surchargeEnabled={Number(paymentData?.surchargeProgram) === 1 && !!props?.pass_fee}\n createSurchargeSession={createSurchargeSession}\n getSurchargeOptions={getSurchargeOptions}\n onSurchargeResult={setSurchargeResult}\n />\n ) : (\n <DataCapFields isOpen={show} tokenKey={paymentData?.dctoken} setLoader={setLoadingIframe} onError={(msg: string) => setError(msg || DcLoadingError)} />\n )}\n </div>\n </FractalField>\n\n <FractalField label=\"Zip\" htmlFor=\"zip\" error={cardError?.zipCode}>\n <input id=\"zip\" className=\"fps-input\" maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? ''} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n </FractalField>\n\n {props?.customerId && (\n <FractalCheckbox id=\"save_card\" checked={saveCardInfo} onChange={(v) => setSaveCardInfo(v)}>\n Save this card. {merchantName} may charge it for future invoices. <u>See terms</u>.\n </FractalCheckbox>\n )}\n </div>\n <FractalFooter\n authText={AuthText}\n submit\n disabled={loading2 || surchargeLookupLoading}\n buttonLabel={`Pay ${formatUSD(effectiveTotal.toFixed(2))} to ${merchantName}`}\n />\n </form>\n )}\n </section>\n </div>\n </>\n }\n </CustomModal2>\n </>\n </>\n )\n}\n","'use client';\nimport React, { useEffect, useState, useMemo, useRef } from 'react';\nimport DataScript from '../Datascript';\nimport SkyChargewidgetstyles from './SkyChargewidgetstyles';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles';\nimport CustomModal2styles from '../CustomModal/CustomModal2styles';\nimport ModelContentSky from '../Atoms/ModelContentSky/ModelContentSky';\nimport axios from 'axios';\nimport { masterBaseUrl } from '../baseurl';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport { DataCapScriptLoader } from '../Datacap-Payment';\n\ntype Props = {\n session_token: string;\n surcharge: string;\n amount: string;\n submitBtnText?: string;\n submitBtnClass?: string;\n customerId?: string;\n callback: (resp: any) => void;\n merchantName: string;\n isPreAuth: boolean;\n submitBtnIcon?: any;\n isRequest?: boolean;\n pass_fee?: boolean;\n pass_fee_amount?: number | string;\n bankAmount: string;\n bankSurcharge?: string;\n require3ds: boolean;\n autoTrigger: boolean;\n isPartial?: boolean;\n partialRef?: string;\n customCSS?: string;\n disableSubmitBtn?: boolean;\n};\n\nexport const PaymentWidget = ({\n amount,\n bankAmount,\n submitBtnText = 'Pay',\n session_token,\n customerId,\n callback,\n merchantName = 'merchant',\n isPreAuth,\n surcharge = '0',\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds = false,\n autoTrigger = false,\n isPartial,\n bankSurcharge,\n partialRef,\n customCSS,\n disableSubmitBtn = false\n}: Props) => {\n\n const [show, setShow] = useState(autoTrigger || false);\n const [loading, setLoading] = useState(false);\n const [childHandleClose, setChildHandleClose] = useState<() => void>(() => () => { });\n const [orderGuid, setOrderGuid] = useState(null);\n const [remainingAmount, setRemainingAmount] = useState(null)\n // const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n // -----------------------------------------------\n // ✅ Build fresh commonProps whenever parent props change\n // -----------------------------------------------\n const initialCommonProps = useMemo(\n () => ({\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n setShow,\n setHandleCloseRef: setChildHandleClose,\n isPartial,\n bankSurcharge,\n partialRef,\n customCSS,\n disableSubmitBtn\n }),\n [\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n isPartial,\n bankSurcharge,\n partialRef,\n disableSubmitBtn\n ]\n );\n // -----------------------------------------------\n // Current working props passed to modal content\n // -----------------------------------------------\n const [commonProps, setCommonProps] = useState(initialCommonProps);\n\n // -----------------------------------------------\n // Reset commonProps every time modal opens\n // -----------------------------------------------\n useEffect(() => {\n if (show) {\n setCommonProps(initialCommonProps);\n }\n }, [show, initialCommonProps]);\n\n // -----------------------------------------------\n // Fetch updated amounts for partial payments\n // -----------------------------------------------\n const getskyosOrderDetails = async () => {\n setLoading(true);\n try {\n const res = await axios.get(\n `${masterBaseUrl}api/v1/gateway/get-order-details/${session_token}`,\n { params: { isPartial, partialRef } }\n );\n\n if (res?.data?.result) {\n const data = res.data.data;\n if (data?.orderGuid) {\n setOrderGuid(data?.orderGuid);\n setRemainingAmount(data?.remainingAmount);\n }\n setCommonProps(prev => ({\n ...prev,\n amount: data.amount,\n pass_fee_amount: data.pass_fee_amount,\n pass_fee: data.pass_fee\n }));\n }\n } catch (error) {\n console.log('error while getting skyosorderdeatils', error);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (show && isPartial && partialRef) {\n getskyosOrderDetails();\n }\n }, [show, isPartial, partialRef]);\n\n // console.log(\"isTokenizerReady\",isTokenizerReady);\n \n\n // -----------------------------------------------\n // Render UI\n // -----------------------------------------------\n return (\n <>\n <link href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css\" />\n\n <DataScript />\n {/* <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} /> */}\n <SkyChargewidgetstyles />\n <CardBankRadioStyles />\n <CustomModal2styles />\n {/* <DataCapScriptLoader /> */}\n\n\n\n\n {!autoTrigger && (\n <button className={submitBtnClass || 'paymentBtn'} disabled={disableSubmitBtn} onClick={() => setShow(true)}>\n {submitBtnText}\n {submitBtnIcon}\n </button>\n )}\n\n {!autoTrigger ? (\n <CustomModal2 open={show} onClose={childHandleClose}>\n <ModelContentSky show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n </CustomModal2>\n ) : (\n <ModelContentSky show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n )}\n </>\n );\n};\n","import React from \"react\";\n\nexport default function SkyChargewidgetstyles() {\n const primarycolor = \"#000\";\n const primarybgcolor = \"#fff\";\n const primarybodycolor = \"#212529\";\n const primarybordercolor = \"#dee2e6\";\n return (\n <style>\n {`\n @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); \n body\n {\n font-family: 'Inter', sans-serif;\n }\n input\n {\n font-family: 'Inter', sans-serif !important;\n } \n .frac-form .form-group-frac{\n padding: 5px 0;\n }\n .frac-form .mb-4{\n margin-bottom : 10px !important\n }\n .frac-form .save-ach-div{\n display:flex !important;\n gap:5px !important;\n align-items:start;\n }\n \n .frac-form .card-cvv-in{\n height : 36px !importantt; \n }\n\n .frac-form .pay-payment-amount{\n text-align:start !important\n }\n .frac-form .pay-amount{\n text-align:start !important\n }\n .frac-form .pay-main-logo{\n text-align:start !important\n }\n\n\n \n .paymentBtn {\n background-color: black;\n border: none;\n color: white;\n padding: 15px 32px;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n font-size: 16px;\n margin: 4px 2px;\n cursor: pointer;\n border-radius: 180px;\n /* width: auto; */\n } \n \n .main-logo {\n text-align: center;\n margin-bottom: 20px;\n }\n\n .main-logo img {\n max-width: 180px;\n }\n\n .pay-main-box {\n width: 365px !important;\n height: 93%;\n background: 0 0 #ffffff;\n border-radius: 12px;\n\n\n border: 1px solid #E0DFE2;\n margin: 0 auto;\n display: block;\n padding: 0px 26px !important\n }\n .pay-main-box .pay-header {\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n }\n \n .pay-main-box .pay-header button {\n border: 0;\n background: none;\n padding: 0;\n box-shadow: 0;\n outline: inherit;\n }\n \n .pay-main-box h1 {\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .tab {\n overflow: hidden;\n padding: 5px;\n border-radius: 8px;\n display: flex;\n justify-content: space-around;\n margin-bottom:12px\n }\n\n /* Style the buttons inside the tab */\n .tab button {\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n background:white;\n padding: 11px 16px;\n transition: 0.3s;\n font-size: 16px;\n width: 143px;\n border-radius: 5px;\n box-shadow: inherit;\n outline: none;\n color: ${primarycolor};\n }\n\n /* Change background color of buttons on hover */\n .tab button:hover {\n background-color: #f0f0f0;\n }\n\n /* Create an active/current tablink class */\n // .tab button.active {\n // background-color: #ccc;\n // }\n\n /* Style the tab content */\n \n \n .parent-pay-container{\n padding: 24px;\n }\n .pay-container{\n display: grid;\n grid-template-columns: 2fr 3fr;\n \n }\n .pay-main{\n padding-y: 20px}\n\n .request-payment-close-popup {\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n}\n .pay-conatiner-one{\n border-right: 1px solid #E0DFE2;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n }\n .pay-conatiner-one-first{\n \n min-height:inherit !important;\n }\n .pay-conatiner-one-last{\n display:flex;\n font-size:12px;\n gap:5px;\n max-width:250px;\n align-items:center;\n color:black !important\n }\n .pay-conatiner-one-last img{\n width : 17px;\n height:17px\n }\n .pay-conatiner-two{\n padding: 0 5% 0;\n }\n .pay-logo-container{\n border-bottom: 1px solid #E0DFE2\n }\n .pay-heading{\n margin: 0;\n flex: 1;\n padding: 10px 0;\n font-size: 23px;\n font-weight: 500;\n color: #35254D;\n align-items: start;\n display: flex;\n }\n .pay-main-logo > img{\n width: 50%;\n }\n .pay-main-logo-res > img{\n width: 50%;\n display : none\n }\n \n .pay-payment-amount{\n display: block;\n font-size: 12px;\n color: #727272;\n margin-bottom: 8px;\n }\n .pay-amount-conatiner{\n margin-top: 6%;\n }\n .pay-amount{\n color: #000000;\n font-size: 38px;\n display: block;\n line-height: 110%;\n letter-spacing: -1px;\n }\n .frac-form label{\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n margin-bottom: 2px !important;\n font-weight: 600 !important;\n font-size: 12px !important;\n display:block !important;\n text-align : left !important;\n text-transform: uppercase !important;\n }\n .frac-form .frac-fee-text{\n display: block;\n padding: 10px 0 4px;\n font-family: 'IBM Plex Mono', monospace !important;\n color: #727272 !important;\n font-size: 12px;\n line-height: 1.4;\n }\n .frac-form .frac-fee-amount{\n color: #c62828 !important;\n }\n .form-control-frac{\n display: block;\n width: 100%;\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: ${primarybodycolor};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: ${primarybgcolor};\n background-clip: padding-box;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n }\n .form-control-frac:focus{\n border-color: #86b7fe;\n outline: 0;\n }\n .toggle-num-wrapper {\n position: relative;\n }\n .card-number-new{\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n border-bottom: none;\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n padding-left: .75rem;\n }\n .exp-date-year-container .form-group {\n flex: 1;\n padding-left:.75rem !important;\n}\n .card-crdi {\n display: flex;\n border: 1px solid ${primarybordercolor};\n border-radius: 0.375rem;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .exp-date-year-container{\n display: flex;\n flex-wrap: wrap;\n }\n .exp-date-year-container .form-group-frac{\n flex:1;\n // padding: 0px !important\n \n }\n\n .exp-date {\n float: left;\n // width: 30%\n }\n\n .exp-date input {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n\n .exp-year {\n float: left;\n // width: 30%\n }\n\n .exp-year input {\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid ${primarybordercolor};\n }\n\n .exp-date input:focus {\n position: relative;\n z-index: 10;\n }\n\n .security-digit {\n float: right;\n // width: 40%;\n position: relative;\n }\n\n .security-digit input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right:0;\n }\n .card-expiry-new{\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n }\n .form-control-frac{box-sizing: border-box ;}\n #PaymentForm .form-group-frac{\n padding:5px 0 ;\n }\n \n .toggle-label {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 24px;\n background-color: #ccc;\n border-radius: 12px;\n cursor: pointer;\n transition: background-color 0.3s;\n }\n\n .toggle-label::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: left 300ms linear;\n }\n\n .toggle-checkbox {\n display: none;\n }\n\n .toggle-checkbox:checked + .toggle-label {\n background-color: #4caf50;\n }\n\n .toggle-checkbox:checked + .toggle-label::before {\n left: 18px;\n }\n .ach-scrl {\n max-height: 380px;\n min-height: 380px;\n overflow-y: auto;\n padding-right: 6px;\n }\n .mb-4{\n margin-bottom:4px\n }\n .ach-scrl::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .ach-scrl::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n\n .error-span{\n color:red !important;\n font-size:12px !important;\n text-align: left !important;\n width: 100% !important;\n display: block;\n }\n\n .charge-customer-name-frac{\n color: #161616;\n font-family: Inter;\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n line-height: 32px;\n letter-spacing: -0.48px;\n text-transform: capitalize;\n margin-top:0;\n margin-bottom:16px !important;\n text-align:left !important\n }\n .card-ach-heading-frac {\n color: #727272;\n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.24px;\n margin : 0 0 10px !important; \n text-align : left\n}\n .card-list-div{\n max-height : 190px;\n overflow-y : auto;\n border:1px solid #E0DFE2;\n border-radius : 8px\n }\n \n \n .card-list-div::-webkit-scrollbar{\n width:2px;\n background-color:#F5F5F5\n }\n .card-list-div::-webkit-scrollbar-thumb{\n background-color:#35254D\n }\n \n .card-list-single-div{\n border-bottom: 1px solid #E0DFE2;\n padding : 8px 11px;\n display : flex ;\n align-items:center;\n justify-content : space-between;\n gap:12px\n }\n .card-list-single-div:last-child {\n border-bottom: none;\n}\n .card-lint-div-in{\n min-height:444px}\n .card-number-radio{\n display:flex;\n gap:12px;\n }\n .card-number-radio .card-number-last-four{\n color:#161616 !important;\n font-family:Inter !important;\n font-size:14px !important;\n font-weight:500 !important;\n font-style:normal !important;\n line-height : 18px !important;\n latter-spacing:-0.18px !important\n }\n .card-expiry-date{\n margin:0;\n color:#00000080;\n font-family:Inter;\n font-size:14px;\n font-weight:500;\n font-style\"normal;\n line-height : 18px;\n latter-spacing:-0.18px\n }\n .pay-with-other-card {\n margin-top : 12px;\n padding:12px 32px;\n border :1px solid #E0DFE2;\n border-radius : 1000px;\n display: flex;\n justify-content : center;\n align-items:center;\n gap:10px;\n // width:100%;\n background:white;\n cursor:pointer;\n color:#161616;\n text-align:center\n font-family: Inter;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.28px;\n // margin-bottom: 50px;\n }\n .charge-payment-back-btn {\n display: flex;\n padding: 6px 12px !important ;\n align-items: center;\n gap: 6px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n curso:pointer;\n color:black\n}\n .res-charge-payment-back-btn{\n padding: 9px 16px;\n align-items: center;\n gap: 6px;\n margin-bottom: 20px;\n border-radius: 1000px;\n border: 1px solid #E0DFE2;\n background: #FFF;\n box-shadow: 0px 6px 12px 0px rgba(206, 197, 221, 0.31);\n font-size:16px;\n curso:pointer;\n color:black;\n display:none \n }\n .btn {\n padding: 11px 23px;\n background-color: black;\n color: white;\n border: none;\n border-radius: 6px;\n font-weight: bold;\n margin: 0 10px;\n cursor: pointer;\n}\n\n.custom-swal-icon {\n margin: 20px auto;\n}\n\n.custom-swal-popup {\n font-size: 16px;\n text-align: center;\n}\n\n .frac-form .res-pay-con{\n display:none\n }\n\n .saveachtext p, .saveachtext b {\n font-size: 12px !important;\n color: #727272 !important;\n }\n\n .cardicon-img img {\n margin-top: -2px !important;\n }\n\n .bankicon-img img {\n margin-top: -4px !important;\n }\n\n .cardicon {\n margin-right : 8px !important;\n width : 18px !important;\n }\n\n .bankicon {\n margin-right : 8px !important;\n width : 18px !important;\n }\n\n \n.frac-tooltip-wrapper {\n position: absolute;\n right:0;\n}\n\n.frac-tooltip-icon {\n cursor: pointer;\n}\n.frac-tooltip-mn{\nposition:relative;\n}\n.frac-tooltip-text {\n display: none;\n position: absolute;\n top:-15px;\n right: 22px;\n background: #161616;\n color: white;\n padding: 15px;\n border-radius: 10px;\n width: 200px;\n font-size:12px;\n word-break: break-word;\n white-space: normal;\n z-index: 999;\n}\n\n.frac-tooltip-wrapper:hover .frac-tooltip-text {\n display: block;\n}\n\n.frac-tooltip-text p,.frac-tooltip-text b {\n font-size : 12px !important;\n line-height : 1.5 !important;\n margin-bottom : 10px !important;\n}\n\n .amt-pay-con {\n padding-right: 24px;\n}\n\n\n\n@media (max-width: 768px) {\n.card-lint-div-in {\n min-height: auto;\n margin-bottom: 10px;\n}\n .ach-scrl {\n min-height: auto !important;\n margin-bottom: 10px;\n}\n.request-payment-close-popup {\n right: 12px !important;\n top: 12px !important;\n}\n\n .parent-pay-container{\n padding:24px;\n }\n .pay-container {\n grid-template-columns: 1fr;\n padding: 10px 5%;\n border:1px solid #E0DFE2;\n border-radius : 12px\n }\n .pay-conatiner-one{\n border-right: none;\n }\n .pay-conatiner-one-first{\n min-height:0\n }\n .pay-main-logo > img{\n display: none;\n }\n .pay-main-logo-res > img {\n display:block;\n margin:auto\n }\n \n .pay-logo-container{\n border :none\n }\n // .res-charge-payment-back-btn {\n // display:flex !important\n // }\n // .charge-payment-back-btn{\n // display:none !important\n // }\n \n .frac-new-form .pay-amount-conatiner {\n margin-top: 0px;\n margin-bottom: 24px;\n }\n .frac-form .res-pay-con{\n display:flex;\n justify-content :space-between;\n align-items:center;\n padding-bottom : 10px\n }\n .amt-pay-con {\n padding-right: 0px;\n }\n .pay-conatiner-one-last{\n display:none}\n .pay-conatiner-two{\n padding:0\n }\n\n \n }\n @media (max-width : 512px){\n .tab button {\n padding: 6px 16px;\n }\n \n} \n\n\n.frac-cash-discount-fee {\n display: flex;\n padding: 11px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n border-radius: 8px;\n border: 1px solid #E0DFE2;\n background: #F6F6F7;\n margin-top: 24px;\n }\n .frac-cash-discount-fee small {\n color:#727272;\n font-size: 12px;\n font-weight: 500;\n }\n .frac-cash-discount-fee p{\n margin:0px;\n font-size: 14px;\n font-weight: 500;\n }\n .frac-card-payment-heading {\n font-size: 24px;\n font-style: normal;\n font-weight: 600;\n margin:0px;\n }\n\n .frac-heading-card-wrap {\n display: flex;\n align-items: center;\n margin-bottom:12px;\n }\n .frac-backarrow {\n margin-right: 10px;\n }\n .frac-charge-payment-back-btn-wrap , .frac-tab-2{\n display: none;\n }\n .frac-pay-conatiner-one{\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n min-height: auto;\n }\n\n .frac-form .saveachlabel {\n margin-bottom : 0px !important;\n }\n\n .frac-partial-payment-input{\n margin-top: 12px !important; \n }\n \n .challengeUrlclass-frac{\n height : 90vh;\n width : 100%;\n border-radius : 8px;\n border : none;\n }\n\n\n div#cvv {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 0;\n }\n div#exp_year {\n height: 36px;\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid #dee2e6;\n }\n div#exp_month {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid #dee2e6;\n }\n .exp-date-year-container .form-group {\n flex: 1;\n }\n.input-main-wrap-frac{\nmargin:0px !important;\npadding:0px !important;\n}\n\n\n.toggle-num-wrapper-new div#card_number {\n display: block !important;\n}\n .toggle-num-wrapper-new .input-main-wrap-frac {\n height: 36px;\n}\n .toggle-num-wrapper-new:focus {\n border: 1px solid #004eab !important;\n}\n .frac-or {\n position: relative;\n margin: 15px 0;\n text-align: center;\n}\n .frac-or:before {\n position: absolute;\n left: 0;\n transform: translateY(-50%);\n top: 50%;\n height: 1px;\n width: 100%;\n background: #E0DFE2;\n content: '';\n z-index: 1;\n}\n .frac-or span {\n background: transparent;\n font-size: 13px;\n margin: 0 auto;\n width: 15px;\n font-weight: 500;\n text-transform: uppercase;\n color: #727272;\n padding: 3px;\n position: relative;\n z-index: 3;\n}\n button#gpay-button-online-api-id{\n width: 100%;\n }\n\n\n `}\n </style>\n );\n}\n","import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport Loader from '../../Loader/Loader'\nimport ErrorCardMessage from '../../ErrorCardMessage/ErrorCardMessage'\nimport { applePayMerchantId, fractalGatewayUrl, googlePayEnvironment, googlePayGatewayMerchantId, googlePayMerchantId, masterBaseUrl, S3Url } from '../../baseurl'\nimport axios from 'axios'\nimport { DcLoadingError, PaymentMethodKeys } from '@/app/utils/Constant'\nimport Swal from 'sweetalert2'\nimport { ThreeDSChallenge } from '../ThreedsCheckout/ThreeDSChallenge'\nimport { CardBankRadio } from '../CardBankRadio'\nimport { accountTypes, formatCardNumberWithCursor, formatUSD } from '@/app/utils/Common'\nimport CheckoutWrapper from '../ThreedsCheckout/ThreedsCheckout'\nimport { IoArrowBack } from 'react-icons/io5'\nimport { CardList } from '../CardList/CardList'\nimport { NumericFormat } from 'react-number-format'\nimport FractalFields from '../FractalForm/FractalFields'\nimport { DataCapFields, DataCapScriptLoader } from '../../Datacap-Payment'\nimport ErrorCardOverlay from '../../ErrorCardMessage/ErrorCardOverlay'\nimport FractalTokenizerScript from '../../FractalTokenizer'\n// import GooglePayComponent from '../Googlepay/Googlepay'\nimport ApplePayButton from '../Applepay/ApplePayButton'\n\ndeclare let DatacapWebToken: any;\ndeclare let forge: any;\n\ntype Props = {\n session_token: string,\n // callback: (resp: any) => void,\n // isloading: boolean,\n // onCancel: () => void,\n // showChecks: boolean,\n // merchantName: string,\n surcharge: string\n amount: string,\n submitBtnText?: string,\n submitBtnClass?: string,\n customerId?: string,\n callback: (resp: any) => void,\n merchantName: string,\n isPreAuth: boolean,\n submitBtnIcon?: any,\n isRequest?: boolean,\n pass_fee?: boolean,\n pass_fee_amount?: number | string;\n bankAmount: string;\n bankSurcharge?: string,\n require3ds: boolean,\n autoTrigger: boolean,\n show: boolean,\n setShow: React.Dispatch<React.SetStateAction<boolean>>\n setHandleCloseRef?: React.Dispatch<React.SetStateAction<() => void>>;\n isPartial?: boolean\n partialRef?: string,\n loadingPrev?: boolean,\n orderGuid?: string | null,\n remainingAmount?: string | null,\n onSubmit?: (submitFn: () => void) => void;\n onLoad?: boolean;\n customCSS?: string;\n}\n\ninterface CardDetails {\n cardName: string,\n cardNumber: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n orderId: string;\n zipCode: string;\n}\ninterface achDetails {\n name: string;\n routingNumber: string;\n accountNumber: string;\n confirmAccountNumber: string;\n bankName: string;\n accountType: string;\n companyName?: string;\n}\n\n\ninterface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n}\n\n\n\ninterface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n}\n\n\ninterface PaymentDevice {\n id: number;\n device_id: number;\n device_name: string;\n}\n\ntype activeinTabs = 'form' | 'list'\n\nconst ModelContentSky = ({ amount, bankAmount, submitBtnText = 'Pay', session_token, customerId, callback, merchantName = \"merchant\", isPreAuth, surcharge = \"0\", submitBtnClass, submitBtnIcon, isRequest, pass_fee, pass_fee_amount, require3ds = false, autoTrigger = false, show, setShow, setHandleCloseRef, isPartial, bankSurcharge, partialRef, loadingPrev = false, orderGuid: ordGuid, remainingAmount: remAmount, onSubmit, onLoad = true, customCSS }: Props) => {\n const hasRunRef = useRef(false);\n const cardFormRef = useRef<HTMLFormElement | null>(null);\n const bankFormRef = useRef<HTMLFormElement | null>(null);\n const expiryYearRef = useRef<HTMLInputElement | null>(null);\n const expiryMonthRef = useRef<HTMLInputElement>(null);\n const cardListRunRef = useRef(false);\n const threeDSContainerRef = useRef<HTMLDivElement>(null);\n const [activetab, setActive] = useState<string>('card');\n const [activeList, setActiveList] = useState<string>('card')\n const [cardData, setCardData] = useState<CardDetails>()\n const [cardError, setCardError] = useState<Partial<Record<keyof CardDetails, string>>>({});\n const [achData, setAchData] = useState<achDetails>()\n const [achError, setAchError] = useState<Partial<Record<keyof achDetails, string>>>({});\n const [saveACHinfo, setSaveACHinfo] = useState<boolean>(false);\n const [saveACHConsent1, setSaveACHConsent1] = useState<boolean>(false);\n const [saveCardInfo, setSaveCardInfo] = useState<boolean>(false);\n const [error, setError] = useState<string>(\"\");\n const [errorIframe, setErrorIframe] = useState<string>(\"\");\n const [success, setSuccess] = useState<boolean>(false);\n let [tranId, setTranId] = useState(\"\")\n const [loading, setLoading] = useState<boolean>(false);\n const [loading2, setLoading2] = useState<boolean>(false);\n const [loadingIframe, setLoadingIframe] = useState<boolean>(false);\n const [cardList, setCardList] = useState([]);\n const [bankList, setBankList] = useState([]);\n const [selectedCard, setSelectedCard] = useState<SelectedCard>()\n const [cashDiscount, setCashDiscount] = useState<number>(Number(amount));\n const [activeinCard, setActiveinCard] = useState<activeinTabs>('form')\n const [activeinBank, setActiveinBank] = useState<activeinTabs>('form')\n const [isBankActive, setIsBankActive] = useState<boolean>(false);\n const [processingFee, setProcessingFee] = useState<number>(0);\n const [clientSecret, setClientSecret] = useState<string | null>('');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [initialLoader, setInitialLoader] = useState<boolean>(false)\n const [is3DSEnable, setIs3DSEnable] = useState<boolean>(false)\n const [stripeResponse, setStripeResponse] = useState<any>(null);\n const [orderLoader, setOrderLoader] = useState<boolean>(false);\n const [orderGuid, setOrderGuid] = useState<string | null>(ordGuid || null);\n const [partialAmount, setPartialAmount] = useState<string | undefined>('');\n const [partialError, setPartialError] = useState<string>(\"\")\n const [remainingAmount, setRemainingAmount] = useState<string | undefined>('');\n const [paymentGateway, setPaymentGateway] = useState<number | undefined>();\n const [dcToken, setDCToken] = useState<number | undefined>();\n const [isBankConsentChecked, setIsBankConsentChecked] = useState<boolean>(false);\n const [errorBankConsent, setErrorBankConsent] = useState<string>(\"\");\n const [errorBankConsentOther, setErrorBankConsentOther] = useState<string>(\"\");\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n\n // console.log(cashDiscount, \"cashDiscount\");\n // console.log(show, \"show\");\n\n console.log(loadingIframe,\"loadingIframe\");\n console.log(loading,\"loader\");\n console.log(loading2,\"loading2\");\n console.log(loadingPrev,\"loadingPrev\"); \n\n let mastercard = S3Url + 'widget/mc-img.svg'\n let visa = S3Url + 'widget/visa-img.svg'\n let americanexp = S3Url + 'widget/ae-img.svg'\n let discover = S3Url + 'widget/discover-img.svg'\n let defaultcard = S3Url + 'widget/card.svg'\n let trash = S3Url + 'widget/Trash.svg'\n let bank = S3Url + 'widget/bank.svg'\n let secure = S3Url + 'widget/secure-img.png'\n let pov = S3Url + 'widget/pov-by.png'\n let pax = S3Url + 'widget/pax.svg'\n let cardicon = S3Url + 'widget/cardicon.svg'\n let bankicon = S3Url + 'widget/bankicon.svg'\n let defualtcardborder = S3Url + 'widget/defualtcardborder.svg'\n let unionicon = S3Url + 'widget/unionpay.svg'\n let dinersicon = S3Url + 'widget/diners.svg'\n let jcbicon = S3Url + 'widget/jcb.svg'\n\n const showLoader = () => setLoading(true);\n const hideLoader = () => setLoading(false);\n\n const CalculateCashDiscount = (amount: any, surcharge: any) => {\n const surchargeVal = (parseFloat(surcharge) || 0) / 100;\n const originalAmount = amount / (1 + surchargeVal);\n return Math.round(originalAmount * 100) / 100; // rounding to 2 decimals\n };\n\n const cardFeeAmount = Number(pass_fee_amount || 0);\n const bankFeeAmount = Number(bankSurcharge || 0);\n const bankSavingsAmount = Math.max(bankFeeAmount > 0 ? cardFeeAmount - bankFeeAmount : cardFeeAmount, 0);\n const bankSavingsText = bankSavingsAmount > 0 ? `Save ${formatUSD(bankSavingsAmount.toFixed(2))}` : '';\n\n const tokenizerRef = useRef<any>(null);\n\n const fractalStyles = {\n input: {\n 'font-family': \"'Inter', sans-serif\",\n 'font-size': '16px',\n 'color': '#212529',\n 'background-color': 'transparent',\n 'padding': '0px',\n 'appearance': 'none',\n 'outline': 'none',\n 'border': 'none',\n 'box-shadow': 'none'\n },\n ':focus': {\n 'color': '#212529',\n 'outline': 'none',\n 'border': 'none'\n },\n '::placeholder': {\n 'color': '#212529'\n }\n };\n\n\n\n const handleCharge = async (data: any) => {\n // console.log(data, \"ndfkjhdskjfhds\");\n try {\n let dataObj: any = {\n pass_fee_amount: Number(amount) - cashDiscount,\n pass_fee: pass_fee,\n Token: data?.Token,\n amount: partialAmount ? partialAmount : amount,\n postal_code: data?.postalCode,\n require3ds,\n isPartial,\n orderGuid: orderGuid || ordGuid,\n ...(saveCardInfo\n ? {\n card: {\n postal_code: cardData?.zipCode,\n customer_id: customerId,\n gateway_token: data?.Token || data?.gateway_token,\n name: cardData?.cardName\n },\n }\n : null),\n ...(data?.typeoftoken ? {\n typeoftoken: data?.typeoftoken\n } : null)\n }\n\n if (require3ds && data?.stripe_3ds_auth_id) {\n dataObj.stripe_3ds_auth_id = data?.stripe_3ds_auth_id\n }\n\n const chargeResponse = await axios.post(`${masterBaseUrl}api/v1/gateway/charge/${session_token}`, dataObj);\n if (chargeResponse?.data?.result) {\n // let addCard\n // if (saveCardInfo && customerId) {\n // try {\n // let obj = {\n // postal_code: cardData?.zipCode,\n // customer_id: customerId,\n // gateway_token: data?.gateway_token || data?.Token\n // }\n // addCard = await axios.post(`${masterBaseUrl}api/v1/gateway/add-card/${session_token}`, obj)\n // // console.log(addCard?.data?.data, \"addCard?.data?.data\");\n\n // if (addCard?.data?.result) {\n // addCard = addCard?.data?.data\n // }\n\n // } catch (error: any) {\n // console.log(error, \"error\");\n // hideLoader();\n // callback({\n // error: error?.response?.data?.message || \"Something went wrong!\",\n // result: error?.response?.data?.result,\n // statusCode: error?.response?.status\n // })\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n // }\n // }\n let callbackdata = {\n // cardDetails: { ...addCard, ...data },\n callback: { ...chargeResponse?.data?.data, name: cardData?.cardName, isPreAuth }\n }\n // if (!saveCardInfo) {\n // delete callbackdata.cardDetails\n // }\n callback(callbackdata)\n hideLoader();\n handleClose()\n }\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n }\n }\n\n const handlePreAuth = async (data: any) => {\n try {\n let dataObj: any = {\n Token: data?.Token,\n amount,\n postal_code: data?.postalCode,\n require3ds,\n ...(saveCardInfo\n ? {\n card: {\n postal_code: cardData?.zipCode,\n customer_id: customerId,\n gateway_token: data?.Token || data?.gateway_token,\n name: cardData?.cardName\n },\n }\n : null),\n }\n\n if (require3ds && data?.stripe_3ds_auth_id) {\n dataObj.stripe_3ds_auth_id = data?.stripe_3ds_auth_id\n }\n const preAuthResponse = await axios.post(`${masterBaseUrl}api/v1/gateway/preauth/${session_token}`, dataObj);\n if (preAuthResponse?.data?.result) {\n let addCard\n // if (saveCardInfo && customerId) {\n // try {\n // // console.log(preAuthResponse, \"preAuthResponse\");\n // let obj = {\n // postal_code: cardData?.zipCode,\n // customer_id: customerId,\n // gateway_token: data?.Token || data?.gateway_token\n // }\n // addCard = await axios.post(`${masterBaseUrl}api/v1/gateway/add-card/${session_token}`, obj)\n\n // if (addCard?.data?.result) {\n // addCard = addCard?.data?.data\n // }\n\n // } catch (error: any) {\n // console.log(error, \"error\");\n // hideLoader();\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n // callback({\n // error: error?.response?.data?.message || \"Something went wrong!\",\n // result: error?.response?.data?.result,\n // statusCode: error?.response?.status\n // })\n // }\n // }\n let callbackdata = {\n // cardDetails: { ...addCard, ...data },\n callback: { ...preAuthResponse?.data?.data, name: cardData?.cardName, isPreAuth }\n }\n // if (!saveCardInfo) {\n // delete callbackdata.cardDetails\n // }\n callback(callbackdata)\n hideLoader();\n handleClose()\n }\n } catch (error: any) {\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n }\n }\n\n const handleTokenCallback = async (token: any) => {\n if (token.Error) {\n setError(token.Error);\n callback({\n error: token.Error || \"Something went wrong!\"\n })\n hideLoader();\n } else {\n let data = {\n token: token.Token,\n resp: token\n };\n try {\n const updateToken = await axios.post(`${masterBaseUrl}api/v1/gateway/update/token/${session_token}`, data);\n\n if (updateToken?.status == 200) {\n let respData = {\n Token: updateToken?.data?.data?.gateway_token,\n Brand: token.Brand,\n ExpirationMonth: token.ExpirationMonth,\n ExpirationYear: token.ExpirationYear,\n Last4: token.Last4,\n Bin: token.Bin,\n CVV: token.CVV,\n postalCode: cardData?.zipCode,\n };\n let addCard\n\n if (isPreAuth) {\n handlePreAuth(respData)\n } else {\n handleCharge(respData)\n }\n }\n } catch (error: any) {\n console.log(error, \"error\");\n hideLoader();\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n }\n }\n };\n\n const handletabchange = (id: string) => {\n setActive(id)\n }\n\n const validateAchData = (): boolean => {\n const errors: Partial<Record<keyof achDetails, string>> = {};\n const data = achData\n if (!data?.name?.trim()) errors.name = \"Name is required\";\n if (!data?.accountNumber?.trim()) errors.accountNumber = \"Account number is required\";\n if (data?.accountNumber?.trim() && data?.accountNumber?.trim() !== data?.confirmAccountNumber?.trim()) errors.confirmAccountNumber = \"Account numbers must match\";\n if (!data?.bankName?.trim()) errors.bankName = \"Bank name is required\";\n if (!data?.routingNumber?.trim()) errors.routingNumber = \"Routing Number is required\";\n\n\n if (data?.routingNumber && data?.routingNumber?.length !== 9) errors.routingNumber = \"Routing number must be 9 digits\";\n\n if ((data?.accountType === 'business saving' || data?.accountType === 'business checking')) {\n if (!data?.companyName || data?.companyName === \"\") {\n errors.companyName = \"Company Name is required for business accounts\";\n }\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n setErrorBankConsent('Above consent is required');\n }\n\n if (saveACHinfo && !saveACHConsent1) {\n setErrorBankConsentOther('Your consent is required to save your bank details for future use');\n }\n // if (!saveACHinfo && saveACHConsent1) {\n // setErrorBankConsentSave('Above consent is required');\n // }\n\n // Routing Number Validation removed du to new validation \n // if (data?.routingNumber?.length == 9) {\n\n // let routingNumber = data?.routingNumber\n // const weights = [3, 7, 1];\n // let sum = 0;\n\n // for (let i = 0; i < routingNumber.length; i++) {\n // sum += parseInt(routingNumber[i], 10) * weights[i % 3];\n // }\n // if (sum % 10 !== 0) {\n // errors.routingNumber = \"Invalid routing number\"\n // }\n\n // }\n setAchError(errors);\n return (Object.keys(errors).length > 0);\n };\n\n const completeFractalFlow = async (tokenizeData: string, intentid?: string | null, typeoftoken?: string | null) => {\n // console.log(tokenizeData, intentid, \"fjahfgyuhgad\");\n showLoader();\n try {\n console.log({\n tokenizeData, intentid, typeoftoken\n });\n if (typeoftoken == 'google_pay' || typeoftoken == 'apple_pay') {\n handleCharge({\n Token: tokenizeData,\n postalCode: cardData?.zipCode,\n typeoftoken\n });\n return\n } else {\n if (isPreAuth) {\n handlePreAuth({\n Token: tokenizeData,\n postalCode: cardData?.zipCode,\n typeoftoken: \"token\",\n ...(intentid && { stripe_3ds_auth_id: intentid })\n })\n } else {\n handleCharge({\n Token: tokenizeData,\n postalCode: cardData?.zipCode,\n typeoftoken: \"token\",\n ...(intentid && { stripe_3ds_auth_id: intentid })\n });\n }\n }\n\n // let token = tokenizeData;\n // let verifyandsaveresp = await axios.post(`${masterBaseUrl}api/v1/gateway/verify-and-save/${session_token}`, {\n // token,\n // require3ds,\n // pass_fee,\n // typeoftoken\n // });\n\n // if (verifyandsaveresp?.status == 200) {\n // let responsetemp = verifyandsaveresp?.data?.data;\n // let respData = {\n // Token: responsetemp.gateway_token,\n // Brand: responsetemp.card_data.brand,\n // ExpirationMonth: responsetemp.card_data.expire_mm,\n // ExpirationYear: responsetemp.card_data.expire_yy,\n // Last4: responsetemp.card_data.last4,\n // Bin: responsetemp.card_data.bin,\n // postalCode: cardData?.zipCode,\n // stripe_3ds_auth_id: intentid\n // };\n\n // // let addCard\n\n // // if (saveCardInfo && customerId) {\n // // try {\n // // let data = {\n // // postal_code: cardData?.zipCode,\n // // customer_id: customerId,\n // // gateway_token: responsetemp.gateway_token\n // // }\n // // addCard = await axios.post(`${masterBaseUrl}api/v1/gateway/add-card/${session_token}`, data)\n\n\n // // } catch (error: any) {\n // // console.log(error, \"error\");\n // // hideLoader();\n // // setError(error?.response?.data?.message || \"Something went wrong!\");\n // // }\n // // }\n\n // // if (isPreAuth) {\n // // handlePreAuth(respData)\n // // } else {\n // // handleCharge(respData)\n // // }\n // }\n } catch (error: any) {\n console.log(error, \"error\");\n setError(error?.response?.data?.message || \"Something went wrong!\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n }\n }\n\n const handleFractalTokenFlow = async () => {\n try {\n const requestOptions = {\n method: \"POST\",\n redirect: \"follow\"\n };\n\n let sesionResult = await axios.post(`${masterBaseUrl}api/v1/widget/generate-session`, requestOptions)\n // let expYear = (Number(cardData?.expiryYear)) % 100;\n // let cardNumber = cardData?.cardNumber?.replace(/\\s+/g, '');\n // let track2_data = `${cardNumber}=${expYear}${cardData?.expiryMonth} ${cardData?.cvv}`;\n\n // const publicKey = forge.pki.publicKeyFromPem(sesionResult?.data?.data?.publicKeyPem);\n // const encrypted = publicKey.encrypt(track2_data, 'RSA-OAEP', {\n // md: forge.md.sha1.create(),\n // mgf1: { md: forge.md.sha1.create() }\n // });\n // const encryptedBase64 = forge.util.encode64(encrypted);\n\n // const myHeaders = {\n // \"Content-Type\": \"application/json\",\n // \"x-app-session-key\": sesionResult.data?.data?.session_key\n // }\n\n // let objtokenize: any = {\n // enc_track2_data: encryptedBase64,\n // algorithm: \"RSAES_OAEP_SHA_1\",\n // session_key: sesionResult?.data?.data?.session_key\n // }\n\n let objtokenize: any = {\n public_key_pem: sesionResult?.data?.data?.publicKeyPem || sesionResult?.data?.data?.public_key_pem,\n session_key: sesionResult?.data?.data?.session_key\n }\n let three_ds_data = null;\n if (require3ds) {\n // Ensure we are in the browser (Next.js SSR safety)\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined') {\n const languages = navigator.languages ?? [navigator.language];\n const language = Array.isArray(languages) ? languages[0] : languages;\n\n three_ds_data = {\n amount: partialAmount ? Math.round(parseFloat(partialAmount) * 100) : Math.round(parseFloat(amount) * 100), // convert dollars → cents\n currency: 'usd',\n channel: {\n type: 'browser',\n browser: {\n language: typeof language === 'string' ? language : null,\n color_depth: window.screen?.colorDepth ?? null,\n java_enabled: typeof navigator.javaEnabled === 'function' ? navigator.javaEnabled() : false,\n screen_height: window.screen?.height ?? null,\n screen_width: window.screen?.width ?? null,\n timezoneOffset: new Date().getTimezoneOffset(),\n },\n },\n };\n }\n }\n\n\n // const raw = JSON.stringify(objtokenize);\n\n // const tokenizeData = await axios.post(`${fractalGatewayUrl}tokenizer/tokenize`, raw, { headers: myHeaders });\n\n let tokenizeData;\n\n try {\n tokenizeData = await tokenizerRef.current.createToken(objtokenize,\n three_ds_data\n );\n } catch (error: any) {\n console.log(error, \"error in tokenization\");\n\n let readableMessage = \"Something went wrong!\";\n try {\n const rawError = error?.response?.data || error?.message || \"\";\n\n // Convert to string safely\n const errorText = typeof rawError === \"string\" ? rawError : JSON.stringify(rawError);\n\n // Split safely (avoid crashes even if empty or non-string)\n const lines = errorText.split?.(\"\\n\")?.filter(Boolean) || [];\n const lastLine = lines.at(-1) || \"\";\n\n // Extract message after last colon (if any)\n const parts: any = lastLine.split?.(\": \");\n readableMessage = parts?.length > 1 ? parts.pop().trim() : lastLine.trim() || readableMessage;\n } catch {\n // If *anything* above fails, fallback to a generic message\n readableMessage = \"Something went wrong!\";\n }\n setErrorIframe(readableMessage)\n hideLoader();\n }\n\n\n if (tokenizeData?.token) {\n\n // console.log(tokenizeData, \"tokenizeData\");\n let ThreedsData = tokenizeData?.stripe_three_ds_response\n // console.log(ThreedsData, \"ThreedsData\");\n\n if (require3ds && !ThreedsData && ThreedsData?.status === \"200 OK\" && ThreedsData?.data?.challenge_url) {\n setError(\"Something went wrong. Please try again later.\")\n }\n\n if (require3ds) {\n if (!ThreedsData?.data?.challenge_url) {\n completeFractalFlow(tokenizeData?.token, ThreedsData?.data?.id)\n } else {\n hideLoader()\n setStripeResponse({\n ...ThreedsData?.data,\n fractalToken: tokenizeData?.token\n });\n }\n } else {\n completeFractalFlow(tokenizeData?.token, null)\n }\n }\n } catch (error: any) {\n hideLoader();\n console.log(error, \"error\");\n let readableMessage = \"Something went wrong!\";\n\n try {\n const rawError = error?.response?.data || error?.message || \"\";\n\n // Convert to string safely\n const errorText = typeof rawError === \"string\" ? rawError : JSON.stringify(rawError);\n\n // Split safely (avoid crashes even if empty or non-string)\n const lines = errorText.split?.(\"\\n\")?.filter(Boolean) || [];\n const lastLine = lines.at(-1) || \"\";\n\n // Extract message after last colon (if any)\n const parts: any = lastLine.split?.(\": \");\n readableMessage = parts?.length > 1 ? parts.pop().trim() : lastLine.trim() || readableMessage;\n } catch {\n // If *anything* above fails, fallback to a generic message\n readableMessage = \"Something went wrong!\";\n }\n setError(readableMessage);\n callback({\n error: readableMessage,\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n }\n }\n\n const validateCardData = (): boolean => {\n const errors: Partial<Record<keyof CardDetails, string>> = {};\n const data = cardData\n // if (paymentGateway !== 32) {\n // const month = parseInt(data?.expiryMonth || \"\", 10);\n // const year = data?.expiryYear || \"\";\n // if (!data?.cardNumber?.trim()) errors.cardNumber = \"Card number is required\";\n // if (!data?.expiryMonth?.trim() || !data?.expiryYear?.trim()) {\n // errors.expiryMonth = \"Invalid Expiration Date.\"\n // }\n // else if (isNaN(month) || month < 1 || month > 12 || year.length !== 4) {\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n\n // if (!data?.cvv?.trim()) errors.cvv = \"CVV is required\";\n\n // // Additional check for expired card\n // if (data?.expiryMonth && data?.expiryYear && data.expiryMonth.length <= 2 && data.expiryYear.length === 4) {\n // const month = parseInt(data.expiryMonth, 10);\n // const year = parseInt(data.expiryYear, 10);\n // const now = new Date();\n // const currentMonth = now.getMonth() + 1; // JS month is 0-indexed\n // const currentYear = now.getFullYear();\n\n // if (year < currentYear || (year === currentYear && month < currentMonth)) {\n // errors.expiryMonth = \"Card is expired\";\n // }\n // }\n // }\n if (!data?.cardName?.trim()) errors.cardName = \"Card name is required\";\n // else if (data?.expiryMonth < 1 || data?.expiryMonth > 12 || data?.expiryYear.length !== 4){\n // errors.expiryMonth = \"Invalid Expiration Date.\";\n // }\n if (!data?.zipCode?.trim()) errors.zipCode = \"ZIP code is required\";\n\n\n\n setCardError(errors);\n\n // Return true if there is any error\n\n\n return Object.keys(errors).length > 0;\n };\n\n const validateCardInputs = (): boolean => {\n let validCard = DatacapWebToken.validateCardNumber(cardData?.cardNumber.replaceAll(\" \", ''));\n let validExpirationDate = DatacapWebToken.validateExpirationDate(cardData?.expiryMonth, cardData?.expiryYear);\n let validCVV = DatacapWebToken.validateCVV(cardData?.cvv);\n\n let errors: Partial<Record<keyof CardDetails, string>> = {}\n if (!validCard) errors.cardNumber = \"Invalid card Number\"\n if (!validExpirationDate) errors.expiryMonth = \"Invalid Expiration Date.\"\n if (!validCVV) errors.cvv = \"Invalid CVV\"\n\n setCardError(errors)\n\n return validCard && validCVV && validExpirationDate\n }\n\n const submitFunc = async (e: any) => {\n //handle function submit here\n e.preventDefault()\n const el = document.activeElement;\n if (el instanceof HTMLElement) {\n el.blur();\n }\n if (loading) return;\n if (partialError) {\n return\n }\n if (activetab !== 'ach') {\n const hasError = validateCardData()\n if (hasError) return\n let isValid = true;\n // if (paymentGateway !== 32) {\n // isValid = validateCardInputs();\n // }\n if (!isValid) return;\n } else {\n let hasError = validateAchData()\n if (saveACHinfo && !saveACHConsent1) {\n hasError = true;\n }\n\n if (!saveACHinfo && !isBankConsentChecked) {\n hasError = true;\n }\n\n if (hasError) return\n }\n try {\n showLoader()\n const result = await axios.get(`${masterBaseUrl}api/v1/gateway/token/${session_token}`, {\n params: {\n require3ds,\n pass_fee\n }\n });\n if (result?.status == 200) {\n let gatewayToken = result?.data?.data?.gateway_token;\n let paymentGateway = result?.data?.data?.paymentGateway;\n\n if (activetab !== 'ach') {\n //handle card actions here \n if (paymentGateway == PaymentMethodKeys?.FRACTALKEY) {\n await handleFractalTokenFlow();\n } else {\n // DatacapWebToken.requestToken(gatewayToken, 'PaymentForm', handleTokenCallback);\n try {\n const result = await (window as any).requestDcToken();\n console.log(\"Token:\", result.Token);\n if (result.Token) {\n handleTokenCallback(result);\n }\n } catch (err: any) {\n console.log(err, \"Error while tokenizing\");\n setErrorIframe(err);\n setLoading(false);\n }\n }\n } else {\n let callbackdata: Record<string, any> | undefined;\n try {\n const payByBank = await axios.post(`${masterBaseUrl}api/v1/gateway/bank-charge/${session_token}`, {\n label: achData?.name,\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n amount: `${bankAmount}`,\n customer_id: null,\n isSaveAch: false,\n tax: \"0.00\",\n discount: \"0.00\",\n surcharge: \"0.00\",\n order_id: '',\n company_name: achData?.companyName || \"\",\n ...(saveACHinfo\n ? {\n bank: {\n name: achData?.name,\n account_number: achData?.accountNumber,\n routing_number: achData?.routingNumber,\n bank_name: achData?.bankName,\n account_type: achData?.accountType,\n customer_id: customerId || \"\",\n company_name: achData?.companyName || \"\"\n },\n }\n : null),\n })\n if (payByBank?.data?.result) {\n // if (saveACHinfo && customerId) {\n // try {\n // const result = await axios.post(`${masterBaseUrl}api/v1/gateway/add-bank/${session_token}`, {\n // name: achData?.name,\n // account_number: achData?.accountNumber,\n // routing_number: achData?.routingNumber,\n // bank_name: achData?.bankName,\n // account_type: achData?.accountType,\n // customer_id: customerId || \"\",\n // company_name: achData?.companyName || \"\"\n // })\n // if (result.data.result) {\n\n // callbackdata = {\n // bankDetails: { ...result?.data?.data, account_type: achData?.accountType }\n // }\n // }\n // } catch (error: any) {\n // hideLoader();\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n // callback({\n // error: error?.response?.data?.message || \"Something went wrong!\",\n // result: error?.response?.data?.result,\n // statusCode: error?.response?.status\n // })\n // }\n // }\n\n callbackdata = {\n ...callbackdata,\n callback: { ...payByBank?.data?.data, name: achData?.name, isPreAuth }\n }\n callback(callbackdata)\n handleClose()\n hideLoader()\n }\n } catch (error: any) {\n console.log(error, \"errororor\");\n let data = error?.response?.data\n if (typeof (data?.message) == \"object\") {\n Object.values(data?.message).forEach((message: any) => {\n setError(message || \"Something went wrong\");\n callback({\n error: message || \"Something went wrong!\",\n result: data?.result || false,\n statusCode: error?.response?.status\n })\n });\n } else {\n setError(data?.message || \"Something went wrong\")\n callback({\n error: data?.message || \"Something went wrong!\",\n result: data?.result || false,\n statusCode: error?.response?.status\n })\n }\n hideLoader()\n }\n }\n }\n } catch (error: any) {\n hideLoader();\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n setError(error?.response?.data?.message || \"Something went wrong!\");\n }\n }\n\n const handleCardChange = (field: string, value: any) => {\n const name = field\n const numericFields = [\"expiryMonth\", \"expiryYear\", \"zipCode\", \"cvv\"];\n\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setCardError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setCardData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const handleCardNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target;\n const rawValue = input.value.replace(/\\D/g, \"\"); // Remove all non-digits\n\n const { formatted, cursor } = formatCardNumberWithCursor(\n input.value,\n input.selectionStart ?? 0\n );\n\n setCardError((prev: any) => ({\n ...prev,\n cardNumber: \"\"\n }))\n\n setCardData((prev: any) => ({\n ...prev,\n cardNumber: formatted\n }));\n\n requestAnimationFrame(() => {\n input.setSelectionRange(cursor, cursor);\n });\n };\n\n\n\n const handleChangeAch = (e: any) => {\n const { name, value } = e.target\n const numericFields = [\"routingNumber\", \"accountNumber\", \"confirmAccountNumber\"];\n if (name == \"name\") {\n\n\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return\n\n }\n if (numericFields.includes(name)) {\n // Agar value empty hai (backspace ke liye) ya sirf digits hain, tabhi set karenge\n if (value === \"\" || /^[0-9]+$/.test(value)) {\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev,\n [name]: value,\n }));\n }\n return;\n }\n\n setAchError((prev: any) => ({\n ...prev,\n [name]: \"\"\n }))\n setAchData((prev: any) => ({\n ...prev, [name]: value\n }))\n\n }\n\n const handleClose = () => {\n setShow(false);\n setActive('card')\n setError(\"\")\n setSuccess(false)\n setTranId(\"\")\n setAchData({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setAchError({\n name: \"\",\n routingNumber: \"\",\n accountNumber: \"\",\n confirmAccountNumber: \"\",\n bankName: \"\",\n accountType: \"\"\n })\n setCardData({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setCardError({\n cardName: \"\",\n cardNumber: \"\",\n expiryMonth: \"\",\n expiryYear: \"\",\n cvv: \"\",\n orderId: \"\",\n zipCode: \"\"\n })\n setSaveACHinfo(false)\n setSaveCardInfo(false)\n setActiveinBank('form')\n setActiveinCard('form')\n setIsBankActive(false)\n setProcessingFee(0)\n setCashDiscount(0)\n setCardList([])\n setErrorMessage(null)\n setClientSecret(null)\n setInitialLoader(false)\n setIs3DSEnable(false)\n setStripeResponse(null)\n setOrderGuid(null);\n setPartialAmount('');\n setPartialError('');\n setRemainingAmount('');\n setIsBankConsentChecked(false);\n setErrorBankConsent('');\n setSaveACHConsent1(false);\n setErrorBankConsentOther('');\n };\n\n const getCardList = async () => {\n showLoader()\n try {\n const data = {\n isPreAuth: isPreAuth,\n \"customerId\": customerId\n }\n let cardListData = await axios.post(`${masterBaseUrl}api/v1/gateway/card-list/${session_token}`, data)\n // console.log(\"cardListData\", cardListData);\n let savedpaymentsList = cardListData?.data?.data?.cardList || []\n let banklists = savedpaymentsList?.filter((card: any) => card?.card_type == 'Bank')\n let cardlists = savedpaymentsList?.filter((card: any) => card?.card_type !== 'Bank')\n if (cardlists && cardlists?.length > 0) {\n setActive('card')\n setActiveinCard('list')\n setCardList(cardlists)\n setLoadingIframe(false)\n // let primary_card = cardlists?.find((card: any) => card?.primary_card == 1)\n // if (primary_card) {\n // setSelectedCard(primary_card)\n // }\n } else {\n setActive('card')\n setCardList([])\n }\n if (banklists && banklists?.length > 0) {\n setActiveinBank('list')\n setBankList(banklists)\n // let primary_card = banklists?.find((card: any) => card?.primary_card == 1)\n // if (primary_card) {\n // setSelectedCard(primary_card)\n // }\n } else {\n setBankList([])\n }\n\n hideLoader()\n } catch (err: any) {\n console.log(err);\n hideLoader()\n callback({\n error: err?.response?.data?.message || \"Something went wrong!\",\n result: err?.response?.data?.result,\n statusCode: err?.response?.status\n })\n setError(err?.response?.data?.message || err?.message || \"Something went wrong\")\n }\n }\n\n // console.log(bankList, \"lists\", cardList);\n\n const getCardType = (card: string) => {\n let card_type = card?.toLowerCase();\n\n switch (card_type) {\n case 'visa':\n return visa;\n case 'mastercard':\n case 'mc':\n case 'm/c':\n return mastercard;\n case 'amex':\n case 'american express':\n case 'ae':\n return americanexp;\n case 'discover':\n case 'dcvr':\n return discover;\n case 'bank':\n return bank;\n default:\n return card;\n }\n };\n\n const handleDeleteCard = async (cardId: any) => {\n Swal.fire({\n icon: 'warning',\n text: 'Do you want to delete the card?',\n showCancelButton: true,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n reverseButtons: true,\n buttonsStyling: false,\n customClass: {\n confirmButton: 'swal2-confirm btn btn-dark',\n cancelButton: 'swal2-cancel btn btn-dark',\n popup: 'custom-swal-popup',\n icon: 'custom-swal-icon'\n }\n }).then(async (result) => {\n if (result.isConfirmed) {\n // 👇 Yahan aap apna API call karo\n // showLoader()\n setLoading2(true)\n try {\n let obj = {\n card_id: cardId,\n customer_id: customerId\n }\n\n const res = await axios.patch(`${masterBaseUrl}api/v1/gateway/delete-card/${session_token}`, obj)\n // hideLoader()\n if (res?.data?.result) {\n setLoading2(false)\n getCardList()\n Swal.fire({\n icon: 'success',\n title: 'Deleted!',\n text: res?.data?.message || 'Card deleted.',\n confirmButtonText: 'OK',\n showConfirmButton: true,\n timer: 1000, // auto-close after 1 second\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n } else {\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Failure!',\n text: 'Card not deleted.',\n timer: 1000, // auto-close after 1 second\n timerProgressBar: true,\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n })\n }\n\n } catch (err) {\n // hideLoader()\n setLoading2(false)\n Swal.fire({\n icon: 'error',\n title: 'Error!',\n text: 'Failed to delete the card.',\n confirmButtonText: 'OK',\n customClass: {\n confirmButton: 'btn btn-dark'\n }\n });\n }\n\n\n } else if (result.dismiss === Swal.DismissReason.cancel) {\n // 👇 Show new popup on \"No\"\n Swal.fire({\n icon: 'info',\n text: 'Card not deleted',\n confirmButtonText: 'OK',\n buttonsStyling: false,\n customClass: {\n confirmButton: 'btn btn-dark float-end',\n actions: 'swal2-actions-end'\n }\n });\n\n }\n });\n };\n const handlechargeCustomer = async (e?: React.MouseEvent<HTMLButtonElement>) => {\n e?.currentTarget.blur();\n if (loading) return;\n let customer_id = customerId\n // let discount = String(props?.discount)\n // let surcharge = String(props?.surcharge)\n // let tax = String(props?.tax)\n // let order_id = props?.orderID\n let card_id = selectedCard?.id\n let card_type = selectedCard?.card_type\n\n if (partialError) {\n return\n }\n\n\n if (amount) {\n if (customer_id) {\n if (card_id) {\n let chargeobj: any = {\n amount: (card_type)?.toLowerCase() === 'bank' ? `${bankAmount}` : partialAmount ? partialAmount : amount,\n customer_id,\n card_id,\n pass_fee,\n pass_fee_amount: Number(amount) - cashDiscount,\n }\n // let { isCardSave, ...rest } = chargeobj\n\n if (isPartial) {\n chargeobj.orderGuid = orderGuid || ordGuid\n if (partialAmount) {\n chargeobj.ispartialPayment = true\n }\n }\n\n\n\n if (isPreAuth) {\n chargeobj.isPreauth = true\n }\n // console.log(chargeobj, \"chargeobj\");\n\n let chargeurl = masterBaseUrl + 'api/v1/gateway/charge-by-saved-details/' + session_token\n\n const headers = {\n 'Content-Type': 'application/json'\n }\n\n try {\n showLoader()\n const response = await axios.post(chargeurl, chargeobj);\n // console.log(response, \"res\");\n if (response?.data?.result) {\n callback({ callback: { ...response?.data?.data, isPreAuth } });\n hideLoader();\n handleClose();\n }\n } catch (error: any) {\n console.log(error?.response, \"error by saved details\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n hideLoader();\n // setError(error?.response?.data?.message || \"Something went wrong!\");\n }\n\n // showLoader()\n // socket.emit(\"sendMessage\", { url: chargeurl, body: card_type == 'Bank' ? rest : chargeobj, isChargebycard: true })\n // socket.on('charge-by-card', (response: any) => {\n // if (response?.result == true || response?.status == true) {\n // setTranId(response.data?.transaction_id)\n // setSuccess(true)\n // // hideLoader()\n // setLoading2(false)\n // } else {\n // setError(response?.message || \"Something went wrong.\")\n // }\n // })\n\n } else {\n setErrorIframe(\"Please Select A Card/Bank\")\n callback({\n error: \"Please Select A Card/Bank\",\n })\n }\n } else {\n setError(\"Please Select Customer\")\n callback({\n error: \"Please Select Customer\",\n })\n }\n } else {\n setError(\"Something went wrong.\")\n callback({\n error: \"Something went wrong.\",\n })\n }\n }\n\n // console.log(show, amount, customerId);\n\n const getPaymentDetails = async () => {\n try {\n showLoader()\n const res = await axios.get(`${masterBaseUrl}api/v1/gateway/get-payment-details/${session_token}`, {\n params: {\n require3ds,\n pass_fee\n }\n });\n // console.log(res, \"respinse\");\n if (res?.status == 200) {\n setIsBankActive(res?.data?.data?.isBankActive);\n setProcessingFee(Number(res?.data?.data?.fee) || 0);\n setPaymentGateway(res?.data?.data?.paymentGateway);\n setDCToken(res?.data?.data?.dctoken);\n // Hand off to the Datacap iframe loader in the same batch that\n // clears the page loader, so there's no frame with every\n // loading flag false while DataCapFields' own effect spins up.\n // getCardList() (a parallel request) forces this back to\n // false if a saved-card list ends up showing instead.\n if (res?.data?.data?.paymentGateway === 31 && res?.data?.data?.dctoken) {\n setLoadingIframe(true);\n }\n hideLoader();\n }\n\n } catch (error: any) {\n console.log(error?.response?.data?.result, \"error while getting payment details\");\n callback({\n error: error?.response?.data?.message || \"Something went wrong!\",\n result: error?.response?.data?.result,\n statusCode: error?.response?.status\n })\n setError(error?.response?.data?.message || error?.message || \"Something went wrong\")\n hideLoader()\n }\n\n }\n\n const crateOrderFrac = async () => {\n if (orderLoader) return;\n setOrderLoader(true);\n try {\n const res = await axios.post(`${masterBaseUrl}api/v1/gateway/create-pay-order/${session_token}`, {\n amount,\n cashDiscount,\n bankAmount,\n bankSurcharge,\n customerId,\n passFee: pass_fee,\n passFeeAmount: pass_fee_amount ? pass_fee_amount : Number(amount) - cashDiscount,\n require3ds,\n isPartial\n })\n\n // console.log(res, \"res of order create\");\n if (res?.data?.result) {\n setOrderLoader(false);\n // console.log(res?.data?.data, \"res?.data?.data\");\n setOrderGuid(res?.data?.data?.orderGuid);\n setRemainingAmount(res?.data?.data?.remainingAmount)\n hasRunRef.current = true;\n }\n\n } catch (error) {\n console.log(\"error in creating order\", error);\n setOrderLoader(false);\n }\n }\n\n\n\n useEffect(() => {\n if (!show && !autoTrigger) {\n hasRunRef.current = false; // reset when modal is closed\n cardListRunRef.current = false;\n }\n }, [show, autoTrigger]);\n\n useEffect(() => {\n if (!hasRunRef.current && (show || autoTrigger) && onLoad) {\n getPaymentDetails();\n if (isPartial && !partialRef) {\n crateOrderFrac();\n }\n\n }\n }, [show, autoTrigger, isPartial, onLoad]);\n\n // console.log(hasRunRef, \"hasRunRef\", show, \"show\", isPartial, \"isPartial\", remainingAmount, \"remainingAmount\", remAmount, \"remAmount\");\n\n\n useEffect(() => {\n // setActive('cardList')\n if ((show || autoTrigger) && pass_fee_amount) {\n let cashdisc = Number(amount) - Number(pass_fee_amount);\n if (cashdisc && !isNaN(cashdisc)) {\n setCashDiscount(cashdisc)\n }\n } else if ((show || autoTrigger) && pass_fee && processingFee) {\n let cashdisc = CalculateCashDiscount(amount, processingFee)\n if (cashdisc && !isNaN(cashdisc)) {\n setCashDiscount(cashdisc)\n }\n } else {\n setCashDiscount(Number(amount))\n }\n if (!cardListRunRef.current && customerId && (show || autoTrigger) && !isRequest) {\n cardListRunRef.current = true;\n getCardList()\n }\n }, [customerId, show, amount, processingFee, autoTrigger])\n\n const getHeading = () => {\n if (isPreAuth) {\n return \"Cards\"\n } else {\n return \"Cards/Bank\"\n }\n }\n\n // console.log(isBankActive, \"scdgfhasgcf\");\n // \n\n const fetchClientSecret = useCallback(async () => {\n try {\n setInitialLoader(true)\n const res = await fetch(`${masterBaseUrl}api/v1/gateway/create-payment-intent/${session_token}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ amount, require3ds, pass_fee }),\n });\n\n const data = await res.json();\n if (data.is3dEnable) {\n setInitialLoader(false)\n setClientSecret(data.clientSecret);\n setIs3DSEnable(data.is3dEnable)\n } else {\n setInitialLoader(false)\n setIs3DSEnable(data.is3dEnable)\n }\n if (!data.result) {\n setError(data.error || data?.message || \"Failed to get client secret\");\n }\n } catch (err: any) {\n console.log(err.response, \"err.response\");\n setError(err.message);\n }\n }, [amount]);\n\n // useEffect(() => {\n // if (show) {\n // if (!clientSecret) {\n // fetchClientSecret();\n // }\n // }\n // }, [fetchClientSecret, is3DSEnable, show, clientSecret]);\n\n // if (errorMessage) return <div>Error: {errorMessage}</div>;\n // if (!clientSecret) return <div>Loading payment...</div>;\n\n\n const onSuccess = () => {\n // alert(\"sucess\")\n // console.log(\"successsssssss\");\n\n }\n\n // console.log(clientSecret, \"clientSecret\");\n\n const handleSuccess = (token: string, intentId: string) => {\n // console.log(\"3DS Auth successful ✅\", token, intentId);\n showLoader()\n completeFractalFlow(token, intentId);\n setStripeResponse(null)\n };\n\n const handleError = (status: string) => {\n console.error(\"3DS Auth failed ❌\", status);\n setError(`3DS Authentication ${status}`);\n };\n\n\n // console.log(stripeResponse, \"stripeResponse\");\n\n\n useEffect(() => {\n if (setHandleCloseRef) {\n setHandleCloseRef(() => handleClose);\n }\n }, []);\n\n\n const handlePartialChange = (values: any) => {\n // console.log(values, \"values\");\n // if (activetab === 'ach') {\n // if ((Number(cashDiscount)?.toFixed(2) < values?.floatValue) || (values?.floatValue <= 0)) {\n // setPartialAmount(values?.value);\n // setPartialError(`Partial amount cannot exceed ${formatUSD(Number(cashDiscount)?.toFixed(2))}`);\n // } else {\n // setPartialAmount(values?.value);\n // setPartialError(\"\");\n // }\n // } else {\n if ((Number(remainingAmount || remAmount)?.toFixed(2) < values?.floatValue) || (values?.floatValue < 0)) {\n setPartialAmount(values?.value);\n setPartialError(`Partial amount cannot exceed ${formatUSD(Number(remainingAmount || remAmount)?.toFixed(2))}`);\n } else if (values?.floatValue == 0) {\n setPartialAmount(values?.value);\n setPartialError(\"Partial amount must be greater than 0\");\n } else {\n setPartialAmount(values?.value);\n setPartialError(\"\");\n }\n // }\n\n }\n\n useEffect(() => {\n if (typeof FractalTokenizer === 'undefined') return;\n\n const tokenizer = new FractalTokenizer({\n styles: {},\n });\n\n }, []);\n // console.log(remainingAmount, \"remainingAmount\", Number(remainingAmount));\n\n // console.log(activeinCard === 'list', \"activeinCard\", activeList);\n\n const stateRef = useRef({\n activeinBank,\n activeinCard,\n activetab,\n });\n\n useEffect(() => {\n stateRef.current = {\n activeinBank,\n activeinCard,\n activetab,\n };\n }, [activeinBank, activeinCard, activetab]);\n\n const submit = useCallback(() => {\n const { activeinBank, activeinCard, activetab } = stateRef.current;\n // console.log('Submitt logic', activeinBank, \"activeinBank\", activeinCard, \"activeinCard\", activetab, \"activetab\");\n\n if (activetab === 'card') {\n if (activeinCard === 'form') {\n cardFormRef.current?.requestSubmit();\n } else if (activeinCard === 'list') {\n handlechargeCustomer()\n }\n } else if (activetab === 'ach') {\n if (activeinBank === 'form') {\n bankFormRef.current?.requestSubmit()\n } else if (activeinBank === 'list') {\n handlechargeCustomer()\n }\n }\n\n }, []); // ✅ stable unless method changes\n\n useEffect(() => {\n // console.log('Registering submit');\n onSubmit?.(submit);\n }, [onSubmit, submit]);\n\n\n function detectCardType(cardinput: any) {\n if (!cardinput) return null;\n\n const number = cardinput.replace(/\\D/g, '');\n\n const patterns = {\n visa: /^4/,\n mastercard: /^(5[1-5]|2[2-7][0-9]{2})/,\n amex: /^3[47]/,\n discover: /^(6011|65|64[4-9])/,\n diners: /^(30[0-5]|36|38)/,\n jcb: /^(35[2-8][0-9])/,\n unionpay: /^62/\n };\n\n for (const [type, regex] of Object.entries(patterns)) {\n if (regex.test(number)) {\n return type;\n }\n }\n\n return 'unknown';\n }\n\n function getCardImage(cardInput: string) {\n const cardType = detectCardType(cardInput);\n\n switch (cardType) {\n case 'visa':\n return <img src={visa} alt=\"visa\" width={33} />;\n\n case 'mastercard':\n return <img src={mastercard} width={33} alt=\"mastercard\" />;\n\n case 'amex':\n return <img src={americanexp} alt=\"amex\" width={33} />;\n\n case 'discover':\n return <img src={discover} width={33} alt=\"discover\" />;\n\n case 'diners':\n return <img src={dinersicon} alt=\"Diners Club\" />;\n\n case 'jcb':\n return <img src={jcbicon} alt=\"JCB\" />;\n\n case 'unionpay':\n return <img src={unionicon} alt=\"UnionPay\" />;\n\n default:\n return <img src={defualtcardborder} alt=\"card\" />;\n }\n }\n\n // console.log(loadingIframe, \"loadingIframe 222\");\n\n\n\n return (\n <>\n {/* initial loader screen */}\n {\n (initialLoader || !onLoad) && <Loader intensity={'dark'} loading={initialLoader || !onLoad} />\n }\n\n {\n paymentGateway == 32 && <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} />\n }\n\n {\n paymentGateway == 31 && <DataCapScriptLoader\n onReady={() => {\n console.log('SDK Ready');\n }}\n onError={(err) => {\n setLoading(false);\n setLoadingIframe(false);\n setError(DcLoadingError);\n }}\n />\n }\n\n {/* Error screen */}\n {error &&\n <div>\n <ErrorCardOverlay error={error} onClose={handleClose} autoTrigger={autoTrigger} />\n </div>\n }\n\n {errorIframe &&\n <div>\n <ErrorCardOverlay error={errorIframe} onClose={() => { setErrorIframe(\"\") }} autoTrigger={onSubmit ? !(onSubmit) : autoTrigger} />\n </div>\n }\n\n {/* {error &&\n <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardMessage error={error} onClose={handleClose} autoTrigger={autoTrigger} />\n </div>\n }\n {errorIframe &&\n <div style={{ maxHeight: '606px', minHeight: '60vh', padding: '40px' }}>\n <ErrorCardOverlay error={errorIframe} onClose={() => { setErrorIframe(\"\") }} autoTrigger={autoTrigger} />\n </div>\n } */}\n {/* {!error && !errorIframe && */}\n <>\n {/* Loader Screen */}\n {(loading || loading2 || loadingIframe) && <Loader intensity='light' loading={loading || loading2 || loadingPrev || orderLoader || loadingIframe} />}\n {/* widget screen */}\n <div className='frac-card-payment-page frac-form frac-new-form'>\n <div ref={threeDSContainerRef} style={{ width: \"100%\", height: \"100%\" }} />\n {\n stripeResponse?.challenge_url ? (\n <ThreeDSChallenge\n containerRef={threeDSContainerRef} // 👈 pass ref\n challengeUrl={stripeResponse.challenge_url}\n fractalToken={stripeResponse.fractalToken}\n stripeIntentId={stripeResponse.id}\n onSuccess={handleSuccess}\n onError={handleError}\n />\n ) : (\n <div className='parent-pay-container'>\n <span style={{ display: autoTrigger ? 'none' : 'block' }} className=\"request-payment-close-popup\" onClick={handleClose}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <g clipPath=\"url(#clip0_12425_52336)\">\n <path d=\"M9.46585 8.01168L15.6959 1.7814C16.1014 1.37615 16.1014 0.720912 15.6959 0.315659C15.2907 -0.0895946 14.6354 -0.0895946 14.2302 0.315659L7.99991 6.54593L1.76983 0.315659C1.36438 -0.0895946 0.709336 -0.0895946 0.304082 0.315659C-0.101361 0.720912 -0.101361 1.37615 0.304082 1.7814L6.53416 8.01168L0.304082 14.2419C-0.101361 14.6472 -0.101361 15.3024 0.304082 15.7077C0.506045 15.9098 0.771595 16.0114 1.03695 16.0114C1.30232 16.0114 1.56768 15.9098 1.76983 15.7077L7.99991 9.47742L14.2302 15.7077C14.4323 15.9098 14.6977 16.0114 14.9631 16.0114C15.2284 16.0114 15.4938 15.9098 15.6959 15.7077C16.1014 15.3024 16.1014 14.6472 15.6959 14.2419L9.46585 8.01168Z\" fill=\"#727272\" />\n </g>\n <defs>\n <clipPath id=\"clip0_12425_52336\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <div className='pay-main-logo-res'>\n {/* space for logo responsive */}\n </div>\n <div className={onSubmit ? \"pay-container frac-pay-container \" : \"pay-container\"}>\n {!onSubmit &&\n <div className=\"pay-header pay-conatiner-one\">\n <div className=\"pay-conatiner-one-first\">\n <div className=\"pay-logo-container\" >\n <div className='pay-main-logo'>\n {/* space for logo */}\n </div>\n <h1 className='pay-heading' >Pay</h1>\n {cardList?.length > 0 && activetab !== \"cardList\" &&\n <button className='res-charge-payment-back-btn ' onClick={() => setActive('cardList')}> <IoArrowBack /> Back</button>\n }\n </div>\n <div className='amt-pay-con'>\n\n <div className='pay-amount-conatiner' >\n <small className='pay-payment-amount' >Select payment type</small>\n\n <div className='frac-card-bank-radio-main' >\n <CardBankRadio label='Card' amount={Number(amount)?.toFixed(2)} value='card' onChange={handletabchange} activetab={activetab} />\n {\n !isPreAuth && isBankActive && !isPartial &&\n <CardBankRadio label='Bank' amount={Number(bankAmount)?.toFixed(2)} value='ach' onChange={handletabchange} activetab={activetab} savingsText={bankSavingsText} />\n }\n </div>\n {/* <div className=\"frac-card-bank-radio-main\">\n <div className=\"frac-card-bank-radio frac-active\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src=\"https://fractal-userdata-upload.s3.us-east-1.amazonaws.com/widget/card.svg\"\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Card</div>\n <div className=\"frac-card-label-amount\">$3.39</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"card\" checked name=\"paymenttype\" />\n </div>\n </div>\n\n <div className=\"frac-card-bank-radio\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src={bankNew}\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Bank</div>\n <div className=\"frac-card-label-amount\">$3.20</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"ach\" name=\"paymenttype\" />\n </div>\n </div>\n </div> */}\n {\n isPartial && (\n <div className=\"frac-partial-payment-input\">\n <label htmlFor=\"partialpayment\">Partial Payment</label>\n <NumericFormat\n prefix='$'\n className='form-control-frac'\n value={partialAmount}\n onValueChange={(values) => {\n handlePartialChange(values)\n }}\n thousandSeparator\n placeholder='Enter partial amount'\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n isAllowed={(values) => {\n const { floatValue = 0, value } = values;\n\n // allow empty\n if (value === '') return true;\n\n // allow typing like 0, 0., 0.0 (intermediate states)\n if (value === '0' || value.startsWith('0.')) return true;\n\n // block final zero\n if (floatValue === 0) return false;\n\n return floatValue > 0;\n }}\n />\n\n {partialError && <span className='error-span'>{partialError}</span>}\n </div>\n )\n }\n\n </div>\n </div>\n {/* <div className='amt-pay-con'>\n\n <div className='pay-amount-conatiner' >\n <small className='pay-payment-amount' >Payment Amount</small>\n <strong className='pay-amount'>{formatUSD(Number(amount)?.toFixed(2))}</strong> }\n { <strong className='pay-amount'>${Number(amount)?.toFixed(2)}</strong>}\n </div>\n {\n activetab != \"ach\" &&\n <div style={{ display: 'flex', gap: '8px', margin: '8px 0' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>\n }\n </div> */}\n </div>\n <div className='pay-conatiner-one-last'>\n <img src={secure} alt=\"\" />\n <img src={pov} alt=\"\" />\n Secure payments powered by Fractal\n </div>\n </div>\n }\n <div className=\"pay-tab pay-conatiner-two\">\n <div className=\"col-md-12\">\n <div id='payment-form-div ' className={onSubmit ? \"frac-payment-form-div\" : \"\"} >\n {\n onSubmit && <div className='amt-pay-con'>\n\n <div className='pay-amount-conatiner' >\n {/* <small className='pay-payment-amount' >Select payment type</small> */}\n\n <div className='frac-card-bank-radio-main' >\n <CardBankRadio skydesign={true} label='Card' amount={Number(amount)?.toFixed(2)} value='card' onChange={handletabchange} activetab={activetab} />\n {\n !isPreAuth && isBankActive && !isPartial &&\n <CardBankRadio skydesign={true} label='Bank' amount={Number(bankAmount)?.toFixed(2)} value='ach' onChange={handletabchange} activetab={activetab} savingsText={bankSavingsText} />\n }\n </div>\n {/* <div className=\"frac-card-bank-radio-main\">\n <div className=\"frac-card-bank-radio frac-active\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src=\"https://fractal-userdata-upload.s3.us-east-1.amazonaws.com/widget/card.svg\"\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Card</div>\n <div className=\"frac-card-label-amount\">$3.39</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"card\" checked name=\"paymenttype\" />\n </div>\n </div>\n\n <div className=\"frac-card-bank-radio\" role=\"radio\">\n <div className=\"frac-card-title-main\">\n <img\n className=\"frac-payment-type-logo\"\n alt=\"\"\n src={bankNew}\n />\n <div className=\"frac-card-label\">\n <div className=\"frac-card-label-text\">Bank</div>\n <div className=\"frac-card-label-amount\">$3.20</div>\n </div>\n </div>\n <div>\n <input type=\"radio\" value=\"ach\" name=\"paymenttype\" />\n </div>\n </div>\n </div> */}\n {\n isPartial && (\n <div className=\"frac-partial-payment-input\">\n <label htmlFor=\"partialpayment\">Partial Payment</label>\n <NumericFormat\n prefix='$'\n className='form-control-frac'\n value={partialAmount}\n onValueChange={(values) => {\n handlePartialChange(values)\n }}\n thousandSeparator\n placeholder='Enter partial amount'\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n />\n\n {partialError && <span className='error-span'>{partialError}</span>}\n </div>\n )\n }\n\n </div>\n </div>\n }\n\n {\n is3DSEnable ? (\n clientSecret && <CheckoutWrapper onSuccess={onSuccess} clientSecret={clientSecret} amount={amount} showLoader={showLoader} hideLoader={hideLoader} callback={callback} session_token={session_token} handleClose={handleClose} setError={setError} isPreAuth={isPreAuth} />\n ) : (\n <>\n {/* active tab card form */}\n <div id=\"ach\" style={{ display: activetab === 'card' ? 'block' : 'none' }} className=\"tabcontent\">\n\n {!onSubmit &&\n <>\n <div className=\"frac-heading-card-wrap\">\n <div className='frac-backarrow'>\n {cardList?.length > 0 && activeinCard === 'form' &&\n <button className='charge-payment-back-btn ' onClick={() => setActiveinCard('list')}> <IoArrowBack /></button>\n }\n </div>\n <h6 className='frac-card-payment-heading'>Card Payment</h6>\n </div>\n <div style={{ display: 'flex', gap: '8px', margin: '8px 0px 19px 0px' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>\n </>\n }\n\n {\n activeinCard === 'list' && cardList?.length > 0 ? (\n <>\n <CardList headingClass='card-ach-heading-frac' listHeading='Card' ListItems={cardList} selectedCard={selectedCard} setSelectedCard={setSelectedCard} handleDeleteCard={handleDeleteCard} otherButtonLabel='Pay With Other Card' otherButtonAction={() => { setActiveinCard('form') }} />\n <div className=\"form-group-frac\" style={{ padding: '0', display: onSubmit ? 'none' : 'block' }} >\n <button className='pay-button' style={{ margin: '0px' }} type='submit' onClick={handlechargeCustomer} >\n {partialAmount ? formatUSD(Number(partialAmount)?.toFixed(2)) : formatUSD(Number(amount)?.toFixed(2))}\n </button>\n </div>\n </>\n ) : (\n\n paymentGateway == 32 ? (\n <>\n {onSubmit &&\n <>\n <ApplePayButton\n applePayAmount={partialAmount ? partialAmount : amount}\n applePayMerchantId={applePayMerchantId}\n applePayMerchantName={merchantName}\n completeFractalFlow={completeFractalFlow}\n showLoader={showLoader}\n />\n {/* <GooglePayComponent amount={partialAmount ? partialAmount : amount} googlePayEnvironment={googlePayEnvironment} googlePayGatewayMerchantId={googlePayGatewayMerchantId}\n googlePayMerchantId={googlePayMerchantId} googlePayMerchantName={merchantName} completeFractalFlow={completeFractalFlow}\n setLoading={setLoading}\n /> */}\n <div id=\"digital-wallet-or\" className=\"frac-or\"><span>or</span></div>\n </>\n }\n <form id='paymentForm' style={{ textAlign: 'start' }} ref={cardFormRef} onSubmit={submitFunc} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}>\n <div className='ach-scrl' style={{ minHeight: '398px', maxHeight: '398px', overflow: 'auto', marginRight: '5px' }}>\n <div className=\"form-group-frac\">\n <label htmlFor=\"cardHolderName\">NAME ON CARD </label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"John Doe\" value={cardData?.cardName || \"\"} onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }} />\n {cardError?.cardName && <span className='error-span'>{cardError?.cardName}</span>}\n </div>\n\n <div className=\"form-group-frac\">\n <label htmlFor=\"cardNumber\">CARD NUMBER</label>\n <div className=\"toggle-num-wrapper toggle-num-wrapper-new\">\n {(show || autoTrigger) && paymentGateway === 32 && isTokenizerReady && (\n <FractalFields\n fractalStyles={fractalStyles}\n tokenizerRef={tokenizerRef}\n isSky={true}\n />\n )}\n </div>\n </div>\n {/* <div className=\"form-group-frac\">\n <label htmlFor=\"OrderId\">Order ID / Description</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"OID123456\" disabled value={orderID ?? \"\"}\n style={{ background: '#F6F6F7', color: '#727272' }} />\n </div> */}\n <div className=\"form-group-frac\">\n <label htmlFor=\"zip\">ZIP</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? \"\"} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span'>{cardError?.zipCode}</span>}\n {pass_fee && cardFeeAmount > 0 && (\n <small className='frac-fee-text'>\n Cards include a fee amount of <span className='frac-fee-amount'>{formatUSD(cardFeeAmount.toFixed(2))}</span>.\n </small>\n )}\n </div>\n {\n customerId &&\n <div className='form-group-frac'>\n <div className=\"frac-tooltip-mn\" style={{ display: 'flex', alignItems: 'center', gap: '10px', paddingTop: '10px' }}>\n <input\n type=\"checkbox\"\n id=\"save_card\"\n className=\"toggle-checkbox\"\n checked={saveCardInfo}\n onChange={(e) => setSaveCardInfo(e.target.checked)}\n />\n <label htmlFor=\"save_card\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Save card for future payments </label>\n <div className=\"frac-tooltip-wrapper\">\n <div className=\"frac-tooltip-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#E0DFE2\"></circle>\n <path\n d=\"M9.03406 12.0979V12.0072C9.04055 11.4153 9.10057 10.9443 9.21411 10.5943C9.3309 10.2442 9.49635 9.96102 9.71046 9.74463C9.92457 9.52824 10.1825 9.33095 10.4842 9.15274C10.6788 9.03182 10.854 8.89658 11.0097 8.74702C11.1655 8.59745 11.2887 8.42562 11.3796 8.2315C11.4704 8.03739 11.5158 7.82259 11.5158 7.58711C11.5158 7.3039 11.4477 7.05887 11.3114 6.85203C11.1752 6.64519 10.9935 6.48608 10.7664 6.3747C10.5426 6.26014 10.2928 6.20286 10.017 6.20286C9.76723 6.20286 9.52879 6.25378 9.3017 6.35561C9.07461 6.45744 8.88646 6.61655 8.73723 6.83294C8.588 7.04614 8.50203 7.3214 8.47932 7.65871H7C7.02271 7.08592 7.17032 6.60223 7.44282 6.20764C7.71533 5.80986 8.07543 5.50915 8.52311 5.30549C8.97405 5.10183 9.47202 5 10.017 5C10.6139 5 11.1363 5.10979 11.5839 5.32936C12.0316 5.54574 12.3788 5.84964 12.6253 6.24105C12.8751 6.62928 13 7.08274 13 7.60143C13 7.95784 12.9432 8.27924 12.8297 8.56563C12.7161 8.84885 12.5539 9.10183 12.3431 9.32458C12.1354 9.54733 11.8856 9.74463 11.5937 9.91647C11.3179 10.0851 11.0941 10.2601 10.9221 10.4415C10.7534 10.6229 10.6302 10.8377 10.5523 11.0859C10.4745 11.3341 10.4323 11.6412 10.4258 12.0072V12.0979H9.03406ZM9.76886 15C9.50284 15 9.27413 14.9077 9.08273 14.7232C8.89132 14.5354 8.79562 14.3095 8.79562 14.0453C8.79562 13.7844 8.89132 13.5617 9.08273 13.3771C9.27413 13.1893 9.50284 13.0955 9.76886 13.0955C10.0316 13.0955 10.2587 13.1893 10.4501 13.3771C10.6448 13.5617 10.7421 13.7844 10.7421 14.0453C10.7421 14.2204 10.6967 14.3811 10.6058 14.5274C10.5182 14.6706 10.4015 14.7852 10.2555 14.8711C10.1095 14.957 9.94728 15 9.76886 15Z\"\n fill=\"#161616\"\n />\n </svg>\n </div>\n <div className=\"frac-tooltip-text\">\n <p>\n If checked, I agree to give the <b>{merchantName || 'merchant'}</b> permission to charge this credit card for agreed-upon purchases in the future.\n </p>\n </div>\n </div>\n\n </div>\n </div>\n }\n </div>\n <div className=\"form-group-frac\" style={{ marginTop: '20px', padding: '0' }}>\n <button type=\"submit\" style={{ margin: 0, display: onSubmit ? 'none' : 'block' }} className='pay-button'>{partialAmount ? formatUSD(Number(partialAmount)?.toFixed(2)) : formatUSD(Number(amount)?.toFixed(2))}</button>\n </div>\n </form>\n </>\n ) : (\n <form id='PaymentForm' style={{ textAlign: 'start' }} ref={cardFormRef} onSubmit={submitFunc} onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}>\n {/* <div style={{minHeight: '482px'}}> */}\n <div className='ach-scrl' style={{ minHeight: '398px', maxHeight: '398px', overflow: 'auto', marginRight: '5px' }}>\n <div className=\"form-group-frac\">\n <label htmlFor=\"cardHolderName\">NAME ON CARD </label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"John Doe\" value={cardData?.cardName || \"\"} onChange={(e: any) => {\n const value = e.target.value;\n if (/^[a-zA-Z\\s]*$/.test(value)) {\n handleCardChange('cardName', value);\n }\n }} />\n {cardError?.cardName && <span className='error-span'>{cardError?.cardName}</span>}\n </div>\n\n <div className=\"form-group-frac\">\n\n {/* DC Iframes */}\n\n <DataCapFields\n isOpen={show || autoTrigger}\n tokenKey={dcToken}\n setLoader={activeinCard === 'form' ? setLoadingIframe : null}\n isEmbedded={onSubmit ? true : false}\n customCSS={customCSS}\n onError={(msg: string) => setError(msg || DcLoadingError)}\n />\n\n {/* <label htmlFor=\"cardNumber\">CARD NUMBER</label>\n <div className='toggle-num-wrapper'>\n <input className='form-control-frac card-number-new' type='text' maxLength={19} inputMode=\"numeric\" placeholder='0000 0000 0000 0000' value={cardData?.cardNumber || \"\"} onChange={(e) => handleCardNumberChange(e)}\n data-token=\"card_number\"\n />\n\n <div className='card-crdi card-expiry-new'>\n <div className=\"exp-date-year-container\">\n <div className=\"exp-date form-group-frac\">\n <input data-token=\"exp_month\" className=\"form-control-frac required card-cvv-in\" type=\"text\"\n style={{ maxHeight: '36px' }}\n placeholder=\"MM\" maxLength={2} value={cardData?.expiryMonth || \"\"}\n onChange={(e) => handleCardChange('expiryMonth', e.target.value)} />\n </div>\n <div className=\"exp-year form-group-frac\">\n <input data-token=\"exp_year\" className=\"form-control-frac required card-cvv-in\" type=\"text\"\n style={{ maxHeight: '36px' }}\n placeholder=\"YYYY\" maxLength={4} value={cardData?.expiryYear || \"\"} onChange={(e) => handleCardChange('expiryYear', e.target.value)} />\n </div>\n <div className=\"security-digit form-group-frac\">\n <input data-token=\"cvv\" className=\"form-control-frac card-cvv-in required\" type=\"text\"\n style={{ maxHeight: '36px' }}\n maxLength={4} placeholder=\"CVC\" value={cardData?.cvv || \"\"} onChange={(e) => handleCardChange('cvv', e.target.value)}\n />\n </div>\n </div>\n </div>\n {cardError?.cardNumber &&\n <span className='error-span'>{cardError?.cardNumber}</span>\n }\n <p style={{ margin: '0' }}>\n {cardError?.expiryMonth || cardError?.expiryYear ?\n <span className='error-span' style={{ paddingRight: '4px' }}>{cardError?.expiryMonth}</span>\n : \"\"\n }\n {cardError?.cvv &&\n <span className='error-span' >{cardError?.cvv}</span>\n\n }\n </p>\n\n </div> */}\n </div>\n {/* <div className=\"form-group-frac\">\n <label htmlFor=\"OrderId\">Order ID / Description</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"OID123456\" disabled value={orderID ?? \"\"}\n style={{ background: '#F6F6F7', color: '#727272' }} />\n </div> */}\n <div className=\"form-group-frac\">\n <label htmlFor=\"zip\">ZIP</label>\n <input type=\"text\" className='form-control-frac' maxLength={100} placeholder=\"000000\" value={cardData?.zipCode ?? \"\"} onChange={(e) => handleCardChange('zipCode', e.target.value)} />\n {cardError?.zipCode && <span className='error-span'>{cardError?.zipCode}</span>}\n {pass_fee && cardFeeAmount > 0 && (\n <small className='frac-fee-text'>\n Cards include a fee amount of <span className='frac-fee-amount'>{formatUSD(cardFeeAmount.toFixed(2))}</span>.\n </small>\n )}\n </div>\n {\n customerId &&\n <div className='form-group-frac'>\n <div className=\"frac-tooltip-mn\" style={{ display: 'flex', alignItems: 'center', gap: '10px', paddingTop: '10px' }}>\n <input\n type=\"checkbox\"\n id=\"save_card\"\n className=\"toggle-checkbox\"\n checked={saveCardInfo}\n onChange={(e) => setSaveCardInfo(e.target.checked)}\n />\n <label htmlFor=\"save_card\" className=\"toggle-label\"></label>\n <label htmlFor='save_card'>Save card for future payments </label>\n <div className=\"frac-tooltip-wrapper\">\n <div className=\"frac-tooltip-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#E0DFE2\"></circle>\n <path\n d=\"M9.03406 12.0979V12.0072C9.04055 11.4153 9.10057 10.9443 9.21411 10.5943C9.3309 10.2442 9.49635 9.96102 9.71046 9.74463C9.92457 9.52824 10.1825 9.33095 10.4842 9.15274C10.6788 9.03182 10.854 8.89658 11.0097 8.74702C11.1655 8.59745 11.2887 8.42562 11.3796 8.2315C11.4704 8.03739 11.5158 7.82259 11.5158 7.58711C11.5158 7.3039 11.4477 7.05887 11.3114 6.85203C11.1752 6.64519 10.9935 6.48608 10.7664 6.3747C10.5426 6.26014 10.2928 6.20286 10.017 6.20286C9.76723 6.20286 9.52879 6.25378 9.3017 6.35561C9.07461 6.45744 8.88646 6.61655 8.73723 6.83294C8.588 7.04614 8.50203 7.3214 8.47932 7.65871H7C7.02271 7.08592 7.17032 6.60223 7.44282 6.20764C7.71533 5.80986 8.07543 5.50915 8.52311 5.30549C8.97405 5.10183 9.47202 5 10.017 5C10.6139 5 11.1363 5.10979 11.5839 5.32936C12.0316 5.54574 12.3788 5.84964 12.6253 6.24105C12.8751 6.62928 13 7.08274 13 7.60143C13 7.95784 12.9432 8.27924 12.8297 8.56563C12.7161 8.84885 12.5539 9.10183 12.3431 9.32458C12.1354 9.54733 11.8856 9.74463 11.5937 9.91647C11.3179 10.0851 11.0941 10.2601 10.9221 10.4415C10.7534 10.6229 10.6302 10.8377 10.5523 11.0859C10.4745 11.3341 10.4323 11.6412 10.4258 12.0072V12.0979H9.03406ZM9.76886 15C9.50284 15 9.27413 14.9077 9.08273 14.7232C8.89132 14.5354 8.79562 14.3095 8.79562 14.0453C8.79562 13.7844 8.89132 13.5617 9.08273 13.3771C9.27413 13.1893 9.50284 13.0955 9.76886 13.0955C10.0316 13.0955 10.2587 13.1893 10.4501 13.3771C10.6448 13.5617 10.7421 13.7844 10.7421 14.0453C10.7421 14.2204 10.6967 14.3811 10.6058 14.5274C10.5182 14.6706 10.4015 14.7852 10.2555 14.8711C10.1095 14.957 9.94728 15 9.76886 15Z\"\n fill=\"#161616\"\n />\n </svg>\n </div>\n <div className=\"frac-tooltip-text\">\n <p>\n If checked, I agree to give the <b>{merchantName || 'merchant'}</b> permission to charge this credit card for agreed-upon purchases in the future.\n </p>\n </div>\n </div>\n\n </div>\n </div>\n }\n </div>\n <div className=\"form-group-frac\" style={{ marginTop: '20px', padding: '0' }}>\n <button type=\"submit\" style={{ margin: 0, display: onSubmit ? 'none' : 'block' }} className='pay-button'>{partialAmount ? formatUSD(Number(partialAmount)?.toFixed(2)) : formatUSD(Number(amount)?.toFixed(2))}</button>\n </div>\n </form>\n )\n )\n }\n\n </div>\n\n {/* active tab ach */}\n <div id=\"ach\" style={{ display: activetab === 'ach' ? 'block' : 'none' }} className=\"tabcontent\">\n <>\n {\n !onSubmit && <div className=\"frac-heading-card-wrap\">\n <div className='frac-backarrow'>\n {bankList?.length > 0 && activeinBank === 'form' &&\n <button className='charge-payment-back-btn ' onClick={() => setActiveinBank('list')}> <IoArrowBack /></button>\n }\n </div>\n <h6 className='frac-card-payment-heading'>Bank Payment</h6>\n </div>\n }\n {/* {\n activetab != \"ach\" &&\n (<div style={{ display: 'flex', gap: '8px', margin: '8px 0px 19px 0px' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>)\n } */}\n\n {\n activeinBank === 'list' && bankList?.length > 0 ? (\n <>\n <CardList headingClass='card-ach-heading-frac' listHeading='Banks' ListItems={bankList} selectedCard={selectedCard} setSelectedCard={setSelectedCard} handleDeleteCard={handleDeleteCard} otherButtonLabel='Pay With Other Bank' otherButtonAction={() => { setActiveinBank('form') }} />\n <div className=\"form-group-frac\" style={{ padding: '0', display: onSubmit ? 'none' : 'block' }} >\n <button className='pay-button' style={{ margin: '0px' }} type='submit' onClick={handlechargeCustomer}>{formatUSD(Number(bankAmount)?.toFixed(2))}</button>\n </div>\n </>\n ) : (\n <form id='ACHPaymentForm' style={{ textAlign: 'start' }} ref={bankFormRef} onSubmit={submitFunc} autoComplete=\"off\" onKeyDown={(e) => {\n if (e.key === \"Enter\" && loading) {\n e.preventDefault();\n e.stopPropagation();\n }\n }} >\n <div className='ach-scrl' style={{\n minHeight: '444px',\n maxHeight: '444px',\n }}>\n\n <div className=\"form-group-frac\">\n <label htmlFor=\"nameonaccount\">Name on account</label>\n <input type=\"text\" id='nameonaccount' className='form-control-frac' maxLength={100} placeholder=\"John Doe\" name=\"name\" value={achData?.name ?? \"\"} onChange={handleChangeAch} />\n {achError?.name && <span className='error-span'>{achError?.name}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"routingnumber\">Routing number</label>\n <input type=\"text\" id='routingnumber' className='form-control-frac' maxLength={9} placeholder=\"000000000\"\n name=\"routingNumber\" value={achData?.routingNumber ?? \"\"} onChange={handleChangeAch} />\n {achError?.routingNumber && <span className='error-span'>{achError?.routingNumber}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"accountnumber\">Account number</label>\n <input type=\"text\" id='accountnumber' className='form-control-frac' maxLength={16} placeholder=\"0000000000\"\n name=\"accountNumber\" value={achData?.accountNumber ?? \"\"} onChange={handleChangeAch} />\n {achError?.accountNumber && <span className='error-span'>{achError?.accountNumber}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"confirmaccountnumber\">Confirm account number</label>\n <input type=\"text\" id='confirmaccountnumber' className='form-control-frac' maxLength={16} placeholder=\"0000000000\"\n name=\"confirmAccountNumber\" value={achData?.confirmAccountNumber ?? \"\"} onChange={handleChangeAch} />\n {achError?.confirmAccountNumber && <span className='error-span'>{achError?.confirmAccountNumber}</span>}\n </div>\n <div className=\"form-group-frac\">\n <label htmlFor=\"bankname\">Bank name</label>\n <input type=\"text\" id='bankname' className='form-control-frac' maxLength={100} placeholder=\"My Bank\"\n name=\"bankName\" value={achData?.bankName ?? \"\"} onChange={handleChangeAch}\n />\n {achError?.bankName && <span className='error-span'>{achError?.bankName}</span>}\n </div>\n {(achData?.accountType === 'business saving' || achData?.accountType === 'business checking') && (\n <div className=\"form-group-frac\">\n <label htmlFor=\"companyName\">Company name</label>\n <input type=\"text\" id='companyName' className='form-control-frac' maxLength={100} placeholder=\"My Company\"\n name=\"companyName\" value={achData?.companyName ?? \"\"} onChange={handleChangeAch}\n />\n {achError?.companyName && <span className='error-span'>{achError?.companyName}</span>}\n </div>\n )}\n <div className=\"form-group-frac\">\n <label htmlFor=\"accounttype\">Select account type</label>\n <select name=\"accountType\" id=\"accounttype\" className='form-control-frac' value={achData?.accountType ?? \"\"} onChange={handleChangeAch} >\n <option value=\"\">Select account</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>\n {type.label}\n </option>\n ))}\n </select>\n {bankFeeAmount > 0 && (\n <small className='frac-fee-text'>\n There is a processing fee of <span className='frac-fee-amount'>{formatUSD(bankFeeAmount.toFixed(2))}</span>.\n </small>\n )}\n {/* <div className=\"form-group-frac\">\n <label htmlFor=\"accounttype\">Select account type</label>\n <select name=\"accountType\" id=\"accounttype\" className='form-control-frac' value={achData?.accountType ?? \"\"} onChange={handleChangeAch} >\n <option value=\"\">Select account</option>\n {accountTypes.map((type) => (\n <option key={type.value} value={type.value}>\n {type.label}\n </option>\n ))}\n </select>\n </div> */}\n {\n !saveACHinfo &&\n <>\n <div className=\"form-group-frac save-ach-div\" style={{ paddingTop: '5px' }}>\n <input type=\"checkbox\" id='achconsent' className='' checked={isBankConsentChecked} onChange={(e) => {\n setIsBankConsentChecked(e.target.checked);\n if (e.target.checked) {\n setErrorBankConsent('');\n }\n }} />\n <label className='saveachlabel' htmlFor=\"achconsent\">\n {`By selecting this box, I authorize SkyFi, on behalf of ${merchantName || 'merchant'}, to initiate a one-time electronic ACH debit from my bank account for the total amount displayed on this screen, including any applicable processing fee. I confirm that I am authorized to use this account and that the bank account information I provided is correct.`}\n </label>\n </div>\n {errorBankConsent && <span className='error-span'>{errorBankConsent}</span>}\n </>\n }\n {\n customerId && (\n <div className=\"form-group-frac save-ach-div\" style={{ paddingTop: '5px' }}>\n <input type=\"checkbox\" id='saveACH' className='' maxLength={100} placeholder=\"My Bank\" checked={saveACHinfo} onChange={(e) => {\n setSaveACHinfo(e.target.checked)\n if (!e.target.checked) {\n setSaveACHConsent1(false);\n setErrorBankConsentOther('');\n }\n }} />\n <label className='saveachlabel' htmlFor=\"saveACH\">\n Save for future use\n </label>\n </div>\n )\n }\n {saveACHinfo &&\n <>\n <div className=\"form-group-frac save-ach-div\" style={{ paddingTop: '5px' }}>\n <input type=\"checkbox\" id='saveACHConsent1' className='' maxLength={100} placeholder=\"My Bank\" checked={saveACHConsent1} onChange={(e) => {\n setSaveACHConsent1(e.target.checked);\n if (e.target.checked) {\n setErrorBankConsentOther('');\n }\n }} />\n <label className='saveachlabel' htmlFor=\"saveACHConsent1\">\n By providing my bank account information and selecting ‘Save for future payments’, I authorize {merchantName || 'merchant'} to store my bank account details for future ACH payments. I understand that future payments may be initiated using this saved account in accordance with my instructions. I confirm I am authorized to use this bank account.\n </label>\n </div>\n {errorBankConsentOther && <span className='error-span'>{errorBankConsentOther}</span>}\n\n </>\n // <div className=\"form-group-frac saveachtext\">\n // <p>\n // If checked, I agree to give the <b>{merchantName || 'merchant'}</b> permission to charge this bank account for agreed-upon purchases in the future.\n // </p>\n // </div>\n }\n\n\n\n\n </div>\n </div>\n <div className=\"form-group-frac \" >\n <button className='pay-button' style={{ margin: '20px 0 0', display: onSubmit ? 'none' : 'block' }} type='submit'>{formatUSD(Number(bankAmount)?.toFixed(2))}</button>\n </div>\n </form>\n )\n }\n </>\n </div>\n </>\n )\n }\n\n {/* {!isPreAuth &&\n <>\n \n <div className=\"tab\">\n <button className=\"tablinks cardicon-img\" onClick={(e) => { handletabchange('card') }} style={{ border: activetab === 'card' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='cardicon' src={cardicon} />Card</button>\n <button className=\"tablinks bankicon-img\" onClick={(e) => { handletabchange('ach') }} style={{ border: activetab === 'ach' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='bankicon' src={bankicon} />Bank</button>\n </div>\n </>\n } */}\n {/* {\n activetab !== \"cardList\" ?\n <>\n <div className=\"frac-heading-card-wrap\">\n <div className='frac-backarrow'>\n {cardList?.length > 0 &&\n <button className='charge-payment-back-btn ' onClick={() => setActive('cardList')}> <IoArrowBack /></button>\n }\n {!isPreAuth && (\n <div className=\"tab\">\n <button className=\"tablinks cardicon-img\" onClick={(e) => { handletabchange('card') }} style={{ border: activetab === 'card' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='cardicon' src={cardicon} />Card</button>\n <button className=\"tablinks bankicon-img\" onClick={(e) => { handletabchange('ach') }} style={{ border: activetab === 'ach' ? '1px solid' : '', display: 'flex', justifyContent: 'center', alignItems: 'center' }} ><img className='bankicon' src={bankicon} />Bank</button>\n </div>\n )}\n </div>\n <h6 className='frac-card-payment-heading'>Card Payment</h6>\n </div>\n {\n activetab != \"ach\" &&\n (<div style={{ display: 'flex', gap: '8px', margin: '8px 0px 19px 0px' }}>\n <img src={visa} alt=\"\" width={33} />\n <img src={mastercard} width={33} alt=\"\" />\n <img src={americanexp} alt=\"\" width={33} />\n <img src={discover} width={33} alt=\"\" />\n </div>)\n }\n </>\n :\n <div>\n <div className='charge-customer-name-frac' style={{ marginBottom: '16px !important' }}> Charge {paymentData?.customer_name}</div>\n <div className='card-ach-heading-frac' style={{ marginBottom: '10px !important' }}> {activeList === 'card' ? getHeading() : 'Readers'} </div>\n <div className='res-pay-con'>\n\n <div className='pay-amount-conatiner' style={{ margin: 0 }} >\n <small className='pay-payment-amount' >Payment Amount</small>\n <strong className='pay-amount'>{formatUSD(Number(amount)?.toFixed(2))}</strong>\n <strong className='pay-amount'>${Number(amount)?.toFixed(2)}</strong>\n </div>\n\n\n <div >\n <div >\n\n <img src={visa} alt=\"\" width={35} style={{ paddingRight: '5px' }} />\n <img src={mastercard} width={35} alt=\"\" />\n </div>\n <div>\n\n <img src={americanexp} alt=\"\" width={35} style={{ paddingRight: '5px' }} />\n <img src={discover} width={35} alt=\"\" />\n </div>\n </div>\n\n </div>\n </div>\n } */}\n\n\n {/* active tab home card list */}\n {/* <div id=\"ach\" style={{ display: activetab === 'cardList' ? 'block' : 'none' }} className=\"tabcontent\">\n\n\n <div className='card-lint-div-in'>\n <div className='card-list-div'>\n\n {\n\n cardList && cardList?.length > 0 &&\n cardList?.map((card: any, index) => (\n <div className='card-list-single-div' key={index}>\n <div className=\"card-number-radio\">\n <input disabled={paymentData?.paymentGateway != card?.payment_method_type && card?.card_type != \"Bank\"} type=\"radio\" className='cardRadio' name=\"selected_card\" id=\"\" checked={selectedCard === card}\n onChange={(e) => setSelectedCard(card)} />\n <label htmlFor=\"\" className='card-number-last-four'>**** {card?.cardlastfourdigit}</label>\n {\n card?.card_type != \"Bank\" && (<h6 className='card-expiry-date'>{card?.expmonth}/{card?.expyear}</h6>)\n }\n </div>\n <div className=\"card-number-radio\">\n <span className='visa-card'>\n <img src={getCardType(card?.card_type)} alt=\"\" />\n </span>\n\n <span className='visa-card' style={{ cursor: \"pointer\" }} onClick={() => handleDeleteCard(card?.id)}>\n <img src={trash} alt=\"\" />\n </span>\n </div>\n </div>\n ))\n\n }\n\n </div>\n <div className='pay-with-other-card' onClick={() => setActive('card')}>\n Pay With Other Card\n <img src={defaultcard} alt=\"\" />\n </div>\n\n </div>\n\n <div className=\"form-group-frac\" style={{ padding: '0' }} >\n <button className='pay-button' style={{ margin: '0px' }} type='submit' onClick={handlechargeCustomer}>{formatUSD(Number(amount)?.toFixed(2))}</button>\n </div>\n </div> */}\n\n\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n </div>\n </>\n {/* } */}\n </>\n )\n}\n\nexport default ModelContentSky","import { useEffect, useRef } from \"react\";\n\n// Updated version of ThreeDSChallenge.tsx\ninterface ThreeDSProps {\n challengeUrl: string;\n fractalToken: string;\n stripeIntentId: string;\n onSuccess: (token: string, intentId: string) => void;\n onError: (status: string) => void;\n containerRef: React.RefObject<HTMLDivElement>;\n}\n\nexport function ThreeDSChallenge({\n challengeUrl,\n fractalToken,\n stripeIntentId,\n onSuccess,\n onError,\n containerRef,\n}: ThreeDSProps) {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n\n useEffect(() => {\n if (!challengeUrl || typeof window === \"undefined\") return;\n const container = containerRef.current;\n if (!container) return;\n\n // Clean up old iframe if needed\n if (iframeRef.current && container.contains(iframeRef.current)) {\n container.removeChild(iframeRef.current);\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.className = \"challengeUrlclass-frac\"\n iframe.src = challengeUrl;\n // iframe.width = \"100%\";\n // iframe.height = \"400px\";\n // iframe.style.border = \"none\";\n // iframe.style.borderRadius = \"8px\";\n iframeRef.current = iframe;\n\n container.appendChild(iframe);\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === \"3ds-authentication-challenge-complete\") {\n container.innerHTML = \"\";\n if (event.data.status === \"succeeded\") {\n onSuccess(fractalToken, stripeIntentId);\n } else {\n onError(event.data.status);\n }\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n if (iframeRef.current && container.contains(iframeRef.current)) {\n container.removeChild(iframeRef.current);\n }\n };\n }, [challengeUrl, containerRef, fractalToken, stripeIntentId, onSuccess, onError]);\n\n return null;\n}\n","import React from 'react'\nimport { bankNew, defaultcard, formatUSD, pax } from '@/app/utils/Common'\n\ntype Props = {\n label: string\n amount: string\n value: string\n onChange: (resp: any) => void\n activetab: string\n skydesign?: boolean\n savingsText?: string\n}\n\nexport const CardBankRadio = ({ skydesign = false, savingsText, ...props }: Props) => {\n const savingsBadgeClass = `frac-saving-badge ${skydesign ? 'frac-saving-badge-corner' : 'frac-saving-badge-corner frac-saving-badge-with-radio'}`;\n\n return (\n <>\n <div\n className={`frac-card-bank-radio ${props.activetab === props.value ? 'frac-active' : ''}`}\n onClick={() => props.onChange(props.value)}\n role=\"radio\"\n >\n {skydesign ? (\n <>\n <div className='frac-card-title-main'>\n <div className=\"box-inner-card-text\">\n <img src={(props.label).toLowerCase() === 'card' ? defaultcard : (props.label).toLowerCase() === 'reader' ? pax : bankNew} className='frac-payment-type-logo' alt=\"\" />\n <div className='frac-card-label-text'>{props.label}</div>\n </div>\n <div className='frac-card-label'>\n <div className='frac-card-label-amount'>{formatUSD(props.amount)}</div>\n </div>\n </div>\n {/* {savingsText ? <button type=\"button\" className={savingsBadgeClass}>{savingsText}</button> : null} */}\n <div>\n <input name='paymenttype' checked={props.activetab === props.value} type=\"hidden\" value={props.value} onChange={(e) => { props.onChange(e.target.value) }} />\n </div>\n </>\n ) : (\n <>\n <div className='frac-card-title-main'>\n <img src={(props.label).toLowerCase() === 'card' ? defaultcard : (props.label).toLowerCase() === 'reader' ? pax : bankNew} className='frac-payment-type-logo' alt=\"\" />\n <div className='frac-card-label'>\n <div className='frac-card-label-text'>{props.label}</div>\n <div className='frac-card-label-amount'>{formatUSD(props.amount)}</div>\n </div>\n </div>\n {/* {savingsText ? <button type=\"button\" className={savingsBadgeClass}>{savingsText}</button> : null} */}\n <div>\n <input name='paymenttype' checked={props.activetab === props.value} type=\"radio\" value={props.value} onChange={(e) => { props.onChange(e.target.value) }} />\n </div>\n </>\n )}\n </div>\n </>\n )\n}\n","// CheckoutWrapper.tsx\n\"use client\"; // important if you’re using Next.js\n\nimport { Elements } from \"@stripe/react-stripe-js\";\n\ninterface CheckoutWrapperProps {\n clientSecret: string;\n onSuccess?: (paymentIntent: any) => void;\n showLoader: () => void;\n setError: (error: any) => void;\n session_token: string;\n callback: (callbackdata: any) => void;\n hideLoader: () => void;\n handleClose: () => void;\n amount: string;\n isPreAuth: boolean;\n}\n\nimport { loadStripe } from \"@stripe/stripe-js\";\nimport { CheckoutForm } from \"./CheckoutForm\";\nimport { threedsSecurePublicKey } from \"../../baseurl\";\n\nexport const stripePromise = loadStripe(\n threedsSecurePublicKey\n);\n\nexport default function CheckoutWrapper({ clientSecret, onSuccess, showLoader, setError, session_token, callback, hideLoader, handleClose, amount, isPreAuth }: CheckoutWrapperProps) {\n if (!clientSecret) return null;\n\n return (\n <Elements stripe={stripePromise} options={{ clientSecret }}>\n <CheckoutForm onSuccess={onSuccess} showLoader={showLoader} hideLoader={hideLoader} setError={setError} session_token={session_token} callback={callback} handleClose={handleClose} amount={amount} isPreAuth={isPreAuth} />\n </Elements>\n );\n}\n","import { formatUSD } from \"@/app/utils/Common\";\nimport { PaymentElement, useElements, useStripe } from \"@stripe/react-stripe-js\";\nimport axios from \"axios\";\nimport { useState } from \"react\";\nimport { masterBaseUrl } from \"../../baseurl\";\n\ninterface CheckoutFormProps {\n onSuccess?: (paymentIntent: any) => void;\n showLoader: () => void;\n setError: (error: any) => void;\n session_token: string;\n callback: (callbackdata: any) => void;\n hideLoader: () => void;\n handleClose: () => void;\n amount: string;\n isPreAuth: boolean;\n\n}\n\nexport const CheckoutForm: React.FC<CheckoutFormProps> = ({ onSuccess, showLoader, setError, session_token, callback, hideLoader, handleClose, amount, isPreAuth }) => {\n const stripe = useStripe();\n const elements = useElements();\n const [loading, setLoading] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!stripe || !elements) {\n console.warn(\"stripe nopt loaded\");\n return;\n }\n\n console.log(\"Stripe:\", stripe);\n console.log(\"Elements:\", elements);\n console.log(\"PaymentElement:\", elements.getElement(PaymentElement));\n\n showLoader()\n setLoading(true);\n try {\n const { error, paymentIntent } = await stripe.confirmPayment({\n elements,\n confirmParams: {},\n redirect: \"if_required\", // no redirect, works in popup\n });\n\n setLoading(false);\n if (error) {\n console.log(error, \"paymentIntent error\");\n setError(error.message || \"Payment failed.\");\n } else if (paymentIntent?.status === \"succeeded\") {\n setMessage(\"✅ Payment successful!\");\n if (onSuccess) {\n console.log(paymentIntent, \"paymentIntent\");\n try {\n const chargeDetails = await axios.post(`${masterBaseUrl}api/v1/gateway/secure-charge/${session_token}`, {\n stripe_id: paymentIntent?.id\n })\n\n console.log(chargeDetails, \"chargeDetails\");\n\n\n if (chargeDetails?.data?.result) {\n\n let callbackdata = chargeDetails?.data?.data\n console.log(callbackdata, \"callbackdata\");\n callback({\n ...callbackdata,\n isPreAuth\n })\n handleClose()\n hideLoader()\n // onSuccess(paymentIntent);\n }\n console.log(chargeDetails?.data?.data, \"chargeDetails\");\n } catch (error: any) {\n console.log(error?.response, \"error\");\n setError(error?.response?.data?.message || \"Something went wrong\")\n hideLoader()\n }\n\n }\n // Optional: close popup or postMessage to parent\n setTimeout(() => window.close(), 1500);\n } else {\n setMessage(\"Processing payment...\");\n }\n\n } catch (error: any) {\n console.log(error?.response, \"error\");\n setError(error?.response?.data?.message || \"Something went wrong\")\n hideLoader()\n }\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <PaymentElement />\n <button className='pay-button' disabled={loading || !stripe}>\n {loading ? \"Processing...\" : `${formatUSD(Number(amount)?.toFixed(2))}`}\n </button>\n {/* {message && <div style={{ marginTop: 10 }}>{message}</div>} */}\n </form>\n );\n};","import { defaultcard, getCardType } from '@/app/utils/Common';\nimport React from 'react'\nimport { S3Url } from '../../baseurl';\n\ninterface Card {\n id: string;\n firstname: string;\n lastname: string;\n primary_card: number;\n expmonth: number;\n expyear: number;\n card_type: string;\n cardlastfourdigit: string;\n}\n\ninterface SelectedCard {\n card_type: string;\n cardlastfourdigit: string;\n expmonth: number;\n expyear: number;\n primary_card: number;\n firstname: string;\n id: string;\n lastname: string;\n}\n\ntype Props = {\n listHeading: string\n ListItems: Card[] | undefined\n selectedCard: SelectedCard | undefined\n setSelectedCard: React.Dispatch<React.SetStateAction<SelectedCard | undefined>>\n paymentGateway?: number | undefined,\n handleDeleteCard: (resp: any) => void\n otherButtonAction: (resp: any) => void\n otherButtonLabel: string\n headingClass?: string\n}\n\nexport const CardList = ({ listHeading = 'Card', ListItems, selectedCard, setSelectedCard, paymentGateway, handleDeleteCard, otherButtonAction, otherButtonLabel,headingClass }: Props) => {\n\n let trash = S3Url + 'widget/Trash.svg'\n\n // console.log(selectedCard, \"selectedCard another\",ListItems);\n\n\n return (\n <>\n <h6 className={headingClass || 'card-ach-heading'} style={{ marginBottom: '10px !important' }}>{listHeading}</h6>\n <div className='card-lint-div-in'>\n <div className='card-list-div'>\n {\n ListItems && ListItems?.length > 0 && ListItems?.map((card: any, index) => {\n let isDisabled = false\n if(paymentGateway){\n isDisabled = paymentGateway != card?.payment_method_type && card?.card_type != \"Bank\"\n }\n return (\n <div key={card?.id} className='card-list-single-div'>\n <div className=\"card-number-radio\">\n <input\n disabled={isDisabled}\n type=\"radio\" className='cardRadio' name=\"selected_card\"\n id=\"\" checked={selectedCard?.id === card?.id}\n onChange={(e) => setSelectedCard(card)} />\n <label htmlFor=\"\" className='card-number-last-four'>**** {card?.cardlastfourdigit}</label>\n {\n card?.card_type != \"Bank\" && (<h6 className='card-expiry-date'>{card?.expmonth}/{card?.expyear}</h6>)\n }\n </div>\n <div className=\"card-number-radio\">\n <span className='visa-card'>\n <img src={getCardType(card?.card_type)} alt=\"\" />\n </span>\n <span className='visa-card' style={{ cursor: \"pointer\" }} onClick={() => handleDeleteCard(card?.id)}>\n <img src={trash} alt=\"\" />\n </span>\n </div>\n </div>\n )\n })\n }\n </div>\n <div className='pay-with-other-card' onClick={otherButtonAction}>\n {otherButtonLabel}\n <img src={defaultcard} alt=\"\" />\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\n\nexport default function ErrorCardOverlayStyle() {\n return (\n <style>\n {\n `\n .card-error-overlay .logo-container {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: -50px; /* Adjust this to overlap the content */\n z-index: 10;\n }\n\n .card-error-overlay .client-logo {\n max-width: 100px;\n height: auto;\n object-fit: contain;\n display: block;\n }\n\n \n .card-error-overlay .error-icon-overlay {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n min-height: 116px;\n z-index: 2;\n }\n\n .card-error-overlay .circle {\n width: 50px;\n height: 50px;\n border: 1px solid red;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom:20px\n }\n\n .card-error-overlay .circle .fa-times {\n font-size: 30px;\n color: red;\n }\n\n .card-error-overlay .error-text-overlay {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 4px;\n // width: 227px;\n }\n\n .card-error-overlay .payment-error-text-overlay {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616;\n }\n\n .card-error-overlay .thank-you-text-overlay {\n font-family: 'Inter', sans-serif;\n font-weight: 500;\n font-size: 16px;\n line-height: 18px;\n text-align: center;\n letter-spacing: -0.02em;\n color: #161616 !important;\n opacity: 0.5;\n padding-top:10px\n }\n\n .card-error-overlay .error-btn-div-overlay{\n padding-top:20px;\n width: 100%;\n \n }\n .card-error-overlay .error-btn-div-overlay button{\n outline: 0;\n height: 46px;\n font-size: 16px;\n background: #727272;\n border: none;\n display: block;\n color: #fff;\n width: 100%;\n border-radius: 180px;\n margin: 10px 0;\n text-decoration: none;\n }\n .card-error-overlay .error-btn-div-overlay button:hover, .card-error-overlay .error-btn-div-overlay button:focus {\n background: #222;\n color: #fff;\n cursor: pointer;\n}\n .payment-error-container-overlay {\nwidth: fit-content;\n position: relative;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: #fff;\n border-radius: 12px;\n z-index: 11111;\n max-width: 240px;\n min-width: 224px;\n padding: 20px;\n margin-left: 17px !important;\n}\n.card-error-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgb(87 87 87 / 15%);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(12px);\n z-index: 1111;\n}\n `\n }\n </style>\n )\n}","import React from 'react'\nimport ErrorCardOverlayStyle from './ErrorCardOverlaystyle';\n// import SuccessCardMszStyle from './SuccessCardMszStyle'\n\ntype ErrorCardOverlay\n = {\n onClose: () => void;\n error: string;\n autoTrigger?: boolean;\n };\nconst ErrorCardOverlay\n : React.FC<ErrorCardOverlay\n > = ({ onClose, error, autoTrigger = false }) => {\n return (\n <>\n <ErrorCardOverlayStyle />\n <div className='card-error-overlay'>\n\n <div className=\"payment-error-container-overlay\"> \n <div className=\"error-icon-overlay\">\n <div className=\"circle\">\n {/* <i className=\"fa fa-check-circle\" aria-hidden=\"true\"></i> */}\n {/* <i className=\"fa fa-exclamation-circle\" aria-hidden=\"true\"></i> */}\n <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n </div>\n <div className=\"error-text-overlay\">\n <div className=\"payment-error-text-overlay\">{error}</div>\n <div className=\"thank-you-text-overlay\">Try again later </div>\n </div>\n\n {\n !autoTrigger && (\n <div className=\"error-btn-div-overlay\">\n <button onClick={onClose}>OK</button>\n </div>\n )\n }\n </div>\n </div>\n </div>\n </>\n\n )\n }\nexport default ErrorCardOverlay\n","// \"use client\";\n\n// import { useEffect, useRef } from \"react\";\n// import { masterBaseUrl } from \"../../baseurl\";\n\n// /* -------------------- TYPES -------------------- */\n\n// type Props = {\n// applePayMerchantId: string;\n// applePayAmount: string;\n// applePayMerchantName: string;\n// showLoader: () => void;\n// completeFractalFlow: (\n// tokenizeData: string,\n// intentid?: string | null,\n// typeoftoken?: string | null\n// ) => Promise<any>;\n// };\n\n// type ApplePayValidationEvent = Event & {\n// validationURL: string;\n// complete: (session: any) => void;\n// };\n\n// type ApplePayPaymentRequest = PaymentRequest & {\n// onmerchantvalidation: (event: ApplePayValidationEvent) => void;\n// };\n\n// type PaymentResponseWithDetails = PaymentResponse & {\n// details: {\n// token: {\n// paymentData: any;\n// };\n// };\n// };\n\n// /* -------------------- COMPONENT -------------------- */\n\n// export default function ApplePayButton({\n// applePayMerchantId,\n// applePayAmount,\n// applePayMerchantName,\n// showLoader,\n// completeFractalFlow\n// }: Props) {\n\n// console.log(\"🔵 ApplePayButton mounted with props:\", {\n// applePayMerchantId,\n// applePayAmount,\n// applePayMerchantName\n// });\n\n\n// const applePayRef = useRef<any>(null);\n// /* -------------------- CONFIG -------------------- */\n\n// const paymentRequestMethods: PaymentMethodData[] = [\n// {\n// supportedMethods: \"https://apple.com/apple-pay\",\n// data: {\n// version: 3,\n// merchantIdentifier: \"merchant.com.apdemo\",\n// merchantCapabilities: [\"supports3DS\"],\n// supportedNetworks: [\"amex\", \"discover\", \"masterCard\", \"visa\"],\n// countryCode: \"US\",\n// },\n// },\n// ];\n\n// const paymentRequestOptions: PaymentOptions = {\n// requestPayerName: false,\n// requestPayerEmail: false,\n// requestPayerPhone: false,\n// requestShipping: false,\n// shippingType: \"shipping\",\n// };\n\n// /* -------------------- VALIDATION -------------------- */\n\n// function validateConfig(): boolean {\n// console.log(\"🟡 Validating config...\");\n\n// const missing: string[] = [];\n\n// if (!applePayMerchantId) missing.push(\"applePayMerchantId\");\n// if (!applePayAmount) missing.push(\"applePayAmount\");\n// if (!applePayMerchantName) missing.push(\"applePayMerchantName\");\n\n// if (missing.length > 0) {\n// console.error(\"❌ Missing Apple Pay config:\", missing);\n// return false;\n// }\n\n// console.log(\"✅ Config validation passed\");\n// return true;\n// }\n\n// /* -------------------- PAYMENT FLOW -------------------- */\n\n// function buildPaymentDetails(): PaymentDetailsInit {\n// console.log(\"🟡 Building payment details...\");\n\n// const details = {\n// total: {\n// label: applePayMerchantName,\n// amount: {\n// currency: \"USD\",\n// value: applePayAmount,\n// },\n// },\n// };\n\n// console.log(\"✅ Payment details:\", details);\n// return details;\n// }\n\n\n\n// async function validateMerchant(event: ApplePayValidationEvent) {\n// console.log(\"STEP 1: Merchant validation started\");\n\n// try {\n// const res = await fetch(\n// `${masterBaseUrl}api/v1/widget/generate-apple-pay-session`,\n// {\n// method: \"POST\",\n// headers: { \"Content-Type\": \"application/json\" },\n// body: JSON.stringify({\n// validationUrl: event.validationURL,\n// applePayMerchantId,\n// applepayDisplayName: applePayMerchantName,\n// requestDomain: window.location.hostname\n// }),\n// }\n// );\n\n// console.log(\"STEP 2: Response status: \" + res.status);\n\n// const data = await res.json();\n// console.log(JSON.stringify(data));\n// console.log(\"STEP 3: Got response\",);\n\n// if (!data || !data.data) {\n// console.log(\"❌ Invalid session data\");\n// event.complete(null);\n// return;\n// }\n\n// console.log(\"STEP 4: Completing validation\");\n\n// console.log(data, \"dataatdatda\");\n\n// event.complete(data.data);\n// } catch (err: any) {\n// console.log(err, \"Merchant validation failed:\");\n// console.log(\"❌ Merchant validation failed: \" + err?.message);\n// event.complete(null);\n// }\n// }\n\n\n// async function authorizePayment(\n// paymentResponse: PaymentResponseWithDetails\n// ) {\n// console.log(\"STEP D: Authorizing payment\");\n\n// try {\n// const token = paymentResponse.details.token.paymentData;\n\n// console.log(\"STEP E: Got token\");\n\n// completeFractalFlow(token, null, \"apple_pay\");\n\n// // TEMP TEST (VERY IMPORTANT)\n// // await paymentResponse.complete(\"success\");\n\n// // console.log(\"✅ Forced success\");\n\n// } catch (err: any) {\n// console.log(\"❌ Authorization failed: \" + err?.message);\n// await paymentResponse.complete(\"fail\");\n// }\n// }\n\n\n// async function handleApplePayClick() {\n// console.log(\"STEP A: Click detected\");\n\n// try {\n// const request = new PaymentRequest(\n// paymentRequestMethods,\n// buildPaymentDetails(),\n// paymentRequestOptions\n// ) as any;\n\n// request.onmerchantvalidation = validateMerchant;\n\n// console.log(\"STEP B: Calling show()\");\n\n// const response = await request.show();\n\n// console.log(\"STEP C: Payment sheet shown\");\n\n// await authorizePayment(response as PaymentResponseWithDetails);\n// } catch (err: any) {\n// console.log(\"❌ Apple Pay flow failed: \" + err?.message);\n// }\n// }\n\n// useEffect(() => {\n// console.log(\"ApplePaySession exists:\", !!(window as any).ApplePaySession);\n\n// if ((window as any).ApplePaySession) {\n// console.log(\n// \"canMakePayments:\",\n// (window as any).ApplePaySession.canMakePayments()\n// );\n// }\n// }, []);\n\n\n// useEffect(() => {\n// const btn = applePayRef.current;\n// if (!btn) return;\n\n// const handleClick = () => {\n// handleApplePayClick();\n// };\n\n// btn.addEventListener(\"click\", handleClick);\n\n// return () => {\n// btn.removeEventListener(\"click\", handleClick);\n// };\n// }, []);\n\n// return (\n// <div >\n// <apple-pay-button\n// ref={applePayRef}\n// buttonstyle=\"black\"\n// type=\"pay\"\n// locale=\"en-US\"\n// />\n// </div>\n// );\n// }\n\n\n\n\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { masterBaseUrl } from \"../../baseurl\";\n\n/* -------------------- TYPES -------------------- */\n\ntype Props = {\n applePayMerchantId: string;\n applePayAmount: string;\n applePayMerchantName: string;\n showLoader: () => void;\n completeFractalFlow: (\n tokenizeData: string,\n intentid?: string | null,\n typeoftoken?: string | null\n ) => Promise<any>;\n};\n\ntype ApplePayValidationEvent = Event & {\n validationURL: string;\n complete: (session: any) => void;\n};\n\ntype PaymentResponseWithDetails = PaymentResponse & {\n details: {\n token: {\n paymentData: any;\n };\n };\n};\n\n/* -------------------- COMPONENT -------------------- */\n\nexport default function ApplePayButton({\n applePayMerchantId,\n applePayAmount,\n applePayMerchantName,\n showLoader,\n completeFractalFlow,\n}: Props) {\n const applePayRef = useRef<any>(null);\n\n /* -------------------- CONFIG -------------------- */\n\n const paymentRequestMethods: PaymentMethodData[] = [\n {\n supportedMethods: \"https://apple.com/apple-pay\",\n data: {\n version: 3,\n merchantIdentifier: applePayMerchantId, // ✅ FIXED\n merchantCapabilities: [\"supports3DS\"],\n supportedNetworks: [\"amex\", \"discover\", \"mastercard\", \"visa\"], // ✅ FIXED\n countryCode: \"US\",\n },\n },\n ];\n\n const paymentRequestOptions: PaymentOptions = {\n requestPayerName: false,\n requestPayerEmail: false,\n requestPayerPhone: false,\n requestShipping: false,\n };\n\n /* -------------------- HELPERS -------------------- */\n\n function buildPaymentDetails(): PaymentDetailsInit {\n return {\n total: {\n label: applePayMerchantName,\n amount: {\n currency: \"USD\",\n value: applePayAmount,\n },\n },\n };\n }\n\n /* -------------------- MERCHANT VALIDATION -------------------- */\n\n async function validateMerchant(event: ApplePayValidationEvent) {\n console.log(\"🟡 STEP 1: Merchant validation started\");\n\n try {\n console.log(\"Validation URL:\", event.validationURL);\n console.log(\"Domain:\", window.location.hostname);\n\n const res = await fetch(\n `${masterBaseUrl}api/v1/widget/generate-apple-pay-session`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n validationUrl: event.validationURL,\n applePayMerchantId,\n applepayDisplayName: applePayMerchantName,\n requestDomain: window.location.hostname, // ✅ IMPORTANT\n }),\n }\n );\n\n console.log(\"🟡 STEP 2: Response status:\", res.status);\n\n const data = await res.json();\n console.log(\"RAW session response:\", JSON.stringify(data));\n console.log(\"🟢 STEP 3: Session response: data fetched\");\n // Handle both { data: session } and bare session shapes\n const merchantSession = data?.data ?? data;\n if (!merchantSession || typeof merchantSession !== \"object\") {\n console.error(\"❌ Bad session shape\");\n event.complete(null);\n return;\n }\n\n console.log(\"🟢 STEP 4.1: Completing merchant validation\");\n\n event.complete(merchantSession); // ✅ IMPORTANT (no data.data)\n\n console.log(\"🟢 STEP 4.2: Completed merchant validation\");\n\n } catch (err: any) {\n console.log(\"❌ Merchant validation failed:\", err?.message);\n event.complete(null);\n }\n }\n\n /* -------------------- PAYMENT AUTH -------------------- */\n\n async function authorizePayment(\n paymentResponse: PaymentResponseWithDetails\n ) {\n console.log(\"🟡 STEP 5: Authorizing payment\");\n\n try {\n const token = paymentResponse.details.token.paymentData;\n\n console.log(\"🟢 STEP 6: Got token\");\n\n await completeFractalFlow(token, null, \"apple_pay\");\n\n // ✅ REQUIRED\n await paymentResponse.complete(\"success\");\n\n console.log(\"✅ Payment completed successfully\");\n\n } catch (err: any) {\n console.log(\"❌ Authorization failed:\", err?.message);\n await paymentResponse.complete(\"fail\");\n }\n }\n\n /* -------------------- CLICK HANDLER -------------------- */\n\n async function handleApplePayClick() {\n console.log(\"🟡 STEP A: Click detected\");\n\n try {\n const request = new PaymentRequest(\n paymentRequestMethods,\n buildPaymentDetails(),\n paymentRequestOptions\n ) as any;\n\n request.onmerchantvalidation = validateMerchant;\n\n console.log(\"🟡 STEP B: Calling show()\");\n\n const response = await request.show();\n\n console.log(\"🟢 STEP C: Payment sheet opened\");\n\n await authorizePayment(response as PaymentResponseWithDetails);\n\n } catch (err: any) {\n console.log(\"❌ Apple Pay flow failed:\", err?.message);\n }\n }\n\n /* -------------------- INIT CHECK -------------------- */\n\n useEffect(() => {\n if (\n (window as any).ApplePaySession &&\n (window as any).ApplePaySession.canMakePayments()\n ) {\n console.log(\"✅ Apple Pay is available\");\n } else {\n console.log(\"❌ Apple Pay NOT available\");\n }\n }, []);\n\n /* -------------------- BUTTON EVENT -------------------- */\n\n // useEffect(() => {\n // const btn = applePayRef.current;\n // if (!btn) return;\n\n // const handleClick = () => handleApplePayClick();\n\n // btn.addEventListener(\"click\", handleClick);\n\n // return () => {\n // btn.removeEventListener(\"click\", handleClick);\n // };\n // }, []);\n\n useEffect(() => {\n const btn = applePayRef.current;\n if (!btn) return;\n const handleClick = () => handleApplePayClick();\n btn.addEventListener(\"click\", handleClick);\n return () => btn.removeEventListener(\"click\", handleClick);\n }, [applePayMerchantId, applePayAmount, applePayMerchantName]); // 👈 add deps\n\n /* -------------------- UI -------------------- */\n\n return (\n <div>\n <apple-pay-button\n ref={applePayRef}\n buttonstyle=\"black\"\n type=\"pay\"\n locale=\"en-US\"\n style={{ width: \"100%\" }}\n />\n </div>\n );\n}","'use client';\nimport React, { useEffect, useState, useMemo, useRef } from 'react';\nimport DataScript from '../Datascript';\nimport SkyChargewidgetstyles from './SkyChargewidgetstyles';\nimport CustomModal2 from '../CustomModal/CustomModal2';\nimport CardBankRadioStyles from '../Atoms/CardBankRadio/CardBankRadioStyles';\nimport CustomModal2styles from '../CustomModal/CustomModal2styles';\nimport ModelContentSky from '../Atoms/ModelContentSky/ModelContentSky';\nimport axios from 'axios';\nimport { masterBaseUrl } from '../baseurl';\nimport FractalTokenizerScript from '../FractalTokenizer';\nimport { DataCapScriptLoader } from '../Datacap-Payment';\nimport EmbeddedCheckoutStyles from './EmbeddedCheckoutStyles';\nimport { ApplePayScriptLoader } from '../Atoms/Applepay/ApplePayScriptLoader';\n\ntype Props = {\n session_token: string;\n surcharge: string;\n amount: string;\n submitBtnText?: string;\n submitBtnClass?: string;\n customerId?: string;\n callback: (resp: any) => void;\n merchantName: string;\n isPreAuth: boolean;\n submitBtnIcon?: any;\n isRequest?: boolean;\n pass_fee?: boolean;\n pass_fee_amount?: number | string;\n bankAmount: string;\n bankSurcharge?: string;\n require3ds: boolean;\n autoTrigger: boolean;\n isPartial?: boolean;\n partialRef?: string;\n onSubmit?: (submitFn: () => void) => void;\n onLoad: boolean,\n customCSS?: string\n};\n\nexport const EmbeddedCheckout = ({\n amount,\n bankAmount,\n submitBtnText = 'Pay',\n session_token,\n customerId,\n callback,\n merchantName = 'merchant',\n isPreAuth,\n surcharge = '0',\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds = false,\n autoTrigger = false,\n isPartial,\n bankSurcharge,\n partialRef,\n onSubmit,\n onLoad,\n customCSS\n}: Props) => {\n\n const [show, setShow] = useState(false);\n const [loading, setLoading] = useState(false);\n const [childHandleClose, setChildHandleClose] = useState<() => void>(() => () => { });\n const [orderGuid, setOrderGuid] = useState(null);\n const [remainingAmount, setRemainingAmount] = useState(null)\n const [isTokenizerReady, setTokenizerReady] = useState(false);\n // -----------------------------------------------\n // ✅ Build fresh commonProps whenever parent props change\n // -----------------------------------------------\n const initialCommonProps = useMemo(\n () => ({\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n setShow,\n setHandleCloseRef: setChildHandleClose,\n isPartial,\n bankSurcharge,\n partialRef\n }),\n [\n amount,\n bankAmount,\n submitBtnText,\n session_token,\n customerId,\n callback,\n merchantName,\n isPreAuth,\n surcharge,\n submitBtnClass,\n submitBtnIcon,\n isRequest,\n pass_fee,\n pass_fee_amount,\n require3ds,\n autoTrigger,\n isPartial,\n bankSurcharge,\n partialRef\n ]\n );\n // -----------------------------------------------\n // Current working props passed to modal content\n // -----------------------------------------------\n const [commonProps, setCommonProps] = useState(initialCommonProps);\n\n // -----------------------------------------------\n // Reset commonProps every time modal opens\n // -----------------------------------------------\n useEffect(() => {\n if (show) {\n setCommonProps(initialCommonProps);\n }\n }, [show, initialCommonProps]);\n\n // -----------------------------------------------\n // Fetch updated amounts for partial payments\n // -----------------------------------------------\n const getskyosOrderDetails = async () => {\n setLoading(true);\n try {\n const res = await axios.get(\n `${masterBaseUrl}api/v1/gateway/get-order-details/${session_token}`,\n { params: { isPartial, partialRef } }\n );\n\n if (res?.data?.result) {\n const data = res.data.data;\n if (data?.orderGuid) {\n setOrderGuid(data?.orderGuid);\n setRemainingAmount(data?.remainingAmount);\n }\n setCommonProps(prev => ({\n ...prev,\n amount: data.amount,\n pass_fee_amount: data.pass_fee_amount,\n pass_fee: data.pass_fee\n }));\n }\n } catch (error) {\n console.log('error while getting skyosorderdeatils', error);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (autoTrigger && isPartial && partialRef) {\n getskyosOrderDetails();\n }\n }, [autoTrigger, isPartial, partialRef]);\n\n console.log(onLoad, \"onLoad\");\n\n\n useEffect(() => {\n const supported = !!(window as any).ApplePaySession;\n let canPay = false;\n\n if (supported) {\n try {\n canPay = (window as any).ApplePaySession.canMakePayments();\n } catch (e) { }\n }\n\n console.log(`ApplePaySession: ${supported}, canMakePayments: ${canPay}`);\n }, []);\n // -----------------------------------------------\n // Render UI\n // -----------------------------------------------\n return (\n <>\n <link href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css\" />\n\n <DataScript />\n {/* <FractalTokenizerScript onLoad={() => setTokenizerReady(true)} /> */}\n <SkyChargewidgetstyles />\n <CardBankRadioStyles />\n <CustomModal2styles />\n {/* <DataCapScriptLoader /> */}\n <ApplePayScriptLoader />\n <EmbeddedCheckoutStyles extraCustomCSS={customCSS} />\n\n {!autoTrigger && (\n <button className={submitBtnClass || 'paymentBtn'} onClick={() => setShow(true)}>\n {submitBtnText}\n {submitBtnIcon}\n </button>\n )}\n\n {!autoTrigger ? (\n <CustomModal2 open={show} onClose={childHandleClose}>\n <ModelContentSky onLoad={onLoad} onSubmit={onSubmit} show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n </CustomModal2>\n ) : (\n <ModelContentSky onLoad={onLoad} onSubmit={onSubmit} show={show} loadingPrev={loading} {...commonProps} orderGuid={orderGuid} remainingAmount={remainingAmount} />\n )}\n </>\n );\n};\n","import React from \"react\";\n\ntype Props = {\n extraCustomCSS?: string;\n};\n\nexport default function EmbeddedCheckoutStyles({ extraCustomCSS }: Props) {\n\n return (\n <style>\n {`\n\n .pay-amount-conatiner{\n margin-top: 20px !important;\n margin-bottom: 20px !important ;\n }\n\n .frac-pay-container.pay-container {\n grid-template-columns:1fr;\n }\n\n\n /* Card */\n.plan-card {\n width: 100%;\n font-family: Inter, sans-serif;\n background: #fff;\n}\n\n/* Header */\n.card-header {\n padding: 12px 0 0 0;\n}\n\n/* Button */\n.collapse-btn {\n width: 100%;\n background: none;\n border: none;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n font-size: 15px;\n padding: 0;\n}\n\n/* Arrow */\n.arrow {\n transition: transform 0.3s ease;\n height: 8px;\n}\n\n/* Open State */\n.collapse-btn.open .arrow {\n transform: rotate(180deg); /* Down */\n}\n\n/* Body */\n.card-body {\n padding: 0;\n}\n\n/* Plan Header */\n.plan-header {\n font-size: 15px;\n font-weight: 600;\n}\n\n/* Scrollable List */\n.plan-list {\n max-height: 200px;\n overflow-y: auto;\n padding-right: 6px;\n}\n\n/* Items */\n.plan-item {\n display: flex;\n justify-content: space-between;\n padding: 6px 0;\n font-size: 14px;\n}\n\n/* Badges */\n.badge {\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.badge-included {\n background: #f1f3f5;\n color: #495057;\n}\n\n.badge-available {\n background: #f8f9fa;\n color: #212529;\n}\n\n/* Helpers */\n.row-between {\n display: flex;\n justify-content: space-between;\n}\n\n.text-end {\n text-align: right;\n}\n\n.text-muted {\n color: #6c757d;\n font-size: 12px;\n}\n\n.fw-semibold {\n font-weight: 600;\n}\n\n.mb-2 {\n margin-bottom: 8px;\n}\n\n/* Divider */\n.divider {\n height: 1px;\n background: #e5e7eb;\n margin: 8px 0;\n}\n\n/* Collapse Animation */\n.collapse {\n max-height: 0;\n overflow: hidden;\n transition: max-height 0.3s ease;\n}\n\n.collapse.show {\n max-height: 1000px;\n}\n .frac-pay-container.pay-container {\n grid-template-columns:1fr;\n}\n .frac-payment-form-div .amt-pay-con {\n padding-right: 0px;\n}\n .frac-payment-form-div .ach-scrl {\n padding-right: 0px;\n gap: 10px;\n max-height: fit-content !important;\n min-height: fit-content !important;\n overflow: hidden !important;\n}\n.frac-payment-form-div .frac-card-bank-radio-main {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n align-self: stretch;\n border-radius: 14px;\n border: none;\n overflow: visible;\n gap: 10px;\n}\n .frac-payment-form-div .frac-card-bank-radio {\n display: flex;\n padding: 12px 16px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n width: 50%;\n border: 1px solid #E0DFE2;\n border-radius: 10px;\n box-shadow: rgba(149, 157, 165, 0.2) 0px 1px 4px;\n}\n .frac-payment-form-div .frac-card-bank-radio.frac-active {\n background: #fff;\n border: 2px solid #004eab !important;\n}\n \n .frac-payment-form-div .form-control-frac {\n border: 1px solid #dee2e6 !important;\n border-radius: 0.375rem !important;\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1);\n}\n .frac-payment-form-div .form-control-frac:focus {\n border: 1px solid #004eab !important;\n }\n .frac-payment-form-div .card-expiry-new {\n border: none;\n gap: 10px;\n}\n .frac-payment-form-div .exp-date-year-container {\n gap: 10px;\n width: 100%;\n}\n .frac-payment-form-div .card-type-logo-wrap{\n position: absolute;\n right: 10px;\n max-width: 30px;\n}\n .detials-wrap.detials-wrap-1 {\n display: flex;\n flex-wrap: wrap;\n}\n@media screen and (max-width: 1280px) {\n.frac-pay-container.pay-container {\n grid-template-columns: 1fr;\n border: none;\n}\n}\n@media screen and (max-width: 899px) {\n.detials-wrap {\n grid-template-columns: 1fr !important;\n}\n.frac-payment-form-div .exp-date-year-container{\nwidth: 100%;}\n\n}\n@media screen and (max-width: 575px) {\n.frac-payment-form-div .card-type-logo-wrap{\nmax-width: 30px;\n}\nform#ACHPaymentForm .ach-scrl {\n grid-template-columns: 1fr !important;\n}\n @media screen and (max-width: 375px) {\n .frac-payment-form-div .exp-date-year-container {\n // flex-direction: column;\n}\n .parent-pay-container {\n padding: 10px;\n }\n }\n}\n.box-inner-card-text{\n display: flex;\n gap: 0px;\n flex-direction: column;\n}\n .box-inner-card-text .frac-payment-type-logo {\n width: 17px;\n height: 17px;\n aspect-ratio: 1/1;\n}\n .exp-date-year-wrap.form-control-frac input {\n background: transparent;\n border: none;\n outline: none;\n font-size: 1rem;\n font-weight: 400;\n}\n .exp-date-year-wrap.form-control-frac {\n display: flex;\n gap: 2px;\n}\n .exp-date-year-wrap input.exp-month {\n width: 32px;\n}\n .detials-wrap {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n .detials-wrap.detials-wrap-2{\n grid-template-columns: 1fr 1fr; \n }\n form#ACHPaymentForm .ach-scrl {\n display: grid;\n grid-gap: 0px 10px;\n grid-template-columns: 1fr;\n}\n .plan-list {\n max-height: 130px;\n min-height: 130px;\n overflow-y: auto;\n padding-right: 6px;\n }\n .plan-list::-webkit-scrollbar {\n width: 3px;\n background-color: #F5F5F5;\n }\n .plan-list::-webkit-scrollbar-thumb {\n background-color: #35254D;\n }\n div#cvv {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 0;\n }\n div#exp_year {\n height: 36px;\n width: calc(100% + 1px);\n border-radius: 0;\n border-top: 0;\n border-bottom: 0;\n border-right: 1px solid #dee2e6;\n }\n div#exp_month {\n width: calc(100% + 1px);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border: 0;\n border-right: 1px solid #dee2e6;\n }\n .exp-date-year-container .form-group {\n flex: 1;\n }\n.input-main-wrap-frac{\nmargin:0px !important;\npadding:0px !important;\n}\n.toggle-num-wrapper.toggle-num-wrapper-new {\n border: 1px solid #dee2e6 !important;\n border-radius: 0.375rem !important;\n background-color: #F6F6F7;\n box-shadow: 1px 1px 2px inset rgba(0, 0, 0, 0.1);\n}\n .toggle-num-wrapper-new div#card_number {\n padding: 0px 10px;\n border: none;\n border-bottom: 1px solid #dee2e6;\n}\n .toggle-num-wrapper-new .card-crdi.card-expiry-new {\n padding: 0px 10px;\n}\n .toggle-num-wrapper-new .input-main-wrap-frac {\n height: 38px;\n}\n .toggle-num-wrapper-new:focus {\n border: 1px solid #004eab !important;\n}\n .frac-card-title-main {\n display: flex;\n align-items: start;\n gap: 4px;\n flex-direction: column;\n}\n .parent-pay-container {\n padding: 24px;\n background-color: #ffffff !important;\n border-radius: 15px;\n min-width: 300px;\n}\n\n\n ${extraCustomCSS}\n\n `}\n </style>\n )\n}","import { useEffect } from \"react\";\n\nlet applePayScriptLoaded = false;\n\nexport const ApplePayScriptLoader = () => {\n useEffect(() => {\n if (applePayScriptLoaded) return;\n\n const existingScript = document.querySelector(\n `script[src=\"https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js\"]`\n );\n\n if (!existingScript) {\n const script = document.createElement(\"script\");\n script.src = \"https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js\";\n script.async = true;\n\n script.onload = () => {\n console.log(\"✅ Apple Pay script loaded\");\n applePayScriptLoaded = true;\n\n // Debug check\n console.log(\"ApplePaySession:\", (window as any).ApplePaySession);\n };\n\n script.onerror = (err) => {\n console.error(\"❌ Apple Pay script failed\", err);\n };\n\n document.head.appendChild(script);\n } else {\n applePayScriptLoaded = true;\n }\n }, []);\n\n return null;\n};"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YA+PR;AAER;AAEA,IAAO,6BAA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["jsx","jsx","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","amount","surcharge","useState","useEffect","axios","PatternFormat","Fragment","jsx","jsxs","useState","axios","useEffect","amount","PatternFormat","useEffect","useRef","useState","jsx","axios","jsx","Fragment","jsx","jsxs","useEffect","useEffect","jsx","Fragment","jsx","jsxs","jsx","useEffect","useEffect","useEffect","Fragment","jsx","jsxs","_a","_b","useEffect","useEffect","useEffect","useRef","useState","jsx","jsx","Fragment","jsx","jsxs","Fragment","jsx","jsxs","useState","mastercard","visa","americanexp","discover","defaultcard","trash","bank","secure","pov","pax","useRef","_a","axios","_b","useEffect","bankAmount","bankFeeAmount","bankSavingsAmount","name","_c","_d","_e","_f","_g","_h","_i","_j","feeExempt","requestOptions","result","paymentData","error","getCardType","jsx","useEffect","useRef","useState","Swal","axios","jsx","jsx","Fragment","jsx","jsxs","Fragment","jsx","jsxs","useState","useRef","Swal","_a","_b","name","paymentData","axios","useEffect","_c","useEffect","useRef","useState","axios","jsx","useEffect","useRef","Fragment","jsx","jsxs","Fragment","jsx","jsxs","useState","useRef","_a","_b","name","axios","error","paymentGateway","result","useEffect","useEffect","useRef","useState","axios","Swal","Fragment","jsx","jsxs","useRef","useEffect","mastercard","visa","americanexp","discover","defaultcard","trash","bank","secure","pov","pax","useState","_a","axios","_b","name","_c","_d","_e","_f","_g","_h","_i","_j","_k","requestOptions","paymentData","amount","error","Swal","getCardType","baseAmount","useEffect","useState","jsx","useEffect","useRef","useState","axios","Swal","useEffect","useRef","Fragment","jsx","jsxs","axios","useState","jsx","jsxs","useState","_a","axios","error","jsx","Fragment","jsx","jsxs","trash","NumericFormat","jsx","Fragment","jsx","jsxs","useEffect","useRef","jsx","applePayMerchantId","useRef","useEffect","Fragment","jsx","jsxs","useRef","useState","mastercard","visa","americanexp","discover","defaultcard","trash","bank","secure","pov","pax","amount","surcharge","_a","_b","_c","_d","_e","_f","_g","_h","_i","axios","error","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","paymentGateway","result","name","getCardType","Swal","useEffect","activeinBank","activeinCard","activetab","NumericFormat","axios","Fragment","jsx","jsxs","useState","useEffect","axios","useEffect","useState","useMemo","axios","jsx","useEffect","Fragment","jsx","jsxs","useState","useMemo","useEffect","axios"]}
|