@pollar/react 0.11.4 → 0.11.5
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/README.md +8 -1
- package/dist/index.css +198 -32
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +103 -5
- package/dist/index.d.ts +103 -5
- package/dist/index.js +594 -56
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +593 -58
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/qr.js/lib/ErrorCorrectLevel.js","../../../node_modules/qr.js/lib/mode.js","../../../node_modules/qr.js/lib/8BitByte.js","../../../node_modules/qr.js/lib/RSBlock.js","../../../node_modules/qr.js/lib/BitBuffer.js","../../../node_modules/qr.js/lib/math.js","../../../node_modules/qr.js/lib/Polynomial.js","../../../node_modules/qr.js/lib/util.js","../../../node_modules/qr.js/lib/QRCode.js","../src/constants.ts","../src/components/commons.tsx","../src/components/modal-theme.ts","../src/components/distribution-rules-modal/DistributionRulesModalTemplate.tsx","../src/components/distribution-rules-modal/DistributionRulesModal.tsx","../src/components/ChainSelect.tsx","../src/useChains.ts","../src/components/enabled-assets-modal/EnabledAssetsModalTemplate.tsx","../src/components/enabled-assets-modal/EnabledAssetsModal.tsx","../src/components/kyc-modal/KycStatus.tsx","../src/components/kyc-modal/kyc-messages.ts","../src/components/kyc-modal/KycModalTemplate.tsx","../src/components/kyc-modal/KycModal.tsx","../src/components/requirement-form-modal/form-fields.ts","../src/components/requirement-form-modal/RequirementFormModal.tsx","../src/components/kyc-modal/AppKycFlow.tsx","../src/components/login-modal/EmailCodeInput.tsx","../src/components/login-modal/GithubButton.tsx","../src/components/login-modal/GoogleButton.tsx","../src/components/login-modal/LoginModalTemplate.tsx","../src/components/login-modal/PrivyLoginSubmodal.tsx","../src/components/login-modal/LoginModal.tsx","../src/components/ramp-widget/ramp-kyc.ts","../src/components/ramp-widget/RouteDisplay.tsx","../src/components/ramp-widget/RampWidgetTemplate.tsx","../src/components/registry-check-modal/registry-copy.ts","../src/components/registry-check-modal/RegistryCheckModal.tsx","../src/components/provider-registration-modal/ProviderRegistrationModal.tsx","../src/components/ramp-widget/RampWidget.tsx","../src/lib/wallet-provisioning.ts","../src/lib/qr-code/index.tsx","../src/components/PollarLogo.tsx","../src/components/receive-modal/ReceiveModalTemplate.tsx","../src/components/receive-modal/ReceiveModal.tsx","../src/components/transaction-modal/TxStatusView.tsx","../src/components/send-modal/SendModalTemplate.tsx","../src/components/send-modal/SendModal.tsx","../src/components/swap-modal/SwapModalTemplate.tsx","../src/components/swap-modal/SwapModal.tsx","../src/components/earn-modal/EarnModal.tsx","../src/components/card-modal/card-kyc.ts","../src/components/card-modal/CardModal.tsx","../src/components/sessions-modal/SessionsModalTemplate.tsx","../src/components/sessions-modal/SessionsModal.tsx","../src/components/transaction-modal/TransactionModalTemplate.tsx","../src/components/transaction-modal/TransactionModal.tsx","../src/components/tx-history-modal/TxHistoryModalTemplate.tsx","../src/components/tx-history-modal/TxHistoryModal.tsx","../src/components/wallet-balance-modal/WalletBalanceModalTemplate.tsx","../src/components/wallet-balance-modal/WalletBalanceModal.tsx","../src/lib/passkey-ceremony.ts","../src/context.tsx","../src/usePollarAdapter.ts","../src/components/wallet-button/WalletButtonTemplate.tsx","../src/components/wallet-button/WalletButton.tsx"],"names":["QRCode","Component","jsxs","jsx","useState","useRef","useEffect","Fragment","useCallback","useMemo","assetKey","providerId","isPollarApiError","error","step","AUTH_ERROR_CODES","isInteractiveAuthAdapter","forwardRef","QRCodeSvg","QRCodeImpl","ErrorCorrectLevel","WalletType","IN_FLIGHT_STEPS","toBaseUnits","formatAmount","whole","fraction","AssetIcon","PROVIDER_LABELS","nonEmpty","PAGE_SIZE","formatBalance","response","startAuthentication","startRegistration","createContext","isPollarClient","PollarClient","useContext"],"mappings":"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","file":"index.js","sourcesContent":["module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","module.exports = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n","var mode = require('./mode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = mode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function(buffer) {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n\n","// ErrorCorrectLevel\nvar ECL = require('./ErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock == undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = new Array();\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n}\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase ECL.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase ECL.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase ECL.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase ECL.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n}\n\nmodule.exports = QRRSBlock;\n","function QRBitBuffer() {\n\tthis.buffer = new Array();\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","var math = require('./math');\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math.gexp(math.glog(this.get(i) ) + math.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math.glog(this.get(0) ) - math.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math.gexp(math.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","var Mode = require('./mode');\nvar Polynomial = require('./Polynomial');\nvar math = require('./math');\n\nvar QRMaskPattern = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n\nvar QRUtil = {\n\n PATTERN_POSITION_TABLE : [\n\t [],\n\t [6, 18],\n\t [6, 22],\n\t [6, 26],\n\t [6, 30],\n\t [6, 34],\n\t [6, 22, 38],\n\t [6, 24, 42],\n\t [6, 26, 46],\n\t [6, 28, 50],\n\t [6, 30, 54],\t\t\n\t [6, 32, 58],\n\t [6, 34, 62],\n\t [6, 26, 46, 66],\n\t [6, 26, 48, 70],\n\t [6, 26, 50, 74],\n\t [6, 30, 54, 78],\n\t [6, 30, 56, 82],\n\t [6, 30, 58, 86],\n\t [6, 34, 62, 90],\n\t [6, 28, 50, 72, 94],\n\t [6, 26, 50, 74, 98],\n\t [6, 30, 54, 78, 102],\n\t [6, 28, 54, 80, 106],\n\t [6, 32, 58, 84, 110],\n\t [6, 30, 58, 86, 114],\n\t [6, 34, 62, 90, 118],\n\t [6, 26, 50, 74, 98, 122],\n\t [6, 30, 54, 78, 102, 126],\n\t [6, 26, 52, 78, 104, 130],\n\t [6, 30, 56, 82, 108, 134],\n\t [6, 34, 60, 86, 112, 138],\n\t [6, 30, 58, 86, 114, 142],\n\t [6, 34, 62, 90, 118, 146],\n\t [6, 30, 54, 78, 102, 126, 150],\n\t [6, 24, 50, 76, 102, 128, 154],\n\t [6, 28, 54, 80, 106, 132, 158],\n\t [6, 32, 58, 84, 110, 136, 162],\n\t [6, 26, 54, 82, 110, 138, 166],\n\t [6, 30, 58, 86, 114, 142, 170]\n ],\n\n G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)\t| (1 << 4) | (1 << 1),\n\n getBCHTypeInfo : function(data) {\n\t var d = data << 10;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n\t\t d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \t\n\t }\n\t return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n },\n\n getBCHTypeNumber : function(data) {\n\t var d = data << 12;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n\t\t d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \t\n\t }\n\t return (data << 12) | d;\n },\n\n getBCHDigit : function(data) {\n\n\t var digit = 0;\n\n\t while (data != 0) {\n\t\t digit++;\n\t\t data >>>= 1;\n\t }\n\n\t return digit;\n },\n\n getPatternPosition : function(typeNumber) {\n\t return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n },\n\n getMask : function(maskPattern, i, j) {\n\t \n\t switch (maskPattern) {\n\t\t \n\t case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;\n\t case QRMaskPattern.PATTERN001 : return i % 2 == 0;\n\t case QRMaskPattern.PATTERN010 : return j % 3 == 0;\n\t case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;\n\t case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;\n\t case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;\n\t case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;\n\t case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;\n\n\t default :\n\t\t throw new Error(\"bad maskPattern:\" + maskPattern);\n\t }\n },\n\n getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n\t var a = new Polynomial([1], 0);\n\n\t for (var i = 0; i < errorCorrectLength; i++) {\n\t\t a = a.multiply(new Polynomial([1, math.gexp(i)], 0) );\n\t }\n\n\t return a;\n },\n\n getLengthInBits : function(mode, type) {\n\n\t if (1 <= type && type < 10) {\n\n\t\t // 1 - 9\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 10;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 9;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 8;\n\t\t case Mode.MODE_KANJI \t: return 8;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 27) {\n\n\t\t // 10 - 26\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 12;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 11;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 10;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 41) {\n\n\t\t // 27 - 40\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 14;\n\t\t case Mode.MODE_ALPHA_NUM\t: return 13;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 12;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else {\n\t\t throw new Error(\"type:\" + type);\n\t }\n },\n\n getLostPoint : function(qrCode) {\n\t \n\t var moduleCount = qrCode.getModuleCount();\n\t \n\t var lostPoint = 0;\n\t \n\t // LEVEL1\n\t \n\t for (var row = 0; row < moduleCount; row++) {\n\n\t\t for (var col = 0; col < moduleCount; col++) {\n\n\t\t\t var sameCount = 0;\n\t\t\t var dark = qrCode.isDark(row, col);\n\n\t\t\t\tfor (var r = -1; r <= 1; r++) {\n\n\t\t\t\t if (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t continue;\n\t\t\t\t }\n\n\t\t\t\t for (var c = -1; c <= 1; c++) {\n\n\t\t\t\t\t if (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (r == 0 && c == 0) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (dark == qrCode.isDark(row + r, col + c) ) {\n\t\t\t\t\t\t sameCount++;\n\t\t\t\t\t }\n\t\t\t\t }\n\t\t\t }\n\n\t\t\t if (sameCount > 5) {\n\t\t\t\t lostPoint += (3 + sameCount - 5);\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL2\n\n\t for (var row = 0; row < moduleCount - 1; row++) {\n\t\t for (var col = 0; col < moduleCount - 1; col++) {\n\t\t\t var count = 0;\n\t\t\t if (qrCode.isDark(row, col ) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col ) ) count++;\n\t\t\t if (qrCode.isDark(row, col + 1) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col + 1) ) count++;\n\t\t\t if (count == 0 || count == 4) {\n\t\t\t\t lostPoint += 3;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL3\n\n\t for (var row = 0; row < moduleCount; row++) {\n\t\t for (var col = 0; col < moduleCount - 6; col++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row, col + 1)\n\t\t\t\t\t && qrCode.isDark(row, col + 2)\n\t\t\t\t\t && qrCode.isDark(row, col + 3)\n\t\t\t\t\t && qrCode.isDark(row, col + 4)\n\t\t\t\t\t && !qrCode.isDark(row, col + 5)\n\t\t\t\t\t && qrCode.isDark(row, col + 6) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount - 6; row++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row + 1, col)\n\t\t\t\t\t && qrCode.isDark(row + 2, col)\n\t\t\t\t\t && qrCode.isDark(row + 3, col)\n\t\t\t\t\t && qrCode.isDark(row + 4, col)\n\t\t\t\t\t && !qrCode.isDark(row + 5, col)\n\t\t\t\t\t && qrCode.isDark(row + 6, col) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL4\n\t \n\t var darkCount = 0;\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount; row++) {\n\t\t\t if (qrCode.isDark(row, col) ) {\n\t\t\t\t darkCount++;\n\t\t\t }\n\t\t }\n\t }\n\t \n\t var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\t lostPoint += ratio * 10;\n\n\t return lostPoint;\t\t\n }\n};\n\nmodule.exports = QRUtil;\n","var BitByte = require('./8BitByte');\nvar RSBlock = require('./RSBlock');\nvar BitBuffer = require('./BitBuffer');\nvar util = require('./util');\nvar Polynomial = require('./Polynomial');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\n// for client side minification\nvar proto = QRCode.prototype;\n\nproto.addData = function(data) {\n\tvar newData = new BitByte(data);\n\tthis.dataList.push(newData);\n\tthis.dataCache = null;\n};\n\nproto.isDark = function(row, col) {\n\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\tthrow new Error(row + \",\" + col);\n\t}\n\treturn this.modules[row][col];\n};\n\nproto.getModuleCount = function() {\n\treturn this.moduleCount;\n};\n\nproto.make = function() {\n\t// Calculate automatically typeNumber if provided is < 1\n\tif (this.typeNumber < 1 ){\n\t\tvar typeNumber = 1;\n\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\tvar buffer = new BitBuffer();\n\t\t\tvar totalDataCount = 0;\n\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.dataList.length; i++) {\n\t\t\t\tvar data = this.dataList[i];\n\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\tdata.write(buffer);\n\t\t\t}\n\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.typeNumber = typeNumber;\n\t}\n\tthis.makeImpl(false, this.getBestMaskPattern() );\n};\n\nproto.makeImpl = function(test, maskPattern) {\n\t\n\tthis.moduleCount = this.typeNumber * 4 + 17;\n\tthis.modules = new Array(this.moduleCount);\n\t\n\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\n\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\n\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t}\n\t}\n\n\tthis.setupPositionProbePattern(0, 0);\n\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\tthis.setupPositionAdjustPattern();\n\tthis.setupTimingPattern();\n\tthis.setupTypeInfo(test, maskPattern);\n\t\n\tif (this.typeNumber >= 7) {\n\t\tthis.setupTypeNumber(test);\n\t}\n\n\tif (this.dataCache == null) {\n\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t}\n\n\tthis.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function(row, col) {\n\t\n\tfor (var r = -1; r <= 7; r++) {\n\t\t\n\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\n\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\n\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\n\t\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t\t\t\t|| (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t\t\t\t|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t}\n\t\t}\t\t\n\t}\t\t\n};\n\nproto.getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i++) {\n\t\t\n\t\tthis.makeImpl(true, i);\n\n\t\tvar lostPoint = util.getLostPoint(this);\n\n\t\tif (i == 0 || minLostPoint > lostPoint) {\n\t\t\tminLostPoint = lostPoint;\n\t\t\tpattern = i;\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\nproto.createMovieClip = function(target_mc, instance_name, depth) {\n\n\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\tvar cs = 1;\n\n\tthis.make();\n\n\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\n\t\tvar y = row * cs;\n\t\t\n\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\n\t\t\tvar x = col * cs;\n\t\t\tvar dark = this.modules[row][col];\n\t\t\n\t\t\tif (dark) {\n\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\tqr_mc.endFill();\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn qr_mc;\n};\n\nproto.setupTimingPattern = function() {\n\t\n\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\tif (this.modules[r][6] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\tif (this.modules[6][c] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[6][c] = (c % 2 == 0);\n\t}\n};\n\nproto.setupPositionAdjustPattern = function() {\n\n\tvar pos = util.getPatternPosition(this.typeNumber);\n\t\n\tfor (var i = 0; i < pos.length; i++) {\n\t\n\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\n\t\t\tvar row = pos[i];\n\t\t\tvar col = pos[j];\n\t\t\t\n\t\t\tif (this.modules[row][col] != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\n\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\n\t\t\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t\t\t\t\t|| (r == 0 && c == 0) ) {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nproto.setupTypeNumber = function(test) {\n\n\tvar bits = util.getBCHTypeNumber(this.typeNumber);\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n};\n\nproto.setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\tvar bits = util.getBCHTypeInfo(data);\n\n\t// vertical\t\t\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t\tif (i < 6) {\n\t\t\tthis.modules[i][8] = mod;\n\t\t} else if (i < 8) {\n\t\t\tthis.modules[i + 1][8] = mod;\n\t\t} else {\n\t\t\tthis.modules[this.moduleCount - 15 + i][8] = mod;\n\t\t}\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\t\n\t\tif (i < 8) {\n\t\t\tthis.modules[8][this.moduleCount - i - 1] = mod;\n\t\t} else if (i < 9) {\n\t\t\tthis.modules[8][15 - i - 1 + 1] = mod;\n\t\t} else {\n\t\t\tthis.modules[8][15 - i - 1] = mod;\n\t\t}\n\t}\n\n\t// fixed module\n\tthis.modules[this.moduleCount - 8][8] = (!test);\n};\n\nproto.mapData = function(data, maskPattern) {\n\t\n\tvar inc = -1;\n\tvar row = this.moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\t\n\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\n\t\tif (col == 6) col--;\n\n\t\twhile (true) {\n\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col - c] == null) {\n\t\t\t\t\t\n\t\t\t\t\tvar dark = false;\n\n\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar mask = util.getMask(maskPattern, row, col - c);\n\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\tbitIndex--;\n\n\t\t\t\t\tif (bitIndex == -1) {\n\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\trow += inc;\n\n\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\trow -= inc;\n\t\t\t\tinc = -inc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new BitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\"\n\t\t\t+ buffer.getLengthInBits()\n\t\t\t+ \">\"\n\t\t\t+ totalDataCount * 8\n\t\t\t+ \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = util.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var i = 0; i < ecdata[r].length; i++) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < dcdata[r].length) {\n\t\t\t\tdata[index++] = dcdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < ecdata[r].length) {\n\t\t\t\tdata[index++] = ecdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n};\n\nmodule.exports = QRCode;\n\n","export const LOGO_POLLAR = 'https://pollar.xyz/assets/logo_pollar.png';\nexport const LOGO_GITHUB = 'https://pollar.xyz/assets/GitHub_Invertocat_White.png';\nexport const LOGO_FREIGHTER = 'https://pollar.xyz/assets/logo_freighter.png';\nexport const LOGO_ALBEDO = 'https://pollar.xyz/assets/logo_albedo.svg';\n","type StateStatus = 'NONE' | 'LOADING' | 'SUCCESS' | 'ERROR';\n\nimport type { PollarLogger } from '@pollar/core';\nimport {\n Component,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react';\nimport { LOGO_POLLAR } from '../constants';\n\ndeclare const __POLLAR_VERSION__: string;\n\n// Module-level sink for the error boundary (a class component, so it can't read\n// React context inside `componentDidCatch`). `PollarProvider` points this at the\n// client's level-gated logger on mount; defaults to `console` until then.\nlet _modalLog: PollarLogger = console;\nexport function setModalErrorLogger(logger: PollarLogger): void {\n _modalLog = logger;\n}\n\ninterface ModalErrorBoundaryState {\n crashed: boolean;\n}\n\nexport class ModalErrorBoundary extends Component<{ children: ReactNode; onClose: () => void }, ModalErrorBoundaryState> {\n state: ModalErrorBoundaryState = { crashed: false };\n\n static getDerivedStateFromError(): ModalErrorBoundaryState {\n return { crashed: true };\n }\n\n componentDidCatch(error: unknown) {\n _modalLog.error('[PollarProvider] Modal crashed:', error);\n }\n\n render() {\n if (this.state.crashed) {\n this.props.onClose();\n return null;\n }\n return this.props.children;\n }\n}\n\nexport const PollarModalFooter = ({ shield = false }: { shield?: boolean }) => {\n return (\n <div className=\"pollar-footer\">\n <span className=\"pollar-footer-protected\">Protected by</span>\n <div className=\"pollar-footer-brand\">\n {shield ? (\n <svg className=\"pollar-footer-shield\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <path d=\"M12 3.2 19 6v5.3c0 4.4-2.9 7.8-7 9.5-4.1-1.7-7-5.1-7-9.5V6l7-2.8Z\" fill=\"var(--pollar-accent)\" />\n <path d=\"m8.5 12 2.2 2.2 4.8-5\" stroke=\"white\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <img src={LOGO_POLLAR} alt=\"Pollar\" className=\"pollar-footer-logo\" />\n )}\n <span className=\"pollar-footer-name\">Pollar</span>\n <span className=\"pollar-footer-version\">v{__POLLAR_VERSION__}</span>\n </div>\n </div>\n );\n};\n\n/** Shared refresh glyph used by compact modal header actions. */\nexport function RefreshIcon({ spinning = false, className = '' }: { spinning?: boolean; className?: string }) {\n return (\n <svg\n className={`${spinning ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}${className ? ` ${className}` : ''}`}\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M2.125 8.5C2.125 6.80924 2.79665 5.18774 3.99219 3.99219C5.18774 2.79665 6.80924 2.125 8.5 2.125C10.2822 2.1317 11.9928 2.82712 13.2742 4.06583L14.875 5.66667\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14.8747 2.125V5.66667H11.333\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14.875 8.5C14.875 10.1908 14.2033 11.8123 13.0078 13.0078C11.8123 14.2033 10.1908 14.875 8.5 14.875C6.7178 14.8683 5.00719 14.1729 3.72583 12.9342L2.125 11.3333\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.125 14.875V11.3333H5.66667\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\ninterface CopyButtonProps {\n /** Text written to the clipboard (the full, un-cropped value). */\n value: string;\n /** Accessible label for the button (e.g. \"Copy address\"). */\n label?: string;\n /** Extra class (e.g. `pollar-copy-btn-sm` for the compact issuer variant). */\n className?: string;\n}\n\n/** Self-contained copy-to-clipboard icon button with a transient \"copied\" tick. */\nexport function CopyButton({ value, label = 'Copy', className }: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n };\n }, []);\n\n function handleCopy(e: ReactMouseEvent<HTMLButtonElement>) {\n e.stopPropagation();\n if (!value || !navigator.clipboard) return;\n void navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n setCopied(false);\n timerRef.current = null;\n }, 1500);\n });\n }\n\n return (\n <button\n type=\"button\"\n className={`pollar-copy-btn${className ? ` ${className}` : ''}`}\n onClick={handleCopy}\n aria-label={copied ? 'Copied' : label}\n >\n {copied ? (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path d=\"M3.5 7l2.5 2.5 4.5-5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9H2a1 1 0 01-1-1V2a1 1 0 011-1h6a1 1 0 011 1v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n </button>\n );\n}\n\ninterface ModalStatusBannerProps {\n message: string;\n status: StateStatus;\n onCancel?: (() => void) | undefined;\n onRetry?: (() => void) | undefined;\n}\n\nexport function ModalStatusBanner({ message, status, onCancel, onRetry }: ModalStatusBannerProps) {\n if (!message && status === 'NONE') {\n return <div className=\"pollar-status\" />;\n }\n\n const isLoading = status === 'LOADING';\n const icon =\n status === 'ERROR' ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path d=\"M4.5 4.5l5 5M9.5 4.5l-5 5\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ) : status === 'SUCCESS' ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path d=\"M3.5 7l2.5 2.5 4.5-5\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : status === 'LOADING' ? (\n <></>\n ) : null;\n\n return (\n <div className=\"pollar-status\" data-kind={status}>\n {icon}\n <span>{message}</span>\n {isLoading && onCancel && (\n <button type=\"button\" className=\"pollar-status-cancel\" onClick={onCancel}>\n Cancel\n </button>\n )}\n {status === 'ERROR' && onRetry && (\n <button type=\"button\" className=\"pollar-status-cancel\" onClick={onRetry}>\n Retry\n </button>\n )}\n </div>\n );\n}\n\n/**\n * The chain an asset lives on, as a short accented tag.\n *\n * Shared by the balance and asset lists: both render per-chain rows and must\n * agree on the label and colour, so the palette lives in one place. Callers show\n * it only when the app spans more than one chain - a Stellar-only app would just\n * see the same tag on every row.\n */\nconst CHAIN_TAG: Record<string, { label: string; color: string }> = {\n STELLAR: { label: 'Stellar', color: '#7d00ff' },\n POLYGON: { label: 'Polygon', color: '#8247e5' },\n SOLANA: { label: 'Solana', color: '#14f195' },\n};\n\nexport function ChainTag({ chain }: { chain: string }) {\n const tag = CHAIN_TAG[chain] ?? { label: chain, color: '#6b7280' };\n return (\n <span className=\"pollar-chain-tag\" style={{ '--pollar-chain-color': tag.color } as CSSProperties}>\n {tag.label}\n </span>\n );\n}\n\n/** Middle-truncates an on-chain address (issuer, ERC-20 contract, SPL mint). */\nexport function cropAddress(address: string): string {\n if (address.length <= 16) return address;\n return `${address.slice(0, 8)}...${address.slice(-8)}`;\n}\n\n/**\n * Remembers the last non-null value it was given.\n *\n * The balance/assets state machines drop their payload while a refresh is in\n * flight (`step` leaves `'loaded'`), which would blank the list on every\n * refresh. Holding the previous data lets the modal keep rendering it under a\n * {@link BusyOverlay} instead - the list never collapses and then reflows.\n */\nexport function useStickyData<T>(data: T | null): T | null {\n const lastRef = useRef<T | null>(null);\n if (data !== null) lastRef.current = data;\n return data ?? lastRef.current;\n}\n\n/**\n * Blocks a modal while a refresh is in flight, keeping the stale data visible\n * (and readable) underneath. Covers the whole card, so nothing can be clicked\n * against data that is about to change.\n */\nexport function BusyOverlay({ label = 'Loading…' }: { label?: string }) {\n return (\n <div className=\"pollar-busy-overlay\" aria-busy=\"true\" aria-live=\"polite\">\n <div className=\"pollar-busy-overlay-inner\">\n <div className=\"pollar-spinner\" />\n <span>{label}</span>\n </div>\n </div>\n );\n}\n\ninterface ToggleProps {\n checked: boolean;\n onChange: () => void;\n disabled?: boolean;\n busy?: boolean;\n label: string;\n}\n\n/**\n * On/off switch. Used for trustlines, where the state is binary and the old\n * \"status pill + Enable/Disable button\" pair said the same thing twice.\n */\nexport function Toggle({ checked, onChange, disabled = false, busy = false, label }: ToggleProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n className={`pollar-switch${checked ? ' pollar-switch-on' : ''}${busy ? ' pollar-switch-busy' : ''}`}\n onClick={onChange}\n disabled={disabled || busy}\n >\n <span className=\"pollar-switch-knob\">\n {busy && <span className=\"pollar-spinner pollar-spinner-sm pollar-spinner-current\" />}\n </span>\n </button>\n );\n}\n","import type { CSSProperties } from 'react';\nimport type { PollarStyles } from '../types';\n\n/** Per-app overrides for the modal chrome, configured in the dashboard's\n * Branding screen. Every field is optional: absent means \"use the value the\n * theme derives\", which is what every modal rendered before these existed. */\nexport interface ModalStyleOverrides {\n /** Card background. Overrides the theme's white / #1a1a1a. */\n backgroundColor?: string | null | undefined;\n /** Body text. Overrides the theme's #111827 / white. Secondary (\"muted\") text\n * keeps its theme color, so the two stay distinguishable. */\n textColor?: string | null | undefined;\n /** Fill of the SECONDARY buttons (the wallet / social / provider entries, the\n * retry button). The primary button is the accent's job. Unset => the theme's\n * own surface color, which is what these buttons always used. */\n buttonColor?: string | null | undefined;\n /** Radius of the modal card itself, in px. */\n modalBorderRadius?: number | null | undefined;\n /** Radius of the buttons inside the modal, in px. Independent of the card's. */\n buttonBorderRadius?: number | null | undefined;\n}\n\n/** The card radius the modals used before it was configurable (1rem). */\nconst DEFAULT_MODAL_BORDER_RADIUS = 16;\n/** Same, for the buttons. */\nconst DEFAULT_BUTTON_BORDER_RADIUS = 6;\n/** Stacking order of the fixed overlay, before it was configurable. */\nconst DEFAULT_OVERLAY_Z_INDEX = 50;\n\n/** A configured length, as a CSS px string. Anything that isn't a finite,\n * non-negative number falls back to `fallback` - a malformed stored value must\n * not collapse the card's chrome. */\nfunction px(value: number | null | undefined, fallback: number): string {\n return `${typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback}px`;\n}\n\n/** A configured color, or the theme's own when unset. Empty string counts as\n * unset: that's what the dashboard sends when the field is cleared. */\nfunction color(value: string | null | undefined, fallback: string): string {\n return typeof value === 'string' && value.trim() !== '' ? value : fallback;\n}\n\n/** `#rgb` / `#rrggbb` as 0-255 channels, or null for anything else (a named\n * color, a `color-mix()`, a typo). */\nfunction parseHex(value: string): [number, number, number] | null {\n const hex = value.trim().replace(/^#/, '');\n const full = hex.length === 3 ? [...hex].map((c) => c + c).join('') : hex;\n if (!/^[0-9a-f]{6}$/i.test(full)) return null;\n return [Number.parseInt(full.slice(0, 2), 16), Number.parseInt(full.slice(2, 4), 16), Number.parseInt(full.slice(4, 6), 16)];\n}\n\n/** Text color that stays legible on `background`. The primary button's label was\n * hardcoded white, which a light fill (the Amber accent preset, say) turns\n * invisible - so it follows the fill's luminance instead. Unparseable colors\n * keep white, the pre-existing behavior. */\nexport function readableTextOn(background: string): string {\n const rgb = parseHex(background);\n if (!rgb) return '#ffffff';\n // Relative luminance, sRGB coefficients (WCAG). The 0.6 cut lands white on\n // Pollar blue (#005DB4) exactly as before, and dark on a pale fill.\n const [r, g, b] = rgb;\n return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255 > 0.6 ? '#111827' : '#ffffff';\n}\n\n/** How much room a modal gives its header. 'hero' is the identity-forward set\n * (login, KYC, ramp, the Privy sub-modal): roomier padding and a larger\n * centered heading. 'compact' is every utility modal (send, balance, history,\n * ...), which keeps the card's own 1.75rem padding. */\nexport type ModalVariant = 'hero' | 'compact';\n\n/** Theme-derived CSS custom properties shared by every Pollar modal, plus the\n * per-app overrides on top. One definition so the whole modal family stays\n * visually in lockstep - a var added here reaches all of them at once. */\nexport function buildModalCssVars(\n theme: string,\n accentColor: string,\n overrides: ModalStyleOverrides = {},\n variant: ModalVariant = 'compact',\n): CSSProperties {\n const isDark = theme === 'dark';\n const textColor = color(overrides.textColor, isDark ? '#ffffff' : '#111827');\n // Only emitted when actually configured. Left out, the secondary buttons fall\n // back inside the CSS to whatever each already used - the theme surface for\n // the filled ones, `transparent` for the ghost one - so an unset field can't\n // flatten those two into the same look.\n const secondaryBg = color(overrides.buttonColor, '');\n return {\n '--pollar-accent': accentColor,\n '--pollar-bg': color(overrides.backgroundColor, isDark ? '#1a1a1a' : '#ffffff'),\n '--pollar-border': isDark ? '#374151' : '#e5e7eb',\n '--pollar-text': textColor,\n '--pollar-muted': isDark ? '#9ca3af' : '#6b7280',\n // The primary button is the accent's, straight up; its label follows the\n // accent's luminance so a pale accent doesn't render white-on-white.\n '--pollar-btn-primary-fg': readableTextOn(accentColor),\n ...(secondaryBg\n ? {\n '--pollar-btn-secondary-bg': secondaryBg,\n '--pollar-btn-secondary-fg': readableTextOn(secondaryBg),\n }\n : {}),\n '--pollar-input-bg': isDark ? '#374151' : '#f9fafb',\n '--pollar-error-bg': isDark ? '#2a1515' : '#fef2f2',\n '--pollar-error-border': isDark ? '#7f1d1d' : '#fecaca',\n '--pollar-error-text': isDark ? '#f87171' : '#dc2626',\n '--pollar-success-text': isDark ? '#4ade80' : '#16a34a',\n '--pollar-modal-border-radius': px(overrides.modalBorderRadius, DEFAULT_MODAL_BORDER_RADIUS),\n '--pollar-buttons-border-radius': px(overrides.buttonBorderRadius, DEFAULT_BUTTON_BORDER_RADIUS),\n '--pollar-buttons-height': '44px',\n '--pollar-input-height': '44px',\n '--pollar-input-border-radius': '0.5rem',\n '--pollar-card-border-radius': '10px',\n ...(variant === 'hero'\n ? {\n '--pollar-modal-padding': '2rem',\n '--pollar-modal-heading-size': '1.375rem',\n '--pollar-modal-subtitle-size': '0.9rem',\n }\n : {}),\n } as CSSProperties;\n}\n\n/** Everything a modal wrapper needs to dress itself from the app's branding:\n * the theme pair its template already took, the overrides to forward to that\n * template, and the inline style for the fixed overlay behind it. */\nexport interface ModalChrome {\n theme: string;\n accentColor: string;\n styleOverrides: ModalStyleOverrides;\n overlayStyle: CSSProperties;\n}\n\n/** Resolve the branding config into the props/styles a modal wrapper applies.\n * Called by every `.pollar-overlay` renderer so the z-index and the card\n * overrides can't drift apart between modals. */\nexport function modalChrome(styles: PollarStyles): ModalChrome {\n const zIndex = styles.modalZIndex;\n return {\n theme: styles.theme ?? 'light',\n accentColor: styles.accentColor ?? '#005DB4',\n styleOverrides: {\n backgroundColor: styles.backgroundColor,\n textColor: styles.textColor,\n buttonColor: styles.buttonColor,\n modalBorderRadius: styles.modalBorderRadius,\n buttonBorderRadius: styles.buttonBorderRadius,\n },\n overlayStyle: {\n '--pollar-overlay-z-index': typeof zIndex === 'number' && Number.isFinite(zIndex) ? zIndex : DEFAULT_OVERLAY_Z_INDEX,\n } as CSSProperties,\n };\n}\n","'use client';\n\nimport { DistributionRule, DistributionRulesState } from '@pollar/core';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\ninterface DistributionRulesModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n state: DistributionRulesState;\n claimingId: string | null;\n claimErrors: Record<string, string>;\n claimedIds: Set<string>;\n onRefresh: () => void;\n onClaim: (rule: DistributionRule) => void;\n onClose: () => void;\n}\n\nconst PERIOD_LABEL: Record<DistributionRule['period'], string> = {\n DAY: 'every 24h',\n DAY_CALENDAR: 'daily',\n WEEK: 'every 7 days',\n MONTH: 'every 30 days',\n MONTH_CALENDAR: 'monthly',\n LIFETIME: 'one-time',\n};\n\n// Reasons returned by sdk-api are the ErrorCode enum values from\n// @pollar/shared. Mapped to short user-facing strings; anything unknown\n// falls back to \"Not available\".\nconst REASON_LABEL: Record<string, string> = {\n DISTRIBUTION_RULE_DISABLED: 'Disabled',\n DISTRIBUTION_RULE_NOT_STARTED: 'Not started yet',\n DISTRIBUTION_RULE_EXPIRED: 'Expired',\n DISTRIBUTION_RULE_EXHAUSTED: 'Fully claimed',\n // Per-user, per-window claim limit (resets next period) - not permanent.\n DISTRIBUTION_RATE_LIMIT_EXCEEDED: 'Claimed for this period',\n};\n\nfunction reasonLabel(reason: string | null): string {\n if (!reason) return 'Not available';\n return REASON_LABEL[reason] ?? 'Not available';\n}\n\nfunction formatAmount(amount: string): string {\n const n = parseFloat(amount);\n return isNaN(n) ? amount : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\nfunction formatValidity(rule: DistributionRule): string | null {\n const from = rule.validFrom ? new Date(rule.validFrom) : null;\n const until = rule.validUntil ? new Date(rule.validUntil) : null;\n if (!from && !until) return null;\n const fmt = (d: Date) => d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n if (from && until) return `${fmt(from)} → ${fmt(until)}`;\n if (until) return `Until ${fmt(until)}`;\n if (from) return `From ${fmt(from)}`;\n return null;\n}\n\nfunction RuleCard({\n rule,\n isClaiming,\n isClaimed,\n errorMessage,\n onClaim,\n}: {\n rule: DistributionRule;\n isClaiming: boolean;\n isClaimed: boolean;\n errorMessage?: string;\n onClaim: () => void;\n}) {\n const validity = formatValidity(rule);\n const effectivelyClaimable = rule.claimable && !isClaimed;\n\n return (\n <div className=\"pollar-dist-item\" data-claimable={effectivelyClaimable ? 'true' : 'false'}>\n <div className=\"pollar-dist-item-row\">\n <span className=\"pollar-dist-item-name\">{rule.name}</span>\n <span className=\"pollar-dist-item-amount\">\n {formatAmount(rule.amount)} <span className=\"pollar-dist-item-asset\">{rule.assetCode}</span>\n </span>\n </div>\n <div className=\"pollar-dist-item-meta\">\n <span>{PERIOD_LABEL[rule.period]}</span>\n {validity && <span>· {validity}</span>}\n </div>\n <div className=\"pollar-dist-item-action\">\n {isClaimed ? (\n <span className=\"pollar-dist-item-status\" data-kind=\"claimed\">\n Claimed\n </span>\n ) : effectivelyClaimable ? (\n <button type=\"button\" className=\"pollar-btn-primary pollar-dist-claim-btn\" onClick={onClaim} disabled={isClaiming}>\n {isClaiming ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Claiming…\n </>\n ) : (\n 'Claim'\n )}\n </button>\n ) : (\n <span className=\"pollar-dist-item-status\" data-kind=\"unavailable\">\n {reasonLabel(rule.reason)}\n </span>\n )}\n </div>\n {errorMessage && <div className=\"pollar-dist-item-error\">{errorMessage}</div>}\n </div>\n );\n}\n\nexport function DistributionRulesModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n state,\n claimingId,\n claimErrors,\n claimedIds,\n onRefresh,\n onClaim,\n onClose,\n}: DistributionRulesModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = state.step === 'loading';\n const rules = state.step === 'loaded' ? state.rules : [];\n\n return (\n <div\n className=\"pollar-modal-card pollar-dist-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Distribution Rules</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n <div className=\"pollar-dist-list\">\n {isLoading && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n {state.step === 'error' && <div className=\"pollar-modal-error\">{state.message}</div>}\n {state.step === 'loaded' && rules.length === 0 && (\n <div className=\"pollar-modal-empty\">No distribution rules available.</div>\n )}\n {rules.map((rule) => (\n <RuleCard\n key={rule.id}\n rule={rule}\n isClaiming={claimingId === rule.id}\n isClaimed={claimedIds.has(rule.id)}\n {...(claimErrors[rule.id] && { errorMessage: claimErrors[rule.id] })}\n onClaim={() => onClaim(rule)}\n />\n ))}\n </div>\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { DistributionRule, DistributionRulesState } from '@pollar/core';\nimport { useCallback, useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport './DistributionRulesModal.css';\nimport { DistributionRulesModalTemplate } from './DistributionRulesModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface DistributionRulesModalProps {\n onClose: () => void;\n}\n\nexport function DistributionRulesModal({ onClose }: DistributionRulesModalProps) {\n const { getClient, styles } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [state, setState] = useState<DistributionRulesState>({ step: 'idle' });\n const [claimingId, setClaimingId] = useState<string | null>(null);\n const [claimErrors, setClaimErrors] = useState<Record<string, string>>({});\n const [claimedIds, setClaimedIds] = useState<Set<string>>(() => new Set());\n\n const load = useCallback(async () => {\n setState({ step: 'loading' });\n try {\n const rules = await getClient().listDistributionRules();\n setState({ step: 'loaded', rules });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to load distribution rules';\n setState({ step: 'error', message });\n }\n }, [getClient]);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n const handleClaim = useCallback(\n async (rule: DistributionRule) => {\n setClaimingId(rule.id);\n setClaimErrors((prev) => {\n if (!prev[rule.id]) return prev;\n const next = { ...prev };\n delete next[rule.id];\n return next;\n });\n try {\n await getClient().claimDistributionRule({ ruleId: rule.id });\n setClaimedIds((prev) => {\n const next = new Set(prev);\n next.add(rule.id);\n return next;\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Claim failed';\n setClaimErrors((prev) => ({ ...prev, [rule.id]: message }));\n } finally {\n setClaimingId(null);\n }\n },\n [getClient],\n );\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <DistributionRulesModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n state={state}\n claimingId={claimingId}\n claimErrors={claimErrors}\n claimedIds={claimedIds}\n onRefresh={() => void load()}\n onClaim={handleClaim}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\n// --- Shared network picker ----------------------------------------------------\n// One chain <select> used by the Send, Wallet Balance and Assets modals. The\n// options are the chains the user actually holds a wallet on (`getWallets()`),\n// so every option always resolves to an address; the parent defaults to the\n// first one. Everything else in those modals - address, assets, balances - is\n// filtered by whatever is picked here.\n// -----------------------------------------------------------------------------\n\nimport type { WalletChain, WalletInfo } from '@pollar/core';\nimport './send-modal/SendModal.css';\nimport './shared.css';\n\nconst CHAIN_LABEL: Record<string, string> = {\n STELLAR: 'Stellar',\n POLYGON: 'Polygon',\n SOLANA: 'Solana',\n};\n\n/**\n * The chain a record lives on, with the legacy shape folded in: sessions and\n * balance rows minted before multi-chain carry no `chain` and are Stellar by\n * definition, so absent counts as STELLAR rather than as \"unknown\".\n */\nexport function resolveChain(chain: WalletChain | undefined): WalletChain {\n return chain ?? 'STELLAR';\n}\n\n/**\n * The selectable chains - the first is the default everywhere (network picker,\n * the address the wallet button shows). De-duplicated because two wallets on one\n * chain (e.g. an embedded and a linked external Stellar wallet) are still one\n * network choice.\n *\n * `order` is the app's chain list from `/applications/config`, as arranged in the\n * dashboard. When passed it both ORDERS and FILTERS: a chain missing from it is\n * dropped, because the app switched it off and must stop appearing everywhere.\n *\n * Filtering here and not only in the backend is deliberate. `wallets` comes from\n * the session, which is written at login and then persisted for as long as the\n * session lives; `/config` is refetched on every page load. So a chain disabled\n * today disappears on the next reload even for a user who logged in last week\n * and still carries it in their stored session.\n *\n * Without `order` (config still loading) the fallback is the order the backend\n * listed the wallets in.\n */\nexport function chainsOf(wallets: WalletInfo[], order?: readonly WalletChain[]): WalletChain[] {\n const held: WalletChain[] = [];\n for (const w of wallets) {\n const chain = resolveChain(w.chain);\n if (!held.includes(chain)) held.push(chain);\n }\n if (!order || order.length === 0) return held;\n\n return order.filter((c) => held.includes(c));\n}\n\n/** The address to show for `chain`, or '' when the user has no wallet there. */\nexport function addressForChain(wallets: WalletInfo[], chain: WalletChain | null): string {\n if (!chain) return '';\n return wallets.find((w) => resolveChain(w.chain) === chain)?.address ?? '';\n}\n\nexport interface ChainSelectProps {\n label?: string;\n value: WalletChain | null;\n options: WalletChain[];\n onChange: (chain: WalletChain) => void;\n disabled?: boolean;\n}\n\nexport function ChainSelect({ label = 'Network', value, options, onChange, disabled = false }: ChainSelectProps) {\n // A single-network app gets no picker: one option is not a choice, and the\n // modals would carry a dead control. The parent still defaults to that chain,\n // so everything below stays filtered to it. Matches how the per-row ChainTag\n // is gated on `multichain` elsewhere.\n if (options.length < 2) return null;\n\n return (\n <div className=\"pollar-send-field pollar-chain-field\">\n <label className=\"pollar-send-label\">{label}</label>\n <select\n className=\"pollar-input pollar-send-select\"\n value={value ?? ''}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value as WalletChain)}\n >\n {/* Only present before the parent defaults to the first chain; hidden\n from the open dropdown. */}\n {value === null && <option value=\"\" disabled hidden />}\n {options.map((chain) => (\n <option key={chain} value={chain}>\n {CHAIN_LABEL[chain] ?? chain}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","'use client';\n\n// --- Chain order, one source of truth -----------------------------------------\n// Every component that shows \"the user's address\" or offers a network picker\n// reads it from here, so the wallet button and the modals can never disagree\n// about which chain is first.\n//\n// The order and the membership both come from `/applications/config`\n// (`appConfig.application.chains`), which is the app's own list as arranged in\n// the dashboard. Two reasons it is the authority and `getWallets()` is not:\n//\n// - `wallets[]` is written into the session at LOGIN and then persisted. A\n// chain switched off today would keep showing for anyone with a live\n// session. `/config` is refetched on every page load, so it corrects itself.\n// - Before this, the backend listed `wallets[]` `ORDER BY network` (the Prisma\n// enum order), identical for every app on the platform. That is fixed\n// server-side now, but a session persisted before the fix still carries the\n// old array, and re-deriving here repairs it without forcing a re-login.\n// -----------------------------------------------------------------------------\n\nimport type { WalletChain } from '@pollar/core';\nimport { useMemo } from 'react';\nimport { addressForChain, chainsOf } from './components/ChainSelect';\nimport { usePollar } from './context';\n\nexport interface UseChainsResult {\n /**\n * Chains to offer, in the app's configured order: those the app serves AND the\n * user already holds a wallet on. `[]` until `/config` resolves, so a network\n * picker driven by this renders nothing rather than a list it may have to\n * reorder a moment later.\n */\n chains: WalletChain[];\n /** The app's first configured chain that the user holds. `null` until ready. */\n primaryChain: WalletChain | null;\n /**\n * The address on {@link primaryChain}. While `/config` is still in flight this\n * falls back to the first wallet the session lists, so a logged-in user never\n * sees the wallet button blank out into a \"Connect\" state on every reload.\n */\n primaryAddress: string;\n /** `false` while `/config` is in flight or failed. Gate any chain UI on it. */\n ready: boolean;\n}\n\nexport function useChains(): UseChainsResult {\n const { wallets, appConfig, configStatus } = usePollar();\n const configured = appConfig?.application?.chains as WalletChain[] | undefined;\n const ready = configStatus === 'ready';\n\n return useMemo(() => {\n if (!ready) {\n // No configured order yet, so no opinion about which chain leads. The\n // picker stays empty; the button borrows the session's first address\n // purely so it has something to render.\n const fallback = chainsOf(wallets);\n return {\n chains: [],\n primaryChain: null,\n primaryAddress: addressForChain(wallets, fallback[0] ?? null),\n ready: false,\n };\n }\n const chains = chainsOf(wallets, configured);\n const primaryChain = chains[0] ?? null;\n return { chains, primaryChain, primaryAddress: addressForChain(wallets, primaryChain), ready: true };\n }, [wallets, configured, ready]);\n}\n","'use client';\n\nimport { EnabledAssetRecord, EnabledAssetsState, WalletChain } from '@pollar/core';\nimport { useState } from 'react';\nimport { ChainSelect, resolveChain } from '../ChainSelect';\nimport { BusyOverlay, CopyButton, cropAddress, PollarModalFooter, Toggle, useStickyData } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nfunction assetKey(record: { code: string; issuer?: string }): string {\n return record.code + (record.issuer ?? '');\n}\n\n/** Row key. Chain-qualified: the same code+issuer can exist on two chains. */\nfunction rowKey(record: EnabledAssetRecord): string {\n return (record.chain ?? '') + assetKey(record);\n}\n\nfunction AssetItem({\n record,\n busy,\n disabled,\n onToggle,\n}: {\n record: EnabledAssetRecord;\n busy: boolean;\n disabled: boolean;\n onToggle: (record: EnabledAssetRecord) => void;\n}) {\n // Absent means \"not established\": an unknown trustline must never render as\n // an on switch, which would read as already enabled.\n const established = record.trustlineEstablished ?? false;\n const isNative = record.type === 'native';\n // A trustline is a Stellar concept. On Polygon/Solana a token is simply held,\n // so those rows are informational: no label, no switch.\n const isStellar = resolveChain(record.chain) === 'STELLAR';\n\n return (\n <div className=\"pollar-asset-item\">\n <div className=\"pollar-asset-info\">\n <div className=\"pollar-asset-code-row\">\n <span className=\"pollar-asset-code\">{record.code}</span>\n {record.enabledInApp && <span className=\"pollar-asset-tag\">App</span>}\n </div>\n {record.name && <span className=\"pollar-asset-name\">{record.name}</span>}\n {record.issuer && (\n <span className=\"pollar-issuer\">\n <span className=\"pollar-issuer-addr\">{cropAddress(record.issuer)}</span>\n <CopyButton value={record.issuer} label=\"Copy issuer address\" className=\"pollar-copy-btn-sm\" />\n </span>\n )}\n {isStellar && !isNative && record.enabledInApp && (\n <span className=\"pollar-asset-sponsor\">\n {record.sponsored ? 'Reserve sponsored by the app' : 'You pay the reserve (~0.5 XLM)'}\n </span>\n )}\n </div>\n {isStellar && (\n <div className=\"pollar-asset-actions\">\n <span className=\"pollar-asset-trustline-label\">Trustline</span>\n {/* Native XLM needs no trustline - it is implicit and can't be removed,\n so the switch shows the state but stays locked on. */}\n <Toggle\n checked={established}\n busy={busy}\n disabled={isNative || disabled}\n onChange={() => onToggle(record)}\n label={`${established ? 'Disable' : 'Enable'} ${record.code} trustline`}\n />\n </div>\n )}\n </div>\n );\n}\n\nexport interface EnabledAssetsModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n enabledAssets: EnabledAssetsState;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n /** Networks the user holds a wallet on; the first one is the default. */\n chains: WalletChain[];\n selectedChain: WalletChain | null;\n onSelectChain: (chain: WalletChain) => void;\n /** Key (`code+issuer`) of the asset whose trustline action is in flight. */\n busyKey: string | null;\n actionError: string | null;\n onRefresh: () => void;\n onClose: () => void;\n onToggleTrustline: (record: EnabledAssetRecord) => void;\n onAddCustom: () => void;\n}\n\nexport function EnabledAssetsModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n enabledAssets,\n walletAddress,\n chains,\n selectedChain,\n onSelectChain,\n busyKey,\n actionError,\n onRefresh,\n onClose,\n onToggleTrustline,\n onAddCustom,\n}: EnabledAssetsModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = enabledAssets.step === 'loading';\n // Keep the previous payload on screen while refreshing; the overlay below\n // blocks interaction so nothing is acted on against data that is changing.\n const data = useStickyData(enabledAssets.step === 'loaded' ? enabledAssets.data : null);\n const busy = busyKey !== null;\n // Only the picked network's assets. The backend returns every chain in one\n // payload, so this is a local filter - switching networks costs no request.\n const assets = (data?.assets ?? []).filter((a) => resolveChain(a.chain) === selectedChain);\n // Trustlines are Stellar-only, so the custom-trustline form is offered only\n // while Stellar is the selected network.\n const isStellarSelected = selectedChain === 'STELLAR';\n\n return (\n <div\n className=\"pollar-modal-card pollar-asset-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n {isLoading && data && <BusyOverlay label=\"Refreshing assets…\" />}\n\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Assets</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading || busy}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoading || busy} />\n\n {walletAddress && (\n <div className=\"pollar-address-row\">\n <span className=\"pollar-address\">{cropAddress(walletAddress)}</span>\n <CopyButton value={walletAddress} label=\"Copy wallet address\" />\n </div>\n )}\n\n {/* First load only - a refresh keeps the old list under the overlay. */}\n {isLoading && !data && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n\n {enabledAssets.step === 'error' && <div className=\"pollar-modal-error\">{enabledAssets.message}</div>}\n\n {actionError && <div className=\"pollar-modal-action-error\">{actionError}</div>}\n\n {data && !data.exists && <div className=\"pollar-modal-empty\">Account not found on {data.network}.</div>}\n\n {data && assets.length === 0 && <div className=\"pollar-modal-empty\">No assets found on this network.</div>}\n\n {data && assets.length > 0 && (\n <div className=\"pollar-asset-list\">\n {assets.map((a) => (\n <AssetItem\n key={rowKey(a)}\n record={a}\n busy={busyKey === assetKey(a)}\n disabled={busy && busyKey !== assetKey(a)}\n onToggle={onToggleTrustline}\n />\n ))}\n </div>\n )}\n\n {isStellarSelected && (\n <button className=\"pollar-asset-add-custom\" onClick={onAddCustom} disabled={busy}>\n + Add custom trustline\n </button>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n\nexport interface CustomTrustlineModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n busy: boolean;\n actionError: string | null;\n onBack: () => void;\n onClose: () => void;\n onSubmit: (input: { code: string; issuer: string; limit?: string }) => void;\n}\n\nfunction isValidIssuer(issuer: string): boolean {\n return issuer.length === 56 && issuer.startsWith('G');\n}\n\nexport function CustomTrustlineModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n busy,\n actionError,\n onBack,\n onClose,\n onSubmit,\n}: CustomTrustlineModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const [code, setCode] = useState('');\n const [issuer, setIssuer] = useState('');\n const [limit, setLimit] = useState('');\n\n const codeOk = code.trim().length >= 1 && code.trim().length <= 12;\n const issuerOk = isValidIssuer(issuer.trim());\n const canSubmit = codeOk && issuerOk && !busy;\n\n const submit = () => {\n if (!canSubmit) return;\n const trimmedLimit = limit.trim();\n onSubmit({ code: code.trim(), issuer: issuer.trim(), ...(trimmedLimit ? { limit: trimmedLimit } : {}) });\n };\n\n return (\n <div\n className=\"pollar-modal-card pollar-asset-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-modal-header-actions\">\n <button className=\"pollar-modal-close\" onClick={onBack} disabled={busy} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n <h2 className=\"pollar-modal-title\">Add custom trustline</h2>\n </div>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n <p className=\"pollar-asset-custom-hint\">\n Custom trustlines aren't sponsored — your wallet pays the 0.5 XLM reserve and the transaction fee.\n </p>\n\n <div className=\"pollar-field\">\n <label className=\"pollar-label\" htmlFor=\"pollar-trustline-code\">\n Asset code\n </label>\n <input\n id=\"pollar-trustline-code\"\n className=\"pollar-input\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n placeholder=\"USDC\"\n maxLength={12}\n autoComplete=\"off\"\n spellCheck={false}\n disabled={busy}\n />\n </div>\n\n <div className=\"pollar-field\">\n <label className=\"pollar-label\" htmlFor=\"pollar-trustline-issuer\">\n Issuer\n </label>\n <input\n id=\"pollar-trustline-issuer\"\n className=\"pollar-input\"\n value={issuer}\n onChange={(e) => setIssuer(e.target.value)}\n placeholder=\"G…\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={busy}\n />\n {issuer.trim().length > 0 && !issuerOk && (\n <span className=\"pollar-field-error\">Issuer must be a 56-character Stellar address starting with G.</span>\n )}\n </div>\n\n <div className=\"pollar-field\">\n <label className=\"pollar-label\" htmlFor=\"pollar-trustline-limit\">\n Limit <span className=\"pollar-label-optional\">(optional)</span>\n </label>\n <input\n id=\"pollar-trustline-limit\"\n className=\"pollar-input\"\n value={limit}\n onChange={(e) => setLimit(e.target.value)}\n placeholder=\"Maximum\"\n inputMode=\"decimal\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={busy}\n />\n </div>\n\n {actionError && <div className=\"pollar-modal-action-error\">{actionError}</div>}\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={submit} disabled={!canSubmit}>\n {busy ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Enabling…\n </>\n ) : (\n 'Enable trustline'\n )}\n </button>\n </div>\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { EnabledAssetRecord, WalletChain } from '@pollar/core';\nimport { useCallback, useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './EnabledAssetsModal.css';\nimport { CustomTrustlineModalTemplate, EnabledAssetsModalTemplate } from './EnabledAssetsModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface EnabledAssetsModalProps {\n onClose: () => void;\n}\n\nfunction assetKey(record: { code: string; issuer?: string }): string {\n return record.code + (record.issuer ?? '');\n}\n\nexport function EnabledAssetsModal({ onClose }: EnabledAssetsModalProps) {\n const { enabledAssets, refreshAssets, setTrustline, wallets, styles } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n\n const [view, setView] = useState<'list' | 'custom'>('list');\n // Key of the in-flight asset (`code+issuer`), or 'custom' for the custom form.\n const [busyKey, setBusyKey] = useState<string | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n\n useEffect(() => {\n void refreshAssets();\n }, [refreshAssets]);\n\n const runAction = useCallback(\n async (\n key: string,\n asset: { code: string; issuer: string },\n opts: { limit?: string; skipSponsorship?: boolean },\n ): Promise<boolean> => {\n setBusyKey(key);\n setActionError(null);\n const res = await setTrustline(asset, opts);\n if (res.status === 'error') {\n setActionError(res.details || 'Trustline update failed. Please try again.');\n setBusyKey(null);\n return false;\n }\n await refreshAssets();\n setBusyKey(null);\n return true;\n },\n [setTrustline, refreshAssets],\n );\n\n const handleToggle = useCallback(\n (record: EnabledAssetRecord) => {\n const removing = record.trustlineEstablished;\n // Sponsorship is derived automatically from the app config now - no flag.\n void runAction(\n assetKey(record),\n { code: record.code, issuer: record.issuer ?? '' },\n { ...(removing ? { limit: '0' } : {}) },\n );\n },\n [runAction],\n );\n\n const handleCustomSubmit = useCallback(\n async (input: { code: string; issuer: string; limit?: string }) => {\n // Custom (non-configured) assets are never app-sponsored - the user pays.\n const ok = await runAction(\n 'custom',\n { code: input.code, issuer: input.issuer },\n { ...(input.limit ? { limit: input.limit } : {}), skipSponsorship: true },\n );\n if (ok) setView('list');\n },\n [runAction],\n );\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n {view === 'list' ? (\n <EnabledAssetsModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n enabledAssets={enabledAssets}\n walletAddress={walletAddress}\n chains={chains}\n selectedChain={selectedChain}\n onSelectChain={setSelectedChain}\n busyKey={busyKey}\n actionError={actionError}\n onRefresh={() => refreshAssets()}\n onClose={onClose}\n onToggleTrustline={handleToggle}\n onAddCustom={() => {\n setActionError(null);\n setView('custom');\n }}\n />\n ) : (\n <CustomTrustlineModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n busy={busyKey === 'custom'}\n actionError={actionError}\n onBack={() => {\n setActionError(null);\n setView('list');\n }}\n onClose={onClose}\n onSubmit={handleCustomSubmit}\n />\n )}\n </div>\n );\n}\n","'use client';\n\nimport type { KycStatus as KycStatusValue } from '@pollar/core';\nimport type { CSSProperties } from 'react';\n\ninterface KycStatusProps {\n status: KycStatusValue;\n /** Replaces the status label, keeping its color. */\n label?: string;\n className?: string;\n}\n\nconst STATUS_CONFIG: Record<KycStatusValue, { label: string; color: string; dot: boolean }> = {\n none: { label: 'Not started', color: '#6b7280', dot: false },\n pending: { label: 'Pending review', color: '#f59e0b', dot: true },\n approved: { label: 'Verified', color: '#10b981', dot: false },\n rejected: { label: 'Rejected', color: '#ef4444', dot: false },\n expired: { label: 'Expired', color: '#6b7280', dot: false },\n};\n\nexport function KycStatus({ status, label, className }: KycStatusProps) {\n const config = STATUS_CONFIG[status] ?? STATUS_CONFIG.none;\n return (\n <span\n className={`pollar-kyc-badge${className ? ` ${className}` : ''}`}\n style={{ '--pollar-kyc-color': config.color } as CSSProperties}\n >\n {config.dot && <span className=\"pollar-kyc-badge-dot\" />}\n {label ?? config.label}\n </span>\n );\n}\n","/** What a failed KYC call means for the user, by backend code. */\nexport function kycErrorMessage(error: unknown, phase: 'load' | 'start'): string {\n const code = (error as { code?: unknown } | null)?.code;\n switch (code) {\n case 'SDK_KYC_NOT_CONFIGURED':\n return 'Identity verification is not available for this app yet.';\n case 'SDK_KYC_PROVIDER_ERROR':\n return 'The verification service is not responding right now. Please try again in a moment.';\n case 'SDK_KYC_SESSION_EXPIRED':\n return 'Your previous verification session expired. Select the provider to start a new one.';\n case 'SDK_KYC_PROVIDER_NOT_FOUND':\n case 'SDK_KYC_PROVIDER_NOT_ENABLED':\n return 'This verification option is no longer available. Refresh to see the current options.';\n case 'SDK_RAMPS_PROVIDER_NOT_CONFIGURED':\n return 'This route is not set up for identity verification yet.';\n case 'VALIDATION_ERROR':\n return 'This verification option is not available for your country.';\n default:\n return phase === 'load'\n ? 'Could not load verification options. Please refresh to try again.'\n : 'Could not start verification. Please try again.';\n }\n}\n\n/** Why a verification is held for a person to review, in the user's terms. */\nexport function kycReviewMessage(reviewReason: string | null | undefined): string {\n if (reviewReason === 'DUPLICATE_DOCUMENT') {\n return 'This document is already linked to another account, so our team is reviewing it. You can check again later.';\n }\n return 'Your verification is still being reviewed. You can check again shortly.';\n}\n\n/** A decision the vendor approved that Pollar is still recording. */\nexport function kycProcessingMessage(): string {\n return 'Your verification was approved. We are finishing setting it up; check again in a minute.';\n}\n","'use client';\n\nimport type { KycProvider, KycStartResponse, KycStatus as KycStatusValue } from '@pollar/core';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\nimport { KycStatus as KycStatusBadge } from './KycStatus';\nimport { kycProcessingMessage, kycReviewMessage } from './kyc-messages';\n\nexport type KycStep = 'select_provider' | 'verifying' | 'polling' | 'done';\n\ninterface KycModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n step: KycStep;\n providers: KycProvider[];\n selectedProvider: KycProvider | null;\n session: KycStartResponse | null;\n kycStatus: KycStatusValue;\n /** Set when the decision is held for manual review (e.g. DUPLICATE_DOCUMENT). */\n reviewReason?: string | null;\n /** The vendor approved and Pollar is still recording it (`kycStatus` stays `pending`). */\n processing?: boolean;\n isLoading: boolean;\n error?: string | null;\n onSelectProvider: (provider: KycProvider) => void;\n onDoneVerifying: () => void;\n /** Open a new session after the previous one expired. */\n onStartAgain?: () => void;\n onRefresh: () => void;\n onClose: () => void;\n}\n\nexport function KycModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n providers,\n selectedProvider,\n session,\n kycStatus,\n reviewReason,\n processing = false,\n isLoading,\n error,\n onSelectProvider,\n onDoneVerifying,\n onStartAgain,\n onRefresh,\n onClose,\n}: KycModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n return (\n <div\n className={`pollar-modal-card pollar-kyc-modal ${step === 'verifying' ? 'pollar-kyc-modal--verifying' : ''}`}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Identity verification\"\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-kyc-header-text\">\n <h2 className=\"pollar-modal-title\">Identity verification</h2>\n <p className=\"pollar-kyc-subtitle\">\n {step === 'select_provider' && 'Choose your verification provider'}\n {step === 'verifying' && `Complete the steps below with ${selectedProvider?.name}`}\n {step === 'polling' && 'Waiting for verification result'}\n {step === 'done' && (kycStatus === 'approved' ? 'You’re ready to continue' : 'Your verification status')}\n </p>\n </div>\n <div className=\"pollar-modal-header-actions\">\n {step === 'select_provider' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh providers\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {error && (\n <p className=\"pollar-kyc-error\" role=\"alert\">\n {error}\n </p>\n )}\n\n {step === 'select_provider' &&\n (isLoading && providers.length === 0 ? (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading providers…</span>\n </div>\n ) : (\n <div className=\"pollar-kyc-providers\">\n {providers.length === 0 && (\n <p style={{ color: 'var(--pollar-muted)', textAlign: 'center' }}>No providers available for your country.</p>\n )}\n {providers.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n className=\"pollar-kyc-provider-btn\"\n disabled={isLoading}\n onClick={() => onSelectProvider(p)}\n >\n <span className=\"pollar-kyc-provider-name\">{p.name}</span>\n <span className=\"pollar-kyc-provider-flow\">\n {isLoading && selectedProvider?.id === p.id\n ? 'Opening…'\n : p.flow === 'redirect'\n ? 'Continue in a new tab'\n : 'Continue here'}\n </span>\n </button>\n ))}\n </div>\n ))}\n\n {step === 'verifying' && selectedProvider && (\n <>\n <div className=\"pollar-kyc-session-bar\">\n <span className=\"pollar-kyc-session-label\">\n <span className=\"pollar-kyc-session-dot\" />\n Verification in progress\n </span>\n {session?.kycUrl && (\n <a href={session.kycUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Open in new tab ↗\n </a>\n )}\n </div>\n <div className=\"pollar-kyc-iframe-wrap\">\n {session?.kycUrl && selectedProvider.flow === 'redirect' ? (\n <div className=\"pollar-kyc-iframe-mock\">\n <p>Complete verification in a separate tab, then return here to check your status.</p>\n <a className=\"pollar-btn-primary\" href={session.kycUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Open verification\n </a>\n </div>\n ) : session?.kycUrl ? (\n <iframe className=\"pollar-kyc-iframe\" src={session.kycUrl} title=\"KYC verification\" allow=\"camera; microphone\" />\n ) : (\n <div className=\"pollar-kyc-iframe-mock\">\n <span>\n {selectedProvider.flow === 'form'\n ? 'The identity verification form will appear here.'\n : 'Identity verification will open here.'}\n </span>\n </div>\n )}\n </div>\n <div className=\"pollar-kyc-footer\">\n <p>Finished the steps? Check your status to continue.</p>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n Close\n </button>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onDoneVerifying}>\n Check status\n </button>\n </div>\n </div>\n </>\n )}\n\n {step === 'polling' && (\n <div className=\"pollar-kyc-polling\">\n <div className=\"pollar-spinner\" />\n <p className=\"pollar-kyc-polling-text\">Checking verification status…</p>\n </div>\n )}\n\n {step === 'done' && (\n <div className=\"pollar-kyc-result\">\n <span className={`pollar-kyc-result-icon pollar-kyc-result-icon--${kycStatus}`} aria-hidden=\"true\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {kycStatus === 'approved' ? (\n <path d=\"m5 12 4 4L19 6\" />\n ) : kycStatus === 'rejected' ? (\n <path d=\"m7 7 10 10M17 7 7 17\" />\n ) : (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"M12 7v5l3 2\" />\n </>\n )}\n </svg>\n </span>\n <KycStatusBadge status={kycStatus} {...(processing ? { label: 'Approved' } : {})} />\n <p className=\"pollar-kyc-result-text\">\n {kycStatus === 'approved'\n ? 'Your identity has been verified successfully.'\n : kycStatus === 'rejected'\n ? 'Your verification was not approved. Contact support for the next steps.'\n : kycStatus === 'expired'\n ? 'Your verification expired. Start again to verify your identity.'\n : processing\n ? kycProcessingMessage()\n : kycReviewMessage(reviewReason)}\n </p>\n <div className=\"pollar-modal-actions\">\n {kycStatus === 'expired' && onStartAgain && (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onStartAgain} disabled={isLoading}>\n Start again\n </button>\n )}\n {kycStatus !== 'approved' && kycStatus !== 'rejected' && kycStatus !== 'expired' && (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onDoneVerifying}>\n Check again\n </button>\n )}\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )}\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport {\n isPollarApiError,\n type KycProvider,\n type KycStartResponse,\n type KycStatus as KycStatusValue,\n type KycStatusContent,\n} from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport type { KycStep } from './KycModalTemplate';\nimport { KycModalTemplate } from './KycModalTemplate';\nimport { kycErrorMessage } from './kyc-messages';\nimport '../shared.css';\nimport './KycModal.css';\nimport { modalChrome } from '../modal-theme';\n\ninterface KycModalProps {\n corridorId?: string;\n /** A card provider's steps, in place of a route's. */\n cardProviderId?: string;\n /** Open this option directly instead of listing the choices (the one a ramp's KYC gate names). */\n providerId?: string;\n onClose: () => void;\n /** ISO 3166-1 alpha-2 country code to filter providers. Defaults to 'MX'. */\n country?: string;\n /** Legacy fallback for older backends. Named options select their own workflow. */\n level?: 'basic' | 'intermediate' | 'enhanced';\n /** Called when KYC is successfully approved. */\n onApproved?: () => void;\n}\n\nfunction newIdempotencyKey(): string {\n const c = globalThis.crypto;\n if (c && typeof c.randomUUID === 'function') return c.randomUUID();\n return `kyc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;\n}\n\nexport function KycModal({\n onClose,\n country = 'MX',\n level = 'basic',\n onApproved,\n corridorId,\n cardProviderId,\n providerId,\n}: KycModalProps) {\n const { getClient, styles } = usePollar();\n\n const [step, setStep] = useState<KycStep>('select_provider');\n const [providers, setProviders] = useState<KycProvider[]>([]);\n const [selectedProvider, setSelectedProvider] = useState<KycProvider | null>(null);\n const [session, setSession] = useState<KycStartResponse | null>(null);\n const [kycStatus, setKycStatus] = useState<KycStatusValue>('none');\n const [reviewReason, setReviewReason] = useState<string | null>(null);\n const [processing, setProcessing] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n // One key per option for this modal: a retried start returns the vendor session\n // already opened instead of creating (and billing) another one.\n const idempotencyKeys = useRef<Record<string, string>>({});\n const autoOpened = useRef(false);\n\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n function finish(status: KycStatusValue, reason: string | null = null, isProcessing = false) {\n setKycStatus(status);\n setReviewReason(reason);\n setProcessing(isProcessing);\n setStep('done');\n if (status === 'approved') onApproved?.();\n }\n\n function finishWith(read: KycStatusContent) {\n if (read.status === 'pending' && read.decisionStatus === 'approved') finish('pending', null, true);\n else if (read.decisionStatus === 'manual_review') finish('pending', read.reviewReason ?? null);\n else finish(read.decisionStatus === 'expired' ? 'expired' : read.status);\n }\n\n function readStatus(providerId: string) {\n return corridorId || cardProviderId\n ? client.getKycStatus(undefined, corridorId, cardProviderId)\n : client.getKycStatus(providerId);\n }\n\n // One session request at a time: a second one for the same key would only wait on\n // the first, and the auto-open path can fire alongside a click.\n const starting = useRef(false);\n\n /** `listed`: the option came from the country-filtered list. Off it, the backend picks the option's own country. */\n async function handleSelectProvider(provider: KycProvider, listed = true) {\n if (starting.current) return;\n starting.current = true;\n setSelectedProvider(provider);\n setError(null);\n setIsLoading(true);\n const key = (idempotencyKeys.current[provider.id] ??= newIdempotencyKey());\n try {\n const result = await client.resolveKyc(\n provider.id,\n provider.levels?.[0] ?? level,\n listed ? country : undefined,\n corridorId,\n key,\n cardProviderId,\n );\n if (result.alreadyApproved) {\n finish('approved');\n return;\n }\n setSession(result as KycStartResponse);\n setStep('verifying');\n } catch (e) {\n const code = isPollarApiError(e) ? e.code : undefined;\n if (code === 'SDK_KYC_ALREADY_APPROVED') {\n finish('approved');\n return;\n }\n // A session of this user is in the provider's review, or approved and still being\n // recorded: show which one instead of opening another session.\n if (code === 'SDK_KYC_UNDER_REVIEW') {\n await readStatus(provider.id).then(finishWith, () => finish('pending'));\n return;\n }\n if (code === 'SDK_KYC_SESSION_EXPIRED') delete idempotencyKeys.current[provider.id];\n setError(kycErrorMessage(e, 'start'));\n setStep('select_provider');\n } finally {\n starting.current = false;\n setIsLoading(false);\n }\n }\n\n const loadProviders = useCallback(() => {\n setIsLoading(true);\n setError(null);\n return getClient()\n .getKycProviders(country, corridorId, cardProviderId)\n .then((result) => {\n setProviders(result.providers);\n return result.providers;\n })\n .catch((e: unknown) => {\n setProviders([]);\n setError(kycErrorMessage(e, 'load'));\n return [] as KycProvider[];\n })\n .finally(() => setIsLoading(false));\n }, [getClient, country, corridorId, cardProviderId]);\n\n useEffect(() => {\n void loadProviders().then((list) => {\n if (!providerId || autoOpened.current) return;\n autoOpened.current = true;\n const target = list.find((p) => p.id === providerId);\n // The option a gate or a step names was chosen by the backend for this user: the\n // country this list was filtered by must not hide it behind \"no providers\".\n if (target) void handleSelectProvider(target);\n else\n void handleSelectProvider(\n { id: providerId, name: 'Identity verification', flow: 'iframe', levels: [level] } as KycProvider,\n false,\n );\n });\n // handleSelectProvider reads the latest props on each call; listing it would reload providers every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loadProviders, providerId]);\n\n async function handleDoneVerifying() {\n if (!selectedProvider) return;\n setError(null);\n setStep('polling');\n try {\n const read = await client.pollKycDecision(selectedProvider.id, {\n intervalMs: 3000,\n timeoutMs: 120_000,\n ...(corridorId ? { corridorId } : {}),\n ...(cardProviderId ? { cardProviderId } : {}),\n });\n finishWith(read);\n } catch {\n setError('We could not confirm your result yet. Check again shortly; this does not mean your verification was rejected.');\n setStep('verifying');\n }\n }\n\n function handleStartAgain() {\n if (selectedProvider) delete idempotencyKeys.current[selectedProvider.id];\n setSession(null);\n setKycStatus('none');\n setReviewReason(null);\n setProcessing(false);\n if (selectedProvider) void handleSelectProvider(selectedProvider);\n else setStep('select_provider');\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <KycModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n providers={providers}\n selectedProvider={selectedProvider}\n session={session}\n kycStatus={kycStatus}\n reviewReason={reviewReason}\n processing={processing}\n isLoading={isLoading}\n error={error}\n onSelectProvider={handleSelectProvider}\n onDoneVerifying={handleDoneVerifying}\n onStartAgain={handleStartAgain}\n onRefresh={() => void loadProviders()}\n onClose={onClose}\n />\n </div>\n );\n}\n","import type { RequirementFormAnswers, RequirementFormField } from '@pollar/core';\n\nexport type FormLanguage = 'en' | 'es';\n\n/** Field labels come in English and Spanish; the browser's language picks one. */\nexport function formLanguage(): FormLanguage {\n const language = typeof navigator !== 'undefined' ? navigator.language : '';\n return language.toLowerCase().startsWith('es') ? 'es' : 'en';\n}\n\nexport function localized(text: { en?: string; es?: string } | undefined, language: FormLanguage): string {\n return (language === 'es' ? text?.es || text?.en : text?.en || text?.es) ?? '';\n}\n\n/** Values as the inputs hold them: text for every text-like input. */\nexport type FormValues = Record<string, string | boolean | string[]>;\n\nexport function initialValues(fields: RequirementFormField[], answers: RequirementFormAnswers): FormValues {\n const values: FormValues = {};\n for (const field of fields) {\n const answer = answers[field.key];\n if (field.type === 'checkbox') values[field.key] = answer === true;\n else if (field.type === 'multiselect') values[field.key] = Array.isArray(answer) ? answer : [];\n else values[field.key] = answer === undefined || answer === null ? '' : String(answer);\n }\n return values;\n}\n\nconst DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n/**\n * What one input can tell before the server does, with the same rules the server\n * applies: a number that is not one or is out of range, a date outside\n * `YYYY-MM-DD`, text longer than allowed or not matching the field's pattern. The\n * server checks all of it again, so a custom UI cannot skip it; this only answers\n * sooner. Empty values are left to the server's `required`.\n */\nexport function localFieldError(field: RequirementFormField, value: FormValues[string] | undefined): string | null {\n if (typeof value !== 'string' || !value.trim()) return null;\n const text = value.trim();\n const rules = field.validation ?? {};\n if (field.type === 'number') {\n const number = Number(text);\n if (!Number.isFinite(number)) return 'invalid_type';\n if (rules.min !== undefined && number < rules.min) return 'too_small';\n if (rules.max !== undefined && number > rules.max) return 'too_large';\n return null;\n }\n if (field.type === 'date') {\n return DATE.test(text) && !Number.isNaN(Date.parse(`${text}T00:00:00Z`)) ? null : 'invalid_format';\n }\n if (field.type === 'select' || field.type === 'multiselect' || field.type === 'checkbox') return null;\n if (rules.maxLength !== undefined && text.length > rules.maxLength) return 'too_long';\n if (rules.pattern) {\n try {\n if (!new RegExp(rules.pattern).test(text)) return 'pattern';\n } catch {\n // A pattern this engine cannot compile is left to the server.\n }\n }\n return null;\n}\n\nexport function localFieldErrors(fields: RequirementFormField[], values: FormValues): Record<string, string> {\n const errors: Record<string, string> = {};\n for (const field of fields) {\n const error = localFieldError(field, values[field.key]);\n if (error) errors[field.key] = error;\n }\n return errors;\n}\n\n/** The answers to send: numbers as numbers, empty inputs left out so the server reports them. */\nexport function answersOf(fields: RequirementFormField[], values: FormValues): RequirementFormAnswers {\n const answers: RequirementFormAnswers = {};\n for (const field of fields) {\n const value = values[field.key];\n if (field.type === 'checkbox') {\n answers[field.key] = value === true;\n } else if (field.type === 'multiselect') {\n if (Array.isArray(value) && value.length) answers[field.key] = value;\n } else if (typeof value === 'string' && value.trim()) {\n answers[field.key] = field.type === 'number' ? Number(value) : value.trim();\n }\n }\n return answers;\n}\n\nconst MESSAGES: Record<FormLanguage, Record<string, string>> = {\n en: {\n required: 'This field is required.',\n invalid_type: 'This value is not valid.',\n invalid_option: 'Choose one of the options.',\n too_long: 'This is too long.',\n too_small: 'This value is too small.',\n too_large: 'This value is too large.',\n pattern: 'This does not have the expected format.',\n invalid_format: 'This does not have the expected format.',\n },\n es: {\n required: 'Este campo es obligatorio.',\n invalid_type: 'Este valor no es válido.',\n invalid_option: 'Elige una de las opciones.',\n too_long: 'Es demasiado largo.',\n too_small: 'Este valor es demasiado bajo.',\n too_large: 'Este valor es demasiado alto.',\n pattern: 'No tiene el formato esperado.',\n invalid_format: 'No tiene el formato esperado.',\n },\n};\n\nexport function fieldErrorMessage(code: string, language: FormLanguage): string {\n return MESSAGES[language][code] ?? MESSAGES[language].invalid_type!;\n}\n\n/** The per-field errors of a KYC_FORM_INVALID_ANSWERS error, by key; null when it names none. */\nexport function fieldErrorsOf(error: unknown): Record<string, string> | null {\n if (!error || typeof error !== 'object') return null;\n const { code, body } = error as { code?: unknown; body?: { errors?: unknown } };\n if (code !== 'KYC_FORM_INVALID_ANSWERS' || !Array.isArray(body?.errors)) return null;\n const errors: Record<string, string> = {};\n for (const item of body.errors as { key?: unknown; code?: unknown }[]) {\n if (typeof item.key === 'string' && typeof item.code === 'string') errors[item.key] = item.code;\n }\n return Object.keys(errors).length ? errors : null;\n}\n\nexport const COPY: Record<\n FormLanguage,\n Record<'title' | 'loading' | 'submit' | 'submitting' | 'close' | 'loadError' | 'submitError' | 'step', string>\n> = {\n en: {\n title: 'A few more details',\n loading: 'Loading the form…',\n submit: 'Continue',\n submitting: 'Saving…',\n close: 'Close',\n loadError: 'Could not load the form. Please try again.',\n submitError: 'Could not save your answers. Please try again.',\n step: 'Step {n} of {total}',\n },\n es: {\n title: 'Unos datos más',\n loading: 'Cargando el formulario…',\n submit: 'Continuar',\n submitting: 'Guardando…',\n close: 'Cerrar',\n loadError: 'No se pudo cargar el formulario. Intenta de nuevo.',\n submitError: 'No se pudieron guardar tus respuestas. Intenta de nuevo.',\n step: 'Paso {n} de {total}',\n },\n};\n","'use client';\n\nimport type { RequirementForm, RequirementFormField } from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport {\n answersOf,\n COPY,\n fieldErrorMessage,\n fieldErrorsOf,\n formLanguage,\n initialValues,\n localFieldError,\n localFieldErrors,\n localized,\n type FormLanguage,\n type FormValues,\n} from './form-fields';\nimport '../shared.css';\nimport './RequirementFormModal.css';\n\ninterface RequirementFormModalProps {\n formId: string;\n /** Position of this step over the route's steps, when known. */\n progress?: { position: number; total: number };\n onClose: () => void;\n /** Called once the answers are stored. */\n onSubmitted: () => void;\n}\n\nfunction FieldInput({\n field,\n value,\n language,\n disabled,\n onChange,\n onBlur,\n}: {\n field: RequirementFormField;\n value: FormValues[string];\n language: FormLanguage;\n disabled: boolean;\n onChange: (value: FormValues[string]) => void;\n onBlur: () => void;\n}) {\n const id = `pollar-form-${field.key}`;\n const text = typeof value === 'string' ? value : '';\n switch (field.type) {\n case 'select':\n return (\n <select id={id} className=\"pollar-input\" value={text} disabled={disabled} onChange={(e) => onChange(e.target.value)}>\n <option value=\"\" />\n {(field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>\n {localized(option.label, language)}\n </option>\n ))}\n </select>\n );\n case 'multiselect': {\n const selected = Array.isArray(value) ? value : [];\n return (\n <div className=\"pollar-form-choices\">\n {(field.options ?? []).map((option) => (\n <label key={option.value} className=\"pollar-form-choice\">\n <input\n type=\"checkbox\"\n checked={selected.includes(option.value)}\n disabled={disabled}\n onChange={(e) =>\n onChange(e.target.checked ? [...selected, option.value] : selected.filter((item) => item !== option.value))\n }\n />\n {localized(option.label, language)}\n </label>\n ))}\n </div>\n );\n }\n case 'textarea':\n return (\n <textarea\n id={id}\n className=\"pollar-input pollar-form-textarea\"\n value={text}\n disabled={disabled}\n maxLength={field.validation?.maxLength}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n />\n );\n default:\n return (\n <input\n id={id}\n className=\"pollar-input\"\n type={field.type === 'phone' ? 'tel' : field.type === 'text' ? 'text' : field.type}\n inputMode={field.type === 'number' ? 'decimal' : undefined}\n value={text}\n disabled={disabled}\n min={field.validation?.min}\n max={field.validation?.max}\n maxLength={field.validation?.maxLength}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n />\n );\n }\n}\n\n/** One FORM requirement step: the form a route asks for, prefilled with the user's previous answers. */\nexport function RequirementFormModal({ formId, progress, onClose, onSubmitted }: RequirementFormModalProps) {\n const { getClient, styles } = usePollar();\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n const language = useMemo(formLanguage, []);\n const copy = COPY[language];\n\n const [form, setForm] = useState<RequirementForm | null>(null);\n const [values, setValues] = useState<FormValues>({});\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n client\n .getRequirementForm(formId)\n .then((loaded) => {\n if (!mounted.current) return;\n setForm(loaded);\n setValues(initialValues(loaded.fields, loaded.answers));\n })\n .catch(() => mounted.current && setError(copy.loadError));\n // The client instance and the copy do not change while the modal is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formId]);\n\n /** Show (or clear) one field's local error; an empty value keeps what the server said. */\n function recheck(field: RequirementFormField, value: FormValues[string] | undefined, onlyIfShown: boolean) {\n if (typeof value === 'string' && !value.trim()) return;\n setFieldErrors((errors) => {\n if (onlyIfShown && !(field.key in errors)) return errors;\n const next = { ...errors };\n const error = localFieldError(field, value);\n if (error) next[field.key] = error;\n else delete next[field.key];\n return next;\n });\n }\n\n // A field is checked when the user leaves it; once it shows an error, every keystroke rechecks it.\n function change(field: RequirementFormField, value: FormValues[string]) {\n setValues((v) => ({ ...v, [field.key]: value }));\n recheck(field, value, true);\n }\n\n function blur(field: RequirementFormField) {\n recheck(field, values[field.key], false);\n }\n\n async function submit() {\n if (!form) return;\n setError(null);\n const local = localFieldErrors(form.fields, values);\n if (Object.keys(local).length) return setFieldErrors(local);\n setSubmitting(true);\n setFieldErrors({});\n try {\n await client.submitRequirementForm(form.formId, answersOf(form.fields, values));\n if (mounted.current) onSubmitted();\n } catch (e) {\n if (!mounted.current) return;\n const byField = fieldErrorsOf(e);\n if (byField) setFieldErrors(byField);\n else setError(copy.submitError);\n } finally {\n if (mounted.current) setSubmitting(false);\n }\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-form-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={form?.name ?? copy.title}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-form-header-text\">\n <h2 className=\"pollar-modal-title\">{form?.name ?? copy.title}</h2>\n {progress && (\n <p className=\"pollar-form-subtitle\">\n {copy.step.replace('{n}', String(progress.position)).replace('{total}', String(progress.total))}\n </p>\n )}\n </div>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label={copy.close}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {error && (\n <p className=\"pollar-form-error\" role=\"alert\">\n {error}\n </p>\n )}\n\n {!form && !error && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>{copy.loading}</span>\n </div>\n )}\n\n {form && (\n <form\n className=\"pollar-form-body\"\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n >\n {form.description && <p className=\"pollar-form-description\">{form.description}</p>}\n {form.fields.map((field) => {\n const fieldError = fieldErrors[field.key];\n const help = localized(field.help, language);\n return (\n <div key={field.key} className=\"pollar-form-field\">\n {field.type === 'checkbox' ? (\n <label className=\"pollar-form-choice\">\n <input\n type=\"checkbox\"\n checked={values[field.key] === true}\n disabled={submitting}\n onChange={(e) => setValues((v) => ({ ...v, [field.key]: e.target.checked }))}\n />\n {localized(field.label, language)}\n {field.required && <span className=\"pollar-form-required\"> *</span>}\n </label>\n ) : (\n <>\n <label htmlFor={`pollar-form-${field.key}`} className=\"pollar-form-label\">\n {localized(field.label, language)}\n {field.required && <span className=\"pollar-form-required\"> *</span>}\n </label>\n <FieldInput\n field={field}\n value={values[field.key] ?? ''}\n language={language}\n disabled={submitting}\n onChange={(value) => change(field, value)}\n onBlur={() => blur(field)}\n />\n </>\n )}\n {help && <span className=\"pollar-form-help\">{help}</span>}\n {fieldError && (\n <span className=\"pollar-form-field-error\" role=\"alert\">\n {fieldErrorMessage(fieldError, language)}\n </span>\n )}\n </div>\n );\n })}\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose} disabled={submitting}>\n {copy.close}\n </button>\n <button type=\"submit\" className=\"pollar-btn-primary\" disabled={submitting}>\n {submitting ? copy.submitting : copy.submit}\n </button>\n </div>\n </form>\n )}\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { AppRequirementStep } from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport { KycModal } from './KycModal';\n\ninterface AppKycFlowProps {\n onClose: () => void;\n country?: string;\n level?: 'basic' | 'intermediate' | 'enhanced';\n /** Called once every step of the app's own KYC is complete. */\n onApproved?: () => void;\n}\n\ntype FlowState =\n | { kind: 'loading' }\n /** The app has no steps: the KYC modal lists its enabled options, as it always did. */\n | { kind: 'options' }\n | { kind: 'step'; step: AppRequirementStep }\n /** Every step was already complete on open; the KYC modal shows the verified state on the option the user passed. */\n | { kind: 'done'; providerId: string };\n\n/**\n * The app's own KYC, step by step: the user completes every step the app configured,\n * in order, and only the pending one is shown. A KYC step opens the KYC modal on its\n * option; a form step opens the form. After each one the steps are read again.\n */\nexport function AppKycFlow({ onClose, country, level, onApproved }: AppKycFlowProps) {\n const { getClient } = usePollar();\n const client = getClient();\n const [state, setState] = useState<FlowState>({ kind: 'loading' });\n const kycStepDone = useRef(false);\n // On the first read a complete flow shows its verified state; after a step it just closes.\n const firstRead = useRef(true);\n // One read at a time: development runs the mount effect twice, and the second read\n // would see the first one's `firstRead` and close the flow instead of showing it.\n const loading = useRef(false);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n /**\n * The KYC option the user holds an approval on, among the ones a step accepts. A\n * status read never opens a vendor session; opening an option the user did not pass\n * would start (and bill) one.\n */\n async function approvedOption(steps: { type: string; optionIds: string[] }[]): Promise<string | null> {\n for (const step of steps) {\n if (step.type !== 'KYC') continue;\n for (const optionId of step.optionIds) {\n const status = await client.getKycStatus(optionId).catch(() => null);\n if (status?.status === 'approved') return optionId;\n }\n }\n return null;\n }\n\n const load = useCallback(async () => {\n if (loading.current) return;\n loading.current = true;\n kycStepDone.current = false;\n try {\n const requirements = await client.getAppRequirements();\n if (!mounted.current) return;\n if (!requirements.total) return setState({ kind: 'options' });\n const first = firstRead.current;\n firstRead.current = false;\n if (requirements.next) return setState({ kind: 'step', step: requirements.next });\n onApproved?.();\n const providerId = first ? await approvedOption(requirements.steps) : null;\n if (!mounted.current) return;\n if (providerId) setState({ kind: 'done', providerId });\n else onClose();\n } catch {\n // Without the steps the modal still works as it did: it lists the enabled options.\n if (mounted.current) setState({ kind: 'options' });\n } finally {\n loading.current = false;\n }\n // The client instance and the callback are fixed while the flow is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n if (state.kind === 'loading') return null;\n\n if (state.kind === 'options') {\n return (\n <KycModal\n onClose={onClose}\n {...(country !== undefined && { country })}\n {...(level !== undefined && { level })}\n {...(onApproved !== undefined && { onApproved })}\n />\n );\n }\n\n if (state.kind === 'done') {\n return <KycModal onClose={onClose} providerId={state.providerId} {...(country !== undefined && { country })} />;\n }\n\n const { step } = state;\n const progress = { position: step.completed + 1, total: step.total };\n if (step.type === 'FORM') {\n return (\n <RequirementFormModal\n key={step.optionId}\n formId={step.optionId}\n progress={progress}\n onClose={onClose}\n onSubmitted={() => void load()}\n />\n );\n }\n // The KYC modal shows its own result; closing it after an approval moves to the next step.\n return (\n <KycModal\n key={step.optionId}\n providerId={step.optionId}\n {...(country !== undefined && { country })}\n {...(level !== undefined && { level })}\n onApproved={() => {\n kycStepDone.current = true;\n }}\n onClose={() => {\n if (kycStepDone.current) void load();\n else onClose();\n }}\n />\n );\n}\n","import { useRef, useState } from 'react';\n\ninterface EmailCodeInputProps {\n email?: string;\n onSubmit: (code: string) => void;\n}\n\nexport function EmailCodeInput({ email, onSubmit }: EmailCodeInputProps) {\n const [digits, setDigits] = useState(['', '', '', '', '', '']);\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n function submit(next: string[]) {\n if (next.every(Boolean)) onSubmit(next.join(''));\n }\n\n function handleChange(index: number, value: string) {\n const cleaned = value.replace(/\\D/g, '').slice(-1);\n const next = digits.map((d, i) => (i === index ? cleaned : d));\n setDigits(next);\n if (cleaned && index < 5) inputRefs.current[index + 1]?.focus();\n submit(next);\n }\n\n function handleKeyDown(index: number, e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Backspace' && !digits[index] && index > 0) {\n inputRefs.current[index - 1]?.focus();\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLInputElement>) {\n e.preventDefault();\n const text = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n const next = Array.from({ length: 6 }, (_, i) => text[i] ?? '');\n setDigits(next);\n inputRefs.current[Math.min(text.length - 1, 5)]?.focus();\n submit(next);\n }\n\n return (\n <div className=\"pollar-code-section\">\n <p className=\"pollar-code-label\">Enter the 6-digit code sent to {email ? <strong>{email}</strong> : 'your email'}</p>\n <div className=\"pollar-code-inputs\">\n {digits.map((digit, i) => (\n <input\n key={i}\n ref={(el) => {\n inputRefs.current[i] = el;\n }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={2}\n value={digit}\n className=\"pollar-code-input\"\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n />\n ))}\n </div>\n </div>\n );\n}\n","// https://brand.github.com/foundations/logo\nimport './GithubButton.css';\n\nexport const GithubButton = ({ disabled, onClick }: { disabled: boolean; onClick: () => void }) => {\n return (\n <button className=\"pollar-github-button\" disabled={disabled} onClick={onClick}>\n <svg className=\"pollar-github-button-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden>\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"pollar-github-button-contents\">GitHub</span>\n </button>\n );\n};\n","// https://developers.google.com/identity/branding-guidelines\nimport './GoogleButton.css';\n\nexport const GoogleButton = ({ disabled, onClick }: { disabled: boolean; onClick: () => void }) => {\n return (\n <button className=\"pollar-gsi-material-button\" disabled={disabled} onClick={onClick}>\n <div className=\"pollar-gsi-material-button-state\"></div>\n <div className=\"pollar-gsi-material-button-content-wrapper\">\n <div className=\"pollar-gsi-material-button-icon\">\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" style={{ display: 'block' }}>\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n ></path>\n <path\n fill=\"#4285F4\"\n d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"\n ></path>\n <path\n fill=\"#FBBC05\"\n d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"\n ></path>\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n ></path>\n <path fill=\"none\" d=\"M0 0h48v48H0z\"></path>\n </svg>\n </div>\n <span className=\"pollar-gsi-material-button-contents\">Google</span>\n <span style={{ display: 'none' }}>Google</span>\n </div>\n </button>\n );\n};\n","'use client';\n\nimport { AUTH_ERROR_CODES, AuthState, WalletId } from '@pollar/core';\n\ntype StateStatus = 'NONE' | 'LOADING' | 'SUCCESS' | 'ERROR';\nimport { useState } from 'react';\nimport { LOGO_POLLAR } from '../../constants';\nimport { ModalStatusBanner, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\nimport { EmailCodeInput } from './EmailCodeInput';\nimport { GithubButton } from './GithubButton';\nimport { GoogleButton } from './GoogleButton';\n\n// Re-exported from its old home so consumers that imported it from this module\n// (the dashboard's branding preview, among others) keep working.\nexport { buildModalCssVars } from '../modal-theme';\nexport type { ModalStyleOverrides } from '../modal-theme';\n\ntype WalletAdapterEntry = { id: WalletId; meta: { label: string; iconUrl?: string; group?: string } };\n\nfunction WalletAdapterButtons({\n walletAdapters,\n onConnect,\n isLoading,\n variant = 'list',\n}: {\n walletAdapters: WalletAdapterEntry[];\n onConnect: (id: WalletId) => void;\n isLoading: boolean;\n // 'list' -> borderless rows for inside a group sub-picker (large icon + name).\n // 'entry' -> bordered buttons that match the root-level entries (Google, Wallet,\n // Smart Wallet) so a root adapter like Privy doesn't read as bare text.\n variant?: 'list' | 'entry';\n}) {\n if (variant === 'entry') {\n return (\n <>\n {walletAdapters.map((a) => (\n <button\n key={a.id}\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-entry-btn\"\n onClick={() => onConnect(a.id)}\n >\n {a.meta.iconUrl && <img src={a.meta.iconUrl} alt={a.meta.label} className=\"pollar-wallet-icon\" />}\n {a.meta.label}\n </button>\n ))}\n </>\n );\n }\n return (\n <div className=\"pollar-wallet-list\">\n {walletAdapters.map((a) => (\n <button\n key={a.id}\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-list-btn\"\n onClick={() => onConnect(a.id)}\n >\n {a.meta.iconUrl && <img src={a.meta.iconUrl} alt={a.meta.label} className=\"pollar-wallet-list-icon\" />}\n <span className=\"pollar-wallet-list-name\">{a.meta.label}</span>\n </button>\n ))}\n </div>\n );\n}\n\nconst AUTH_STATE_MESSAGES: Record<AuthState['step'], string> = {\n idle: '',\n creating_session: 'Initializing…',\n entering_email: '',\n sending_email: 'Sending…',\n entering_code: 'Code sent — check your inbox',\n verifying_email_code: 'Verifying…',\n opening_oauth: 'Redirecting…',\n connecting_wallet: 'Connecting wallet…',\n signing_wallet_challenge: 'Confirm in your wallet…',\n wallet_not_installed: 'Wallet not installed',\n authenticating_wallet: 'Signing in with wallet…',\n creating_passkey: 'Waiting for passkey…',\n deploying_smart_account: 'Creating your wallet…',\n authenticating: 'Authenticating…',\n authenticated: 'Welcome!',\n error: '',\n};\n\nfunction authStateToStatus(step: AuthState['step']): StateStatus {\n const loading: AuthState['step'][] = [\n 'creating_session',\n 'sending_email',\n 'verifying_email_code',\n 'opening_oauth',\n 'connecting_wallet',\n 'signing_wallet_challenge',\n 'authenticating_wallet',\n 'creating_passkey',\n 'deploying_smart_account',\n 'authenticating',\n ];\n const success: AuthState['step'][] = ['authenticated', 'entering_code'];\n const error: AuthState['step'][] = ['error', 'wallet_not_installed'];\n\n if (loading.includes(step)) return 'LOADING';\n if (success.includes(step)) return 'SUCCESS';\n if (error.includes(step)) return 'ERROR';\n return 'NONE';\n}\n\ninterface LoginModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n logoUrl: string | null;\n emailEnabled: boolean;\n embeddedWallets: boolean;\n /** Show the \"Smart Wallet\" (passkey) option. Optional & defaults to off so\n * adding it isn't a breaking change for existing template consumers. */\n smartWallet?: boolean;\n providers: {\n google: boolean;\n discord: boolean;\n x: boolean;\n github: boolean;\n apple: boolean;\n };\n /** Registered wallet adapters to render as buttons (Freighter, Albedo, Privy, ...). */\n walletAdapters: WalletAdapterEntry[];\n appName: string;\n email?: string;\n onEmailChange?: (email: string) => void;\n onEmailSubmit?: () => void;\n onSocialLogin?: (provider: 'google' | 'github') => void;\n onWalletConnect?: (id: WalletId) => void;\n /** Log in with an existing passkey (returning user). */\n onLoginSmartWallet?: () => void;\n /** Create a new passkey + smart wallet (new user). */\n onCreateSmartWallet?: () => void;\n authState: AuthState;\n codeInputKey?: number;\n onCodeSubmit?: (code: string) => void;\n onBack: () => void;\n onCancel: () => void;\n onRetry: () => void;\n}\n\nexport function LoginModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n logoUrl,\n emailEnabled,\n embeddedWallets,\n smartWallet = false,\n providers,\n walletAdapters,\n appName,\n email = '',\n onEmailChange,\n onEmailSubmit,\n onSocialLogin,\n onWalletConnect,\n onLoginSmartWallet,\n onCreateSmartWallet,\n authState,\n codeInputKey,\n onCodeSubmit,\n onBack,\n onCancel,\n onRetry,\n}: LoginModalTemplateProps) {\n const [showPasskeyChooser, setShowPasskeyChooser] = useState(false);\n // Which wallet group's sub-picker is open (gateway label), or null for the root view.\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const enabledSocial = Object.entries(providers).filter(([, enabled]) => enabled);\n\n // Split registered adapters into root-level buttons (no `meta.group`, e.g. Privy)\n // and gateway groups (adapters sharing a `meta.group` collapse behind one button\n // that opens a sub-picker - e.g. the Stellar Wallets Kit wallets under \"Wallet\").\n const rootAdapters = walletAdapters.filter((a) => !a.meta.group);\n const walletGroups = walletAdapters\n .filter((a) => a.meta.group)\n .reduce<{ label: string; adapters: WalletAdapterEntry[] }[]>((acc, a) => {\n const label = a.meta.group as string;\n const existing = acc.find((g) => g.label === label);\n if (existing) existing.adapters.push(a);\n else acc.push({ label, adapters: [a] });\n return acc;\n }, []);\n const activeGroupAdapters = walletGroups.find((g) => g.label === activeGroup)?.adapters ?? [];\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n const status = authStateToStatus(authState.step);\n const isLoading = status === 'LOADING';\n const isEmailCodeError =\n authState.step === 'error' &&\n (authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_EXPIRED ||\n authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_INVALID);\n const awaitingEmailCode = authState.step === 'entering_code' || authState.step === 'verifying_email_code' || isEmailCodeError;\n const statusMessage = authState.step === 'error' ? authState.message : AUTH_STATE_MESSAGES[authState.step];\n\n const BackButton = ({ onClick }: { onClick: () => void }) => (\n <button type=\"button\" className=\"pollar-back-btn\" onClick={onClick} aria-label=\"Back\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n );\n\n return (\n <div className=\"pollar-modal-card pollar-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onCancel} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n <div className=\"pollar-header\">\n <div className=\"pollar-logo-wrap\">\n <img src={logoUrl ?? LOGO_POLLAR} alt=\"Logo\" className=\"pollar-logo\" />\n </div>\n <h2 className=\"pollar-title\">{appName}</h2>\n <p className=\"pollar-subtitle\">Log in or sign up</p>\n </div>\n\n {awaitingEmailCode ? (\n <>\n <BackButton onClick={onBack} />\n <EmailCodeInput key={codeInputKey} email={email} onSubmit={onCodeSubmit ?? (() => {})} />\n </>\n ) : activeGroup ? (\n <>\n <BackButton onClick={() => setActiveGroup(null)} />\n <WalletAdapterButtons\n walletAdapters={activeGroupAdapters}\n onConnect={onWalletConnect ?? (() => {})}\n isLoading={isLoading}\n />\n </>\n ) : showPasskeyChooser ? (\n <>\n <BackButton onClick={() => setShowPasskeyChooser(false)} />\n <div className=\"pollar-wallet-section\">\n <button type=\"button\" disabled={isLoading} className=\"pollar-btn-primary\" onClick={onCreateSmartWallet}>\n Create a new wallet\n </button>\n <button type=\"button\" disabled={isLoading} className=\"pollar-wallet-entry-btn\" onClick={onLoginSmartWallet}>\n Log in with an existing wallet\n </button>\n </div>\n </>\n ) : (\n <>\n {emailEnabled && (\n <div className=\"pollar-email-section\">\n <input\n type=\"email\"\n placeholder=\"you@email.com\"\n value={email}\n disabled={isLoading}\n className=\"pollar-input\"\n onChange={(e) => onEmailChange?.(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && onEmailSubmit?.()}\n />\n <button\n type=\"button\"\n disabled={isLoading || !email}\n className=\"pollar-btn-primary\"\n style={{ marginTop: '0.75rem' }}\n onClick={onEmailSubmit}\n >\n Submit\n </button>\n </div>\n )}\n\n {emailEnabled && enabledSocial.length > 0 && (\n <div className=\"pollar-divider\">\n <div className=\"pollar-divider-line\" />\n <div className=\"pollar-divider-label\">\n <span className=\"pollar-divider-text\">or continue with</span>\n </div>\n </div>\n )}\n\n {enabledSocial.length > 0 && (\n <div className=\"pollar-social-list\">\n {enabledSocial.some(([key]) => key === 'google') && (\n <GoogleButton disabled={isLoading} onClick={() => onSocialLogin?.('google')} />\n )}\n {enabledSocial.some(([key]) => key === 'github') && (\n <GithubButton disabled={isLoading} onClick={() => onSocialLogin?.('github')} />\n )}\n </div>\n )}\n\n {(embeddedWallets || smartWallet) && (\n <div className=\"pollar-wallet-section\">\n {embeddedWallets && (\n <>\n {walletGroups.map((g) => (\n <button\n key={g.label}\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-entry-btn\"\n onClick={() => setActiveGroup(g.label)}\n >\n <svg\n width=\"18\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n {g.label}\n </button>\n ))}\n {rootAdapters.length > 0 && (\n <WalletAdapterButtons\n walletAdapters={rootAdapters}\n onConnect={onWalletConnect ?? (() => {})}\n isLoading={isLoading}\n variant=\"entry\"\n />\n )}\n </>\n )}\n\n {smartWallet && (\n <button\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-entry-btn\"\n onClick={() => setShowPasskeyChooser(true)}\n >\n <svg\n width=\"18\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M16 8V6a4 4 0 00-8 0v2M5 8h14a1 1 0 011 1v10a1 1 0 01-1 1H5a1 1 0 01-1-1V9a1 1 0 011-1zm7 5v2\" />\n </svg>\n Smart Wallet\n </button>\n )}\n </div>\n )}\n </>\n )}\n\n <ModalStatusBanner\n message={statusMessage}\n status={status}\n onCancel={onCancel}\n onRetry={isEmailCodeError ? undefined : onRetry}\n />\n\n <PollarModalFooter />\n </div>\n );\n}\n\n/** Placeholder shown inside the login modal while the app config is loading, or\n * when its remote fetch failed - instead of the empty shell that renders when\n * `styles` is still the default `{}`. Mirrors the template's card chrome (logo,\n * title, footer) so the swap to the real form isn't jarring. */\nexport function LoginModalStatus({\n status,\n theme,\n accentColor,\n styleOverrides,\n logoUrl,\n appName,\n onRetry,\n onCancel,\n}: {\n status: 'loading' | 'error';\n theme: string;\n accentColor: string;\n styleOverrides?: ModalStyleOverrides;\n logoUrl: string | null;\n appName: string;\n onRetry: () => void;\n onCancel: () => void;\n}) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n return (\n <div className=\"pollar-modal-card pollar-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onCancel} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n <div className=\"pollar-header\">\n <div className=\"pollar-logo-wrap\">\n <img src={logoUrl ?? LOGO_POLLAR} alt=\"Logo\" className=\"pollar-logo\" />\n </div>\n <h2 className=\"pollar-title\">{appName}</h2>\n <p className=\"pollar-subtitle\">Log in or sign up</p>\n </div>\n\n {status === 'loading' ? (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading...</span>\n </div>\n ) : (\n <div className=\"pollar-wallet-section\">\n <p className=\"pollar-modal-error\">Could not load sign-in options. Check your connection and try again.</p>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onRetry}>\n Try again\n </button>\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport type { InteractiveAuthAdapter } from '@pollar/core';\nimport { LOGO_POLLAR } from '../../constants';\nimport { ModalStatusBanner, PollarModalFooter } from '../commons';\nimport { EmailCodeInput } from './EmailCodeInput';\nimport { GithubButton } from './GithubButton';\nimport { GoogleButton } from './GoogleButton';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\ntype StateStatus = 'NONE' | 'LOADING' | 'SUCCESS' | 'ERROR';\n\ninterface PrivyLoginSubmodalProps {\n /** The interactive adapter whose login (email/oauth) we drive. */\n adapter: InteractiveAuthAdapter;\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n logoUrl: string | null;\n appName: string;\n /** Return to the root login view. */\n onBack: () => void;\n /** Close the whole login modal. */\n onCancel: () => void;\n /** The provider login finished - hand off to `login({ provider })`. */\n onAuthenticated: () => void;\n}\n\n/**\n * Sub-modal for an {@link InteractiveAuthAdapter} (e.g. `@pollar/privy-adapter`).\n * It renders the adapter's `getAuthOptions()` (email / Google / GitHub), runs the\n * provider login by calling the adapter's methods, then signals\n * {@link PrivyLoginSubmodalProps.onAuthenticated} so the host triggers the normal\n * `login({ provider })` (which runs `connect()` + SEP-10).\n *\n * Owned by `@pollar/react`; reuses the login-modal CSS classes/vars.\n */\nexport function PrivyLoginSubmodal({\n adapter,\n theme,\n accentColor,\n styleOverrides,\n logoUrl,\n appName,\n onBack,\n onCancel,\n onAuthenticated,\n}: PrivyLoginSubmodalProps) {\n const options = useMemo(() => adapter.getAuthOptions(), [adapter]);\n const [email, setEmail] = useState('');\n const [view, setView] = useState<'root' | 'email-code'>('root');\n const [status, setStatus] = useState<StateStatus>('NONE');\n const [message, setMessage] = useState('');\n\n const isLoading = status === 'LOADING';\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n function fail(error: unknown) {\n setStatus('ERROR');\n setMessage(error instanceof Error ? error.message : 'Something went wrong. Please try again.');\n }\n\n async function handleEmailSubmit() {\n if (!email) return;\n setStatus('LOADING');\n setMessage('');\n try {\n await adapter.sendEmailCode(email);\n setStatus('SUCCESS');\n setMessage('Code sent — check your inbox');\n setView('email-code');\n } catch (error) {\n fail(error);\n }\n }\n\n async function handleCodeSubmit(code: string) {\n setStatus('LOADING');\n setMessage('Verifying…');\n try {\n await adapter.verifyEmailCode(code);\n onAuthenticated();\n } catch (error) {\n fail(error);\n }\n }\n\n async function handleOAuth(provider: 'google' | 'github') {\n setStatus('LOADING');\n setMessage('');\n try {\n // On web Privy may redirect for OAuth; completion then arrives after the\n // round-trip. Email login resolves in-session and is the robust path.\n await adapter.loginWithOAuth(provider);\n onAuthenticated();\n } catch (error) {\n fail(error);\n }\n }\n\n const BackButton = ({ onClick }: { onClick: () => void }) => (\n <button type=\"button\" className=\"pollar-back-btn\" onClick={onClick} aria-label=\"Back\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n );\n\n const showEmail = options.includes('email');\n const showGoogle = options.includes('google');\n const showGithub = options.includes('github');\n\n return (\n <div className=\"pollar-modal-card pollar-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onCancel} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n\n <div className=\"pollar-header\">\n <div className=\"pollar-logo-wrap\">\n <img src={logoUrl ?? LOGO_POLLAR} alt=\"Logo\" className=\"pollar-logo\" />\n </div>\n <h2 className=\"pollar-title\">{appName}</h2>\n <p className=\"pollar-subtitle\">{adapter.meta.label}</p>\n </div>\n\n {view === 'email-code' ? (\n <>\n <BackButton onClick={() => setView('root')} />\n <EmailCodeInput email={email} onSubmit={handleCodeSubmit} />\n </>\n ) : (\n <>\n <BackButton onClick={onBack} />\n {showEmail && (\n <div className=\"pollar-email-section\">\n <input\n type=\"email\"\n placeholder=\"you@email.com\"\n value={email}\n disabled={isLoading}\n className=\"pollar-input\"\n onChange={(e) => setEmail(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleEmailSubmit()}\n />\n <button\n type=\"button\"\n disabled={isLoading || !email}\n className=\"pollar-btn-primary\"\n style={{ marginTop: '0.75rem' }}\n onClick={handleEmailSubmit}\n >\n Submit\n </button>\n </div>\n )}\n\n {showEmail && (showGoogle || showGithub) && (\n <div className=\"pollar-divider\">\n <div className=\"pollar-divider-line\" />\n <div className=\"pollar-divider-label\">\n <span className=\"pollar-divider-text\">or continue with</span>\n </div>\n </div>\n )}\n\n {(showGoogle || showGithub) && (\n <div className=\"pollar-social-list\">\n {showGoogle && <GoogleButton disabled={isLoading} onClick={() => handleOAuth('google')} />}\n {showGithub && <GithubButton disabled={isLoading} onClick={() => handleOAuth('github')} />}\n </div>\n )}\n </>\n )}\n\n <ModalStatusBanner message={message} status={status} onCancel={onCancel} onRetry={undefined} />\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport {\n AUTH_ERROR_CODES,\n AuthState,\n InteractiveAuthAdapter,\n isInteractiveAuthAdapter,\n PollarLoginOptions,\n WalletId,\n} from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { modalChrome } from '../modal-theme';\nimport { LoginModalStatus, LoginModalTemplate } from './LoginModalTemplate';\nimport { PrivyLoginSubmodal } from './PrivyLoginSubmodal';\nimport '../shared.css';\nimport './LoginModal.css';\n\ntype TimeoutHandle = ReturnType<typeof setTimeout>;\n\ninterface LoginModalProps {\n onClose: () => void;\n}\n\nexport function LoginModal({ onClose }: LoginModalProps) {\n const [email, setEmail] = useState('');\n const { getClient, styles, appConfig: config, configStatus, retryConfig } = usePollar();\n const [authState, setAuthState] = useState<AuthState>(() => getClient().getAuthState());\n // Registered wallet adapters (built-ins + config) -> one login button each.\n const walletAdapters = useMemo(() => getClient().listWalletAdapters(), [getClient]);\n const [codeInputKey, setCodeInputKey] = useState(0);\n const pendingEmail = useRef<string | null>(null);\n // When set, an interactive adapter (e.g. Privy) takes over the modal with its\n // own login sub-view instead of going straight to login({ provider }).\n const [interactiveAdapter, setInteractiveAdapter] = useState<InteractiveAuthAdapter | null>(null);\n\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const autoCloseTimer = useRef<TimeoutHandle | null>(null);\n\n useEffect(() => {\n const unsubscribe = getClient().onAuthStateChange((next) => {\n setAuthState(next);\n if (next.step === 'entering_email' && pendingEmail.current) {\n getClient().sendEmailCode(pendingEmail.current);\n pendingEmail.current = null;\n }\n if (next.step === 'error' && next.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_INVALID) {\n setCodeInputKey((k) => k + 1);\n }\n if (next.step === 'authenticated') {\n // Clear any timer already pending - if `authenticated` fires more than\n // once, overwriting the handle would orphan the previous timeout\n // (cleanup only tracks the latest).\n if (autoCloseTimer.current !== null) {\n clearTimeout(autoCloseTimer.current);\n }\n autoCloseTimer.current = setTimeout(() => {\n autoCloseTimer.current = null;\n onCloseRef.current();\n }, 1000);\n }\n });\n return () => {\n unsubscribe();\n if (autoCloseTimer.current !== null) {\n clearTimeout(autoCloseTimer.current);\n autoCloseTimer.current = null;\n }\n };\n }, [getClient]);\n\n const { logoUrl, emailEnabled, embeddedWallets, smartWallet, providers } = styles;\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n // Opt-in: the Smart Wallet (passkey) option only shows when the dashboard\n // explicitly enables it. Absent -> hidden.\n const smartWalletEnabled = smartWallet ?? false;\n // The heading is the app's name unless Branding set a custom one. Blank counts\n // as unset, which is what the dashboard sends when the field is cleared.\n const modalTitle = styles.modalTitle?.trim() || config.application?.name || 'Pollar';\n\n function handleClose() {\n setEmail('');\n getClient().cancelLogin();\n onClose();\n }\n\n function handleEmailSubmit() {\n if (!email) return;\n pendingEmail.current = email;\n getClient().beginEmailLogin();\n }\n\n function handleSocialLogin(provider: 'google' | 'github') {\n getClient().login({ provider });\n }\n\n function handleWalletConnect(type: WalletId) {\n // Interactive adapters (e.g. Privy) drive their own multi-step login that we\n // render as a sub-modal; open it instead of going straight to login().\n const adapter = getClient().getWalletAdapter(type);\n if (isInteractiveAuthAdapter(adapter)) {\n setInteractiveAdapter(adapter);\n return;\n }\n // Any other registered wallet adapter (freighter/albedo/swk...). The adapter\n // opens its own connect/auth UI; the SDK wraps the generic SEP-10 flow.\n getClient().login({ provider: type } as PollarLoginOptions);\n }\n\n function handleLoginSmartWallet() {\n getClient().loginSmartWallet();\n }\n\n function handleCreateSmartWallet() {\n getClient().createSmartWallet();\n }\n\n function handleVerifyCode(code: string) {\n getClient().verifyEmailCode(code);\n }\n\n function handleBack() {\n setEmail('');\n getClient().cancelLogin();\n }\n\n function handleRetry() {\n getClient().logout();\n if (styles.emailEnabled) {\n getClient().beginEmailLogin();\n }\n }\n\n function handleInteractiveAuthenticated() {\n const provider = interactiveAdapter?.type;\n setInteractiveAdapter(null);\n if (provider) {\n // Provider login (Privy) is done; run the normal flow so connect() + SEP-10\n // execute against the now-authenticated wallet.\n getClient().login({ provider } as PollarLoginOptions);\n }\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={handleClose}>\n {configStatus !== 'ready' ? (\n <LoginModalStatus\n status={configStatus === 'error' ? 'error' : 'loading'}\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n logoUrl={logoUrl ?? null}\n appName={modalTitle}\n onRetry={retryConfig}\n onCancel={handleClose}\n />\n ) : interactiveAdapter ? (\n <PrivyLoginSubmodal\n adapter={interactiveAdapter}\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n logoUrl={logoUrl ?? null}\n appName={modalTitle}\n onBack={() => setInteractiveAdapter(null)}\n onCancel={handleClose}\n onAuthenticated={handleInteractiveAuthenticated}\n />\n ) : (\n <LoginModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n logoUrl={logoUrl ?? null}\n emailEnabled={!!emailEnabled}\n embeddedWallets={!!embeddedWallets}\n smartWallet={smartWalletEnabled}\n providers={{\n google: !!providers?.google,\n discord: !!providers?.discord,\n x: !!providers?.x,\n github: !!providers?.github,\n apple: !!providers?.apple,\n }}\n walletAdapters={walletAdapters}\n appName={modalTitle}\n email={email}\n onEmailChange={setEmail}\n onEmailSubmit={handleEmailSubmit}\n onSocialLogin={handleSocialLogin}\n onWalletConnect={handleWalletConnect}\n onLoginSmartWallet={handleLoginSmartWallet}\n onCreateSmartWallet={handleCreateSmartWallet}\n authState={authState}\n codeInputKey={codeInputKey}\n onCodeSubmit={handleVerifyCode}\n onBack={handleBack}\n onCancel={handleClose}\n onRetry={handleRetry}\n />\n )}\n </div>\n );\n}\n","import type { RampQuoteRequirement } from '@pollar/core';\nimport { kycReviewMessage } from '../kyc-modal/kyc-messages';\n\n/**\n * A requirement step the user must complete before a route: a KYC option, a form, a\n * registry option, or (for PROVIDER_REGISTRATION) the registration of `corridorId`.\n */\nexport type PendingRequirement = {\n rampProviderId: string;\n corridorId: string;\n type: 'KYC' | 'FORM' | 'REGISTRY_CHECK' | 'PROVIDER_REGISTRATION';\n optionId: string;\n /** Known when it comes from the quote; the start gate does not say. */\n progress?: { position: number; total: number };\n};\n\nconst nonEmpty = (value: unknown): value is string => typeof value === 'string' && !!value.trim();\n\n/**\n * The step the backend's start gate names, or null for any other error. v2 says\n * `requirementType` and `optionId`; a KYC-only body names the option as `kycProviderId`.\n */\nexport function requiredRampKyc(error: unknown): PendingRequirement | null {\n if (!error || typeof error !== 'object') return null;\n const { code, body } = error as { code?: unknown; body?: unknown };\n if (code !== 'SDK_RAMPS_KYC_REQUIRED' || !body || typeof body !== 'object') return null;\n const { rampProviderId, corridorId, requirementType, optionId, kycProviderId } = body as Record<string, unknown>;\n if (!nonEmpty(rampProviderId) || !nonEmpty(corridorId)) return null;\n if (\n (requirementType === 'FORM' || requirementType === 'REGISTRY_CHECK' || requirementType === 'PROVIDER_REGISTRATION') &&\n nonEmpty(optionId)\n ) {\n return { rampProviderId, corridorId, type: requirementType, optionId };\n }\n const kyc = nonEmpty(optionId) && requirementType === 'KYC' ? optionId : kycProviderId;\n return nonEmpty(kyc) ? { rampProviderId, corridorId, type: 'KYC', optionId: kyc } : null;\n}\n\n/** The step a locked route names in the quote. */\nexport function pendingFromQuote(requirement: RampQuoteRequirement): PendingRequirement {\n return {\n rampProviderId: requirement.rampProviderId,\n corridorId: requirement.corridorId,\n type: requirement.type,\n optionId: requirement.optionId,\n progress: { position: requirement.completed + 1, total: requirement.total },\n };\n}\n\n/**\n * What a route held back by a requirement step says, and the button it offers. A verification\n * held for review (`reviewReason`) or rejected has nothing the user can do from\n * here, so those rows carry no button.\n */\nexport function lockedRouteCopy(requirement: Pick<RampQuoteRequirement, 'status' | 'reviewReason'> & { type?: string }): {\n message: string;\n action: string | null;\n} {\n if (requirement.type === 'FORM') return { message: 'Answer a few questions to see this route', action: 'Continue' };\n if (requirement.type === 'PROVIDER_REGISTRATION') {\n return { message: 'Register with the provider to see this route', action: 'Continue' };\n }\n if (requirement.type === 'REGISTRY_CHECK') {\n return requirement.status === 'pending'\n ? { message: 'Your details are under review', action: null }\n : { message: 'Confirm your details to see this route', action: 'Confirm' };\n }\n switch (requirement.status) {\n case 'expired':\n return { message: 'Your verification expired', action: 'Verify again' };\n case 'pending':\n if (!requirement.reviewReason) return { message: 'Verification in progress', action: 'Continue' };\n return {\n message:\n requirement.reviewReason === 'DUPLICATE_DOCUMENT'\n ? kycReviewMessage(requirement.reviewReason)\n : 'Your verification is under review',\n action: null,\n };\n case 'rejected':\n return { message: 'Verification was not approved', action: null };\n default:\n return { message: 'Verify your identity to see this route', action: 'Verify' };\n }\n}\n","'use client';\n\nimport type { RampQuote, RampQuoteRequirement } from '@pollar/core';\nimport { lockedRouteCopy } from './ramp-kyc';\n\ninterface RouteDisplayProps {\n quote: RampQuote;\n /** This route is the one being started - it owns the in-flight request. */\n busy?: boolean;\n /** Another route is starting, so this one is not selectable meanwhile. */\n disabled?: boolean;\n onSelect: (quote: RampQuote) => void;\n}\n\nconst RAIL_LABELS: Record<string, string> = {\n SPEI: 'SPEI (Mexico)',\n PIX: 'PIX (Brazil)',\n PSE: 'PSE (Colombia)',\n ACH: 'ACH (US)',\n};\n\nexport function RouteDisplay({ quote, busy = false, disabled = false, onSelect }: RouteDisplayProps) {\n // Picking a route fires a request that can take seconds (the provider is\n // contacted server-side). Without this the card looked inert and the only\n // hint that anything happened was the network tab.\n const inert = busy || disabled;\n const select = () => {\n if (!inert) onSelect(quote);\n };\n return (\n <div\n className=\"pollar-ramp-route-card\"\n data-recommended={quote.recommended}\n data-busy={busy || undefined}\n data-disabled={disabled || undefined}\n role=\"button\"\n aria-busy={busy}\n aria-disabled={inert}\n tabIndex={inert ? -1 : 0}\n onClick={select}\n onKeyDown={(e) => e.key === 'Enter' && select()}\n >\n <div className=\"pollar-ramp-route-left\">\n <span className=\"pollar-ramp-route-provider\">{quote.provider}</span>\n <span className=\"pollar-ramp-route-meta\">\n {busy ? 'Starting…' : `${RAIL_LABELS[quote.rail] ?? quote.rail} · ${quote.protocol} · ${quote.estimatedTime}`}\n </span>\n </div>\n <div className=\"pollar-ramp-route-right\">\n {busy ? (\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n ) : (\n <>\n <span className=\"pollar-ramp-route-fee\">{quote.fee}% fee</span>\n {quote.recommended && <span className=\"pollar-ramp-route-badge\">Best rate</span>}\n </>\n )}\n </div>\n </div>\n );\n}\n\ninterface LockedRouteDisplayProps {\n requirement: RampQuoteRequirement;\n /** A route is starting, so verification cannot be opened meanwhile. */\n disabled?: boolean;\n onVerify: (requirement: RampQuoteRequirement) => void;\n}\n\n/** A route the backend did not quote because its corridor has a requirement step the user has not completed. */\nexport function LockedRouteDisplay({ requirement, disabled = false, onVerify }: LockedRouteDisplayProps) {\n const { message, action } = lockedRouteCopy(requirement);\n return (\n <div\n className=\"pollar-ramp-route-card\"\n data-locked\n data-kyc-status={requirement.status}\n data-disabled={disabled || undefined}\n >\n <div className=\"pollar-ramp-route-left\">\n <span className=\"pollar-ramp-route-provider\">{requirement.provider}</span>\n <span className=\"pollar-ramp-route-meta\">{message}</span>\n </div>\n {action && (\n <div className=\"pollar-ramp-route-right\">\n <button\n type=\"button\"\n className=\"pollar-btn-secondary pollar-ramp-route-verify\"\n disabled={disabled}\n onClick={() => onVerify(requirement)}\n >\n {action}\n </button>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport type {\n RampCountry,\n RampDepositInstructions,\n RampDirection,\n RampInstructionField,\n RampQuote,\n RampQuoteRequirement,\n RampScannable,\n RampTxStatus,\n} from '@pollar/core';\nimport { LockedRouteDisplay, RouteDisplay } from './RouteDisplay';\nimport { CopyButton, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport type RampStep = 'input' | 'loading_quote' | 'select_route' | 'contact' | 'status' | 'error';\n\n// Basic client-side email check so an invalid address never round-trips to the\n// provider (which rejects it with a generic VALIDATION_ERROR).\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/**\n * A collected field is complete when it's non-empty and (for email) well-formed.\n * An `optional` field is complete while blank, but still has to be well-formed\n * once something is typed into it.\n */\nfunction isFieldValid(spec: RampFieldSpec, raw: string | undefined): boolean {\n const value = (raw ?? '').trim();\n if (!value) return spec.optional === true;\n if (spec.type === 'email') return EMAIL_RE.test(value);\n return true;\n}\n\n/**\n * The `src` for a scannable that is not inline-safe. `encoding` and `inlineSafe`\n * are independent in the contract: an SVG a provider sent (so not inline-safe)\n * still arrives as `utf8`, and base64-wrapping that text yields a data URL the\n * browser cannot decode - a blank QR on the payment screen.\n */\nfunction scannableImageSrc(image: RampScannable['image']): string {\n return image.encoding === 'base64'\n ? `data:${image.mediaType};base64,${image.data}`\n : `data:${image.mediaType};charset=utf-8,${encodeURIComponent(image.data)}`;\n}\n\n/** A field a provider declares (via the quote) that the client must collect. */\nexport interface RampFieldSpec {\n key: string;\n label: string;\n type: 'text' | 'email' | 'tel' | 'select';\n bankType?: 'CLABE' | 'PIX' | 'PSE' | 'ACH' | 'BREB';\n /** For `type: 'select'` - dropdown choices (e.g. Stereum's Bolivian banks). */\n options?: { value: string; label: string; placeholder?: string }[];\n /** Declared but not mandatory (Abroad's tax id). Blank must not block Continue. */\n optional?: boolean;\n /** Example of the expected shape, for formats a user cannot guess. */\n placeholder?: string;\n /**\n * Key of a sibling `select` whose chosen option supplies the placeholder. One\n * Pix field can then show a CPF mask, an email or a +55 number as the user\n * switches kind, without this component knowing what a Pix key is.\n */\n placeholderFrom?: string;\n /** Secondary line under the field, for a rule the label has no room for. */\n hint?: string;\n}\n\n/** \"a\", \"a and b\", \"a, b and c\" - for naming what a step is asking for. */\nfunction listOf(items: string[]): string {\n const last = items[items.length - 1];\n if (last === undefined) return 'a few details';\n if (items.length === 1) return last;\n return `${items.slice(0, -1).join(', ')} and ${last}`;\n}\n\n/** The placeholder to show: the one a sibling select dictates, else the static one. */\nfunction placeholderFor(field: RampFieldSpec, fields: RampFieldSpec[], values: Record<string, string>): string | undefined {\n if (field.placeholderFrom) {\n const source = fields.find((f) => f.key === field.placeholderFrom);\n const chosen = source?.options?.find((o) => o.value === values[field.placeholderFrom as string]);\n if (chosen?.placeholder) return chosen.placeholder;\n }\n return field.placeholder;\n}\n\ninterface RampWidgetTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n step: RampStep;\n /** Labels of the steps this run goes through. Length varies by route: only\n * providers that collect fields add a 'Details' step. */\n flowSteps: string[];\n /** Index into `flowSteps`, or -1 when the current step is outside the flow\n * (the error step) and the progress bar should be hidden. */\n flowStepIndex: number;\n /** Quote whose start request is in flight, so its row can show it. */\n startingQuoteId: string | null;\n direction: RampDirection;\n amount: string;\n currency: string;\n country: string;\n requiredFields: RampFieldSpec[];\n fieldValues: Record<string, string>;\n countries: RampCountry[];\n countriesLoading: boolean;\n refreshing: boolean;\n quotes: RampQuote[];\n /** Routes not quoted until the user completes the requirement step their corridor names (KYC, form, registry check or provider registration). */\n kycRequired: RampQuoteRequirement[];\n isLoading: boolean;\n // status step\n provider: string;\n txStatus: RampTxStatus | null;\n kycUrl: string | null;\n tosUrl: string | null;\n /** Provider gated the flow on KYC and published no link; nothing was signed. */\n kycBlocking: boolean;\n /**\n * Which part of provider onboarding is outstanding, when any is. Optional\n * because this template is exported for integrators who render their own\n * chrome: a required prop would break every one of them on upgrade. Omitted,\n * the gate falls back to the identity-verification wording.\n */\n onboardingStatus?: 'kyc' | 'endorsement' | 'awaiting_provider' | null;\n /** The gate has since cleared - the user needs a fresh quote to continue. */\n kycJustApproved: boolean;\n stellarTxHash: string | null;\n /** Stellar Expert URL for `stellarTxHash` (network-aware); null when unknown. */\n explorerUrl: string | null;\n depositInstructions: RampDepositInstructions | null;\n canComplete: boolean;\n completing: boolean;\n errorMsg: string | null;\n /** Neutral guidance on the route list, e.g. after identity verification sent the user back to it. */\n noticeMsg?: string | null;\n onDirectionChange: (d: RampDirection) => void;\n onAmountChange: (v: string) => void;\n onFieldChange: (key: string, value: string) => void;\n onCountryChange: (v: string) => void;\n onFindRoute: () => void;\n onSelectQuote: (q: RampQuote) => void;\n onVerifyRoute: (requirement: RampQuoteRequirement) => void;\n onContactContinue: () => void;\n onOpenKyc: () => void;\n onOpenTos: () => void;\n onCompleteWithdraw: () => void;\n /** Step back to the amount, keeping what was entered. Distinct from `onRetry`\n * (which restarts a failed flow) so a \"Back\" button reads as navigation. */\n onBack: () => void;\n onRetry: () => void;\n onRefresh: () => void;\n onClose: () => void;\n}\n\nconst LOADING_STEPS = ['Detecting your country…', 'Consulting providers…', 'Route found!'];\n\n/**\n * Flag emoji from a 2-letter ISO 3166-1 alpha-2 country code by mapping each\n * letter to its Regional Indicator Symbol code point (U+1F1E6 = 'A'). Returns an\n * empty string for anything that isn't a pair of ASCII letters.\n */\nfunction flagEmoji(code: string): string {\n const cc = code.trim().toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) return '';\n const base = 0x1f1e6;\n return String.fromCodePoint(base + (cc.charCodeAt(0) - 65), base + (cc.charCodeAt(1) - 65));\n}\n\nconst STATUS_LABEL: Record<RampTxStatus, string> = {\n pending: 'Pending',\n processing: 'Processing',\n completed: 'Completed',\n failed: 'Failed',\n};\n\n/**\n * A timestamp field arrives as ISO-8601; render it in the viewer's locale.\n * Anything unparseable falls back to the raw string rather than showing\n * \"Invalid Date\".\n */\nfunction displayValue(field: RampInstructionField): string {\n if (field.type !== 'datetime') return field.value;\n const at = new Date(field.value);\n return Number.isNaN(at.getTime()) ? field.value : at.toLocaleString();\n}\n\nexport function RampWidgetTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n flowSteps,\n flowStepIndex,\n startingQuoteId,\n direction,\n amount,\n currency,\n country,\n requiredFields,\n fieldValues,\n countries,\n countriesLoading,\n refreshing,\n quotes,\n kycRequired,\n isLoading,\n provider,\n txStatus,\n kycUrl,\n tosUrl,\n kycBlocking,\n onboardingStatus,\n kycJustApproved,\n stellarTxHash,\n explorerUrl,\n depositInstructions,\n canComplete,\n completing,\n errorMsg,\n noticeMsg,\n onDirectionChange,\n onAmountChange,\n onFieldChange,\n onCountryChange,\n onFindRoute,\n onSelectQuote,\n onVerifyRoute,\n onContactContinue,\n onOpenKyc,\n onOpenTos,\n onCompleteWithdraw,\n onBack,\n onRetry,\n onRefresh,\n onClose,\n}: RampWidgetTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n const stepTitle: Record<RampStep, string> = {\n input: direction === 'onramp' ? 'Buy crypto' : 'Sell crypto',\n loading_quote: 'Finding best route',\n select_route: 'Select provider',\n contact: 'Your details',\n status: direction === 'onramp' ? 'Complete your deposit' : 'Complete your withdrawal',\n error: 'Something went wrong',\n };\n\n const stepSubtitle: Record<RampStep, string> = {\n input: direction === 'onramp' ? 'Enter the amount you want to deposit' : 'Enter the amount you want to withdraw',\n loading_quote: 'Comparing providers in real time…',\n select_route: 'All prices include fees',\n // What this step actually asks for is whatever the route declared, and that\n // is rarely a name and an email: an Abroad off-ramp asks where to send the\n // money, not who you are. Say which, rather than asserting the Bridge case\n // over every provider.\n contact: `${provider || 'This provider'} needs ${listOf(requiredFields.filter((f) => !f.optional).map((f) => f.label.toLowerCase()))} to continue`,\n status: `Finish the flow at ${provider || 'the provider'} to continue`,\n error: 'Please try again',\n };\n\n return (\n <div className=\"pollar-modal-card pollar-ramp-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-ramp-header-text\">\n <h2 className=\"pollar-modal-title\">{stepTitle[step]}</h2>\n <p className=\"pollar-ramp-subtitle\">{stepSubtitle[step]}</p>\n </div>\n <div className=\"pollar-modal-header-actions\">\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onRefresh} disabled={refreshing} aria-label=\"Refresh\">\n <svg\n className={refreshing ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* How far along the run is. The segment count comes from the route, not\n from a constant: a provider that collects no fields genuinely has one\n step fewer. Hidden on the error step, which is not part of the flow. */}\n {flowStepIndex >= 0 && flowSteps.length > 0 && (\n <div className=\"pollar-ramp-steps\">\n <span className=\"pollar-ramp-steps-label\">\n Step {flowStepIndex + 1} of {flowSteps.length}\n </span>\n <div\n className=\"pollar-ramp-steps-track\"\n role=\"progressbar\"\n aria-valuenow={flowStepIndex + 1}\n aria-valuemin={1}\n aria-valuemax={flowSteps.length}\n aria-label={flowSteps[flowStepIndex]}\n >\n {flowSteps.map((label, i) => (\n <span key={label} className=\"pollar-ramp-steps-segment\" data-done={i <= flowStepIndex || undefined} />\n ))}\n </div>\n </div>\n )}\n\n {step === 'input' && (\n <>\n <div className=\"pollar-tabs\">\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={direction === 'onramp'}\n onClick={() => onDirectionChange('onramp')}\n >\n Buy\n </button>\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={direction === 'offramp'}\n onClick={() => onDirectionChange('offramp')}\n >\n Sell\n </button>\n </div>\n\n <div className=\"pollar-ramp-field\">\n <label className=\"pollar-ramp-label\">Country</label>\n {countriesLoading ? (\n <div className=\"pollar-ramp-input pollar-select-loading\">\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n <span>Loading countries…</span>\n </div>\n ) : countries.length === 0 ? (\n <div className=\"pollar-modal-error\">No ramp providers available on this network yet.</div>\n ) : (\n <select className=\"pollar-ramp-input\" value={country} onChange={(e) => onCountryChange(e.target.value)}>\n {countries.map((c) => (\n <option key={c.code} value={c.code}>\n {flagEmoji(c.code)} {c.code}\n {c.currency ? ` — ${c.currency}` : ''}\n </option>\n ))}\n </select>\n )}\n </div>\n\n <div className=\"pollar-ramp-field\">\n <label className=\"pollar-ramp-label\">Amount{currency ? ` (${currency})` : ''}</label>\n <input\n type=\"number\"\n className=\"pollar-ramp-input\"\n placeholder=\"0.00\"\n value={amount}\n min=\"0\"\n onChange={(e) => onAmountChange(e.target.value)}\n />\n {/* Why the user was sent back here (e.g. the route's minimum), kept\n under the field they came to fix. Clears as soon as they type. */}\n {errorMsg && <span className=\"pollar-ramp-field-error\">{errorMsg}</span>}\n </div>\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n disabled={!amount || isLoading || countriesLoading || countries.length === 0}\n onClick={onFindRoute}\n >\n Find best route\n </button>\n </div>\n </>\n )}\n\n {step === 'loading_quote' && (\n <div className=\"pollar-ramp-loading\">\n <div className=\"pollar-spinner pollar-ramp-loading-spinner\" />\n {LOADING_STEPS.map((text, i) => (\n <div key={i} className=\"pollar-ramp-loading-row\">\n <div className=\"pollar-ramp-loading-dot\" />\n <span>{text}</span>\n </div>\n ))}\n </div>\n )}\n\n {step === 'select_route' && (\n <>\n {noticeMsg && <p className=\"pollar-ramp-payment-note\">{noticeMsg}</p>}\n <div className=\"pollar-ramp-route-list\">\n {quotes.map((q, i) => (\n <RouteDisplay\n key={i}\n quote={q}\n busy={startingQuoteId != null && q.quoteId === startingQuoteId}\n disabled={startingQuoteId != null && q.quoteId !== startingQuoteId}\n onSelect={onSelectQuote}\n />\n ))}\n {kycRequired.map((r) => (\n <LockedRouteDisplay\n key={`${r.rampProviderId}:${r.corridorId}`}\n requirement={r}\n disabled={startingQuoteId != null}\n onVerify={onVerifyRoute}\n />\n ))}\n </div>\n {/* A route whose limits the amount breaks reports it here, so the user\n can pick another route or go back and edit - without leaving the\n list for the error step. */}\n {errorMsg && (\n <p className=\"pollar-ramp-payment-note\" style={{ color: 'var(--pollar-error-text)' }}>\n {errorMsg}\n </p>\n )}\n {/* Back returns to the amount, which is the only way out of a route\n whose minimum the amount misses - so it takes the primary weight\n while that message is up. The header's X still closes the modal. */}\n <button type=\"button\" className={errorMsg ? 'pollar-btn-primary' : 'pollar-btn-secondary'} onClick={onBack}>\n Back\n </button>\n </>\n )}\n\n {step === 'contact' && (\n <>\n {requiredFields.map((f) => (\n <div key={f.key} className=\"pollar-ramp-field\">\n <label className=\"pollar-ramp-label\">\n {f.label}\n {f.optional && <span className=\"pollar-ramp-field-optional\"> (optional)</span>}\n </label>\n {f.type === 'select' ? (\n <select\n className=\"pollar-ramp-input\"\n value={fieldValues[f.key] ?? ''}\n onChange={(e) => onFieldChange(f.key, e.target.value)}\n >\n <option value=\"\" disabled>\n Select…\n </option>\n {(f.options ?? []).map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n type={f.type}\n className=\"pollar-ramp-input\"\n value={fieldValues[f.key] ?? ''}\n placeholder={placeholderFor(f, requiredFields, fieldValues)}\n autoComplete={f.type === 'email' ? 'email' : 'off'}\n onChange={(e) => onFieldChange(f.key, e.target.value)}\n />\n )}\n {f.hint && <span className=\"pollar-ramp-field-hint\">{f.hint}</span>}\n {f.type === 'email' && (fieldValues[f.key] ?? '').trim() !== '' && !isFieldValid(f, fieldValues[f.key]) && (\n <span className=\"pollar-ramp-field-error\">Enter a valid email address.</span>\n )}\n </div>\n ))}\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onBack}>\n Back\n </button>\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n disabled={requiredFields.some((f) => !isFieldValid(f, fieldValues[f.key])) || isLoading}\n onClick={onContactContinue}\n >\n {isLoading ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Starting…\n </>\n ) : (\n 'Continue'\n )}\n </button>\n </div>\n </>\n )}\n\n {step === 'status' && (\n <div className=\"pollar-ramp-payment\">\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Provider</span>\n <div className=\"pollar-ramp-payment-value\">\n <code>{provider}</code>\n </div>\n </div>\n\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Status</span>\n <div className=\"pollar-ramp-payment-value\">\n <code style={{ color: txStatus === 'completed' ? 'var(--pollar-success-text)' : undefined }}>\n {txStatus ? STATUS_LABEL[txStatus] : 'Processing'}\n </code>\n {txStatus !== 'completed' && txStatus !== 'failed' && (\n <span className=\"pollar-spinner pollar-spinner-sm\" aria-label=\"Checking status\" />\n )}\n </div>\n </div>\n\n {stellarTxHash && (\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Stellar tx</span>\n <div className=\"pollar-ramp-payment-value\" style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <code style={{ flex: 1, wordBreak: 'break-all' }}>\n {stellarTxHash.slice(0, 8)}…{stellarTxHash.slice(-8)}\n </code>\n <CopyButton value={stellarTxHash} label=\"Copy transaction hash\" />\n {explorerUrl && (\n <a\n href={explorerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"pollar-copy-btn\"\n aria-label=\"View on Stellar Expert\"\n title=\"View on Stellar Expert\"\n >\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path\n d=\"M6 3H3v8h8V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.5 2.5h3v3M11 3L6.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </a>\n )}\n </div>\n </div>\n )}\n\n {/* The code to scan. The server sends it rendered, so there is no QR\n library here and no per-provider branch: a Pollar-made SVG is\n inlined (it uses `currentColor`, so it follows the modal's theme),\n and a provider's own bitmap goes through an <img>. */}\n {depositInstructions?.scannable && txStatus !== 'completed' && (\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Payment QR</span>\n <div className=\"pollar-ramp-payment-value\">\n {depositInstructions.scannable.image.inlineSafe ? (\n <div\n className=\"pollar-ramp-qr\"\n aria-label=\"Payment QR\"\n dangerouslySetInnerHTML={{ __html: depositInstructions.scannable.image.data }}\n />\n ) : (\n <img\n src={scannableImageSrc(depositInstructions.scannable.image)}\n alt=\"Payment QR\"\n style={{ width: '100%', maxWidth: 220, height: 'auto', display: 'block', margin: '0 auto' }}\n />\n )}\n </div>\n </div>\n )}\n\n {/* The payload as text, when it is worth pasting. On the phone holding\n the screen there is nothing to scan, and a Pix code is designed to\n be pasted. The server decides by setting `payloadLabel`. */}\n {depositInstructions?.scannable?.payload &&\n depositInstructions.scannable.payloadLabel &&\n txStatus !== 'completed' && (\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">{depositInstructions.scannable.payloadLabel}</span>\n <div className=\"pollar-ramp-payment-value\">\n <span style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <code style={{ flex: 1, wordBreak: 'break-all' }}>{depositInstructions.scannable.payload}</code>\n <CopyButton\n value={depositInstructions.scannable.payload}\n label={`Copy ${depositInstructions.scannable.payloadLabel}`}\n />\n </span>\n </div>\n </div>\n )}\n\n {/* Everything else. Labelled and formatted server-side, so this only\n iterates - it knows nothing about which provider served the route. */}\n {depositInstructions &&\n txStatus !== 'completed' &&\n depositInstructions.fields.map((f) => (\n <div key={f.key} className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">{f.label}</span>\n <div className=\"pollar-ramp-payment-value\">\n {f.copyable ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <code style={{ flex: 1, wordBreak: 'break-all' }}>{f.value}</code>\n <CopyButton value={f.value} label={`Copy ${f.label}`} />\n </span>\n ) : f.type === 'url' ? (\n <a href={f.value} target=\"_blank\" rel=\"noopener noreferrer\">\n {f.value}\n </a>\n ) : (\n <span>{displayValue(f)}</span>\n )}\n </div>\n </div>\n ))}\n\n {/* KYC / ToS onboarding steps at the provider. Hidden once deposit\n instructions exist - by then onboarding is done and the only\n remaining action is to pay using the instructions above. */}\n {tosUrl && !depositInstructions && txStatus !== 'completed' && (\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onOpenTos}>\n Accept terms at {provider}\n </button>\n )}\n\n {kycUrl && !depositInstructions && txStatus !== 'completed' && (\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onOpenKyc}>\n Continue at {provider}\n </button>\n )}\n\n {/* Link-less gate: there is nowhere to send the user, so say what is\n blocking and keep the withdraw button out of reach. No funds have\n moved and nothing was signed.\n\n Two different situations reach this, and telling the user the wrong\n one is worse than saying nothing: `awaiting_provider` means their\n verification is already done and the provider is finishing its own\n setup, so asking them to \"complete verification\" sends them back\n through a flow that cannot change anything. */}\n {kycBlocking && onboardingStatus === 'awaiting_provider' && (\n <p className=\"pollar-ramp-payment-note\">\n {provider} is still setting up your account for this payment method. Your verification is complete and there is\n nothing left for you to do — nothing has been sent, and this will update on its own once {provider} is ready.\n </p>\n )}\n\n {kycBlocking && onboardingStatus !== 'awaiting_provider' && (\n <p className=\"pollar-ramp-payment-note\">\n {provider} needs to verify your identity before this payout. Nothing has been sent yet — complete verification\n with {provider}, and this will update on its own.\n </p>\n )}\n\n {/* Approval unblocks the next quote, not this one: the provider consumed\n this transaction's quote when it asked for KYC. So the withdraw stays\n out of reach and the only way forward is a fresh quote. */}\n {kycJustApproved && (\n <>\n <p className=\"pollar-ramp-payment-note\">\n {provider} approved your verification. Request a new quote to continue — the previous one was consumed.\n </p>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onRetry}>\n Request a new quote\n </button>\n </>\n )}\n\n {canComplete && (\n <button type=\"button\" className=\"pollar-btn-primary\" disabled={completing} onClick={onCompleteWithdraw}>\n {completing ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Submitting…\n </>\n ) : (\n \"I've completed KYC — withdraw\"\n )}\n </button>\n )}\n\n {errorMsg && (\n <p className=\"pollar-ramp-payment-note\" style={{ color: 'var(--pollar-error-text)' }}>\n {errorMsg}\n </p>\n )}\n\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n {txStatus === 'completed' ? 'Done' : 'Close'}\n </button>\n </div>\n )}\n\n {step === 'error' && (\n <div className=\"pollar-ramp-payment\">\n <p className=\"pollar-ramp-payment-note\" style={{ color: 'var(--pollar-error-text)' }}>\n {errorMsg ?? 'Unexpected error.'}\n </p>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n Close\n </button>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onRetry}>\n Try again\n </button>\n </div>\n </div>\n )}\n <PollarModalFooter />\n </div>\n );\n}\n","import type { FormLanguage } from '../requirement-form-modal/form-fields';\n\ntype RegistryCopy = Record<\n | 'title'\n | 'intro'\n | 'givenNames'\n | 'surname1'\n | 'surname2'\n | 'birthdate'\n | 'documentNumber'\n | 'complement'\n | 'submit'\n | 'submitting'\n | 'close'\n | 'approved'\n | 'review'\n | 'notApplicable'\n | 'identityRequired'\n | 'nameMismatch'\n | 'rejected'\n | 'loadError'\n | 'submitError'\n | 'step',\n string\n>;\n\nexport const REGISTRY_COPY: Record<FormLanguage, RegistryCopy> = {\n en: {\n title: 'Confirm your details',\n intro:\n \"We check these details with SEGIP, Bolivia's civil registry. They come from your verified document: you can only adjust how your surnames are split and your ID complement.\",\n givenNames: 'Names',\n surname1: 'First surname',\n surname2: 'Second surname',\n birthdate: 'Date of birth',\n documentNumber: 'ID number',\n complement: 'Complement (if your ID has one)',\n submit: 'Confirm',\n submitting: 'Checking…',\n close: 'Close',\n approved: 'Your details were confirmed.',\n review: 'Your details are being reviewed. You can continue once they are confirmed.',\n notApplicable:\n 'This check is only for Bolivian ID cards (CI). Your verified document is not one, so this route is not available.',\n identityRequired: 'Verify your identity first.',\n nameMismatch: 'Both surnames together must read as on your document: {full}.',\n rejected: 'The registry did not confirm: {fields}. Check how they are written and try again.',\n loadError: 'Could not load your details. Please try again.',\n submitError: 'Could not check your details. Please try again.',\n step: 'Step {n} of {total}',\n },\n es: {\n title: 'Confirma tus datos',\n intro:\n 'Validamos estos datos con el SEGIP, el registro civil de Bolivia. Vienen de tu documento verificado: solo puedes ajustar cómo se separan tus apellidos y el complemento de tu CI.',\n givenNames: 'Nombres',\n surname1: 'Primer apellido',\n surname2: 'Segundo apellido',\n birthdate: 'Fecha de nacimiento',\n documentNumber: 'Número de CI',\n complement: 'Complemento (si tu CI lo tiene)',\n submit: 'Confirmar',\n submitting: 'Validando…',\n close: 'Cerrar',\n approved: 'Tus datos fueron confirmados.',\n review: 'Tus datos están en revisión. Podrás continuar cuando se confirmen.',\n notApplicable:\n 'Esta validación es solo para cédulas bolivianas (CI). Tu documento verificado no lo es, así que esta ruta no está disponible.',\n identityRequired: 'Primero verifica tu identidad.',\n nameMismatch: 'Los dos apellidos juntos deben leerse como en tu documento: {full}.',\n rejected: 'El registro no confirmó: {fields}. Revisa cómo están escritos e intenta de nuevo.',\n loadError: 'No se pudieron cargar tus datos. Intenta de nuevo.',\n submitError: 'No se pudieron validar tus datos. Intenta de nuevo.',\n step: 'Paso {n} de {total}',\n },\n};\n\ntype RegistrationCopy = Record<\n | 'title'\n | 'intro'\n | 'consent'\n | 'submit'\n | 'submitting'\n | 'close'\n | 'notReady'\n | 'missing'\n | 'invalid'\n | 'fix'\n | 'incomplete'\n | 'providerDown'\n | 'ipNotSupported'\n | 'emailTaken'\n | 'loadError'\n | 'submitError'\n | 'step'\n | 'terms',\n string\n>;\n\nexport const REGISTRATION_COPY: Record<FormLanguage, RegistrationCopy> = {\n en: {\n title: 'Register with the payment provider',\n intro: 'To use this route, the provider registers you as its customer. These details will be sent to it:',\n consent: 'I agree to share these details with the provider.',\n submit: 'Register',\n submitting: 'Registering…',\n close: 'Close',\n notReady: 'Complete the previous steps first.',\n missing: 'Some details are missing: {fields}.',\n invalid: 'Some details need to be corrected: {fields}.',\n fix: 'Review my details',\n incomplete: 'Your registration with the provider did not finish. Register again to complete it.',\n providerDown: 'The provider is not responding right now. Please try again in a few minutes.',\n ipNotSupported:\n 'The provider cannot accept your current connection (IPv6). Please try again from another network, for example Wi-Fi.',\n emailTaken:\n 'This email is already registered with the provider through another app. Use a different email to register here.',\n loadError: 'Could not load the registration. Please try again.',\n submitError: 'Could not register you. Please try again.',\n step: 'Step {n} of {total}',\n terms: \"Read the provider's terms of service\",\n },\n es: {\n title: 'Registro con el proveedor de pagos',\n intro: 'Para usar esta ruta, el proveedor te registra como su cliente. Se le enviarán estos datos:',\n consent: 'Acepto compartir estos datos con el proveedor.',\n submit: 'Registrarme',\n submitting: 'Registrando…',\n close: 'Cerrar',\n notReady: 'Primero completa los pasos anteriores.',\n missing: 'Faltan algunos datos: {fields}.',\n invalid: 'Hay datos que corregir: {fields}.',\n fix: 'Revisar mis datos',\n incomplete: 'Tu registro con el proveedor no se completó. Regístrate de nuevo para terminarlo.',\n providerDown: 'El proveedor no responde en este momento. Intenta de nuevo en unos minutos.',\n ipNotSupported: 'El proveedor no acepta tu conexión actual (IPv6). Intenta desde otra red, por ejemplo Wi-Fi.',\n emailTaken: 'Este email ya está registrado con el proveedor desde otra app. Usa otro email para registrarte aquí.',\n loadError: 'No se pudo cargar el registro. Intenta de nuevo.',\n submitError: 'No se pudo completar el registro. Intenta de nuevo.',\n step: 'Paso {n} de {total}',\n terms: 'Leer los términos de servicio del proveedor',\n },\n};\n\n/** The fields a registration shares, by the key the server lists them with. */\nexport const SHARED_FIELD_LABELS: Record<FormLanguage, Record<string, string>> = {\n en: {\n name: 'Names',\n lastname: 'Surnames',\n document_type: 'Document type',\n document_number: 'Document number',\n country: 'Country',\n state_of_residence: 'Department of residence',\n economic_activity: 'Economic activity',\n source_of_funds: 'Source of funds',\n destination_of_funds: 'Use of funds',\n income_level: 'Income level',\n doc_provider_id: 'SEGIP validation',\n first_name: 'First name',\n last_name: 'Last name',\n email: 'Email',\n birth_date: 'Date of birth',\n document_country: 'Document country',\n phone_country_code: 'Phone country code',\n phone_number: 'Phone number',\n occupation: 'Occupation',\n annual_salary: 'Annual income',\n account_purpose: 'Purpose of the card',\n expected_monthly_volume: 'Expected monthly spend',\n address_line1: 'Street address',\n address_line2: 'Address line 2',\n city: 'City',\n region: 'State or province',\n postal_code: 'Postal code',\n country_code: 'Country of residence',\n },\n es: {\n name: 'Nombres',\n lastname: 'Apellidos',\n document_type: 'Tipo de documento',\n document_number: 'Número de documento',\n country: 'País',\n state_of_residence: 'Departamento de residencia',\n economic_activity: 'Actividad económica',\n source_of_funds: 'Origen de los fondos',\n destination_of_funds: 'Destino de los fondos',\n income_level: 'Nivel de ingresos',\n doc_provider_id: 'Validación SEGIP',\n first_name: 'Nombres',\n last_name: 'Apellidos',\n email: 'Correo electrónico',\n birth_date: 'Fecha de nacimiento',\n document_country: 'País del documento',\n phone_country_code: 'Código de país del teléfono',\n phone_number: 'Teléfono',\n occupation: 'Ocupación',\n annual_salary: 'Ingreso anual',\n account_purpose: 'Uso de la tarjeta',\n expected_monthly_volume: 'Gasto mensual esperado',\n address_line1: 'Dirección',\n address_line2: 'Dirección (línea 2)',\n city: 'Ciudad',\n region: 'Estado o provincia',\n postal_code: 'Código postal',\n country_code: 'País de residencia',\n },\n};\n\nexport const errorCode = (error: unknown) =>\n error && typeof error === 'object' && typeof (error as { code?: unknown }).code === 'string'\n ? (error as { code: string }).code\n : null;\n\n/** `body.missing` of a KYC_REGISTRATION_MISSING_DATA error. */\nexport function missingFieldsOf(error: unknown): string[] {\n const body = error && typeof error === 'object' ? (error as { body?: { missing?: unknown } }).body : undefined;\n return Array.isArray(body?.missing) ? body.missing.filter((item): item is string => typeof item === 'string') : [];\n}\n\n/**\n * `body.invalid` and `body.forms` of a KYC_REGISTRATION_MISSING_DATA error: the\n * listed keys that have an answer the provider cannot use, and the forms that hold\n * the listed keys, to reopen.\n */\nexport function registrationFixOf(error: unknown): { invalid: string[]; forms: { formId: string; keys: string[] }[] } {\n const body =\n error && typeof error === 'object' ? (error as { body?: { invalid?: unknown; forms?: unknown } }).body : undefined;\n const strings = (value: unknown) =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n const forms = Array.isArray(body?.forms)\n ? body.forms.flatMap((item): { formId: string; keys: string[] }[] => {\n const form = item && typeof item === 'object' ? (item as { formId?: unknown; keys?: unknown }) : {};\n return typeof form.formId === 'string' ? [{ formId: form.formId, keys: strings(form.keys) }] : [];\n })\n : [];\n return { invalid: strings(body?.invalid), forms };\n}\n","'use client';\n\nimport type { RegistryCheck, RegistryCheckPrefill } from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { formLanguage } from '../requirement-form-modal/form-fields';\nimport { errorCode, REGISTRY_COPY } from './registry-copy';\nimport '../shared.css';\nimport '../requirement-form-modal/RequirementFormModal.css';\n\ninterface RegistryCheckModalProps {\n optionId: string;\n /** Position of this step over the route's steps, when known. */\n progress?: { position: number; total: number };\n onClose: () => void;\n /** Called once the registry confirmed the data. */\n onApproved: () => void;\n}\n\n/**\n * One REGISTRY_CHECK step (SEGIP): the user's verified data, prefilled and read-only\n * except for the surname split and the CI complement, sent to the registry on confirm.\n */\nexport function RegistryCheckModal({ optionId, progress, onClose, onApproved }: RegistryCheckModalProps) {\n const { getClient, styles } = usePollar();\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n const language = useMemo(formLanguage, []);\n const copy = REGISTRY_COPY[language];\n\n const [check, setCheck] = useState<RegistryCheck | null>(null);\n const [surname1, setSurname1] = useState('');\n const [surname2, setSurname2] = useState('');\n const [complement, setComplement] = useState('');\n const [error, setError] = useState<string | null>(null);\n /** Fields the registry did not confirm on the last check, outlined until the next try. */\n const [rejected, setRejected] = useState<string[]>([]);\n const [review, setReview] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n client\n .getRegistryCheck(optionId)\n .then((loaded) => {\n if (!mounted.current) return;\n if (loaded.status === 'approved') return onApproved();\n setCheck(loaded);\n if (loaded.status === 'pending') setReview(true);\n // A check the registry did not confirm on the surnames or the complement: say which, keep the form open.\n if (loaded.status === 'rejected') showRejected(loaded.rejectedFields);\n if (loaded.prefill.applies) {\n setSurname1(loaded.prefill.surname1);\n setSurname2(loaded.prefill.surname2 ?? '');\n setComplement(loaded.prefill.complementNumber ?? '');\n }\n })\n .catch((e: unknown) => {\n if (!mounted.current) return;\n setError(errorCode(e) === 'KYC_REGISTRY_IDENTITY_REQUIRED' ? copy.identityRequired : copy.loadError);\n });\n // The client instance and the copy do not change while the modal is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [optionId]);\n\n const prefill: RegistryCheckPrefill | null = check?.prefill.applies ? check.prefill : null;\n\n /** Say which fields the registry did not confirm and outline them; the form stays open. */\n function showRejected(fields: string[] | undefined) {\n const labels: Record<string, string> = {\n surname1: copy.surname1,\n surname2: copy.surname2,\n complementNumber: copy.complement,\n };\n const named = fields?.length ? fields : ['surname2'];\n setRejected(named);\n setError(copy.rejected.replace('{fields}', named.map((field) => labels[field] ?? field).join(', ')));\n }\n\n async function submit() {\n if (!prefill) return;\n setSubmitting(true);\n setError(null);\n setRejected([]);\n try {\n const result = await client.submitRegistryCheck(optionId, {\n surname1: surname1.trim(),\n ...(surname2.trim() ? { surname2: surname2.trim() } : {}),\n ...(complement.trim() ? { complementNumber: complement.trim() } : {}),\n });\n if (!mounted.current) return;\n if (result.status === 'approved') onApproved();\n else if (result.status === 'rejected') showRejected(result.rejectedFields);\n else setReview(true);\n } catch (e) {\n if (!mounted.current) return;\n const code = errorCode(e);\n // A check recorded while this screen was open (a slow answer the client gave up on) is the approval.\n if (code === 'SDK_KYC_ALREADY_APPROVED') return onApproved();\n if (code === 'KYC_REGISTRY_NAME_MISMATCH') {\n setError(copy.nameMismatch.replace('{full}', [prefill.surname1, prefill.surname2].filter(Boolean).join(' ')));\n } else if (code === 'SDK_KYC_UNDER_REVIEW') setReview(true);\n else setError(copy.submitError);\n } finally {\n if (mounted.current) setSubmitting(false);\n }\n }\n\n const readOnly = (label: string, value: string) => (\n <div className=\"pollar-form-field\">\n <span className=\"pollar-form-label\">{label}</span>\n <input className=\"pollar-input\" value={value} readOnly disabled />\n </div>\n );\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-form-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={copy.title}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-form-header-text\">\n <h2 className=\"pollar-modal-title\">{copy.title}</h2>\n {progress && (\n <p className=\"pollar-form-subtitle\">\n {copy.step.replace('{n}', String(progress.position)).replace('{total}', String(progress.total))}\n </p>\n )}\n </div>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label={copy.close}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {error && (\n <p className=\"pollar-form-error\" role=\"alert\">\n {error}\n </p>\n )}\n\n {!check && !error && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n </div>\n )}\n\n {check && (review || !prefill) && (\n <div className=\"pollar-form-body\">\n <p className=\"pollar-form-error\" role=\"status\">\n {review ? copy.review : copy.notApplicable}\n </p>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n {copy.close}\n </button>\n </div>\n </div>\n )}\n\n {prefill && !review && (\n <form\n className=\"pollar-form-body\"\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n >\n <p className=\"pollar-form-description\">{copy.intro}</p>\n {readOnly(copy.givenNames, prefill.givenNames)}\n <div className=\"pollar-form-field\">\n <label htmlFor=\"pollar-registry-surname1\" className=\"pollar-form-label\">\n {copy.surname1}\n <span className=\"pollar-form-required\"> *</span>\n </label>\n <input\n id=\"pollar-registry-surname1\"\n className=\"pollar-input\"\n value={surname1}\n required\n disabled={submitting}\n aria-invalid={rejected.includes('surname1') || undefined}\n onChange={(e) => setSurname1(e.target.value)}\n />\n </div>\n <div className=\"pollar-form-field\">\n <label htmlFor=\"pollar-registry-surname2\" className=\"pollar-form-label\">\n {copy.surname2}\n </label>\n <input\n id=\"pollar-registry-surname2\"\n className=\"pollar-input\"\n value={surname2}\n disabled={submitting}\n aria-invalid={rejected.includes('surname2') || undefined}\n onChange={(e) => setSurname2(e.target.value)}\n />\n </div>\n {readOnly(copy.birthdate, prefill.birthdate)}\n {readOnly(copy.documentNumber, prefill.documentNumber)}\n <div className=\"pollar-form-field\">\n <label htmlFor=\"pollar-registry-complement\" className=\"pollar-form-label\">\n {copy.complement}\n </label>\n <input\n id=\"pollar-registry-complement\"\n className=\"pollar-input\"\n value={complement}\n maxLength={3}\n disabled={submitting}\n aria-invalid={rejected.includes('complementNumber') || undefined}\n onChange={(e) => setComplement(e.target.value.toUpperCase().replace(/[^0-9A-Z]/g, ''))}\n />\n </div>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose} disabled={submitting}>\n {copy.close}\n </button>\n <button type=\"submit\" className=\"pollar-btn-primary\" disabled={submitting || !surname1.trim()}>\n {submitting ? copy.submitting : copy.submit}\n </button>\n </div>\n </form>\n )}\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { ProviderRegistration } from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { formLanguage } from '../requirement-form-modal/form-fields';\nimport {\n errorCode,\n missingFieldsOf,\n REGISTRATION_COPY,\n registrationFixOf,\n SHARED_FIELD_LABELS,\n} from '../registry-check-modal/registry-copy';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport '../shared.css';\nimport '../requirement-form-modal/RequirementFormModal.css';\n\ninterface ProviderRegistrationModalProps {\n /** The route whose ramp the user registers with. */\n corridorId?: string;\n /** Or the card provider. One of the two. */\n cardProviderId?: string;\n /** Position of this step over the route's steps, when known. */\n progress?: { position: number; total: number };\n onClose: () => void;\n /** Called once the user is registered with the provider. */\n onRegistered: () => void;\n}\n\n/**\n * One PROVIDER_REGISTRATION step: what the ramp provider receives, listed before the\n * user consents. Registering is the consent; nothing is sent until then.\n */\nexport function ProviderRegistrationModal({\n corridorId,\n cardProviderId,\n progress,\n onClose,\n onRegistered,\n}: ProviderRegistrationModalProps) {\n const { getClient, styles } = usePollar();\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n const language = useMemo(formLanguage, []);\n const copy = REGISTRATION_COPY[language];\n const labels = SHARED_FIELD_LABELS[language];\n\n const [registration, setRegistration] = useState<\n (Pick<ProviderRegistration, 'ready' | 'fields'> & { status: ProviderRegistration['status'] | 'incomplete' }) | null\n >(null);\n const [termsUrl, setTermsUrl] = useState<string | null>(null);\n const [consent, setConsent] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n // The form holding answers the registration could not use: reopened to fix them, then the registration is sent again.\n const [fixForm, setFixForm] = useState<string | null>(null);\n const [fixing, setFixing] = useState<string | null>(null);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n const load = cardProviderId\n ? client.getCardProviderRegistration(cardProviderId).then((loaded) => {\n setTermsUrl(loaded.termsUrl);\n return loaded;\n })\n : client.getProviderRegistration(corridorId ?? '');\n load\n .then((loaded) => {\n if (!mounted.current) return;\n if (loaded.status === 'registered') onRegistered();\n else setRegistration(loaded);\n })\n .catch(() => mounted.current && setError(copy.loadError));\n // The client instance, the copy and the callback do not change while the modal is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [corridorId, cardProviderId]);\n\n async function submit() {\n setSubmitting(true);\n setError(null);\n setFixForm(null);\n try {\n if (cardProviderId) await client.submitCardProviderRegistration(cardProviderId);\n else await client.submitProviderRegistration(corridorId ?? '');\n if (mounted.current) onRegistered();\n } catch (e) {\n if (!mounted.current) return;\n const code = errorCode(e);\n if (code === 'KYC_REGISTRATION_MISSING_DATA') {\n const fix = registrationFixOf(e);\n const named = (keys: string[]) => keys.map((key) => labels[key] ?? key).join(', ');\n const missing = missingFieldsOf(e).filter((key) => !fix.invalid.includes(key));\n setError(\n [\n fix.invalid.length ? copy.invalid.replace('{fields}', named(fix.invalid)) : null,\n missing.length ? copy.missing.replace('{fields}', named(missing)) : null,\n ]\n .filter(Boolean)\n .join(' '),\n );\n setFixForm(fix.forms[0]?.formId ?? null);\n } else if (code === 'KYC_REGISTRATION_STEPS_PENDING') setError(copy.notReady);\n else if (code === 'SDK_CARDS_PROVIDER_ERROR') setError(copy.providerDown);\n else if (code === 'SDK_CARDS_IP_NOT_SUPPORTED') setError(copy.ipNotSupported);\n else if (code === 'SDK_CARDS_PROVIDER_USER_TAKEN') setError(copy.emailTaken);\n else setError(copy.submitError);\n } finally {\n if (mounted.current) setSubmitting(false);\n }\n }\n\n if (fixing) {\n return (\n <RequirementFormModal\n formId={fixing}\n onClose={() => setFixing(null)}\n onSubmitted={() => {\n setFixing(null);\n void submit();\n }}\n />\n );\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-form-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={copy.title}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-form-header-text\">\n <h2 className=\"pollar-modal-title\">{copy.title}</h2>\n {progress && (\n <p className=\"pollar-form-subtitle\">\n {copy.step.replace('{n}', String(progress.position)).replace('{total}', String(progress.total))}\n </p>\n )}\n </div>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label={copy.close}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {error && (\n <p className=\"pollar-form-error\" role=\"alert\">\n {error}\n </p>\n )}\n {fixForm && !submitting && (\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={() => setFixing(fixForm)}>\n {copy.fix}\n </button>\n </div>\n )}\n\n {!registration && !error && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n </div>\n )}\n\n {registration && (\n <form\n className=\"pollar-form-body\"\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n >\n {registration.ready ? (\n <>\n {registration.status === 'incomplete' && (\n <p className=\"pollar-form-error\" role=\"status\">\n {copy.incomplete}\n </p>\n )}\n <p className=\"pollar-form-description\">{copy.intro}</p>\n <ul className=\"pollar-form-description\">\n {registration.fields.map((key) => (\n <li key={key}>{labels[key] ?? key}</li>\n ))}\n </ul>\n {termsUrl && (\n <p className=\"pollar-form-description\">\n <a href={termsUrl} target=\"_blank\" rel=\"noreferrer\">\n {copy.terms}\n </a>\n </p>\n )}\n <label className=\"pollar-form-choice\">\n <input\n type=\"checkbox\"\n checked={consent}\n disabled={submitting}\n onChange={(e) => setConsent(e.target.checked)}\n />\n {copy.consent}\n </label>\n </>\n ) : (\n <p className=\"pollar-form-error\" role=\"status\">\n {copy.notReady}\n </p>\n )}\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose} disabled={submitting}>\n {copy.close}\n </button>\n {registration.ready && (\n <button type=\"submit\" className=\"pollar-btn-primary\" disabled={submitting || !consent}>\n {submitting ? copy.submitting : copy.submit}\n </button>\n )}\n </div>\n </form>\n )}\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type {\n RampCountry,\n RampDepositInstructions,\n RampDirection,\n RampQuote,\n RampQuoteRequirement,\n RampsOfframpBody,\n RampsOnrampBody,\n RampTxStatus,\n} from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport type { RampFieldSpec, RampStep } from './RampWidgetTemplate';\nimport { RampWidgetTemplate } from './RampWidgetTemplate';\nimport '../shared.css';\nimport './RampWidget.css';\nimport { modalChrome } from '../modal-theme';\nimport { KycModal } from '../kyc-modal/KycModal';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport { RegistryCheckModal } from '../registry-check-modal/RegistryCheckModal';\nimport { ProviderRegistrationModal } from '../provider-registration-modal/ProviderRegistrationModal';\nimport { pendingFromQuote, requiredRampKyc, type PendingRequirement } from './ramp-kyc';\n\ninterface RampWidgetProps {\n onClose: () => void;\n}\n\nconst TERMINAL: RampTxStatus[] = ['completed', 'failed'];\n\n/** Fields the quote declares the client must collect (empty for SEP-24). */\nfunction requiredFieldsOf(quote: RampQuote): RampFieldSpec[] {\n return (quote as { requiredFields?: RampFieldSpec[] }).requiredFields ?? [];\n}\n\n/**\n * The steps a run actually goes through. Not fixed: 'Details' only exists when\n * the chosen route asks for fields (Bridge wants a name and email; SEP-24\n * anchors collect everything on their own hosted page), so a progress bar that\n * always said \"of 4\" would lie to half the providers.\n *\n * Before a route is picked the total is a forecast: if any offered route would\n * ask for details, the step is shown, and choosing one settles it.\n */\nfunction flowStepsOf(quotes: RampQuote[], selected: RampQuote | null): string[] {\n const needsDetails =\n selected != null ? requiredFieldsOf(selected).length > 0 : quotes.some((q) => requiredFieldsOf(q).length > 0);\n return needsDetails ? ['Amount', 'Provider', 'Details', 'Complete'] : ['Amount', 'Provider', 'Complete'];\n}\n\n/** Which of those steps the current widget step sits on. `error` belongs to no\n * step - the flow stopped rather than advanced - so the bar hides there. */\nconst STEP_LABEL: Partial<Record<RampStep, string>> = {\n input: 'Amount',\n loading_quote: 'Amount',\n select_route: 'Provider',\n contact: 'Details',\n status: 'Complete',\n};\n\n/** A bound the amount broke, or null when it fits. Providers declare their\n * limits on the quote (`minAmount` / `maxAmount`); the ones that don't simply\n * never trip this, and the backend stays the last word either way. */\nfunction brokenLimitOf(amount: number, quote: RampQuote): { limit: 'min' | 'max'; value: number } | null {\n const { minAmount, maxAmount } = quote as { minAmount?: number; maxAmount?: number };\n if (!Number.isFinite(amount)) return null;\n if (minAmount != null && amount < minAmount) return { limit: 'min', value: minAmount };\n if (maxAmount != null && amount > maxAmount) return { limit: 'max', value: maxAmount };\n return null;\n}\n\n/** \"The minimum amount is 11 ARS\" - one phrasing, used both when we catch the\n * limit before submitting and when the backend is the one to report it. */\nfunction limitMessage(limit: 'min' | 'max', value: number, currency: string): string {\n return `The ${limit === 'min' ? 'minimum' : 'maximum'} amount for this route is ${value} ${currency}.`;\n}\n\n/** Ramp failures a user can act on. Anything unlisted keeps the raw code, which\n * is still the most useful thing to show for a cause we can't phrase. */\nconst RAMP_ERROR_MESSAGES: Record<string, string> = {\n SDK_RAMPS_QUOTE_EXPIRED: 'This quote expired. Request a new one and try again.',\n SDK_RAMPS_ASSET_NOT_ENABLED: 'This currency is not available for that route right now.',\n SDK_RAMPS_KYC_REQUIRED: 'The provider needs to verify your identity before continuing.',\n SDK_RAMPS_WALLET_UNSUPPORTED: 'This wallet type cannot be used for this ramp.',\n SDK_RAMPS_PROVIDER_NOT_CONFIGURED: 'This ramp provider is not configured for this app yet.',\n SDK_RAMPS_ANCHOR_ERROR: 'The provider rejected the request. Please try again in a moment.',\n SDK_RAMPS_BRIDGE_ERROR: 'The provider rejected the request. Please try again in a moment.',\n SDK_RAMPS_ETHERFUSE_ERROR: 'The provider rejected the request. Please try again in a moment.',\n SDK_RAMPS_INSUFFICIENT_BALANCE: 'This wallet does not hold enough to cover that amount. Try a smaller one.',\n // Nothing moved on-chain, so the balance is untouched. Almost always no XLM\n // for the network fee on a wallet the app does not sponsor.\n SDK_RAMPS_ONCHAIN_SUBMIT_FAILED:\n 'The network rejected the transaction, so nothing was sent. The wallet may need XLM for the fee.',\n};\n\n/**\n * Turn a thrown ramp error into something worth reading. An out-of-range amount\n * arrives with the bound as fields (`limit` / `limitAmount` / `limitCurrency`),\n * so the exact figure gets stated rather than the bare code the modal used to\n * show. Every provider that reports the range gets this for free.\n */\nfunction rampErrorMessage(e: unknown, fallback: string): string {\n const body = (e as { body?: Record<string, unknown> } | undefined)?.body;\n const code = (e as { code?: unknown } | undefined)?.code;\n if (typeof code !== 'string') return e instanceof Error ? e.message : fallback;\n\n const limit = body?.limit;\n const value = body?.limitAmount;\n const currency = body?.limitCurrency;\n if ((limit === 'min' || limit === 'max') && typeof value === 'number' && typeof currency === 'string') {\n return limitMessage(limit, value, currency);\n }\n return RAMP_ERROR_MESSAGES[code] ?? (e instanceof Error ? e.message : fallback);\n}\n\n// Common shape of the on/off-ramp, complete and signature responses.\ninterface RampResult {\n txId: string;\n provider: string;\n status: RampTxStatus;\n kycUrl?: string;\n // Bridge splits onboarding into two hosted steps: KYC (identity) and ToS\n // acceptance. Both must be completed before the customer activates.\n tosUrl?: string;\n // The provider gated the flow on identity verification and offers no hosted\n // URL (Abroad, and Bridge while it provisions). Nothing was built or signed.\n kycRequired?: boolean;\n // Which part of onboarding is outstanding. `awaiting_provider` means the user\n // has nothing left to do and the provider is working through its own steps -\n // there is no page to open and no status of theirs to poll.\n onboardingStatus?: 'kyc' | 'endorsement' | 'awaiting_provider';\n stellarTxHash?: string;\n pendingSignature?: { unsignedXdr: string; action: 'sep10' | 'withdraw_payment' };\n // REST providers (Bridge) return deposit instructions as data (e.g. a Pix\n // `br_code` / bank details for on-ramp) instead of an interactive URL.\n depositInstructions?: RampDepositInstructions;\n}\n\nexport function RampWidget({ onClose }: RampWidgetProps) {\n const { getClient, signTx, wallet, styles, network } = usePollar();\n const walletAddress = wallet?.address ?? '';\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<RampStep>('input');\n const [direction, setDirection] = useState<RampDirection>('onramp');\n const [amount, setAmount] = useState('');\n const [currency, setCurrency] = useState('');\n const [country, setCountry] = useState('');\n // Values for the fields a provider declares via the quote's `requiredFields`\n // (e.g. Bridge on-ramp: full name + email; off-ramp: + Pix key). Keyed by\n // field key; only collected when the selected route needs them.\n const [fieldValues, setFieldValues] = useState<Record<string, string>>({});\n const setFieldValue = (key: string, value: string) => setFieldValues((v) => ({ ...v, [key]: value }));\n const [countries, setCountries] = useState<RampCountry[]>([]);\n const [countriesLoading, setCountriesLoading] = useState(true);\n const [refreshing, setRefreshing] = useState(false);\n const [quotes, setQuotes] = useState<RampQuote[]>([]);\n const [requirementsRequired, setRequirementsRequired] = useState<RampQuoteRequirement[]>([]);\n const [selectedQuote, setSelectedQuote] = useState<RampQuote | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [pendingKyc, setPendingKyc] = useState<PendingRequirement | null>(null);\n const [noticeMsg, setNoticeMsg] = useState<string | null>(null);\n const kycAttempt = useRef<typeof pendingKyc>(null);\n useEffect(\n () => () => {\n kycAttempt.current = null;\n },\n [],\n );\n\n // status step\n const [txId, setTxId] = useState<string | null>(null);\n const [provider, setProvider] = useState('');\n const [kycUrl, setKycUrl] = useState<string | null>(null);\n const [tosUrl, setTosUrl] = useState<string | null>(null);\n // Link-less KYC gate (Abroad): `kycPending` is what the provider told us on\n // start; `kycApproved` is what polling has since learned.\n const [kycPending, setKycPending] = useState(false);\n const [kycApproved, setKycApproved] = useState(false);\n const [onboardingStatus, setOnboardingStatus] = useState<RampResult['onboardingStatus']>(undefined);\n const [txStatus, setTxStatus] = useState<RampTxStatus | null>(null);\n const [stellarTxHash, setStellarTxHash] = useState<string | null>(null);\n const [depositInstructions, setDepositInstructions] = useState<RampDepositInstructions | null>(null);\n const [completing, setCompleting] = useState(false);\n const [errorMsg, setErrorMsg] = useState<string | null>(null);\n\n const directionRef = useRef(direction);\n directionRef.current = direction;\n\n // Poll the anchor transaction status while on the status step until terminal.\n useEffect(() => {\n if (step !== 'status' || !txId) return;\n if (txStatus && TERMINAL.includes(txStatus)) return;\n let active = true;\n const id = setInterval(async () => {\n try {\n const tx = await client.getRampTransaction(txId);\n if (!active) return;\n setTxStatus(tx.status);\n if (tx.stellarTxHash) setStellarTxHash(tx.stellarTxHash);\n if (tx.kycUrl) setKycUrl(tx.kycUrl);\n // depositInstructions is returned by REST providers (Bridge) - e.g. a Pix\n // `br_code` / bank details for on-ramp.\n if (tx.depositInstructions) setDepositInstructions(tx.depositInstructions);\n if (TERMINAL.includes(tx.status)) clearInterval(id);\n } catch {\n /* transient - keep polling */\n }\n }, 5000);\n return () => {\n active = false;\n clearInterval(id);\n };\n }, [step, txId, txStatus, client]);\n\n // A link-less KYC gate has nothing to open, so poll the provider until the user\n // clears it elsewhere. Stops as soon as it's approved.\n //\n // Not for `awaiting_provider`: that gate is not the user's verification and\n // `getRampKycStatus` answers for a different provider entirely, so polling it\n // would ask the wrong question every ten seconds and never get an answer. The\n // transaction poll above is what surfaces movement there.\n useEffect(() => {\n if (step !== 'status' || !kycPending || kycApproved) return;\n if (onboardingStatus === 'awaiting_provider') return;\n let active = true;\n const check = async () => {\n try {\n const { hasApproved } = await client.getRampKycStatus();\n if (active && hasApproved) setKycApproved(true);\n } catch {\n /* transient - keep polling */\n }\n };\n void check();\n const id = setInterval(check, 10000);\n return () => {\n active = false;\n clearInterval(id);\n };\n }, [step, kycPending, kycApproved, onboardingStatus, client]);\n\n /**\n * Fetch the ramp countries supported on the app's network. When `resetSelection`\n * is set (initial load) - or the current selection is no longer offered - pick\n * the first country and adopt its primary currency.\n */\n async function loadCountries(resetSelection: boolean) {\n setCountriesLoading(true);\n try {\n const { countries: list } = await client.getRampCountries();\n setCountries(list);\n const first = list[0];\n const stillValid = list.some((c) => c.code === country);\n if (first && (resetSelection || !stillValid)) {\n setCountry(first.code);\n if (first.currency) setCurrency(first.currency);\n }\n } catch {\n setCountries([]);\n } finally {\n setCountriesLoading(false);\n }\n }\n\n // Load the supported countries when the widget opens.\n useEffect(() => {\n loadCountries(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function handleCountryChange(code: string) {\n setCountry(code);\n const match = countries.find((c) => c.code === code);\n if (match?.currency) setCurrency(match.currency);\n }\n\n // Refresh the data backing the current step: always the country list, plus the\n // quotes (select_route) or the anchor transaction (status).\n async function handleRefresh() {\n if (refreshing) return;\n setRefreshing(true);\n try {\n await loadCountries(false);\n if (step === 'select_route') {\n const result = await client.getRampsQuote({ country, amount: Number(amount), currency, direction });\n setQuotes(result.quotes ?? []);\n setRequirementsRequired(result.requirementsRequired ?? []);\n } else if (step === 'status' && txId) {\n const tx = await client.getRampTransaction(txId);\n setTxStatus(tx.status);\n if (tx.stellarTxHash) setStellarTxHash(tx.stellarTxHash);\n if (tx.kycUrl) setKycUrl(tx.kycUrl);\n if (tx.depositInstructions) setDepositInstructions(tx.depositInstructions);\n }\n } catch {\n /* transient - leave the current data in place */\n } finally {\n setRefreshing(false);\n }\n }\n\n /** Back to the amount step. `keepMessage` carries the reason forward: when the\n * user steps back because the amount missed a route's minimum, dropping the\n * figure would leave them correcting it blind. A plain retry clears it. */\n function resetToInput({ keepMessage = false }: { keepMessage?: boolean } = {}) {\n setStep('input');\n setQuotes([]);\n setRequirementsRequired([]);\n setSelectedQuote(null);\n // Clear the collected provider fields (name/email/etc.) so a retry re-shows\n // the 'contact' step. Otherwise a stale (possibly invalid) value keeps the\n // field non-empty, `handleSelectQuote` treats it as complete, skips the step\n // and replays the same failing request.\n setFieldValues({});\n setTxId(null);\n setProvider('');\n setKycUrl(null);\n setTosUrl(null);\n setTxStatus(null);\n setStellarTxHash(null);\n setDepositInstructions(null);\n setKycPending(false);\n setKycApproved(false);\n setNoticeMsg(null);\n if (!keepMessage) setErrorMsg(null);\n }\n\n /**\n * EXTERNAL wallets (Freighter/Albedo): the backend returns an unsigned XDR the\n * user must sign locally, then we resume the flow. `sep10` yields the anchor\n * session (kycUrl); `withdraw_payment` broadcasts the on-chain withdrawal.\n */\n async function resumeWithSignature(id: string, ps: NonNullable<RampResult['pendingSignature']>) {\n const outcome = await signTx(ps.unsignedXdr);\n if (outcome.status !== 'signed') {\n setErrorMsg(outcome.message ?? outcome.details ?? 'Signing was cancelled.');\n setStep('error');\n return;\n }\n const result = (await client.submitRampSignature(id, {\n signedXdr: outcome.signedXdr,\n action: ps.action,\n })) as RampResult;\n await applyResult(result);\n }\n\n async function applyResult(result: RampResult) {\n setTxId(result.txId);\n setProvider(result.provider);\n if (result.pendingSignature) {\n await resumeWithSignature(result.txId, result.pendingSignature);\n return;\n }\n setKycUrl(result.kycUrl ?? null);\n setTosUrl(result.tosUrl ?? null);\n setOnboardingStatus(result.onboardingStatus);\n setKycPending(result.kycRequired === true);\n if (result.kycRequired) setKycApproved(false);\n setTxStatus(result.status);\n setStellarTxHash(result.stellarTxHash ?? null);\n setDepositInstructions(result.depositInstructions ?? null);\n setStep('status');\n }\n\n /**\n * Quote the current input. A route held back by a requirement step still counts as an answer:\n * it is shown locked, so \"no providers\" only means nothing came back at all.\n */\n async function loadQuotes(): Promise<boolean> {\n const result = await client.getRampsQuote({ country, amount: Number(amount), currency, direction });\n const list = result.quotes ?? [];\n const locked = result.requirementsRequired ?? [];\n if (list.length === 0 && locked.length === 0) {\n // A provider that serves the route but is down is not \"no providers\".\n const down = (result.unavailable ?? []).map((u) => u.provider);\n setErrorMsg(\n down.length > 0\n ? `${down.join(', ')} ${down.length === 1 ? 'is' : 'are'} temporarily unavailable. Please try again later.`\n : `No ramp providers available for ${country} yet.`,\n );\n setStep('error');\n return false;\n }\n setQuotes(list);\n setRequirementsRequired(locked);\n return true;\n }\n\n async function handleFindRoute() {\n setStep('loading_quote');\n setIsLoading(true);\n setErrorMsg(null);\n try {\n if (!(await loadQuotes())) return;\n setStep('select_route');\n } catch (e) {\n setErrorMsg(rampErrorMessage(e, 'Failed to fetch quotes.'));\n setStep('error');\n } finally {\n setIsLoading(false);\n }\n }\n\n // Each quote declares the fields it needs (`requiredFields`). If any are unset,\n // collect them in the 'contact' step first; otherwise start immediately.\n function handleSelectQuote(quote: RampQuote) {\n setSelectedQuote(quote);\n setErrorMsg(null);\n setNoticeMsg(null);\n // The limits are per route, and the amount was typed before the routes were\n // known - so this is the first moment we can check it. Catching it here\n // states the figure without spending a round trip on a certain rejection.\n const broken = brokenLimitOf(Number(amount), quote);\n if (broken) {\n setErrorMsg(limitMessage(broken.limit, broken.value, currency));\n return;\n }\n const fields = requiredFieldsOf(quote);\n // An `optional` field left blank is not missing (Abroad's tax id) - it must\n // not drag the user into the details step on its own.\n const missing = fields.some((f) => !f.optional && !(fieldValues[f.key] ?? '').trim());\n if (fields.length > 0 && missing) {\n setStep('contact');\n return;\n }\n void startRamp(quote);\n }\n\n function handleContactContinue() {\n if (selectedQuote) void startRamp(selectedQuote);\n }\n\n async function startRamp(quote: RampQuote) {\n setIsLoading(true);\n setErrorMsg(null);\n try {\n const base: Record<string, unknown> = { quoteId: quote.quoteId, amount: Number(amount), currency, country };\n if (walletAddress) base.walletAddress = walletAddress;\n // Map each declared field to the request body: a field with `bankType`\n // becomes `bankDetails`; the standard body fields map by name; any other\n // provider-specific field (e.g. Stereum's bankCode / account holder) goes\n // into `fields`, which the backend reads per provider.\n const STANDARD_BODY_KEYS = new Set(['email', 'fullName', 'taxId', 'qrCode']);\n const extraFields: Record<string, string> = {};\n for (const f of requiredFieldsOf(quote)) {\n const val = (fieldValues[f.key] ?? '').trim();\n if (!val) continue;\n if (f.bankType) base.bankDetails = { type: f.bankType, value: val };\n else if (STANDARD_BODY_KEYS.has(f.key)) base[f.key] = val;\n else extraFields[f.key] = val;\n }\n if (Object.keys(extraFields).length > 0) base.fields = extraFields;\n const result = (\n direction === 'onramp'\n ? await client.createOnRamp(base as RampsOnrampBody)\n : await client.createOffRamp(base as RampsOfframpBody)\n ) as RampResult;\n await applyResult(result);\n } catch (e) {\n const requirement = requiredRampKyc(e);\n if (requirement) {\n setStep(requiredFieldsOf(quote).length ? 'contact' : 'select_route');\n setErrorMsg(\n requirement.type === 'KYC'\n ? 'Identity verification is required before continuing.'\n : 'A few more details are required before continuing.',\n );\n kycAttempt.current = requirement;\n setPendingKyc(requirement);\n return;\n }\n setErrorMsg(rampErrorMessage(e, 'Failed to start the ramp.'));\n setStep('error');\n } finally {\n setIsLoading(false);\n }\n }\n\n /**\n * Back to the route list with fresh prices for the same input. A verification\n * takes minutes and quotes live about as long, so the one that hit the gate is\n * usually expired by now; the user picks again rather than an order starting on\n * a price they did not see.\n */\n async function requoteAfterKyc(completed: PendingRequirement['type'] = 'KYC') {\n setStep('loading_quote');\n setIsLoading(true);\n setErrorMsg(null);\n setSelectedQuote(null);\n try {\n if (!(await loadQuotes())) return;\n setNoticeMsg(\n completed === 'KYC'\n ? 'Your identity is verified. Prices may have changed, so choose a route to continue.'\n : 'Thanks, your details are saved. Prices may have changed, so choose a route to continue.',\n );\n setStep('select_route');\n } catch (e) {\n setErrorMsg(rampErrorMessage(e, 'Failed to fetch quotes.'));\n setStep('error');\n } finally {\n setIsLoading(false);\n }\n }\n\n /** Open the step a locked route names (KYC, form, registry check or registration); completing it re-quotes like the start gate does. */\n function handleVerifyRoute(requirement: RampQuoteRequirement) {\n const attempt = pendingFromQuote(requirement);\n setErrorMsg(null);\n setNoticeMsg(null);\n kycAttempt.current = attempt;\n setPendingKyc(attempt);\n }\n\n function handleOpenKyc() {\n if (kycUrl) window.open(kycUrl, '_blank', 'noopener,noreferrer');\n }\n\n function handleOpenTos() {\n if (tosUrl) window.open(tosUrl, '_blank', 'noopener,noreferrer');\n }\n\n async function handleCompleteWithdraw() {\n if (!txId) return;\n setCompleting(true);\n setErrorMsg(null);\n try {\n const result = (await client.completeWithdraw(txId)) as RampResult;\n if (result.pendingSignature) {\n await resumeWithSignature(txId, result.pendingSignature);\n return;\n }\n setTxStatus(result.status);\n setStellarTxHash(result.stellarTxHash ?? null);\n } catch (e) {\n const msg = e instanceof Error ? e.message : '';\n setErrorMsg(\n msg.includes('KYC') ? 'Finish KYC at the provider first, then try again.' : msg || 'Failed to complete the withdrawal.',\n );\n } finally {\n setCompleting(false);\n }\n }\n\n // A link-less KYC gate blocks the withdraw for good: the provider consumed the\n // quote when it answered `kycRequired`, so completing would either fail or -\n // worse - move real funds into a deposit it cannot pay out. Approval clears the\n // gate for the NEXT quote, not for this transaction, so `kycPending` (not\n // `kycBlocking`) is what keeps the button away.\n const kycBlocking = kycPending && !kycApproved;\n const canComplete = direction === 'offramp' && step === 'status' && txStatus !== 'completed' && !stellarTxHash && !kycPending;\n\n const flowSteps = flowStepsOf(quotes, selectedQuote);\n const flowStepIndex = flowSteps.indexOf(STEP_LABEL[step] ?? '');\n\n // Keep this widget's state while a step is open so cancelling preserves the form.\n if (pendingKyc?.type === 'FORM') {\n return (\n <RequirementFormModal\n formId={pendingKyc.optionId}\n {...(pendingKyc.progress ? { progress: pendingKyc.progress } : {})}\n onClose={() => {\n kycAttempt.current = null;\n setPendingKyc(null);\n }}\n onSubmitted={() => {\n if (kycAttempt.current !== pendingKyc) return;\n kycAttempt.current = null;\n setPendingKyc(null);\n void requoteAfterKyc('FORM');\n }}\n />\n );\n }\n\n if (pendingKyc?.type === 'REGISTRY_CHECK' || pendingKyc?.type === 'PROVIDER_REGISTRATION') {\n const close = () => {\n kycAttempt.current = null;\n setPendingKyc(null);\n };\n const done = () => {\n if (kycAttempt.current !== pendingKyc) return;\n close();\n void requoteAfterKyc(pendingKyc.type);\n };\n const progress = pendingKyc.progress ? { progress: pendingKyc.progress } : {};\n return pendingKyc.type === 'REGISTRY_CHECK' ? (\n <RegistryCheckModal optionId={pendingKyc.optionId} {...progress} onClose={close} onApproved={done} />\n ) : (\n <ProviderRegistrationModal corridorId={pendingKyc.corridorId} {...progress} onClose={close} onRegistered={done} />\n );\n }\n\n if (pendingKyc) {\n return (\n <KycModal\n country={country}\n corridorId={pendingKyc.corridorId}\n providerId={pendingKyc.optionId}\n onClose={() => {\n kycAttempt.current = null;\n setPendingKyc(null);\n }}\n onApproved={() => {\n // Ignore duplicate approvals or polling that finishes after cancellation.\n if (kycAttempt.current !== pendingKyc) return;\n kycAttempt.current = null;\n setPendingKyc(null);\n void requoteAfterKyc();\n }}\n />\n );\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <RampWidgetTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n flowSteps={flowSteps}\n flowStepIndex={flowStepIndex}\n startingQuoteId={isLoading && selectedQuote ? selectedQuote.quoteId : null}\n direction={direction}\n amount={amount}\n currency={currency}\n country={country}\n requiredFields={selectedQuote ? requiredFieldsOf(selectedQuote) : []}\n fieldValues={fieldValues}\n countries={countries}\n countriesLoading={countriesLoading}\n refreshing={refreshing}\n quotes={quotes}\n kycRequired={requirementsRequired}\n isLoading={isLoading}\n provider={provider}\n txStatus={txStatus}\n kycUrl={kycUrl}\n tosUrl={tosUrl}\n kycBlocking={kycBlocking}\n onboardingStatus={onboardingStatus ?? null}\n kycJustApproved={kycPending && kycApproved}\n stellarTxHash={stellarTxHash}\n explorerUrl={\n stellarTxHash\n ? `https://stellar.expert/explorer/${network === 'mainnet' ? 'public' : 'testnet'}/tx/${stellarTxHash}`\n : null\n }\n depositInstructions={depositInstructions}\n canComplete={canComplete}\n completing={completing}\n errorMsg={errorMsg}\n noticeMsg={noticeMsg}\n onDirectionChange={setDirection}\n onAmountChange={(next) => {\n // Editing the amount is the user acting on the limit message, so it\n // stops applying the moment they type.\n setAmount(next);\n setErrorMsg(null);\n }}\n onFieldChange={setFieldValue}\n onCountryChange={handleCountryChange}\n onFindRoute={handleFindRoute}\n onSelectQuote={handleSelectQuote}\n onVerifyRoute={handleVerifyRoute}\n onContactContinue={handleContactContinue}\n onOpenKyc={handleOpenKyc}\n onOpenTos={handleOpenTos}\n onCompleteWithdraw={handleCompleteWithdraw}\n onBack={() => resetToInput({ keepMessage: true })}\n onRetry={() => resetToInput()}\n onRefresh={handleRefresh}\n onClose={onClose}\n />\n </div>\n );\n}\n","import type { WalletChain, WalletInfo } from '@pollar/core';\n\n/**\n * The one place the widget decides whether a wallet can act on-chain, and what\n * to say when it cannot.\n *\n * Only STELLAR is gated: `provisioning` describes the Stellar account, and a\n * Solana wallet has nothing to wait for. Only the ACCOUNT is described, never\n * trustlines - an asset the app enabled yesterday is not a reason to stop a\n * user from sending the one they already hold.\n *\n * A `null` chain is \"not known yet\" (the app's chain order comes from\n * `/config`, which is still in flight on a cold start) and reads as no reason\n * to block. Guessing STELLAR there would tell a Solana-first user their wallet\n * is being prepared, next to a Solana address that sends and receives fine.\n *\n * Returns null when the wallet is usable, so a caller reads it as \"no reason to\n * block\".\n */\nexport function walletNotReadyReason(\n wallet: WalletInfo | null | undefined,\n chain: WalletChain | null | undefined,\n): string | null {\n if (chain !== 'STELLAR') return null;\n if (wallet?.provisioning === 'CREATING') {\n return 'Your wallet is still being prepared on the network. This usually takes a few seconds.';\n }\n if (wallet?.provisioning === 'FAILED') {\n return 'Your wallet could not be created on the network. Sign in again to retry.';\n }\n return null;\n}\n","/**\n * QRCode component - vendored from react-qr-code (MIT License)\n * Original: https://github.com/rosskhanas/react-qr-code\n * Adapted: removed prop-types dependency, added TypeScript types.\n *\n * MIT License\n * Copyright (c) 2018 Ross Khanas\n */\n\n// @ts-expect-error - qr.js ships CJS without type declarations; bundled via noExternal\nimport ErrorCorrectLevel from 'qr.js/lib/ErrorCorrectLevel';\n// @ts-expect-error - same as above\nimport QRCodeImpl from 'qr.js/lib/QRCode';\nimport { forwardRef, type SVGProps } from 'react';\n\n// --- Internal SVG renderer ----------------------------------------------------\n\ninterface QRCodeSvgProps extends SVGProps<SVGSVGElement> {\n bgColor: string;\n bgD: string;\n fgColor: string;\n fgD: string;\n size: number;\n title?: string;\n viewBoxSize: number;\n xmlns?: string | undefined;\n}\n\nconst QRCodeSvg = forwardRef<SVGSVGElement, QRCodeSvgProps>(function QRCodeSvg(\n { bgColor, bgD, fgD, fgColor, size, title, viewBoxSize, xmlns = 'http://www.w3.org/2000/svg', ...props },\n ref,\n) {\n return (\n <svg {...props} height={size} ref={ref} viewBox={`0 0 ${viewBoxSize} ${viewBoxSize}`} width={size} xmlns={xmlns}>\n {title ? <title>{title}</title> : null}\n <path d={bgD} fill={bgColor} />\n <path d={fgD} fill={fgColor} />\n </svg>\n );\n});\n\nQRCodeSvg.displayName = 'QRCodeSvg';\n\n// --- Public component ---------------------------------------------------------\n\nexport interface QRCodeProps extends SVGProps<SVGSVGElement> {\n value: string;\n size?: number;\n bgColor?: string;\n fgColor?: string;\n level?: 'L' | 'M' | 'Q' | 'H';\n title?: string;\n}\n\nfunction bytesToBinaryString(bytes: number[]): string {\n return bytes.map((b) => String.fromCharCode(b & 0xff)).join('');\n}\n\nfunction encodeStringToUtf8Bytes(input: string): number[] {\n return Array.from(new TextEncoder().encode(input));\n}\n\nexport const QRCode = forwardRef<SVGSVGElement, QRCodeProps>(function QRCode(\n { bgColor = '#FFFFFF', fgColor = '#000000', level = 'L', size = 256, value, ...props },\n ref,\n) {\n const qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n const utf8Bytes = encodeStringToUtf8Bytes(value);\n const binaryString = bytesToBinaryString(utf8Bytes);\n qrcode.addData(binaryString, 'Byte');\n qrcode.make();\n\n const cells: boolean[][] = qrcode.modules;\n\n return (\n <QRCodeSvg\n {...props}\n bgColor={bgColor}\n bgD={cells\n .map((row, rowIndex) =>\n row.map((cell, cellIndex) => (!cell ? `M ${cellIndex} ${rowIndex} l 1 0 0 1 -1 0 Z` : '')).join(' '),\n )\n .join(' ')}\n fgColor={fgColor}\n fgD={cells\n .map((row, rowIndex) =>\n row.map((cell, cellIndex) => (cell ? `M ${cellIndex} ${rowIndex} l 1 0 0 1 -1 0 Z` : '')).join(' '),\n )\n .join(' ')}\n ref={ref}\n size={size}\n viewBoxSize={cells.length}\n />\n );\n});\n","import type { SVGProps } from 'react';\n\nexport function PollarLogo(props: SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"45\" height=\"48\" viewBox=\"0 0 45 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M27.2476 11.7526L23.3926 10.0529L24.6679 9.14844L26.8168 9.19868L27.7248 10.3873L27.2476 11.7526Z\"\n fill=\"#005DB4\"\n />\n <path\n d=\"M27.2307 33.2204L35.6034 28.6687L35.5931 25.9484L35.5707 20.0746L37.96 20.0989C37.96 20.0989 35.8728 18.3558 34.958 17.571C34.0431 16.7861 29.1016 12.8772 29.1016 12.8772L29.7315 11.2883L29.723 9.3148L27.3303 7.45046L23.7464 7.40887C23.7464 7.40887 20.5179 8.96827 20.4115 9.12248C20.2227 9.12248 15.4579 9.17619 14.5568 9.17619C12.3907 10.5103 8.21642 13.1527 8.21642 13.1527L8.22672 15.1002L2.54028 18.4858L5.60406 18.8704L5.99368 19.9568L4.93466 21.7276C4.93466 21.7276 3.61131 22.4796 3.43624 22.5264C3.76248 23.1143 4.12596 23.6803 4.52444 24.2209C4.72869 24.4773 5.01362 24.5259 5.26421 24.5969C5.66242 24.7078 6.09152 24.6991 6.50517 24.7563C6.71629 24.784 6.92226 24.8585 7.13509 24.8863C7.34792 24.914 10.6966 25.4061 11.1566 25.4424C11.5767 25.519 11.9895 25.6315 12.3907 25.7786C13.1476 26.1719 13.8685 26.6449 14.622 27.0226C15.4236 27.4298 16.1668 27.9184 16.9426 28.3689C17.5519 28.7258 18.7397 29.5281 18.7397 29.5281L19.4366 30.3372C19.4366 30.3372 17.7819 30.4135 17.219 30.5261C16.9117 30.5885 16.6302 30.63 16.4534 31.0286C16.2286 31.5345 6.69054 47.5703 6.43136 48C6.36442 47.9134 6.38845 28.6687 6.38845 28.6687L8.60776 27.2513L3.81385 26.0662L0.53552 20.818L0 18.3662L6.45368 14.414L6.36957 0H28.8304C28.8304 0 30.5468 0.223514 31.0618 0.377721C31.5767 0.531928 31.98 0.609898 33.7205 1.8938C35.3373 3.30592 39.7502 7.82125 42.3214 10.4098C42.6028 10.694 43.4422 11.7735 43.6087 12.47C43.7752 13.1665 44 14.2442 44 15.0586C43.9708 19.1148 44.0172 23.2853 43.9571 27.3397C43.9382 28.615 43.516 29.8226 42.8449 30.9506C42.5531 31.4427 41.3276 32.8201 40.3595 33.8233C39.9109 34.2848 39.3577 34.6291 38.7478 34.8266L27.2307 38.5847V33.2204Z\"\n fill=\"#005DB4\"\n />\n <path\n d=\"M14.2192 17.0897C13.6705 17.1694 11.7754 15.6937 11.7754 15.6937L13.4741 14.3999H16.5112L18.0217 15.7182C18.0217 15.7182 16.6853 15.708 16.2399 15.708C15.6669 16.3927 14.7679 17.0181 14.2152 17.0999\"\n fill=\"#005DB4\"\n />\n </svg>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { QRCode } from '../../lib/qr-code';\nimport { ChainSelect } from '../ChainSelect';\nimport { PollarModalFooter } from '../commons';\nimport { PollarLogo } from '../PollarLogo';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\n/** Network name as it reads in a sentence (\"Share your Stellar address\"). */\nconst CHAIN_NAME: Record<string, string> = {\n STELLAR: 'Stellar',\n POLYGON: 'Polygon',\n SOLANA: 'Solana',\n};\n\nexport interface ReceiveModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n /**\n * The networks the user holds an address on, in the app's configured order.\n * The picker renders only with two or more, so a single-chain app shows none.\n */\n chains?: WalletChain[];\n selectedChain: WalletChain | null;\n onSelectChain?: (chain: WalletChain) => void;\n copied: boolean;\n /**\n * Why the wallet cannot receive yet (its Stellar account is still being\n * created, or its creation failed), or null when it can.\n *\n * The address itself is valid either way - what is missing is the account\n * behind it, so a payment sent now is rejected by the network. Optional, so a\n * custom template written before this existed keeps compiling.\n */\n notReadyReason?: string | null;\n onCopy: () => void;\n onClose: () => void;\n}\n\nexport function ReceiveModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n walletAddress,\n chains,\n selectedChain,\n onSelectChain,\n copied,\n notReadyReason,\n onCopy,\n onClose,\n}: ReceiveModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const chainName = selectedChain ? (CHAIN_NAME[selectedChain] ?? selectedChain) : 'wallet';\n\n return (\n <div\n className=\"pollar-modal-card pollar-receive-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Receive</h2>\n <div className=\"pollar-modal-header-actions\">\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Network selector - drives the address and QR below */}\n {chains && onSelectChain && <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} />}\n\n {/* QR code */}\n {walletAddress ? (\n <>\n <div className=\"pollar-receive-qr\">\n <div className=\"pollar-receive-network-badge\">\n <span className=\"pollar-receive-network-dot\" aria-hidden />\n {chainName} network\n </div>\n <div className=\"pollar-receive-qr-frame\">\n <QRCode\n value={walletAddress}\n size={220}\n level=\"H\"\n fgColor=\"#111827\"\n bgColor=\"#ffffff\"\n title={`${chainName} wallet QR code`}\n />\n <span className=\"pollar-receive-qr-mark\" aria-hidden>\n <PollarLogo width=\"22\" height=\"24\" />\n </span>\n </div>\n </div>\n\n {notReadyReason && <div className=\"pollar-receive-notice\">{notReadyReason}</div>}\n\n {/* Address + copy */}\n <div className=\"pollar-receive-address-actions\">\n <div className=\"pollar-receive-address-row\">\n <span className=\"pollar-receive-address\">{walletAddress}</span>\n </div>\n <button type=\"button\" className=\"pollar-receive-copy-btn\" onClick={onCopy} aria-label=\"Copy address\">\n {copied ? (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path\n d=\"M3.5 7l2.5 2.5 4.5-5\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Copied\n </>\n ) : (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9H2a1 1 0 01-1-1V2a1 1 0 011-1h6a1 1 0 011 1v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n Copy\n </>\n )}\n </button>\n </div>\n <p className=\"pollar-receive-warning\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"5.5\" stroke=\"currentColor\" strokeWidth=\"1.25\" />\n <path d=\"M7 6.25V9.25M7 4.5V4.75\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n </svg>\n <span>Only send {chainName} assets to this address</span>\n </p>\n </>\n ) : (\n <div className=\"pollar-modal-empty\">No wallet connected.</div>\n )}\n\n <PollarModalFooter shield />\n </div>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { walletNotReadyReason } from '../../lib/wallet-provisioning';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './ReceiveModal.css';\nimport { ReceiveModalTemplate } from './ReceiveModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface ReceiveModalProps {\n onClose: () => void;\n}\n\nexport function ReceiveModal({ onClose }: ReceiveModalProps) {\n const { wallet, wallets, styles } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n // The address is real, but until the account is on the ledger a payment to it\n // is rejected by the network. Handing someone a QR without saying so is the\n // one place this window can cost a user a failed transfer from a third party.\n const notReadyReason = walletNotReadyReason(wallet, selectedChain);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n function handleCopy() {\n if (!walletAddress) return;\n navigator.clipboard.writeText(walletAddress).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <ReceiveModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n walletAddress={walletAddress}\n chains={chains}\n selectedChain={selectedChain}\n // The tick belongs to the address that was copied, so switching\n // networks clears it rather than vouching for the new address.\n onSelectChain={(chain) => {\n setCopied(false);\n setSelectedChain(chain);\n }}\n notReadyReason={notReadyReason}\n copied={copied}\n onCopy={handleCopy}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { TransactionState, WalletId, WalletType } from '@pollar/core';\nimport { LOGO_ALBEDO, LOGO_FREIGHTER, LOGO_POLLAR } from '../../constants';\nimport { ModalStatusBanner } from '../commons';\n\nconst STATUS_MESSAGES: Record<TransactionState['step'], string> = {\n idle: '',\n building: 'Building transaction…',\n built: 'Ready to sign and send',\n signing: 'Signing transaction…',\n signed: 'Signed — ready to submit',\n submitting: 'Submitting transaction…',\n submitted: 'Submitted — waiting for confirmation…',\n 'signing-submitting': 'Signing and submitting transaction…',\n 'building-signing-submitting': 'Processing transaction…',\n success: 'Transaction sent successfully',\n error: 'Transaction failed',\n};\n\n/** Step values that represent in-flight work (spinner / non-cancellable UI). */\nconst IN_FLIGHT_STEPS = new Set<TransactionState['step']>([\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n]);\n\n/** Step values that should show the transaction details panel. */\nconst SHOW_DETAILS_STEPS = new Set<TransactionState['step']>([\n 'built',\n 'signing',\n 'signed',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'success',\n]);\n\nexport interface TxStatusViewProps {\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null | undefined;\n onSignAndSend: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry?: (() => void) | undefined;\n onDone: () => void;\n}\n\nexport function TxStatusView({\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n onSignAndSend,\n onToggleXdr,\n onCopyHash,\n onRetry,\n onDone,\n}: TxStatusViewProps) {\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const errorDetails = transaction.step === 'error' ? (transaction.details ?? null) : null;\n\n const isBuilt = transaction.step === 'built';\n const isInFlight = IN_FLIGHT_STEPS.has(transaction.step);\n const isSuccess = transaction.step === 'success';\n const isError = transaction.step === 'error';\n const showDetails = buildData !== null && SHOW_DETAILS_STEPS.has(transaction.step);\n\n const walletImg =\n walletType === WalletType.FREIGHTER ? LOGO_FREIGHTER : walletType === WalletType.ALBEDO ? LOGO_ALBEDO : LOGO_POLLAR;\n\n const walletAlt = walletType === WalletType.FREIGHTER ? 'Freighter' : walletType === WalletType.ALBEDO ? 'Albedo' : 'Pollar';\n\n return (\n <>\n {showDetails && buildData && (\n <>\n <div className=\"pollar-tx-summary\">\n <p className=\"pollar-tx-summary-title\">Details</p>\n <ul className=\"pollar-tx-summary-lines\">\n {buildData.summary.lines.map((line, i) => (\n <li key={i} className=\"pollar-tx-summary-line\">\n {line}\n </li>\n ))}\n </ul>\n </div>\n <div className=\"pollar-tx-meta\">\n <div className=\"pollar-tx-meta-item\">\n <span className=\"pollar-tx-meta-label\">Network</span>\n <span className=\"pollar-tx-meta-value\">{buildData.summary.network}</span>\n </div>\n <div className=\"pollar-tx-meta-item\">\n <span className=\"pollar-tx-meta-label\">Fee</span>\n <span className=\"pollar-tx-meta-value\">{buildData.summary.fee}</span>\n </div>\n </div>\n <div className=\"pollar-tx-xdr\">\n <button className=\"pollar-tx-xdr-toggle\" onClick={onToggleXdr}>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden\n style={{ transform: showXdr ? 'rotate(90deg)' : 'rotate(0deg)', transition: 'transform 150ms' }}\n >\n <path d=\"M4 2l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n Raw transaction (XDR)\n </button>\n {showXdr && <pre className=\"pollar-tx-xdr-content\">{buildData.unsignedXdr}</pre>}\n </div>\n </>\n )}\n\n {isError && errorDetails && (\n <div className=\"pollar-tx-error-details\">\n <p className=\"pollar-tx-error-details-label\">Error details</p>\n <pre className=\"pollar-tx-error-details-content\">{errorDetails}</pre>\n </div>\n )}\n\n {isBuilt && (\n <button className=\"pollar-btn-primary pollar-tx-sign-btn\" onClick={onSignAndSend}>\n Sign & Send\n </button>\n )}\n\n {(isInFlight || isSuccess || isError) && (\n <div className=\"pollar-tx-wallet-spinner\">\n <div className=\"pollar-tx-spinner-ring\">\n <svg\n viewBox=\"0 0 88 88\"\n width=\"88\"\n height=\"88\"\n className={`pollar-tx-spinner-svg${isInFlight ? ' pollar-tx-spinner-rotating' : ''}`}\n aria-hidden\n >\n <circle cx=\"44\" cy=\"44\" r=\"36\" fill=\"none\" stroke=\"var(--pollar-border)\" strokeWidth=\"3\" />\n <circle\n cx=\"44\"\n cy=\"44\"\n r=\"36\"\n fill=\"none\"\n stroke={\n isSuccess ? 'var(--pollar-success-text)' : isError ? 'var(--pollar-error-text)' : 'var(--pollar-accent)'\n }\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeDasharray={isInFlight ? '169.6 56.6' : '999 0'}\n transform=\"rotate(-90 44 44)\"\n style={{ transition: isInFlight ? 'none' : 'stroke 400ms, stroke-dasharray 400ms' }}\n />\n </svg>\n <div className=\"pollar-tx-wallet-icon\">\n <img src={walletImg} alt={walletAlt} className=\"pollar-tx-wallet-img\" />\n </div>\n </div>\n\n {isInFlight && (\n <p className=\"pollar-tx-spinner-label\">\n {walletType === WalletType.FREIGHTER\n ? 'Waiting for Freighter…'\n : walletType === WalletType.ALBEDO\n ? 'Waiting for Albedo…'\n : 'Signing and sending…'}\n </p>\n )}\n\n {isError && onRetry && 'buildData' in transaction && transaction.buildData && (\n <button className=\"pollar-btn-secondary pollar-tx-retry-btn\" onClick={onRetry}>\n Try again\n </button>\n )}\n </div>\n )}\n\n {isSuccess && hash && (\n <div className=\"pollar-tx-result\">\n <span className=\"pollar-tx-result-label\">Transaction hash</span>\n <span className=\"pollar-tx-result-hash\">{hash}</span>\n <div className=\"pollar-tx-result-actions\">\n <button className=\"pollar-tx-result-btn\" onClick={onCopyHash}>\n {copied ? (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path\n d=\"M3.5 7l2.5 2.5 4.5-5\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Copied!\n </>\n ) : (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9H2a1 1 0 01-1-1V2a1 1 0 011-1h6a1 1 0 011 1v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n Copy hash\n </>\n )}\n </button>\n {explorerUrl && (\n <a className=\"pollar-tx-result-btn\" href={explorerUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <path\n d=\"M5 2H2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M8 1h4m0 0v4m0-4L6 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n View on Explorer\n </a>\n )}\n </div>\n </div>\n )}\n\n {isSuccess && (\n <button className=\"pollar-btn-primary pollar-tx-sign-btn\" onClick={onDone}>\n Done\n </button>\n )}\n\n <ModalStatusBanner\n message={STATUS_MESSAGES[transaction.step]}\n status={isError ? 'ERROR' : isInFlight ? 'LOADING' : isSuccess ? 'SUCCESS' : 'NONE'}\n />\n </>\n );\n}\n","'use client';\n\nimport { TransactionState, WalletBalanceRecord, WalletChain, WalletId } from '@pollar/core';\nimport { useEffect, useRef, useState, type KeyboardEvent } from 'react';\nimport { ChainSelect } from '../ChainSelect';\nimport { PollarModalFooter, RefreshIcon } from '../commons';\nimport { TxStatusView } from '../transaction-modal/TxStatusView';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\n// A null balance means the chain could not be read; it shows as a dash rather\n// than as 0, so an unreadable wallet never looks empty.\nfunction formatBalance(balance: string | null): string {\n if (balance === null) return '—';\n const n = parseFloat(balance);\n return isNaN(n) ? balance : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\nfunction assetKey(record: WalletBalanceRecord): string {\n return `${record.code}:${record.issuer ?? 'native'}`;\n}\n\nfunction chainLabel(chain: WalletChain | null): string {\n if (chain === 'STELLAR') return 'Stellar';\n if (chain === 'SOLANA') return 'Solana';\n if (chain === 'POLYGON') return 'Polygon';\n return 'network';\n}\n\nfunction AssetIcon({ code }: { code: string }) {\n return (\n <span className=\"pollar-send-asset-icon\" aria-hidden>\n {code.slice(0, 2).toUpperCase()}\n </span>\n );\n}\n\ninterface SendAssetSelectorProps {\n assets: WalletBalanceRecord[];\n selectedAsset: WalletBalanceRecord | null;\n loading: boolean;\n onSelectAsset: (asset: WalletBalanceRecord) => void;\n}\n\nfunction SendAssetSelector({ assets, selectedAsset, loading, onSelectAsset }: SendAssetSelectorProps) {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const closeOnOutsideClick = (event: MouseEvent) => {\n if (!(event.target instanceof Node) || !triggerRef.current?.parentElement?.contains(event.target)) setOpen(false);\n };\n document.addEventListener('mousedown', closeOnOutsideClick);\n return () => document.removeEventListener('mousedown', closeOnOutsideClick);\n }, [open]);\n\n function handleTriggerKeyDown(event: KeyboardEvent<HTMLButtonElement>) {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setOpen(true);\n }\n }\n\n if (loading) {\n return (\n <div className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Asset</span>\n <div className=\"pollar-send-asset-selector pollar-send-asset-selector-loading\" aria-label=\"Loading assets\">\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n <span>Loading assets…</span>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\" id=\"pollar-send-asset-label\">\n Asset\n </label>\n <div className=\"pollar-send-asset-picker\">\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"pollar-send-asset-selector\"\n aria-labelledby=\"pollar-send-asset-label\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n disabled={!selectedAsset}\n onClick={() => setOpen((value) => !value)}\n onKeyDown={handleTriggerKeyDown}\n >\n {selectedAsset ? (\n <>\n <AssetIcon code={selectedAsset.code} />\n <span className=\"pollar-send-asset-copy\">\n <strong>{selectedAsset.code}</strong>\n <small>\n {selectedAsset.available === null\n ? 'Balance unavailable'\n : `${formatBalance(selectedAsset.available)} available`}\n </small>\n </span>\n </>\n ) : (\n <span className=\"pollar-send-asset-copy\">\n <strong>No assets available</strong>\n </span>\n )}\n <svg className=\"pollar-send-chevron\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"m4 6 4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n\n {open && assets.length > 0 && (\n <div className=\"pollar-send-asset-menu\" role=\"listbox\" aria-label=\"Assets\">\n {assets.map((asset) => {\n const key = assetKey(asset);\n const selected = selectedAsset ? key === assetKey(selectedAsset) : false;\n return (\n <button\n key={key}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n className={`pollar-send-asset-option${selected ? ' is-selected' : ''}`}\n onClick={() => {\n onSelectAsset(asset);\n setOpen(false);\n triggerRef.current?.focus();\n }}\n >\n <AssetIcon code={asset.code} />\n <span className=\"pollar-send-asset-copy\">\n <strong>{asset.code}</strong>\n <small>\n {asset.available === null ? 'Balance unavailable' : `${formatBalance(asset.available)} available`}\n </small>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport interface SendModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n step: 'form' | 'tx';\n txTitle: string;\n assets: WalletBalanceRecord[];\n selectedAsset: WalletBalanceRecord | null;\n selectedChain: WalletChain | null;\n /**\n * The networks the user can send from, in the app's configured order. The\n * picker renders only with two or more, so a single-chain app shows none.\n */\n chains?: WalletChain[];\n /** @deprecated Kept for compatibility; the sender address is no longer shown. */\n walletAddress?: string;\n /** Can a payment be built on {@link selectedChain}? Stellar and Solana only. */\n canSendOnChain: boolean;\n /**\n * Why the wallet cannot act on-chain right now (its Stellar account is still\n * being created, or its creation failed), or null when it can.\n *\n * Separate from {@link canSendOnChain}: that one is about the NETWORK not\n * having a transfer path, this one about the user's own account. Collapsing\n * them would tell someone waiting on a brand-new wallet that Stellar does not\n * support sending. Optional, so a custom template written before this existed\n * keeps compiling.\n */\n notReadyReason?: string | null;\n onSelectChain?: (chain: WalletChain) => void;\n amount: string;\n destination: string;\n formError: string;\n isLoadingBalance: boolean;\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null | undefined;\n showBack: boolean;\n isInProgress: boolean;\n onClose: () => void;\n onBack: () => void;\n onRefresh: () => void;\n onSelectAsset: (asset: WalletBalanceRecord) => void;\n onAmountChange: (value: string) => void;\n onMax: () => void;\n onPaste: () => void;\n onDestinationChange: (value: string) => void;\n onSubmit: () => void;\n onSignAndSend: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry: () => void;\n onDone: () => void;\n}\n\nexport function SendModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n txTitle,\n assets,\n selectedAsset,\n selectedChain,\n canSendOnChain,\n notReadyReason,\n chains,\n onSelectChain,\n amount,\n destination,\n formError,\n isLoadingBalance,\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n showBack,\n isInProgress,\n onClose,\n onBack,\n onRefresh,\n onSelectAsset,\n onAmountChange,\n onMax,\n onPaste,\n onDestinationChange,\n onSubmit,\n onSignAndSend,\n onToggleXdr,\n onCopyHash,\n onRetry,\n onDone,\n}: SendModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const parsedAmount = amount ? Number(amount) : 0;\n const availableAmount =\n selectedAsset?.available === null || selectedAsset?.available === undefined ? 0 : Number(selectedAsset.available);\n const canSubmit =\n canSendOnChain &&\n !notReadyReason &&\n !!selectedAsset &&\n Number.isFinite(parsedAmount) &&\n parsedAmount > 0 &&\n parsedAmount <= availableAmount &&\n !!destination.trim() &&\n !isLoadingBalance;\n\n const title = step === 'form' ? 'Send' : txTitle;\n\n return (\n <div\n className=\"pollar-modal-card pollar-send-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {showBack && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onBack} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <div className=\"pollar-send-title-copy\">\n <h2 className=\"pollar-modal-title\">{title}</h2>\n {step === 'form' && (\n <p className=\"pollar-send-subtitle\">Transfer assets to another {chainLabel(selectedChain)} wallet</p>\n )}\n </div>\n </div>\n {!isInProgress && (\n <div className=\"pollar-modal-header-actions\">\n {step === 'form' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoadingBalance}\n aria-label=\"Refresh\"\n title=\"Refresh balances\"\n >\n <RefreshIcon spinning={isLoadingBalance} />\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n\n {/* Form step */}\n {step === 'form' && (\n <>\n {/* Network selector - drives the asset list below */}\n {chains && onSelectChain && (\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoadingBalance} />\n )}\n\n {!canSendOnChain && <div className=\"pollar-modal-empty\">Sending is not available on this network yet.</div>}\n {canSendOnChain && notReadyReason && <div className=\"pollar-modal-empty\">{notReadyReason}</div>}\n\n {/* Asset selector */}\n <SendAssetSelector\n assets={assets}\n selectedAsset={selectedAsset}\n loading={isLoadingBalance}\n onSelectAsset={onSelectAsset}\n />\n\n {/* Amount */}\n <div className=\"pollar-send-field\">\n <div className=\"pollar-send-label-row\">\n <label className=\"pollar-send-label\">Amount</label>\n {selectedAsset && (\n <span className=\"pollar-send-hint\">\n Available: {formatBalance(selectedAsset.available)} {selectedAsset.code}\n </span>\n )}\n </div>\n <div className=\"pollar-send-input-shell\">\n <input\n className=\"pollar-input pollar-send-amount-input\"\n type=\"text\"\n inputMode=\"decimal\"\n placeholder=\"0.00\"\n value={amount}\n onChange={(e) => onAmountChange(e.target.value)}\n aria-label=\"Amount\"\n />\n <div className=\"pollar-send-input-suffix\">\n <button\n type=\"button\"\n className=\"pollar-send-inline-action\"\n onClick={onMax}\n disabled={!selectedAsset?.available}\n >\n Max\n </button>\n <span>{selectedAsset?.code ?? ''}</span>\n </div>\n </div>\n </div>\n\n {/* Destination */}\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\">Destination wallet</label>\n <div className=\"pollar-send-input-shell\">\n <input\n className=\"pollar-input pollar-send-destination-input\"\n type=\"text\"\n placeholder=\"G…\"\n value={destination}\n onChange={(e) => onDestinationChange(e.target.value)}\n aria-label=\"Destination wallet\"\n />\n <button type=\"button\" className=\"pollar-send-inline-action\" onClick={onPaste}>\n Paste\n </button>\n </div>\n </div>\n\n {formError && <div className=\"pollar-modal-error\">{formError}</div>}\n\n <div className=\"pollar-modal-actions\">\n <button className=\"pollar-btn-primary\" onClick={onSubmit} disabled={!canSubmit}>\n Continue\n </button>\n </div>\n </>\n )}\n\n {/* Transaction step */}\n {step === 'tx' && (\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={onSignAndSend}\n onToggleXdr={onToggleXdr}\n onCopyHash={onCopyHash}\n onRetry={onRetry}\n onDone={onDone}\n />\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { toBaseUnits, WalletBalanceRecord, WalletChain } from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { walletNotReadyReason } from '../../lib/wallet-provisioning';\nimport { useChains } from '../../useChains';\nimport { resolveChain } from '../ChainSelect';\nimport '../shared.css';\nimport '../transaction-modal/TransactionModal.css';\nimport './SendModal.css';\nimport { SendModalTemplate } from './SendModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface SendModalProps {\n onClose: () => void;\n}\n\nfunction assetParam(record: WalletBalanceRecord) {\n if (record.type === 'native') return { type: 'native' as const };\n if (record.type === 'credit_alphanum4') {\n return { type: 'credit_alphanum4' as const, code: record.code, issuer: record.issuer! };\n }\n return { type: 'credit_alphanum12' as const, code: record.code, issuer: record.issuer! };\n}\n\nexport function SendModal({ onClose }: SendModalProps) {\n const {\n walletBalance,\n refreshWalletBalance,\n buildTx,\n sendPayment,\n signAndSubmitTx,\n tx: transaction,\n wallet,\n network,\n styles,\n } = usePollar();\n // External-wallet signing-adapter id (freighter/albedo) drives the wallet logo;\n // null for embedded/smart, which fall back to the Pollar logo.\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<'form' | 'tx'>('form');\n const [amount, setAmount] = useState('');\n const [destination, setDestination] = useState('');\n const [selectedAsset, setSelectedAsset] = useState<WalletBalanceRecord | null>(null);\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const [formError, setFormError] = useState('');\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n // Solana joined Stellar via the atomic endpoint; Polygon has no transfer path\n // in the backend yet, so it can be browsed but not sent from.\n const canSendOnChain = selectedChain === 'STELLAR' || selectedChain === 'SOLANA';\n // A Stellar account still being created cannot source a payment: every\n // operation would come back `op_no_source_account`. The server refuses these\n // with SDK_WALLET_NOT_READY anyway - saying so here turns that into something\n // the user can act on (wait) instead of a failed transaction.\n const notReadyReason = walletNotReadyReason(wallet, selectedChain);\n // Solana amounts are integer base units (lamports / mint units), not decimals.\n const isBaseUnitChain = selectedChain === 'SOLANA';\n\n useEffect(() => {\n void refreshWalletBalance();\n }, [refreshWalletBalance]);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n const balanceData = walletBalance.step === 'loaded' ? walletBalance.data : null;\n // Only the picked network's assets. The backend returns every chain in one\n // payload, so this is a local filter - switching networks costs no request.\n const allAssets = (balanceData?.balances ?? []).filter((b) => resolveChain(b.chain) === selectedChain);\n // App assets first, then native XLM (always, even at 0, so the user knows to\n // fund) and any other non-app asset the wallet actually holds.\n const sortedAssets = [\n ...allAssets.filter((b) => b.enabledInApp),\n // An unreadable balance (null) is not a positive one, so it stays out.\n ...allAssets.filter((b) => !b.enabledInApp && (b.type === 'native' || parseFloat(b.balance ?? '0') > 0)),\n ];\n\n // Auto-select the first asset once balances load (no \"Select asset\" step).\n // Switching networks strands the previous chain's asset, so it is dropped and\n // re-picked here rather than leaving a selection the form can't spend.\n useEffect(() => {\n const stranded = selectedAsset !== null && resolveChain(selectedAsset.chain) !== selectedChain;\n if (stranded) {\n setSelectedAsset(sortedAssets[0] ?? null);\n return;\n }\n if (!selectedAsset && sortedAssets.length > 0) setSelectedAsset(sortedAssets[0]!);\n }, [sortedAssets, selectedAsset, selectedChain]);\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n // Each chain has its own explorer, and its own way of saying \"testnet\".\n const explorerUrl = !hash\n ? null\n : selectedChain === 'SOLANA'\n ? `https://explorer.solana.com/tx/${hash}${explorerNetwork === 'testnet' ? '?cluster=devnet' : ''}`\n : `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}`;\n\n const IN_FLIGHT_STEPS = [\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n ] as const;\n const isInProgress = (IN_FLIGHT_STEPS as readonly string[]).includes(transaction.step);\n const showBack = step === 'tx' && (transaction.step === 'error' || transaction.step === 'success') && !isInProgress;\n\n const txTitle = isInProgress\n ? 'Sending…'\n : transaction.step === 'success'\n ? 'Sent!'\n : transaction.step === 'error'\n ? 'Send failed'\n : 'Confirm Send';\n\n async function handleSubmit() {\n setFormError('');\n if (!canSendOnChain) {\n setFormError('Sending is not available on this network yet.');\n return;\n }\n if (notReadyReason) {\n setFormError(notReadyReason);\n return;\n }\n if (!selectedAsset) {\n setFormError('Select an asset');\n return;\n }\n const parsed = parseFloat(amount);\n if (!amount || isNaN(parsed) || parsed <= 0) {\n setFormError('Enter a valid amount');\n return;\n }\n // A null `available` means the chain could not be read, so it floors to 0 and\n // blocks the send: never let an unreadable balance pass as \"enough\".\n if (parsed > parseFloat(selectedAsset.available ?? '0')) {\n setFormError('Insufficient balance');\n return;\n }\n if (!destination.trim()) {\n setFormError('Enter a destination address');\n return;\n }\n\n // A non-native asset needs BOTH its mint (carried in `issuer`) and its own\n // `decimals`, and neither has a safe default: without the mint the payload\n // below drops to a native transfer, so a USDC send would move SOL instead,\n // and the 9-decimal fallback would multiply a 6-decimal token by 1000. The\n // backend always sends both, so this only fires on malformed data - but it\n // fails the send rather than sending the wrong thing.\n const isNativeAsset = selectedAsset.type === 'native';\n if (isBaseUnitChain && !isNativeAsset && (!selectedAsset.issuer || selectedAsset.decimals === undefined)) {\n setFormError('This token is missing its mint or decimals and cannot be sent.');\n return;\n }\n\n // Solana takes integer base units while the form (like the balance above it)\n // is in decimals, so convert before sending - with the asset's own decimals,\n // and via strings so a 9-decimal amount is not rounded by a float. The\n // fallback is native SOL's 9, reached only on the native row (the guard above\n // rejects any other asset that lacks `decimals`).\n let sendAmount = amount;\n if (isBaseUnitChain) {\n try {\n sendAmount = toBaseUnits(amount, selectedAsset.decimals ?? 9);\n } catch (e) {\n setFormError(e instanceof Error ? e.message : 'Invalid amount');\n return;\n }\n }\n\n setStep('tx');\n\n if (selectedChain === 'SOLANA') {\n await sendPayment({\n chain: 'SOLANA',\n destination: destination.trim(),\n amount: sendAmount,\n // Native SOL carries no mint; an SPL token's mint rides in `issuer`,\n // which the guard above proved is present.\n ...(isNativeAsset ? {} : { mint: selectedAsset.issuer }),\n });\n return;\n }\n\n await buildTx('payment', { destination: destination.trim(), amount, asset: assetParam(selectedAsset) });\n }\n\n function handleSignAndSend() {\n if (transaction.step === 'built') {\n void signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n function handleMax() {\n if (selectedAsset?.available !== null && selectedAsset?.available !== undefined) {\n setAmount(selectedAsset.available);\n setFormError('');\n }\n }\n\n async function handlePaste() {\n if (!navigator.clipboard?.readText) {\n setFormError('Clipboard access is not available. Paste the address manually.');\n return;\n }\n\n try {\n const value = (await navigator.clipboard.readText()).trim();\n if (!value) {\n setFormError('The clipboard is empty.');\n return;\n }\n setDestination(value);\n setFormError('');\n } catch {\n setFormError('Could not read the clipboard. Paste the address manually.');\n }\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n async function handleRetry() {\n if (transaction.step === 'error' && transaction.buildData) {\n await signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n function handleBack() {\n setStep('form');\n setShowXdr(false);\n setCopied(false);\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={!isInProgress ? onClose : undefined}>\n <SendModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n txTitle={txTitle}\n assets={sortedAssets}\n selectedAsset={selectedAsset}\n chains={chains}\n selectedChain={selectedChain}\n canSendOnChain={canSendOnChain}\n notReadyReason={notReadyReason}\n onSelectChain={setSelectedChain}\n amount={amount}\n destination={destination}\n formError={formError}\n isLoadingBalance={walletBalance.step === 'loading'}\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n showBack={showBack}\n isInProgress={isInProgress}\n onClose={onClose}\n onBack={handleBack}\n onRefresh={() => void refreshWalletBalance()}\n onSelectAsset={setSelectedAsset}\n onAmountChange={setAmount}\n onMax={handleMax}\n onPaste={handlePaste}\n onDestinationChange={setDestination}\n onSubmit={() => void handleSubmit()}\n onSignAndSend={handleSignAndSend}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={() => void handleRetry()}\n onDone={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { SwapProvider, SwapQuote, SwapQuoteParams, TransactionState, WalletId } from '@pollar/core';\nimport { useState } from 'react';\nimport { PollarModalFooter, RefreshIcon } from '../commons';\nimport { TxStatusView } from '../transaction-modal/TxStatusView';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport interface SwapAssetOption {\n ref: SwapQuoteParams['sellAsset'];\n code: string;\n issuer?: string | undefined;\n available?: string | undefined;\n enabledInApp?: boolean | undefined;\n}\n\nexport function assetOptionKey(o: SwapAssetOption): string {\n return `${o.code}:${o.issuer ?? 'native'}`;\n}\n\nconst PROVIDER_LABELS: Record<SwapProvider, string> = {\n auto: 'Best price',\n aquarius: 'Aquarius',\n soroswap: 'Soroswap',\n sdex: 'Stellar DEX',\n};\n\nfunction formatAmount(value: string | undefined): string {\n if (value === undefined) return '—';\n const n = parseFloat(value);\n return isNaN(n) ? value : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\n/** Decimal division for display only. All intermediate arithmetic stays in BigInt. */\nfunction formatRate(numerator: string, denominator: string): string | null {\n const parse = (value: string) => {\n const trimmed = value.trim();\n if (!/^\\d+(\\.\\d+)?$/.test(trimmed)) return null;\n const [whole = '0', fraction = ''] = trimmed.split('.');\n return { digits: BigInt(`${whole}${fraction}`), scale: fraction.length };\n };\n const top = parse(numerator);\n const bottom = parse(denominator);\n if (!top || !bottom || bottom.digits === 0n || top.digits === 0n) return null;\n\n const precision = 8;\n const scaledNumerator = top.digits * 10n ** BigInt(bottom.scale + precision);\n const scaledDenominator = bottom.digits * 10n ** BigInt(top.scale);\n const scaled = scaledNumerator / scaledDenominator;\n const whole = scaled / 10n ** BigInt(precision);\n const fraction = (scaled % 10n ** BigInt(precision)).toString().padStart(precision, '0').replace(/0+$/, '');\n return fraction ? `${whole}.${fraction}` : whole.toString();\n}\n\nfunction AssetIcon({ code }: { code: string }) {\n return (\n <span className=\"pollar-swap-asset-icon\" aria-hidden>\n {code.slice(0, 2).toUpperCase()}\n </span>\n );\n}\n\nfunction AssetPill({\n label,\n value,\n options,\n disabled,\n onChange,\n}: {\n label: string;\n value: string;\n options: SwapAssetOption[];\n disabled: boolean;\n onChange: (key: string) => void;\n}) {\n const selected = options.find((option) => assetOptionKey(option) === value);\n const appAssets = options.filter((option) => option.enabledInApp);\n const otherAssets = options.filter((option) => !option.enabledInApp);\n\n return (\n <label className=\"pollar-swap-asset-pill-wrap\">\n <span className=\"sr-only\">{label}</span>\n <AssetIcon code={selected?.code ?? '—'} />\n <select\n className=\"pollar-swap-asset-pill\"\n aria-label={label}\n value={value}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n >\n {value === '' && <option value=\"\" disabled hidden />}\n {appAssets.length > 0 && (\n <optgroup label=\"App assets\">\n {appAssets.map((option) => (\n <option key={assetOptionKey(option)} value={assetOptionKey(option)}>\n {option.code}\n </option>\n ))}\n </optgroup>\n )}\n {otherAssets.length > 0 && (\n <optgroup label=\"Other assets\">\n {otherAssets.map((option) => (\n <option key={assetOptionKey(option)} value={assetOptionKey(option)}>\n {option.code}\n </option>\n ))}\n </optgroup>\n )}\n </select>\n <svg className=\"pollar-swap-chevron\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path\n d=\"m3.5 5.25 3.5 3.5 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </label>\n );\n}\n\nexport interface SwapModalTemplateProps {\n theme: string;\n accentColor: string;\n styleOverrides?: ModalStyleOverrides;\n step: 'form' | 'tx';\n txTitle: string;\n sellOptions: SwapAssetOption[];\n buyOptions: SwapAssetOption[];\n selectedSell: SwapAssetOption | null;\n selectedBuy: SwapAssetOption | null;\n amount: string;\n provider: SwapProvider;\n providers: SwapProvider[];\n quote: SwapQuote | null;\n quoteLoading: boolean;\n quoteError: string;\n formError: string;\n isLoadingData: boolean;\n smartUnsupported: boolean;\n configLoading: boolean;\n swapUnavailable: boolean;\n buyNeedsTrustline: boolean;\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null | undefined;\n showBack: boolean;\n isInProgress: boolean;\n onClose: () => void;\n onBack: () => void;\n onRefresh: () => void;\n onSelectSell: (o: SwapAssetOption) => void;\n onSelectBuy: (o: SwapAssetOption) => void;\n onReverse: () => void;\n onMax: () => void;\n onAddCustomToken: (code: string, issuer: string) => string | null;\n onAmountChange: (value: string) => void;\n onProviderChange: (p: SwapProvider) => void;\n onSwap: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry: () => void;\n onDone: () => void;\n}\n\nexport function SwapModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n txTitle,\n sellOptions,\n buyOptions,\n selectedSell,\n selectedBuy,\n amount,\n provider,\n providers,\n quote,\n quoteLoading,\n quoteError,\n formError,\n isLoadingData,\n smartUnsupported,\n configLoading,\n swapUnavailable,\n buyNeedsTrustline,\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n showBack,\n isInProgress,\n onClose,\n onBack,\n onRefresh,\n onSelectSell,\n onSelectBuy,\n onAddCustomToken,\n onReverse,\n onMax,\n onAmountChange,\n onProviderChange,\n onSwap,\n onToggleXdr,\n onCopyHash,\n onRetry,\n onDone,\n}: SwapModalTemplateProps) {\n const [customOpen, setCustomOpen] = useState(false);\n const [customCode, setCustomCode] = useState('');\n const [customIssuer, setCustomIssuer] = useState('');\n const [customError, setCustomError] = useState('');\n\n const submitCustomToken = () => {\n const err = onAddCustomToken(customCode, customIssuer);\n if (err) {\n setCustomError(err);\n return;\n }\n setCustomCode('');\n setCustomIssuer('');\n setCustomError('');\n setCustomOpen(false);\n };\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n const sellKey = selectedSell ? assetOptionKey(selectedSell) : '';\n const buyKey = selectedBuy ? assetOptionKey(selectedBuy) : '';\n const sameAsset = !!selectedSell && !!selectedBuy && sellKey === buyKey;\n const canSwap =\n !smartUnsupported &&\n !sameAsset &&\n !!selectedSell &&\n !!selectedBuy &&\n !!amount &&\n !!quote &&\n !quoteLoading &&\n !isLoadingData;\n const rate = quote && amount ? formatRate(quote.amountOut, amount) : null;\n const title = step === 'form' ? 'Swap' : txTitle;\n\n const selectSell = (key: string) => {\n const found = sellOptions.find((option) => assetOptionKey(option) === key);\n if (found) onSelectSell(found);\n };\n const selectBuy = (key: string) => {\n const found = buyOptions.find((option) => assetOptionKey(option) === key);\n if (found) onSelectBuy(found);\n };\n return (\n <div\n className=\"pollar-modal-card pollar-swap-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {showBack && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onBack} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3 5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <h2 className=\"pollar-modal-title\">{title}</h2>\n </div>\n {!isInProgress && (\n <div className=\"pollar-modal-header-actions\">\n {step === 'form' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={configLoading || isLoadingData}\n aria-label=\"Refresh\"\n title=\"Refresh balances and options\"\n >\n <RefreshIcon spinning={configLoading || isLoadingData} />\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n\n {step === 'form' && !configLoading && swapUnavailable && (\n <div className=\"pollar-modal-error\">Swap is not available for this app.</div>\n )}\n\n {step === 'form' && !swapUnavailable && (\n <>\n {smartUnsupported && (\n <div className=\"pollar-modal-error\">Swaps are not yet available for smart (passkey) wallets.</div>\n )}\n\n <div className=\"pollar-swap-panels\">\n <section className=\"pollar-swap-panel\" aria-labelledby=\"pollar-swap-pay-label\">\n <div className=\"pollar-swap-panel-heading\">\n <span id=\"pollar-swap-pay-label\" className=\"pollar-swap-panel-label\">\n You pay\n </span>\n <span className=\"pollar-swap-balance\">Balance: {formatAmount(selectedSell?.available)}</span>\n </div>\n <div className=\"pollar-swap-panel-main\">\n <input\n className=\"pollar-swap-amount\"\n type=\"text\"\n inputMode=\"decimal\"\n aria-label=\"Amount to pay\"\n placeholder=\"0.00\"\n value={amount}\n disabled={configLoading || isLoadingData}\n onChange={(event) => onAmountChange(event.target.value)}\n />\n <div className=\"pollar-swap-panel-selector\">\n <AssetPill\n label=\"Asset to pay\"\n value={sellKey}\n options={sellOptions}\n disabled={configLoading || isLoadingData}\n onChange={selectSell}\n />\n <button\n type=\"button\"\n className=\"pollar-swap-max\"\n onClick={onMax}\n disabled={!selectedSell?.available || configLoading || isLoadingData}\n >\n Max\n </button>\n </div>\n </div>\n </section>\n\n <button\n type=\"button\"\n className=\"pollar-swap-reverse\"\n onClick={onReverse}\n disabled={!selectedSell || !selectedBuy}\n aria-label=\"Swap pay and receive assets\"\n title=\"Swap pay and receive assets\"\n >\n <svg width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\" aria-hidden>\n <path\n d=\"M5 3v10M5 3 2.5 5.5M5 3l2.5 2.5M12 14V4M12 14l2.5-2.5M12 14 9.5 11.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n <section className=\"pollar-swap-panel\" aria-labelledby=\"pollar-swap-receive-label\">\n <div className=\"pollar-swap-panel-heading\">\n <span id=\"pollar-swap-receive-label\" className=\"pollar-swap-panel-label\">\n You receive\n </span>\n <span className=\"pollar-swap-balance\">Balance: {formatAmount(selectedBuy?.available)}</span>\n </div>\n <div className=\"pollar-swap-panel-main\">\n <div className={`pollar-swap-output${quoteLoading ? ' is-loading' : ''}`} aria-live=\"polite\">\n {quoteLoading ? <span className=\"pollar-spinner pollar-spinner-sm\" /> : formatAmount(quote?.amountOut)}\n </div>\n <div className=\"pollar-swap-panel-selector\">\n <AssetPill\n label=\"Asset to receive\"\n value={buyKey}\n options={buyOptions}\n disabled={configLoading || isLoadingData}\n onChange={selectBuy}\n />\n <span className=\"pollar-swap-panel-note\">Quoted amount</span>\n </div>\n </div>\n </section>\n </div>\n\n {/* A buy token the app has not enabled, by code and issuer */}\n <div className=\"pollar-swap-custom-area\">\n {customOpen ? (\n <div className=\"pollar-swap-custom\">\n <input\n className=\"pollar-input\"\n type=\"text\"\n placeholder=\"Code (e.g. USDC)\"\n value={customCode}\n onChange={(e) => setCustomCode(e.target.value)}\n />\n <input\n className=\"pollar-input\"\n type=\"text\"\n placeholder=\"Issuer (G...)\"\n value={customIssuer}\n onChange={(e) => setCustomIssuer(e.target.value)}\n />\n {customError && <div className=\"pollar-modal-error\">{customError}</div>}\n <div className=\"pollar-swap-custom-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={submitCustomToken}>\n Add token\n </button>\n <button\n type=\"button\"\n className=\"pollar-swap-custom-cancel\"\n onClick={() => {\n setCustomOpen(false);\n setCustomError('');\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <button\n type=\"button\"\n className=\"pollar-swap-custom-toggle\"\n disabled={configLoading}\n onClick={() => setCustomOpen(true)}\n >\n + Add a token by code / issuer\n </button>\n )}\n </div>\n\n <div className=\"pollar-swap-rate-row\">\n <div className=\"pollar-swap-rate\" aria-live=\"polite\">\n {rate && selectedSell && selectedBuy ? (\n <>\n 1 {selectedSell.code} ≈ {rate} {selectedBuy.code}\n </>\n ) : quoteLoading ? (\n 'Updating rate…'\n ) : (\n 'Exchange rate unavailable'\n )}\n </div>\n {configLoading ? (\n <div className=\"pollar-swap-route-pill\">\n <span className=\"pollar-spinner pollar-spinner-sm\" /> Loading\n </div>\n ) : (\n <label className=\"pollar-swap-route-wrap\">\n <span className=\"sr-only\">Route</span>\n <select\n className=\"pollar-swap-route-pill\"\n aria-label=\"Route\"\n value={provider}\n disabled={providers.length === 0}\n onChange={(event) => onProviderChange(event.target.value as SwapProvider)}\n >\n {providers.length === 0 ? (\n <option value={provider}>{PROVIDER_LABELS[provider]}</option>\n ) : (\n providers.map((p) => (\n <option key={p} value={p}>\n {PROVIDER_LABELS[p]}\n </option>\n ))\n )}\n </select>\n </label>\n )}\n </div>\n\n {!quoteLoading && quoteError && <div className=\"pollar-modal-error\">{quoteError}</div>}\n {!quoteLoading && !quoteError && !quote && selectedSell && selectedBuy && !!amount && (\n <div className=\"pollar-send-hint\">No route found for this pair.</div>\n )}\n {quote && (\n <div className=\"pollar-swap-quote\">\n <div className=\"pollar-swap-quote-row\">\n <span>Minimum received</span>\n <strong>\n {formatAmount(quote.minReceived)} {selectedBuy?.code}\n </strong>\n </div>\n <div className=\"pollar-swap-quote-row\">\n <span>Price impact</span>\n <strong>{quote.priceImpactPct}%</strong>\n </div>\n <div className=\"pollar-swap-quote-row\">\n <span>Route</span>\n <strong>{PROVIDER_LABELS[quote.provider]}</strong>\n </div>\n </div>\n )}\n {buyNeedsTrustline && selectedBuy && (\n <div className=\"pollar-swap-trustline-notice\">\n To receive {selectedBuy.code} your wallet needs a trustline. Swapping will create it first (~0.5 XLM reserve,\n refundable if you later remove it).\n </div>\n )}\n {sameAsset && <div className=\"pollar-modal-error\">Choose two different assets to swap.</div>}\n {formError && <div className=\"pollar-modal-error\">{formError}</div>}\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onSwap} disabled={!canSwap}>\n {buyNeedsTrustline ? 'Create trustline & swap' : 'Swap'}\n </button>\n </div>\n </>\n )}\n\n {step === 'tx' && (\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={() => {}}\n onToggleXdr={onToggleXdr}\n onCopyHash={onCopyHash}\n onRetry={onRetry}\n onDone={onDone}\n />\n )}\n <PollarModalFooter shield />\n </div>\n );\n}\n","'use client';\n\nimport { SwapProvider, SwapQuote, SwapQuoteParams, SwapToken, SwapVenue } from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport '../transaction-modal/TransactionModal.css';\nimport '../send-modal/SendModal.css';\nimport './SwapModal.css';\nimport { SwapAssetOption, SwapModalTemplate } from './SwapModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface SwapModalProps {\n onClose: () => void;\n}\n\n/** Debounce (ms) before re-quoting as the user edits the amount / assets. */\nconst QUOTE_DEBOUNCE_MS = 400;\n\ntype AssetLike = { type: 'native' | 'credit_alphanum4' | 'credit_alphanum12'; code: string; issuer?: string | undefined };\n\nfunction toRef(a: AssetLike): SwapQuoteParams['sellAsset'] {\n if (a.type === 'native') return { type: 'native' };\n if (a.type === 'credit_alphanum4') return { type: 'credit_alphanum4', code: a.code, issuer: a.issuer! };\n return { type: 'credit_alphanum12', code: a.code, issuer: a.issuer! };\n}\n\n/** A catalog token (code + issuer) -> the asset ref, picking the alphanum width. */\nfunction catalogRef(code: string, issuer: string): SwapQuoteParams['sellAsset'] {\n return code.length <= 4 ? { type: 'credit_alphanum4', code, issuer } : { type: 'credit_alphanum12', code, issuer };\n}\n\nexport function SwapModal({ onClose }: SwapModalProps) {\n const {\n getSwapConfig,\n getSwapTokens,\n getSwapQuote,\n swap,\n walletBalance,\n refreshWalletBalance,\n enabledAssets,\n refreshAssets,\n tx: transaction,\n wallet,\n network,\n styles,\n } = usePollar();\n\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const smartUnsupported = wallet?.custody === 'smart';\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<'form' | 'tx'>('form');\n const [selectedSell, setSelectedSell] = useState<SwapAssetOption | null>(null);\n const [selectedBuy, setSelectedBuy] = useState<SwapAssetOption | null>(null);\n const [amount, setAmount] = useState('');\n const [provider, setProvider] = useState<SwapProvider>('auto');\n const [venues, setVenues] = useState<SwapVenue[] | null>(null); // null = config loading\n const [catalogTokens, setCatalogTokens] = useState<SwapToken[]>([]);\n // Tokens the user pasted by code+issuer (not in the app catalog). Local only.\n const [customTokens, setCustomTokens] = useState<SwapAssetOption[]>([]);\n const [quotes, setQuotes] = useState<SwapQuote[]>([]);\n const [quoteLoading, setQuoteLoading] = useState(false);\n const [quoteError, setQuoteError] = useState('');\n const [formError, setFormError] = useState('');\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Fixed default slippage (0.5%). Exposed as a constant for now; an advanced\n // control can drive this later without touching the quote/execute wiring.\n const slippageBps = 50;\n\n useEffect(() => {\n void refreshWalletBalance();\n void refreshAssets();\n }, [refreshWalletBalance, refreshAssets]);\n\n // Which venues this app exposes (operator config intersected with server capability).\n const loadConfig = useCallback(() => {\n setVenues(null); // back to loading\n return getSwapConfig()\n .then(setVenues)\n .catch(() => setVenues([])); // treat a failed config as \"unavailable\"\n }, [getSwapConfig]);\n\n useEffect(() => {\n void loadConfig();\n }, [loadConfig]);\n\n // Curated \"buy\" catalog tokens the app opted into (may lack a trustline).\n const loadCatalog = useCallback(\n () =>\n getSwapTokens()\n .then(setCatalogTokens)\n .catch(() => setCatalogTokens([])),\n [getSwapTokens],\n );\n\n useEffect(() => {\n void loadCatalog();\n }, [loadCatalog]);\n\n // Re-pull everything the modal shows: balances, app assets, config and catalog.\n function handleRefresh() {\n void refreshWalletBalance();\n void refreshAssets();\n void loadConfig();\n void loadCatalog();\n }\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n const balances = walletBalance.step === 'loaded' ? walletBalance.data.balances : [];\n const assetRecords = enabledAssets.step === 'loaded' ? enabledAssets.data.assets : [];\n const isLoadingData = walletBalance.step === 'loading' || enabledAssets.step === 'loading';\n const availableFor = (code: string, issuer?: string): string | undefined =>\n balances.find((b) => b.code === code && (b.issuer ?? '') === (issuer ?? ''))?.available ?? undefined;\n\n // Sell: native XLM + every asset the wallet has a trustline for, even at a 0\n // balance - so the user always sees what they hold and knows when to fund\n // (the amount field guards against overselling). Buy: app-enabled assets.\n // Swap is Stellar-only, so the guard drops every non-Stellar balance and\n // narrows `type` for toRef(). It has to test `chain`, not `type`: SOL/POL\n // report `type: 'native'` exactly like XLM, and a Solana/Polygon token reports\n // `type: 'token'` with no `trustlineRemoved`, so neither can be told apart\n // from a Stellar row by `type` alone.\n const sellOptions: SwapAssetOption[] = balances\n .filter(\n (b): b is typeof b & { type: 'native' | 'credit_alphanum4' | 'credit_alphanum12' } =>\n (b.chain === undefined || b.chain === 'STELLAR') &&\n (b.type === 'native' || ((b.type === 'credit_alphanum4' || b.type === 'credit_alphanum12') && !b.trustlineRemoved)),\n )\n // A null `available` (chain unreadable) maps to undefined - \"unknown\", which\n // the option already models - rather than to a 0 that would read as \"empty\".\n .map((b) => ({\n ref: toRef(b),\n code: b.code,\n issuer: b.issuer,\n available: b.available ?? undefined,\n enabledInApp: b.enabledInApp,\n }));\n\n const buyKeyOfSell = selectedSell ? `${selectedSell.code}:${selectedSell.issuer ?? 'native'}` : '';\n const optKey = (o: { code: string; issuer?: string | undefined }) => `${o.code}:${o.issuer ?? 'native'}`;\n // Buy list = the app's enabled assets, plus curated catalog tokens the app\n // opted into (deduped; catalog tokens the wallet may not trust yet). Exclude\n // whatever is being sold.\n // Same Stellar-only guard as the sell list: the enabled-asset catalog is now\n // multichain, and a Polygon/Solana token (type 'token') has no Stellar asset\n // ref to swap with. The predicate both drops them and narrows `type` for toRef().\n const enabledBuy: SwapAssetOption[] = assetRecords\n .filter(\n (a): a is typeof a & { type: 'native' | 'credit_alphanum4' | 'credit_alphanum12' } =>\n (a.chain === undefined || a.chain === 'STELLAR') &&\n (a.type === 'native' || a.type === 'credit_alphanum4' || a.type === 'credit_alphanum12'),\n )\n .map((a) => ({\n ref: toRef(a),\n code: a.code,\n issuer: a.issuer,\n available: availableFor(a.code, a.issuer),\n enabledInApp: a.enabledInApp,\n }));\n const enabledKeys = new Set(enabledBuy.map(optKey));\n const catalogBuy: SwapAssetOption[] = catalogTokens\n .map((tk) => ({\n ref: catalogRef(tk.code, tk.issuer),\n code: tk.code,\n issuer: tk.issuer,\n available: availableFor(tk.code, tk.issuer),\n enabledInApp: false,\n }))\n .filter((o) => !enabledKeys.has(optKey(o)));\n const knownKeys = new Set([...enabledKeys, ...catalogBuy.map(optKey)]);\n const customBuy = customTokens\n .filter((o) => !knownKeys.has(optKey(o)))\n .map((o) => ({ ...o, available: availableFor(o.code, o.issuer) }));\n const buyOptions: SwapAssetOption[] = [...enabledBuy, ...catalogBuy, ...customBuy].filter(\n (o) => optKey(o) !== buyKeyOfSell || optKey(o) === (selectedBuy ? optKey(selectedBuy) : ''),\n );\n\n // Auto-select the first sell / buy asset once options are available, and keep a\n // valid selection if the list changes - so the pickers never sit empty.\n useEffect(() => {\n if (sellOptions.length === 0) return;\n if (!selectedSell || !sellOptions.some((o) => optKey(o) === optKey(selectedSell))) {\n setSelectedSell(sellOptions[0]!);\n }\n }, [sellOptions, selectedSell]);\n\n useEffect(() => {\n if (buyOptions.length === 0) return;\n if (!selectedBuy || !buyOptions.some((o) => optKey(o) === optKey(selectedBuy))) {\n setSelectedBuy(buyOptions[0]!);\n }\n }, [buyOptions, selectedBuy]);\n\n // Add a user-pasted token (code + issuer) to the buy list and select it.\n // Returns an error message, or null on success.\n function addCustomToken(code: string, issuer: string): string | null {\n const c = code.trim().toUpperCase();\n const i = issuer.trim();\n if (c.length < 1 || c.length > 12) return 'Code must be 1-12 characters';\n if (i.length !== 56 || !i.startsWith('G')) return 'Issuer must be a Stellar address (G..., 56 chars)';\n const opt: SwapAssetOption = { ref: catalogRef(c, i), code: c, issuer: i, enabledInApp: false };\n setCustomTokens((prev) => (prev.some((o) => optKey(o) === optKey(opt)) ? prev : [...prev, opt]));\n setSelectedBuy(opt);\n return null;\n }\n\n // Does buying `selectedBuy` require creating a trustline first? Native never;\n // a credit asset the wallet already trusts (in enabledAssets with\n // trustlineEstablished) doesn't; anything else (incl. catalog tokens) does.\n // Smart wallets hold SAC tokens (no classic trustlines) so it never applies.\n const buyNeedsTrustline = (() => {\n if (!selectedBuy || smartUnsupported) return false;\n if (selectedBuy.ref.type === 'native') return false;\n const rec = assetRecords.find((a) => a.code === selectedBuy.code && a.issuer === selectedBuy.issuer);\n return !rec?.trustlineEstablished;\n })();\n\n const configLoading = venues === null;\n const swapUnavailable = venues !== null && venues.length === 0;\n // Offer \"Auto\" (best of the enabled set) plus each configured venue.\n const providers: SwapProvider[] = venues && venues.length > 0 ? (['auto', ...venues] as SwapProvider[]) : [];\n const quote = quotes[0] ?? null;\n\n // Re-quote (debounced) whenever the pair / amount / route changes.\n useEffect(() => {\n if (\n step !== 'form' ||\n swapUnavailable ||\n configLoading ||\n !selectedSell ||\n !selectedBuy ||\n !amount ||\n parseFloat(amount) <= 0\n ) {\n setQuotes([]);\n setQuoteError('');\n setQuoteLoading(false);\n return;\n }\n let cancelled = false;\n setQuoteLoading(true);\n setQuoteError('');\n const t = setTimeout(async () => {\n try {\n const qs = await getSwapQuote({\n sellAsset: selectedSell.ref,\n buyAsset: selectedBuy.ref,\n amount,\n provider,\n slippageBps,\n });\n if (!cancelled) setQuotes(qs);\n } catch (e) {\n if (!cancelled) {\n setQuotes([]);\n setQuoteError(e instanceof Error ? e.message : 'Failed to fetch quote');\n }\n } finally {\n if (!cancelled) setQuoteLoading(false);\n }\n }, QUOTE_DEBOUNCE_MS);\n return () => {\n cancelled = true;\n clearTimeout(t);\n };\n }, [step, swapUnavailable, configLoading, selectedSell, selectedBuy, amount, provider, getSwapQuote]);\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n const explorerUrl = hash ? `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}` : null;\n\n const IN_FLIGHT_STEPS = [\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n ] as const;\n const isInProgress = (IN_FLIGHT_STEPS as readonly string[]).includes(transaction.step);\n const showBack = step === 'tx' && (transaction.step === 'error' || transaction.step === 'success') && !isInProgress;\n\n const txTitle = isInProgress\n ? 'Swapping…'\n : transaction.step === 'success'\n ? 'Swapped!'\n : transaction.step === 'error'\n ? 'Swap failed'\n : 'Confirm Swap';\n\n async function handleSwap() {\n setFormError('');\n if (smartUnsupported) {\n setFormError('Swaps are not yet supported for smart (passkey) wallets');\n return;\n }\n if (!selectedSell || !selectedBuy) {\n setFormError('Select both assets');\n return;\n }\n const parsed = parseFloat(amount);\n if (!amount || isNaN(parsed) || parsed <= 0) {\n setFormError('Enter a valid amount');\n return;\n }\n if (selectedSell.available !== undefined && parsed > parseFloat(selectedSell.available)) {\n setFormError('Insufficient balance');\n return;\n }\n if (!quote) {\n setFormError('No route available for this pair');\n return;\n }\n setStep('tx');\n await swap(quote);\n }\n\n async function handleRetry() {\n if (transaction.step === 'error' && quote) await swap(quote);\n }\n\n function handleMax() {\n if (selectedSell?.available !== undefined) setAmount(selectedSell.available);\n }\n\n function handleReverse() {\n if (!selectedSell || !selectedBuy) return;\n const previousSell = selectedSell;\n setSelectedSell(selectedBuy);\n setSelectedBuy(previousSell);\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n function handleBack() {\n setStep('form');\n setShowXdr(false);\n setCopied(false);\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={!isInProgress ? onClose : undefined}>\n <SwapModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n txTitle={txTitle}\n sellOptions={sellOptions}\n buyOptions={buyOptions}\n selectedSell={selectedSell}\n selectedBuy={selectedBuy}\n amount={amount}\n provider={provider}\n providers={providers}\n quote={quote}\n quoteLoading={quoteLoading}\n quoteError={quoteError}\n formError={formError}\n isLoadingData={isLoadingData}\n smartUnsupported={smartUnsupported}\n configLoading={configLoading}\n swapUnavailable={swapUnavailable}\n buyNeedsTrustline={buyNeedsTrustline}\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n showBack={showBack}\n isInProgress={isInProgress}\n onClose={onClose}\n onBack={handleBack}\n onRefresh={handleRefresh}\n onSelectSell={setSelectedSell}\n onSelectBuy={setSelectedBuy}\n onReverse={handleReverse}\n onMax={handleMax}\n onAddCustomToken={addCustomToken}\n onAmountChange={setAmount}\n onProviderChange={setProvider}\n onSwap={() => void handleSwap()}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={() => void handleRetry()}\n onDone={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { EarnOpportunity, EarnPosition, EarnProviderId } from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { TxStatusView } from '../transaction-modal/TxStatusView';\nimport '../shared.css';\nimport '../transaction-modal/TransactionModal.css';\nimport '../send-modal/SendModal.css';\nimport '../swap-modal/SwapModal.css';\nimport './EarnModal.css';\n\ninterface EarnModalProps {\n onClose: () => void;\n}\n\n/** Poll interval (ms) for the live position + APY. */\nconst POSITION_POLL_MS = 10000;\n\nconst PROVIDER_LABELS: Record<EarnProviderId, string> = {\n blend: 'Blend',\n defindex: 'DeFindex',\n};\n\nconst IN_FLIGHT_STEPS = [\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n] as const;\n\nfunction formatAmount(value: string): string {\n const n = parseFloat(value);\n return isNaN(n) ? value : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\nexport function EarnModal({ onClose }: EarnModalProps) {\n const {\n getEarnProviders,\n getEarnOpportunities,\n getEarnPosition,\n earnDeposit,\n earnWithdraw,\n tx: transaction,\n wallet,\n walletBalance,\n refreshWalletBalance,\n enabledAssets,\n refreshAssets,\n setTrustline,\n network,\n styles,\n } = usePollar();\n\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const smartUnsupported = wallet?.custody === 'smart';\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<'form' | 'tx'>('form');\n const [tab, setTab] = useState<'deposit' | 'withdraw'>('deposit');\n const [providers, setProviders] = useState<EarnProviderId[] | null>(null); // null = loading\n const [provider, setProvider] = useState<EarnProviderId | null>(null);\n const [opportunities, setOpportunities] = useState<EarnOpportunity[]>([]);\n const [opportunityId, setOpportunityId] = useState('');\n const [position, setPosition] = useState<EarnPosition | null>(null);\n const [amount, setAmount] = useState('');\n const [loadingOpps, setLoadingOpps] = useState(false);\n const [formError, setFormError] = useState('');\n const [refreshing, setRefreshing] = useState(false);\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // --- Providers ------------------------------------------------------------\n const loadProviders = useCallback(() => {\n setProviders(null);\n return getEarnProviders()\n .then((ps) => {\n setProviders(ps);\n setProvider((cur) => cur ?? ps[0] ?? null);\n })\n .catch(() => setProviders([]));\n }, [getEarnProviders]);\n\n useEffect(() => {\n void loadProviders();\n }, [loadProviders]);\n\n // The wallet balance drives the Deposit tab's \"In your wallet\" row + Max; the\n // enabled assets drive the deposit-asset trustline check.\n useEffect(() => {\n void refreshWalletBalance();\n void refreshAssets();\n }, [refreshWalletBalance, refreshAssets]);\n\n // --- Opportunities (per provider) -------------------------------------------\n useEffect(() => {\n if (!provider) return;\n let cancelled = false;\n setLoadingOpps(true);\n getEarnOpportunities(provider)\n .then((opps) => {\n if (cancelled) return;\n setOpportunities(opps);\n setOpportunityId((cur) => (opps.some((o) => o.id === cur) ? cur : (opps[0]?.id ?? '')));\n })\n .catch(() => {\n if (!cancelled) setOpportunities([]);\n })\n .finally(() => {\n if (!cancelled) setLoadingOpps(false);\n });\n return () => {\n cancelled = true;\n };\n }, [provider, getEarnOpportunities]);\n\n const selectedOpportunity = opportunities.find((o) => o.id === opportunityId) ?? null;\n\n // --- Position (live, polled) ------------------------------------------------\n const refreshPosition = useCallback(() => {\n if (!provider || !opportunityId || !wallet) return;\n getEarnPosition({ provider, opportunity: opportunityId })\n .then(setPosition)\n .catch(() => {\n /* leave the last snapshot on a transient read error */\n });\n }, [provider, opportunityId, wallet, getEarnPosition]);\n\n useEffect(() => {\n setPosition(null);\n refreshPosition();\n }, [refreshPosition]);\n\n useEffect(() => {\n if (step !== 'form' || !provider || !opportunityId) return;\n const id = setInterval(refreshPosition, POSITION_POLL_MS);\n return () => clearInterval(id);\n }, [step, provider, opportunityId, refreshPosition]);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n // --- Derived ----------------------------------------------------------------\n const providersLoading = providers === null;\n const earnUnavailable = providers !== null && providers.length === 0;\n const withdrawUnit = position?.withdrawUnit ?? 'asset';\n const assetCode = selectedOpportunity?.asset.code ?? '';\n const amountUnitLabel = tab === 'deposit' ? assetCode : withdrawUnit === 'shares' ? 'shares' : assetCode;\n\n // The wallet's spendable balance of the selected opportunity's asset (native\n // XLM matches by type; issued assets by code + issuer). `null` = unknown yet.\n const walletAvailable = (() => {\n if (!selectedOpportunity) return null;\n const balances = walletBalance.step === 'loaded' ? walletBalance.data.balances : [];\n const issuer = selectedOpportunity.asset.issuer;\n const rec = balances.find((b) => (issuer === null ? b.type === 'native' : b.code === assetCode && b.issuer === issuer));\n return rec ? rec.available : null;\n })();\n\n // Depositing an issued asset (e.g. USDC) needs the wallet to trust it first.\n // Native XLM and pure Soroban tokens (no classic issuer) never do; smart\n // (C-address) wallets hold SAC tokens, so no classic trustline applies. When\n // needed, the deposit runs as two signatures: trustline, then deposit.\n const depositAssetRecord = (() => {\n if (!selectedOpportunity?.asset.issuer || enabledAssets.step !== 'loaded') return undefined;\n // Stellar-only: the catalog is multichain now, and Earn (DeFindex/Blend)\n // settles on Stellar. Chain is undefined on the v1 shape, so absent = Stellar.\n return enabledAssets.data.assets.find(\n (a) =>\n (a.chain === undefined || a.chain === 'STELLAR') &&\n a.code === assetCode &&\n a.issuer === selectedOpportunity.asset.issuer,\n );\n })();\n const depositNeedsTrustline =\n tab === 'deposit' && !smartUnsupported && !!selectedOpportunity?.asset.issuer && !depositAssetRecord?.trustlineEstablished;\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n const explorerUrl = hash ? `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}` : null;\n\n const isInProgress = (IN_FLIGHT_STEPS as readonly string[]).includes(transaction.step);\n const showBack = step === 'tx' && (transaction.step === 'error' || transaction.step === 'success') && !isInProgress;\n\n const txTitle = isInProgress\n ? tab === 'deposit'\n ? 'Depositing…'\n : 'Withdrawing…'\n : transaction.step === 'success'\n ? 'Done!'\n : transaction.step === 'error'\n ? tab === 'deposit'\n ? 'Deposit failed'\n : 'Withdraw failed'\n : 'Confirm';\n\n // Over-spend guard: deposit can't exceed the wallet's available balance;\n // withdraw can't exceed the position. Skipped while the relevant figure is\n // still unknown (`null`) so a slow balance read doesn't block a valid amount.\n const parsedAmount = parseFloat(amount);\n const exceedsAvailable =\n tab === 'deposit'\n ? walletAvailable != null && parsedAmount > parseFloat(walletAvailable)\n : position != null && parsedAmount > parseFloat(position.withdrawable);\n\n const canSubmit =\n !smartUnsupported &&\n !!provider &&\n !!opportunityId &&\n !!amount &&\n parsedAmount > 0 &&\n !exceedsAvailable &&\n !providersLoading &&\n !loadingOpps;\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n // --- Actions ----------------------------------------------------------------\n async function handleSubmit() {\n setFormError('');\n if (smartUnsupported) {\n setFormError('Earn is not yet supported for smart (passkey) wallets');\n return;\n }\n if (!provider || !opportunityId) {\n setFormError('Select a vault or pool');\n return;\n }\n const parsed = parseFloat(amount);\n if (!amount || isNaN(parsed) || parsed <= 0) {\n setFormError('Enter a valid amount');\n return;\n }\n if (tab === 'deposit' && walletAvailable != null && parsed > parseFloat(walletAvailable)) {\n setFormError('Amount exceeds your wallet balance');\n return;\n }\n if (tab === 'withdraw' && position && parsed > parseFloat(position.withdrawable)) {\n setFormError('Amount exceeds your position');\n return;\n }\n setStep('tx');\n\n // Deposit of an issued asset needs its trustline first (native never does).\n // Establish it, then deposit - two signatures, like swap.\n if (tab === 'deposit' && depositNeedsTrustline && selectedOpportunity?.asset.issuer) {\n // Sponsorship is derived automatically from the app config now - no flag.\n const tl = await setTrustline({ code: assetCode, issuer: selectedOpportunity.asset.issuer });\n if (tl.status === 'error') {\n setFormError(`Trustline for ${assetCode} failed: ${tl.details ?? 'unknown error'}`);\n setStep('form');\n return;\n }\n await refreshAssets();\n }\n\n const params = { provider, opportunity: opportunityId, amount };\n const outcome = tab === 'deposit' ? await earnDeposit(params) : await earnWithdraw(params);\n if (outcome.status === 'success' || outcome.status === 'pending') {\n setAmount('');\n refreshPosition();\n }\n }\n\n async function handleRetry() {\n if (transaction.step !== 'error' || !provider || !opportunityId) return;\n const params = { provider, opportunity: opportunityId, amount };\n if (tab === 'deposit') await earnDeposit(params);\n else await earnWithdraw(params);\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n function handleBack() {\n setStep('form');\n setShowXdr(false);\n setCopied(false);\n refreshPosition();\n }\n\n // Re-fetch everything the modal shows on demand: the opportunities for the\n // current provider (fresh APYs), the wallet's position, and the wallet balance\n // (\"In your wallet\" + Max). Leaves the current data in place on a transient\n // read error.\n async function handleRefresh() {\n if (refreshing || !provider) return;\n setRefreshing(true);\n try {\n void refreshWalletBalance();\n const opps = await getEarnOpportunities(provider);\n setOpportunities(opps);\n setOpportunityId((cur) => (opps.some((o) => o.id === cur) ? cur : (opps[0]?.id ?? '')));\n refreshPosition();\n } catch {\n /* transient - keep the current snapshot */\n } finally {\n setRefreshing(false);\n }\n }\n\n const title = step === 'form' ? 'Earn' : txTitle;\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={!isInProgress ? onClose : undefined}>\n <div\n className=\"pollar-modal-card pollar-send-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {showBack && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={handleBack} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <h2 className=\"pollar-modal-title\">{title}</h2>\n </div>\n <div className=\"pollar-modal-header-actions\">\n {step === 'form' && !earnUnavailable && !smartUnsupported && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={() => void handleRefresh()}\n disabled={refreshing || providersLoading}\n aria-label=\"Refresh\"\n >\n <svg\n className={refreshing ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n {!isInProgress && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n\n {step === 'form' && earnUnavailable && <div className=\"pollar-modal-error\">Earn is not available for this app.</div>}\n\n {step === 'form' && !earnUnavailable && (\n <>\n {smartUnsupported && (\n <div className=\"pollar-modal-error\">Earn is not yet available for smart (passkey) wallets.</div>\n )}\n\n {/* Deposit / Withdraw tabs */}\n <div className=\"pollar-tabs\">\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={tab === 'deposit'}\n onClick={() => {\n setTab('deposit');\n setFormError('');\n }}\n >\n Deposit\n </button>\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={tab === 'withdraw'}\n onClick={() => {\n setTab('withdraw');\n setFormError('');\n }}\n >\n Withdraw\n </button>\n </div>\n\n {/* Provider */}\n {providers && providers.length > 1 && (\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\">Provider</label>\n <select\n className=\"pollar-input pollar-send-select\"\n value={provider ?? ''}\n onChange={(e) => setProvider(e.target.value as EarnProviderId)}\n >\n {providers.map((p) => (\n <option key={p} value={p}>\n {PROVIDER_LABELS[p]}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Opportunity */}\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\">{provider === 'defindex' ? 'Vault' : 'Pool'}</label>\n {loadingOpps || providersLoading ? (\n <div className=\"pollar-input pollar-select-loading\">\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n <span>Loading options…</span>\n </div>\n ) : (\n <select\n className=\"pollar-input pollar-send-select\"\n value={opportunityId}\n disabled={opportunities.length === 0}\n onChange={(e) => setOpportunityId(e.target.value)}\n >\n {opportunities.length === 0 ? (\n <option value=\"\">None available</option>\n ) : (\n opportunities.map((o) => (\n <option key={o.id} value={o.id}>\n {o.name} · {o.apy.toFixed(2)}% APY\n </option>\n ))\n )}\n </select>\n )}\n </div>\n\n {/* Live position panel */}\n {selectedOpportunity && (\n <div className=\"pollar-swap-quote\">\n {tab === 'deposit' && (\n <div className=\"pollar-swap-quote-row\">\n <span className=\"pollar-send-hint\">In your wallet</span>\n <span>\n {walletAvailable != null ? formatAmount(walletAvailable) : '…'} {assetCode}\n </span>\n </div>\n )}\n <div className=\"pollar-swap-quote-row\">\n <span className=\"pollar-send-hint\">Your position</span>\n <span>\n {position ? formatAmount(position.balance) : '…'} {assetCode}\n </span>\n </div>\n <div className=\"pollar-swap-quote-row\">\n <span className=\"pollar-send-hint\">APY</span>\n <span className=\"pollar-earn-live\">{selectedOpportunity.apy.toFixed(2)}%</span>\n </div>\n </div>\n )}\n\n {/* Amount */}\n <div className=\"pollar-send-field\">\n <div className=\"pollar-send-label-row\">\n <label className=\"pollar-send-label\">{tab === 'deposit' ? 'Amount' : 'Withdraw amount'}</label>\n {tab === 'deposit' && walletAvailable != null && (\n <button type=\"button\" className=\"pollar-swap-custom-toggle\" onClick={() => setAmount(walletAvailable)}>\n Max: {formatAmount(walletAvailable)} {amountUnitLabel}\n </button>\n )}\n {tab === 'withdraw' && position && (\n <button type=\"button\" className=\"pollar-swap-custom-toggle\" onClick={() => setAmount(position.withdrawable)}>\n Max: {formatAmount(position.withdrawable)} {amountUnitLabel}\n </button>\n )}\n </div>\n <div className=\"pollar-earn-amount\">\n <input\n className=\"pollar-input\"\n type=\"text\"\n inputMode=\"decimal\"\n placeholder=\"0.00\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n />\n {amountUnitLabel && <span className=\"pollar-earn-amount-unit\">{amountUnitLabel}</span>}\n </div>\n </div>\n\n {formError && <div className=\"pollar-modal-error\">{formError}</div>}\n\n {depositNeedsTrustline && selectedOpportunity && (\n <div className=\"pollar-swap-trustline-notice\">\n To deposit {assetCode} your wallet needs a trustline. This will create it first (~0.5 XLM reserve, refundable if\n you later remove it), then deposit — two signatures.\n </div>\n )}\n\n <div className=\"pollar-modal-actions\">\n <button className=\"pollar-btn-primary\" onClick={() => void handleSubmit()} disabled={!canSubmit}>\n {tab === 'deposit' ? (depositNeedsTrustline ? 'Enable trustline & deposit' : 'Deposit') : 'Withdraw'}\n </button>\n </div>\n </>\n )}\n\n {step === 'tx' && (\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={() => {}}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={() => void handleRetry()}\n onDone={onClose}\n />\n )}\n\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","import type { CardHolder, CardRequirements, CardRequirementStep } from '@pollar/core';\n\n/**\n * A platform step the user must complete before a card provider: a KYC option, a\n * form, a registry option, or (for PROVIDER_REGISTRATION) the provider itself.\n */\nexport type PendingCardStep = {\n cardProviderId: string;\n type: CardRequirementStep['type'];\n optionId: string;\n progress?: { position: number; total: number };\n};\n\nconst nonEmpty = (value: unknown): value is string => typeof value === 'string' && !!value.trim();\n\n/** The step a cards call named in its 409, or null for any other error. */\nexport function requiredCardStep(error: unknown): PendingCardStep | null {\n if (!error || typeof error !== 'object') return null;\n const { code, body } = error as { code?: unknown; body?: unknown };\n if (code !== 'SDK_CARDS_REQUIREMENT_REQUIRED' || !body || typeof body !== 'object') return null;\n const { cardProviderId, requirementType, optionId } = body as Record<string, unknown>;\n if (!nonEmpty(cardProviderId) || !nonEmpty(optionId)) return null;\n if (\n requirementType === 'KYC' ||\n requirementType === 'FORM' ||\n requirementType === 'REGISTRY_CHECK' ||\n requirementType === 'PROVIDER_REGISTRATION'\n ) {\n return { cardProviderId, type: requirementType, optionId };\n }\n return null;\n}\n\n/** The step the provider's requirements name as next. */\nexport function pendingFromRequirement(cardProviderId: string, next: CardRequirementStep): PendingCardStep {\n return {\n cardProviderId,\n type: next.type,\n optionId: next.optionId,\n progress: { position: next.completed + 1, total: next.total },\n };\n}\n\n/** What a step held for review or rejected says; null when the user can act on it. */\nexport function blockedStepMessage(next: CardRequirementStep): string | null {\n if (next.type === 'REGISTRY_CHECK' && next.status === 'pending') return 'Your details are under review.';\n if (next.type !== 'KYC') return null;\n if (next.status === 'pending' && next.reviewReason) return 'Your verification is under review.';\n if (next.status === 'rejected') return 'Your verification was not approved.';\n return null;\n}\n\n/**\n * Which part of the card flow the user is at before the provider has their KYC:\n * `steps` while nobody signed them up or the platform's steps are pending,\n * `provider-form` when the provider's own KYC form is theirs to fill, null past\n * both or while the holder or the requirements are loading. A holder signed up\n * before the app added steps still owes them. With a PROVIDER_REGISTRATION step\n * the platform sends the provider's KYC itself, so the provider's form never shows;\n * a holder still NOT_STARTED there stays on `steps`, whose action re-reads where\n * the user stands, instead of a blank modal.\n */\nexport function cardStage(\n holder: Pick<CardHolder, 'kycStatus'> | null | undefined,\n requirements: Pick<CardRequirements, 'steps' | 'next'> | null | undefined,\n): 'steps' | 'provider-form' | null {\n if (holder === undefined || requirements === undefined) return null;\n if (holder === null || (holder.kycStatus === 'NOT_STARTED' && requirements?.next)) return 'steps';\n if (holder.kycStatus !== 'NOT_STARTED') return null;\n return requirements?.steps.some((step) => step.type === 'PROVIDER_REGISTRATION') ? 'steps' : 'provider-form';\n}\n","'use client';\n\nimport {\n isPollarApiError,\n type CardBalance,\n type CardDepositAddress,\n type CardFunding,\n type CardHolder,\n type CardIncomeRange,\n type CardInfo,\n type CardKycInput,\n type CardOccupation,\n type CardProvider,\n type CardRequirements,\n type CardSecrets,\n type CardTransaction,\n} from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { CopyButton, PollarModalFooter } from '../commons';\nimport { KycModal } from '../kyc-modal/KycModal';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { ProviderRegistrationModal } from '../provider-registration-modal/ProviderRegistrationModal';\nimport { RegistryCheckModal } from '../registry-check-modal/RegistryCheckModal';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport { blockedStepMessage, cardStage, pendingFromRequirement, requiredCardStep, type PendingCardStep } from './card-kyc';\nimport '../shared.css';\nimport '../send-modal/SendModal.css';\nimport './CardModal.css';\n\ninterface CardModalProps {\n onClose: () => void;\n}\n\n/** How often the holder is re-read while the provider's identity verification is pending. */\nconst KYC_POLL_MS = 5000;\n/** How long the revealed number stays on screen. */\nconst REVEAL_MS = 30_000;\nconst TX_LIMIT = 10;\n/** How often fundings in flight are re-read while the funding panel is open. */\nconst FUNDING_POLL_MS = 5_000;\nconst FUNDING_INFLIGHT = new Set(['CREATED', 'BURNED', 'ATTESTED', 'MINTED']);\n\n/** What each funding state means to the user: a title, and for one in flight its step and what it waits on. */\nconst FUNDING_COPY: Record<string, { title: string; step?: number; hint?: string }> = {\n CREATED: {\n title: 'Confirming your payment',\n step: 1,\n hint: 'Your USDC payment is being confirmed on Stellar. This takes a few seconds.',\n },\n BURNED: {\n title: 'Sending it to the card network',\n step: 2,\n hint: 'Your USDC left Stellar. Circle is confirming the transfer, usually in about a minute.',\n },\n ATTESTED: {\n title: 'Crossing to the card network',\n step: 3,\n hint: 'Transfer confirmed. Delivering the USDC to the card network.',\n },\n MINTED: {\n title: 'Arrived, crediting your card',\n step: 4,\n hint: 'The USDC reached the card provider, which is adding it to your card. This can take a few minutes.',\n },\n CREDITED: { title: 'Credited to your card' },\n FAILED: { title: 'Failed' },\n};\nconst FUNDING_STEPS = 4;\n\nconst INCOME_RANGES: { value: CardIncomeRange; label: string }[] = [\n { value: '0-1000', label: 'Up to 1,000 USD' },\n { value: '1000-5000', label: '1,000 to 5,000 USD' },\n { value: '5000-10000', label: '5,000 to 10,000 USD' },\n { value: '10000+', label: 'More than 10,000 USD' },\n];\n\nconst TX_LABELS: Record<string, string> = {\n deposit: 'Deposit',\n transactionTransfer: 'Bank deposit',\n spend: 'Purchase',\n spend_adjustment: 'Adjustment',\n fee: 'Fee',\n fee_refund: 'Fee refund',\n withdrawal: 'Withdrawal',\n card_insurance: 'Card issuance',\n};\n\nconst KYC_PENDING_COPY: Record<string, string> = {\n PENDING: 'Your information is being reviewed.',\n NEEDS_ACTION:\n 'Finish verifying your identity with the card provider: you will be asked for a photo of your document and a selfie.',\n IN_REVIEW: 'Your verification is under manual review. This can take a while.',\n};\n\nconst KYC_FINAL_COPY: Record<string, string> = {\n DENIED: 'Your verification was denied.',\n LOCKED: 'Your account is locked.',\n CANCELED: 'Your verification was canceled.',\n};\n\nconst emptyKyc: CardKycInput = {\n firstName: '',\n lastName: '',\n birthDate: '',\n nationalId: '',\n countryOfIssue: '',\n phoneCountryCode: '',\n phoneNumber: '',\n occupation: '',\n annualSalary: '1000-5000',\n accountPurpose: 'Personal expenses',\n expectedMonthlyVolume: '1000-5000',\n address: { line1: '', line2: '', city: '', region: '', postalCode: '', countryCode: '' },\n};\n\nfunction usd(cents: number | null | undefined): string {\n if (cents === null || cents === undefined) return '-';\n return (cents / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' });\n}\n\nfunction money(amount: string, currency: string): string {\n const n = Number(amount);\n try {\n return n.toLocaleString('en-US', { style: 'currency', currency });\n } catch {\n return `${n.toFixed(2)} ${currency}`;\n }\n}\n\nfunction groupPan(pan: string): string {\n return pan\n .replace(/\\s+/g, '')\n .replace(/(.{4})/g, '$1 ')\n .trim();\n}\n\n/** The provider's own words when it rejected something; our code otherwise. */\n/** Errors whose cause the user can act on, said plainly instead of the provider's raw message. */\nconst CARD_ERROR_COPY: Record<string, string> = {\n SDK_CARDS_PROVIDER_ERROR: 'The card provider is not responding right now. Please try again in a few minutes.',\n SDK_CARDS_IP_NOT_SUPPORTED:\n 'The card provider cannot accept your current connection (IPv6). Please try again from another network, for example Wi-Fi.',\n SDK_CARDS_PROVIDER_USER_TAKEN:\n 'This email is already registered with the card provider through another app. Use a different email to get a card here.',\n};\n\nfunction errorText(e: unknown, fallback: string): string {\n if (isPollarApiError(e)) {\n const known = CARD_ERROR_COPY[e.code];\n if (known) return known;\n const providerMessage = e.body.providerMessage;\n if (typeof providerMessage === 'string' && providerMessage) return providerMessage;\n const message = e.body.message;\n if (typeof message === 'string' && message) return message;\n return e.code;\n }\n return e instanceof Error && e.message ? e.message : fallback;\n}\n\nexport function CardModal({ onClose }: CardModalProps) {\n const { getClient, styles, wallet } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const [providers, setProviders] = useState<CardProvider[] | null>(null);\n const [holder, setHolder] = useState<CardHolder | null | undefined>(undefined);\n // undefined while loading; null when the provider has no steps or the server lacks the route.\n const [requirements, setRequirements] = useState<CardRequirements | null | undefined>(undefined);\n const [pendingStep, setPendingStep] = useState<PendingCardStep | null>(null);\n const stepAttempt = useRef<PendingCardStep | null>(null);\n const [cards, setCards] = useState<CardInfo[] | null>(null);\n const [balance, setBalance] = useState<CardBalance | null>(null);\n const [transactions, setTransactions] = useState<CardTransaction[] | null>(null);\n const [deposit, setDeposit] = useState<CardDepositAddress[] | null>(null);\n const [fundings, setFundings] = useState<CardFunding[] | null>(null);\n const [fundAmount, setFundAmount] = useState('');\n const [showManual, setShowManual] = useState(false);\n const [occupations, setOccupations] = useState<CardOccupation[]>([]);\n const [kyc, setKyc] = useState<CardKycInput>(emptyKyc);\n const [terms, setTerms] = useState(false);\n const [nickname, setNickname] = useState('');\n const [secrets, setSecrets] = useState<CardSecrets | null>(null);\n const [panel, setPanel] = useState<'card' | 'fund'>('card');\n const [busy, setBusy] = useState<string | null>(null);\n const [error, setError] = useState('');\n const revealTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const provider = providers?.[0] ?? null;\n const card = cards?.[0] ?? null;\n\n // --- Loading ----------------------------------------------------------------\n const loadHolder = useCallback(async () => {\n const h = await getClient().getCardHolder();\n setHolder(h);\n return h;\n }, [getClient]);\n\n /** The platform's steps for the provider. Null for a provider without any, and for a server without the route. */\n const loadRequirements = useCallback(\n async (cardProviderId: string) => {\n try {\n const r = await getClient().getCardRequirements({ cardProviderId });\n setRequirements(r);\n return r;\n } catch {\n setRequirements(null);\n return null;\n }\n },\n [getClient],\n );\n\n const loadCardData = useCallback(async () => {\n const client = getClient();\n const list = await client.getCards();\n if (list.length === 0) {\n setCards(list);\n return;\n }\n // The card, its balance and its movements land together: no card shown with an empty balance first.\n const [b, tx] = await Promise.all([client.getCardBalance(), client.getCardTransactions({ limit: TX_LIMIT })]);\n setBalance(b);\n setTransactions(tx.transactions);\n setCards(list);\n }, [getClient]);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const ps = await getClient().getCardProviders();\n if (cancelled) return;\n setProviders(ps);\n if (ps.length === 0) return;\n const [h] = await Promise.all([loadHolder(), loadRequirements(ps[0]!.id)]);\n if (cancelled) return;\n if (h?.kycStatus === 'APPROVED') await loadCardData();\n } catch (e) {\n if (!cancelled) {\n setProviders((cur) => cur ?? []);\n setError(errorText(e, 'Could not load your card'));\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [getClient, loadHolder, loadRequirements, loadCardData]);\n\n const stage = cardStage(holder, requirements);\n\n // Prefill the provider's own KYC form from the session profile when it is the next step.\n useEffect(() => {\n if (stage !== 'provider-form') return;\n const profile = getClient().getUserProfile();\n setKyc((k) => ({\n ...k,\n firstName: k.firstName || profile?.first_name || '',\n lastName: k.lastName || profile?.last_name || '',\n }));\n getClient()\n .getCardOccupations()\n .then(setOccupations)\n .catch(() => setOccupations([]));\n }, [stage, getClient]);\n\n // The provider's verification in progress: re-read the holder until it settles.\n const kycPending = holder ? holder.kycStatus in KYC_PENDING_COPY : false;\n useEffect(() => {\n if (!kycPending) return;\n const id = setInterval(() => {\n loadHolder()\n .then((h) => {\n if (h?.kycStatus === 'APPROVED') void loadCardData();\n })\n .catch(() => {\n /* transient; the next tick retries */\n });\n }, KYC_POLL_MS);\n return () => clearInterval(id);\n }, [kycPending, loadHolder, loadCardData]);\n\n useEffect(\n () => () => {\n if (revealTimer.current) clearTimeout(revealTimer.current);\n },\n [],\n );\n\n // --- Actions ------------------------------------------------------------------\n function openStep(step: PendingCardStep) {\n stepAttempt.current = step;\n setPendingStep(step);\n }\n\n async function run(key: string, work: () => Promise<void>, fallback: string) {\n if (busy) return;\n setBusy(key);\n setError('');\n try {\n await work();\n } catch (e) {\n // A step the platform asks for opens in place of the modal; anything else is shown.\n const step = requiredCardStep(e);\n if (step) openStep(step);\n else setError(errorText(e, fallback));\n } finally {\n setBusy(null);\n }\n }\n\n /** After a step: re-read where the user stands and, when the provider registered them, their holder. */\n async function afterStep() {\n if (!provider) return;\n const [h, r] = await Promise.all([loadHolder(), loadRequirements(provider.id)]);\n if (h?.kycStatus === 'APPROVED') await loadCardData();\n if (r?.next && !blockedStepMessage(r.next)) openStep(pendingFromRequirement(provider.id, r.next));\n }\n\n /** The user's first move: the next platform step when one is pending, else the provider sign-up. */\n const start = () =>\n run(\n 'start',\n async () => {\n if (!provider) return;\n if (requirements?.next) {\n openStep(pendingFromRequirement(provider.id, requirements.next));\n return;\n }\n // Signed up but not past the steps: read where the user stands again and open what is pending.\n if (holder) return afterStep();\n setHolder(await getClient().createCardHolder());\n },\n 'Could not start your card application',\n );\n\n const sendKyc = () =>\n run(\n 'kyc',\n async () => {\n const address = { ...kyc.address };\n if (!address.line2) delete address.line2;\n setHolder(await getClient().submitCardKyc({ termsAccepted: terms, kyc: { ...kyc, address } }));\n },\n 'Could not submit your information',\n );\n\n const issue = () =>\n run(\n 'issue',\n async () => {\n await getClient().issueCard(nickname.trim() ? { nickname: nickname.trim() } : {});\n await loadCardData();\n },\n 'Could not issue your card',\n );\n\n const refresh = () =>\n run(\n 'refresh',\n async () => {\n await loadCardData();\n },\n 'Could not refresh your card',\n );\n\n const reveal = () =>\n run(\n 'reveal',\n async () => {\n if (!card) return;\n const s = await getClient().revealCardSecrets(card.id);\n setSecrets(s);\n if (revealTimer.current) clearTimeout(revealTimer.current);\n revealTimer.current = setTimeout(() => setSecrets(null), REVEAL_MS);\n },\n 'Could not show the card details',\n );\n\n const openFund = () =>\n run(\n 'fund',\n async () => {\n setFundings(await getClient().listCardFundings());\n setPanel('fund');\n },\n 'Could not load your fundings',\n );\n\n const fund = () =>\n run(\n 'fund-send',\n async () => {\n const outcome = await getClient().fundCard({ amount: fundAmount.trim() });\n if (outcome.status === 'cancelled') {\n setError('The payment was not signed.');\n return;\n }\n setFundings((cur) => [outcome.funding, ...(cur ?? []).filter((f) => f.id !== outcome.funding.id)]);\n setFundAmount('');\n },\n 'Could not fund the card',\n );\n\n const showManualAddress = () =>\n run(\n 'fund-manual',\n async () => {\n if (!deposit) setDeposit(await getClient().getCardDepositAddresses());\n setShowManual(true);\n },\n 'Could not load the deposit address',\n );\n\n // Fundings move on their own server-side; keep the panel honest while any is in flight.\n const fundingsInflight = (fundings ?? []).some((f) => FUNDING_INFLIGHT.has(f.status));\n useEffect(() => {\n if (panel !== 'fund' || !fundingsInflight) return;\n const id = setInterval(() => {\n getClient()\n .listCardFundings()\n .then((next) => {\n setFundings((previous) => {\n // A funding that just got credited moves the card's balance: re-read it.\n const credited = next.some(\n (f) => f.status === 'CREDITED' && previous?.find((p) => p.id === f.id)?.status !== 'CREDITED',\n );\n if (credited) void loadCardData().catch(() => {});\n return next;\n });\n })\n .catch(() => {\n /* transient; the next tick retries */\n });\n }, FUNDING_POLL_MS);\n return () => clearInterval(id);\n }, [panel, fundingsInflight, getClient, loadCardData]);\n\n const field = (\n key: keyof Omit<CardKycInput, 'address' | 'email'>,\n label: string,\n extra: Partial<JSX.IntrinsicElements['input']> = {},\n ) => (\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">{label}</span>\n <input\n className=\"pollar-input\"\n value={kyc[key] as string}\n onChange={(e) => setKyc((k) => ({ ...k, [key]: e.target.value }))}\n {...extra}\n />\n </label>\n );\n\n const addressField = (\n key: keyof CardKycInput['address'],\n label: string,\n extra: Partial<JSX.IntrinsicElements['input']> = {},\n ) => (\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">{label}</span>\n <input\n className=\"pollar-input\"\n value={kyc.address[key] ?? ''}\n onChange={(e) => setKyc((k) => ({ ...k, address: { ...k.address, [key]: e.target.value } }))}\n {...extra}\n />\n </label>\n );\n\n const rangeField = (key: 'annualSalary' | 'expectedMonthlyVolume', label: string) => (\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">{label}</span>\n <select\n className=\"pollar-input pollar-send-select\"\n value={kyc[key]}\n onChange={(e) => setKyc((k) => ({ ...k, [key]: e.target.value as CardIncomeRange }))}\n >\n {INCOME_RANGES.map((r) => (\n <option key={r.value} value={r.value}>\n {r.label}\n </option>\n ))}\n </select>\n </label>\n );\n\n const kycComplete =\n kyc.firstName &&\n kyc.lastName &&\n /^\\d{4}-\\d{2}-\\d{2}$/.test(kyc.birthDate) &&\n kyc.nationalId &&\n kyc.countryOfIssue.length === 2 &&\n kyc.phoneCountryCode &&\n kyc.phoneNumber &&\n kyc.occupation &&\n kyc.accountPurpose &&\n kyc.address.line1 &&\n kyc.address.city &&\n kyc.address.region &&\n kyc.address.postalCode &&\n kyc.address.countryCode.length === 2;\n\n // --- Platform steps, in place of the modal -------------------------------------\n // The modal's state stays while a step is open, so cancelling returns to the same screen.\n if (pendingStep) {\n const close = () => {\n stepAttempt.current = null;\n setPendingStep(null);\n };\n const done = () => {\n // Ignore a step that finishes after it was cancelled or replaced.\n if (stepAttempt.current !== pendingStep) return;\n close();\n void afterStep();\n };\n const progress = pendingStep.progress ? { progress: pendingStep.progress } : {};\n if (pendingStep.type === 'FORM') {\n return <RequirementFormModal formId={pendingStep.optionId} {...progress} onClose={close} onSubmitted={done} />;\n }\n if (pendingStep.type === 'REGISTRY_CHECK') {\n return <RegistryCheckModal optionId={pendingStep.optionId} {...progress} onClose={close} onApproved={done} />;\n }\n if (pendingStep.type === 'PROVIDER_REGISTRATION') {\n return (\n <ProviderRegistrationModal\n cardProviderId={pendingStep.cardProviderId}\n {...progress}\n onClose={close}\n onRegistered={done}\n />\n );\n }\n return (\n <KycModal\n cardProviderId={pendingStep.cardProviderId}\n providerId={pendingStep.optionId}\n onClose={close}\n onApproved={done}\n />\n );\n }\n\n // --- Render -------------------------------------------------------------------\n // An approved holder also waits for its card data, so the modal never shows blank between the holder and the card.\n const loading =\n providers === null ||\n (providers.length > 0 && (holder === undefined || requirements === undefined)) ||\n (holder?.kycStatus === 'APPROVED' && cards === null && !error);\n const blocked = requirements?.next ? blockedStepMessage(requirements.next) : null;\n const stepsPending = !!requirements?.next;\n const title = panel === 'fund' ? 'Add funds' : card ? (card.nickname ?? 'Your card') : 'Get a card';\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-card-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {panel === 'fund' && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={() => setPanel('card')} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <h2 className=\"pollar-modal-title\">{title}</h2>\n </div>\n <div className=\"pollar-modal-header-actions\">\n {card && panel === 'card' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={() => void refresh()}\n disabled={busy !== null}\n aria-label=\"Refresh\"\n >\n <svg\n className={busy === 'refresh' ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {loading && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n </div>\n )}\n\n {!loading && providers?.length === 0 && <div className=\"pollar-modal-error\">Cards are not available for this app.</div>}\n {!loading && provider && !provider.available && (\n <div className=\"pollar-modal-error\">Cards are not available right now.</div>\n )}\n\n {/* Step 1: the platform's steps, then the provider sign-up */}\n {!loading && provider && provider.available && stage === 'steps' && (\n <>\n <p>\n Get {provider.cardLabel ?? `a ${provider.name} card`} funded from your wallet{wallet ? '' : ' once you sign in'}.\n You will verify your identity first; it takes a few minutes.\n </p>\n {requirements && requirements.total > 0 && (\n <p className=\"pollar-card-note\">\n {requirements.completed} of {requirements.total} steps done\n </p>\n )}\n {blocked && <div className=\"pollar-modal-error\">{blocked}</div>}\n <div className=\"pollar-modal-actions\">\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n onClick={() => void start()}\n disabled={busy !== null || !wallet || !!blocked}\n >\n {busy === 'start' ? 'Starting...' : stepsPending ? 'Continue' : 'Start'}\n </button>\n </div>\n </>\n )}\n\n {/* Step 2: the provider's own KYC form, when no PROVIDER_REGISTRATION step sends it for the user */}\n {!loading && provider && stage === 'provider-form' && (\n <>\n <p className=\"pollar-card-section-title\">About you</p>\n <div className=\"pollar-card-grid\">\n {field('firstName', 'First name', { autoComplete: 'given-name' })}\n {field('lastName', 'Last name', { autoComplete: 'family-name' })}\n {field('birthDate', 'Birth date', { placeholder: 'YYYY-MM-DD', autoComplete: 'bday' })}\n {field('nationalId', 'ID number')}\n {field('countryOfIssue', 'ID country (2 letters)', { maxLength: 2, placeholder: 'AR' })}\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Occupation</span>\n <select\n className=\"pollar-input pollar-send-select\"\n value={kyc.occupation}\n onChange={(e) => setKyc((k) => ({ ...k, occupation: e.target.value }))}\n >\n <option value=\"\">Select...</option>\n {occupations.map((o) => (\n <option key={o.code} value={o.code}>\n {o.label}\n </option>\n ))}\n </select>\n </label>\n {field('phoneCountryCode', 'Phone country code', { placeholder: '54', inputMode: 'numeric' })}\n {field('phoneNumber', 'Phone number', { placeholder: '91155551234', inputMode: 'numeric' })}\n {rangeField('annualSalary', 'Annual income')}\n {rangeField('expectedMonthlyVolume', 'Expected monthly spend')}\n <div className=\"pollar-card-grid-full\">{field('accountPurpose', 'What will you use the card for?')}</div>\n </div>\n\n <p className=\"pollar-card-section-title\">Address</p>\n <div className=\"pollar-card-grid\">\n <div className=\"pollar-card-grid-full\">\n {addressField('line1', 'Street and number', { autoComplete: 'address-line1' })}\n </div>\n <div className=\"pollar-card-grid-full\">\n {addressField('line2', 'Apartment, floor (optional)', { autoComplete: 'address-line2' })}\n </div>\n {addressField('city', 'City', { autoComplete: 'address-level2' })}\n {addressField('region', 'State or province', { autoComplete: 'address-level1' })}\n {addressField('postalCode', 'Postal code', { autoComplete: 'postal-code' })}\n {addressField('countryCode', 'Country (2 letters)', { maxLength: 2, placeholder: 'AR' })}\n </div>\n\n <label className=\"pollar-card-terms\">\n <input type=\"checkbox\" checked={terms} onChange={(e) => setTerms(e.target.checked)} />\n <span>\n I have read and accept the{' '}\n <a className=\"pollar-card-link\" href={provider.termsUrl ?? '#'} target=\"_blank\" rel=\"noreferrer\">\n {provider.name} terms of service\n </a>\n {provider.termsUrl ? '' : ' (demo: the final terms link is pending)'}.\n </span>\n </label>\n\n <div className=\"pollar-modal-actions\">\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n onClick={() => void sendKyc()}\n disabled={busy !== null || !terms || !kycComplete}\n >\n {busy === 'kyc' ? 'Sending...' : 'Continue'}\n </button>\n </div>\n </>\n )}\n\n {/* Step 3: the provider's verification pending */}\n {!loading && holder && holder.kycStatus in KYC_PENDING_COPY && (\n <>\n <p>{KYC_PENDING_COPY[holder.kycStatus]}</p>\n {holder.kycReason && <p className=\"pollar-card-note\">{holder.kycReason}</p>}\n <div className=\"pollar-modal-actions\">\n {holder.verificationLink && (\n <a className=\"pollar-btn-primary\" href={holder.verificationLink} target=\"_blank\" rel=\"noreferrer\">\n Verify my identity\n </a>\n )}\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={() => void loadHolder().catch(() => {})}>\n I am done\n </button>\n </div>\n <p className=\"pollar-card-note\">This screen updates on its own once the verification comes back.</p>\n </>\n )}\n\n {/* Terminal failures */}\n {!loading && holder && holder.kycStatus in KYC_FINAL_COPY && (\n <div className=\"pollar-modal-error\">\n {KYC_FINAL_COPY[holder.kycStatus]}\n {holder.kycReason ? ` ${holder.kycReason}` : ''}\n </div>\n )}\n\n {/* Step 4: approved, no card yet */}\n {!loading && provider && holder?.kycStatus === 'APPROVED' && cards !== null && !card && (\n <>\n <p>Your identity is verified. Issue your virtual card to start.</p>\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Card name (optional)</span>\n <input\n className=\"pollar-input\"\n value={nickname}\n maxLength={40}\n onChange={(e) => setNickname(e.target.value)}\n placeholder=\"Everyday card\"\n />\n </label>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={() => void issue()} disabled={busy !== null}>\n {busy === 'issue' ? 'Issuing...' : 'Issue my card'}\n </button>\n </div>\n </>\n )}\n\n {/* Step 5: the card */}\n {!loading && provider && card && panel === 'card' && (\n <>\n <div className=\"pollar-card-visual\">\n <div className=\"pollar-card-visual-top\">\n <span className=\"pollar-card-brand\">\n {styles.logoUrl && <img src={styles.logoUrl} alt=\"\" className=\"pollar-card-brand-logo\" />}\n <span>{provider.cardLabel ?? provider.name}</span>\n </span>\n <span className=\"pollar-card-status\">{card.status.toLowerCase()}</span>\n </div>\n <div className=\"pollar-card-visual-chip\" />\n <div className=\"pollar-card-visual-number\">\n {secrets ? groupPan(secrets.pan) : `•••• •••• •••• ${card.last4 ?? '••••'}`}\n </div>\n <div className=\"pollar-card-visual-bottom\">\n <div>\n <span>Expires</span>\n <strong>{card.expMonth && card.expYear ? `${card.expMonth}/${card.expYear.slice(-2)}` : '--/--'}</strong>\n </div>\n <div>\n <span>CVC</span>\n <strong>{secrets ? secrets.cvc : '•••'}</strong>\n </div>\n <div>\n <span>{card.type.toLowerCase()}</span>\n <strong>{card.currency}</strong>\n </div>\n </div>\n </div>\n\n <div className=\"pollar-card-balance\">\n <div>\n <span>Available</span>\n <strong>{usd(balance?.spendingPowerCents)}</strong>\n </div>\n <div>\n <span>Limit</span>\n <strong>{usd(balance?.creditLimitCents)}</strong>\n </div>\n <div>\n <span>To pay</span>\n <strong>{usd(balance?.balanceDueCents)}</strong>\n </div>\n </div>\n\n <div className=\"pollar-modal-actions\">\n {provider.supports.revealSecrets &&\n (secrets ? (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={() => setSecrets(null)}>\n Hide details\n </button>\n ) : (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={() => void reveal()} disabled={busy !== null}>\n {busy === 'reveal' ? 'Loading...' : 'Show details'}\n </button>\n ))}\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={() => void openFund()} disabled={busy !== null}>\n Add funds\n </button>\n </div>\n {secrets && <p className=\"pollar-card-note\">The details hide on their own in 30 seconds. Do not share them.</p>}\n\n <p className=\"pollar-card-section-title\">Recent activity</p>\n {transactions === null && <p className=\"pollar-card-note\">Loading...</p>}\n {transactions?.length === 0 && <p className=\"pollar-card-note\">No movements yet.</p>}\n {transactions?.map((tx) => {\n const purchase = tx.purchase as {\n localAmount?: number | null;\n localCurrency?: string | null;\n status?: string;\n } | null;\n const local =\n purchase?.localAmount && purchase.localCurrency && purchase.localCurrency !== 'USD'\n ? money(String(purchase.localAmount), purchase.localCurrency)\n : null;\n return (\n <div key={tx.id} className=\"pollar-card-tx\">\n <div>\n {tx.merchantName ?? TX_LABELS[tx.type] ?? tx.type}\n <span className=\"pollar-card-tx-meta\">\n {new Date(tx.occurredAt).toLocaleDateString()}\n {tx.merchantName ? ` · ${TX_LABELS[tx.type] ?? tx.type}` : ''}\n {purchase?.status && purchase.status !== 'completed' ? ` · ${purchase.status}` : ''}\n </span>\n </div>\n <div className=\"pollar-card-tx-amount\" data-direction={tx.direction ?? undefined}>\n {tx.direction === 'credit' ? '+' : tx.direction === 'debit' ? '-' : ''}\n {money(tx.amount, tx.currency)}\n {local && <span className=\"pollar-card-tx-meta\">{local}</span>}\n </div>\n </div>\n );\n })}\n </>\n )}\n\n {/* Funding */}\n {!loading && provider && card && panel === 'fund' && (\n <>\n <p>\n Move {provider.fundingAssets.join(' or ') || 'USDC'} from your wallet to your card. It takes a few minutes to\n cross to the card network.\n </p>\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Amount (USDC)</span>\n <input\n className=\"pollar-input\"\n inputMode=\"decimal\"\n placeholder=\"10\"\n value={fundAmount}\n onChange={(e) => setFundAmount(e.target.value.replace(/[^0-9.]/g, ''))}\n />\n </label>\n <div className=\"pollar-modal-actions\">\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n onClick={() => void fund()}\n disabled={busy !== null || !(Number(fundAmount) >= 1)}\n >\n {busy === 'fund-send' ? 'Sending...' : 'Fund from my wallet'}\n </button>\n </div>\n\n {fundings && fundings.length > 0 && (\n <>\n <p className=\"pollar-card-section-title\">Your fundings</p>\n {fundings.map((f) => {\n const copy = FUNDING_COPY[f.status];\n const inflight = FUNDING_INFLIGHT.has(f.status);\n return (\n <div key={f.id} className=\"pollar-card-tx\" aria-busy={inflight}>\n <div>\n <span className=\"pollar-card-funding-title\">\n {inflight && <span className=\"pollar-spinner pollar-spinner-sm\" aria-hidden />}\n {copy?.title ?? f.status}\n </span>\n {inflight && copy?.step && (\n <span className=\"pollar-card-tx-meta\" role=\"status\">\n Step {copy.step} of {FUNDING_STEPS} · {copy.hint}\n </span>\n )}\n <span className=\"pollar-card-tx-meta\">\n {new Date(f.createdAt).toLocaleString()}\n {f.status === 'FAILED' && f.error ? ` · ${f.error}` : ''}\n </span>\n </div>\n <div className=\"pollar-card-tx-amount\" data-direction={f.status === 'CREDITED' ? 'credit' : undefined}>\n {money(f.amount, 'USD')}\n </div>\n </div>\n );\n })}\n {fundingsInflight && (\n <p className=\"pollar-card-note\">\n You can close this window: the funding keeps going and your card is credited when it finishes.\n </p>\n )}\n </>\n )}\n\n {!showManual && (\n <p className=\"pollar-card-note\">\n Prefer to send from another wallet?{' '}\n <button\n type=\"button\"\n className=\"pollar-card-link\"\n onClick={() => void showManualAddress()}\n disabled={busy !== null}\n >\n Show the deposit address\n </button>\n </p>\n )}\n {showManual &&\n deposit?.map((d) => (\n <div key={d.network} className=\"pollar-card-deposit\">\n <strong>{d.network}</strong> (chain {d.chainId})<code>{d.address}</code>\n <CopyButton value={d.address} label=\"Copy address\" />\n <p className=\"pollar-card-note\">\n Send only {d.tokens.map((t) => (t.currency ?? 'token').toUpperCase()).join(' or ')} on {d.network}; anything\n else can be lost.\n </p>\n </div>\n ))}\n {showManual && deposit?.length === 0 && (\n <div className=\"pollar-modal-error\">The provider returned no deposit address.</div>\n )}\n {showManual && (\n <p className=\"pollar-card-note\">\n <button type=\"button\" className=\"pollar-card-link\" onClick={() => setShowManual(false)}>\n Hide the deposit address\n </button>\n </p>\n )}\n </>\n )}\n\n {error && <div className=\"pollar-modal-error\">{error}</div>}\n\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { SessionInfo, SessionsState } from '@pollar/core';\nimport { PollarModalFooter, RefreshIcon } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport type { SessionsState };\n\nexport interface SessionsModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n state: SessionsState;\n revokingFamilyId: string | null;\n signingOutEverywhere: boolean;\n revokeError: string | null;\n onRefresh: () => void;\n onRevoke: (familyId: string) => void;\n onLogoutEverywhere: () => void;\n onClose: () => void;\n}\n\n/**\n * Heuristic device label. Prefers the explicit `deviceLabel` set via\n * `PollarClientConfig`; falls back to a stripped User-Agent.\n */\nfunction describeDevice(s: SessionInfo): string {\n if (s.deviceLabel) return normalizeDeviceLabel(s.deviceLabel);\n if (!s.userAgent) return 'Unknown device';\n return parseUserAgent(s.userAgent);\n}\n\nfunction normalizeDeviceLabel(label: string): string {\n // Collapse the whitespace first so the split needs no unbounded `\\s+` on both\n // sides of the separator, which backtracks polynomially on a label with a long\n // run of spaces (CodeQL js/polynomial-redos); the label comes from the API.\n const parts = label.replace(/\\s+/g, ' ').split(/ (?:[—–-]|·) /);\n if (parts.length === 2 && parts[1] !== undefined) return `${parts[0]} · ${parts[1].toLowerCase()}`;\n return label;\n}\n\nfunction detectBrowser(ua: string): string | null {\n // Order matters: Edge / Opera contain \"Chrome\" in their UA, so check them first.\n if (/Edg\\//.test(ua)) return 'Edge';\n if (/OPR\\//.test(ua)) return 'Opera';\n if (/(Chrome|CriOS)\\//.test(ua)) return 'Chrome';\n if (/(Firefox|FxiOS)\\//.test(ua)) return 'Firefox';\n if (/Safari\\//.test(ua)) return 'Safari';\n return null;\n}\n\nfunction detectOS(ua: string): string | null {\n if (/iPhone|iPad|iPod/.test(ua)) return 'iOS';\n if (/Android/.test(ua)) return 'Android';\n if (/Mac OS X/.test(ua)) return 'macOS';\n if (/Windows NT/.test(ua)) return 'Windows';\n if (/Linux/.test(ua)) return 'Linux';\n return null;\n}\n\nfunction parseUserAgent(ua: string): string {\n const browser = detectBrowser(ua);\n const os = detectOS(ua);\n if (browser && os) return `${os} · ${browser.toLowerCase()}`;\n if (os) return os;\n if (browser) return browser;\n return ua.slice(0, 48);\n}\n\nfunction formatRelative(iso: string | null): string {\n if (!iso) return '—';\n const ts = new Date(iso).getTime();\n if (!Number.isFinite(ts)) return '—';\n const diffSec = Math.round((Date.now() - ts) / 1000);\n if (diffSec < 0) return 'just now';\n if (diffSec < 60) return `${diffSec}s ago`;\n const diffMin = Math.round(diffSec / 60);\n if (diffMin < 60) return `${diffMin}m ago`;\n const diffHr = Math.round(diffMin / 60);\n if (diffHr < 24) return `${diffHr}h ago`;\n const diffDay = Math.round(diffHr / 24);\n if (diffDay < 30) return `${diffDay}d ago`;\n return new Date(iso).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n}\n\nfunction shortIp(hash: string | null): string {\n if (!hash) return '';\n return hash.slice(0, 8);\n}\n\ntype DeviceKind = 'desktop' | 'phone' | 'tablet';\n\nfunction deviceKind(session: SessionInfo): DeviceKind {\n const value = `${session.deviceLabel ?? ''} ${session.userAgent ?? ''}`.toLowerCase();\n if (/ipad|tablet/.test(value)) return 'tablet';\n if (/android|iphone|ipod|mobile|phone/.test(value)) return 'phone';\n return 'desktop';\n}\n\nfunction DeviceIcon({ kind, size = 'small' }: { kind: DeviceKind; size?: 'small' | 'large' }) {\n const dimensions = size === 'large' ? 30 : 18;\n if (kind === 'phone') {\n return (\n <svg width={dimensions} height={dimensions} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <rect x=\"7\" y=\"2.5\" width=\"10\" height=\"19\" rx=\"2.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path d=\"M10.5 5h3M11 18.5h2\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n if (kind === 'tablet') {\n return (\n <svg width={dimensions} height={dimensions} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <rect x=\"4.5\" y=\"2.5\" width=\"15\" height=\"19\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path d=\"M11 18.5h2\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n return (\n <svg width={dimensions} height={dimensions} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <rect x=\"3\" y=\"3.5\" width=\"18\" height=\"12\" rx=\"1.8\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path d=\"M8 20.5h8M12 15.5v5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden>\n <path d=\"m2.5 6.2 2.1 2.1L9.6 3.6\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path d=\"m3 3 8 8M11 3l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function SessionsModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n state,\n revokingFamilyId,\n signingOutEverywhere,\n revokeError,\n onRefresh,\n onRevoke,\n onLogoutEverywhere,\n onClose,\n}: SessionsModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = state.step === 'loading';\n const sessions = state.step === 'loaded' ? state.sessions : [];\n const currentSession = sessions.find((s) => s.current);\n const otherSessions = sessions.filter((s) => !s.current);\n const otherCount = otherSessions.length;\n\n return (\n <div\n className=\"pollar-modal-card pollar-sessions-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Active sessions</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <RefreshIcon spinning={isLoading} />\n </button>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\" title=\"Close\">\n <CloseIcon />\n </button>\n </div>\n </div>\n\n <div className=\"pollar-sessions-list\">\n {(state.step === 'idle' || isLoading) && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n {state.step === 'error' && <div className=\"pollar-modal-empty\">{state.message}</div>}\n {state.step === 'loaded' && sessions.length === 0 && <div className=\"pollar-modal-empty\">No active sessions.</div>}\n {state.step === 'loaded' && currentSession && (\n <div className=\"pollar-sessions-current-card\">\n <div className=\"pollar-sessions-current-icon-wrap\">\n <DeviceIcon kind={deviceKind(currentSession)} size=\"large\" />\n <span className=\"pollar-sessions-current-check\">\n <CheckIcon />\n </span>\n </div>\n <span className=\"pollar-sessions-current-label\">This device</span>\n <strong className=\"pollar-sessions-current-device\">{describeDevice(currentSession)}</strong>\n <div className=\"pollar-sessions-current-status\">\n <span className=\"pollar-sessions-status-dot\" />\n <span>Active now</span>\n {currentSession.ipHash && (\n <>\n <span>·</span>\n <span title={`ip-hash ${currentSession.ipHash}`}>IP {shortIp(currentSession.ipHash)}</span>\n </>\n )}\n </div>\n </div>\n )}\n {state.step === 'loaded' && otherSessions.length > 0 && (\n <section className=\"pollar-sessions-other-section\" aria-labelledby=\"pollar-other-devices-heading\">\n <h3 id=\"pollar-other-devices-heading\" className=\"pollar-sessions-section-title\">\n Other devices <span>{otherCount}</span>\n </h3>\n <div className=\"pollar-sessions-grid\">\n {otherSessions.map((s) => {\n const isRevoking = revokingFamilyId === s.familyId;\n return (\n <div key={s.familyId} className=\"pollar-sessions-item\">\n <div className=\"pollar-sessions-item-top\">\n <span className=\"pollar-sessions-item-icon\">\n <DeviceIcon kind={deviceKind(s)} />\n </span>\n <button\n type=\"button\"\n className=\"pollar-sessions-item-revoke\"\n onClick={() => onRevoke(s.familyId)}\n disabled={isRevoking || signingOutEverywhere}\n aria-label={`Sign out ${describeDevice(s)}`}\n title={isRevoking ? 'Signing out…' : 'Sign out this device'}\n >\n {isRevoking ? <span className=\"pollar-spinner pollar-spinner-sm\" /> : <CloseIcon />}\n </button>\n </div>\n <strong className=\"pollar-sessions-item-device\">{describeDevice(s)}</strong>\n <span className=\"pollar-sessions-item-meta\">{formatRelative(s.lastUsedAt ?? s.createdAt)}</span>\n </div>\n );\n })}\n </div>\n </section>\n )}\n {revokeError && (\n <div className=\"pollar-sessions-action-error\" role=\"alert\">\n {revokeError}\n </div>\n )}\n </div>\n\n {state.step === 'loaded' && sessions.length > 0 && (\n <div className=\"pollar-sessions-actions\">\n <button\n className=\"pollar-sessions-logout-all\"\n onClick={onLogoutEverywhere}\n disabled={signingOutEverywhere || otherCount === 0}\n title={otherCount === 0 ? 'No other devices to sign out' : undefined}\n >\n {signingOutEverywhere ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm pollar-spinner-current\" />\n Signing out…\n </>\n ) : (\n 'Sign out everywhere'\n )}\n </button>\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport './SessionsModal.css';\nimport { SessionsModalTemplate } from './SessionsModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface SessionsModalProps {\n onClose: () => void;\n}\n\nexport function SessionsModal({ onClose }: SessionsModalProps) {\n const { getClient, styles, sessions } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n // Only the per-action button spinners are local UI state. The list itself\n // (idle/loading/loaded/error) lives in the client's observable `sessions`\n // store, read straight from the provider - so this component is a pure\n // reader and there's no `await`-then-`setState` to guard against unmount.\n const [revokingFamilyId, setRevokingFamilyId] = useState<string | null>(null);\n const [signingOutEverywhere, setSigningOutEverywhere] = useState(false);\n const [revokeError, setRevokeError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n void getClient().fetchSessions();\n }, [getClient]);\n\n useEffect(() => {\n load();\n }, [load]);\n\n // Auto-close on logout (logoutEverywhere from this modal, or eventual\n // 401-on-current-family-revoke). The provider clears session state when\n // the user becomes unauthenticated; mirror that here so the modal\n // tears down instead of showing stale data.\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n useEffect(() => {\n return getClient().onAuthStateChange((authState) => {\n if (authState.step === 'idle') onCloseRef.current();\n });\n }, [getClient]);\n\n const handleRevoke = useCallback(\n async (familyId: string) => {\n setRevokingFamilyId(familyId);\n setRevokeError(null);\n try {\n await getClient().revokeSession(familyId);\n } catch {\n setRevokeError('Could not sign out that device. Please try again.');\n } finally {\n setRevokingFamilyId(null);\n // Refresh from the server so the row disappears from the list.\n load();\n }\n },\n [getClient, load],\n );\n\n const handleLogoutEverywhere = useCallback(async () => {\n setSigningOutEverywhere(true);\n try {\n await getClient().logoutEverywhere();\n // After logout-everywhere the auth state flips to 'idle' - the\n // provider closes the parent overlay automatically. Belt-and-braces:\n // call onClose so the modal also tears down even if the consumer\n // wired it up outside the provider.\n onClose();\n } catch {\n setSigningOutEverywhere(false);\n }\n }, [getClient, onClose]);\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <SessionsModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n state={sessions}\n revokingFamilyId={revokingFamilyId}\n signingOutEverywhere={signingOutEverywhere}\n revokeError={revokeError}\n onRefresh={() => load()}\n onRevoke={(familyId) => void handleRevoke(familyId)}\n onLogoutEverywhere={() => void handleLogoutEverywhere()}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { TransactionState, WalletId } from '@pollar/core';\nimport React from 'react';\nimport { PollarModalFooter } from '../commons';\nimport { TxStatusView } from './TxStatusView';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport interface TransactionModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null;\n onClose: () => void;\n onSignAndSend: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry?: () => void;\n}\n\nexport function TransactionModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n onClose,\n onSignAndSend,\n onToggleXdr,\n onCopyHash,\n onRetry,\n}: TransactionModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n return (\n <div className=\"pollar-modal-card pollar-tx-modal\" data-theme={theme} style={cssVars} onClick={(e) => e.stopPropagation()}>\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Transaction</h2>\n </div>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onClose} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={onSignAndSend}\n onToggleXdr={onToggleXdr}\n onCopyHash={onCopyHash}\n onRetry={onRetry}\n onDone={onClose}\n />\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport './TransactionModal.css';\nimport { TransactionModalTemplate } from './TransactionModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface TransactionModalProps {\n onClose: () => void;\n}\n\nexport function TransactionModal({ onClose }: TransactionModalProps) {\n const { getClient, styles, tx: transaction, network, wallet } = usePollar();\n // External-wallet signing-adapter id (freighter/albedo) drives the wallet logo;\n // null for embedded/smart, which fall back to the Pollar logo.\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n const explorerUrl = hash ? `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}` : null;\n\n function handleSignAndSend() {\n if (transaction.step === 'built') {\n void getClient().signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n async function handleRetry() {\n if (transaction.step === 'error' && transaction.buildData) {\n await getClient().signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <TransactionModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onClose={onClose}\n onSignAndSend={handleSignAndSend}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={handleRetry}\n />\n </div>\n );\n}\n","'use client';\n\nimport { StellarNetwork, TxHistoryRecord, TxHistoryState, WalletChain } from '@pollar/core';\nimport { type ReactNode } from 'react';\nimport { ChainSelect } from '../ChainSelect';\nimport { CopyButton, cropAddress, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nconst PAGE_SIZE = 10;\n\ninterface TxHistoryModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n txHistory: TxHistoryState;\n offset: number;\n /** Networks the user holds a wallet on; the first one is the default. */\n chains: WalletChain[];\n selectedChain: WalletChain | null;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n onSelectChain: (chain: WalletChain) => void;\n onRefresh: () => void;\n onPrev: () => void;\n onNext: () => void;\n onClose: () => void;\n}\n\n/** The explorer transaction URL for a row, by its chain. */\nfunction explorerUrlFor(chain: WalletChain, hash: string, network: StellarNetwork): string {\n if (chain === 'SOLANA') {\n return `https://explorer.solana.com/tx/${hash}${network === 'testnet' ? '?cluster=devnet' : ''}`;\n }\n return `https://stellar.expert/explorer/${network === 'testnet' ? 'testnet' : 'public'}/tx/${hash}`;\n}\n\nfunction StatusBadge({ status }: { status: TxHistoryRecord['status'] }) {\n return (\n <span className=\"pollar-hist-item-badge\" data-status={status}>\n {status}\n </span>\n );\n}\n\nfunction formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n}\n\n/** Shorten a long identifier (issuer, hash, address) to `head...tail`. */\nfunction truncateMiddle(value: string, head = 4, tail = 4): string {\n return value.length <= head + tail + 1 ? value : `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\n// Stellar account (G) and contract (C) strkeys are 56 base32 chars.\nconst STELLAR_ADDRESS = /\\b[GC][A-Z2-7]{55}\\b/g;\n\n/** Truncated address rendered as a copyable tag (issuer, wallet, contract...). */\nfunction AddressChip({ value, label }: { value: string; label: string }) {\n return (\n <span className=\"pollar-hist-item-issuer\">\n {truncateMiddle(value)}\n <CopyButton value={value} label={label} className=\"pollar-copy-btn-sm\" />\n </span>\n );\n}\n\n/**\n * Renders a summary string, swapping every full Stellar address (G... account or\n * C... contract) for an {@link AddressChip}. Plain-text runs are kept as-is.\n */\nfunction renderSummary(summary: string): ReactNode {\n const parts: ReactNode[] = [];\n let last = 0;\n let key = 0;\n STELLAR_ADDRESS.lastIndex = 0;\n for (let m = STELLAR_ADDRESS.exec(summary); m !== null; m = STELLAR_ADDRESS.exec(summary)) {\n if (m.index > last) parts.push(<span key={key++}>{summary.slice(last, m.index)}</span>);\n const address = m[0];\n parts.push(\n <AddressChip key={key++} value={address} label={address[0] === 'C' ? 'Copy contract address' : 'Copy wallet address'} />,\n );\n last = m.index + address.length;\n }\n if (parts.length === 0) return <span className=\"pollar-hist-item-title\">{summary}</span>;\n if (last < summary.length) parts.push(<span key={key}>{summary.slice(last)}</span>);\n return parts;\n}\n\nexport function TxHistoryModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n txHistory,\n offset,\n chains,\n selectedChain,\n walletAddress,\n onSelectChain,\n onRefresh,\n onPrev,\n onNext,\n onClose,\n}: TxHistoryModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = txHistory.step === 'loading';\n const records = txHistory.step === 'loaded' ? txHistory.data.records : [];\n const total = txHistory.step === 'loaded' ? txHistory.data.total : 0;\n const hasPrev = offset > 0;\n const hasNext = offset + PAGE_SIZE < total;\n const showPagination = txHistory.step === 'loaded' && total > PAGE_SIZE;\n\n return (\n <div\n className=\"pollar-modal-card pollar-hist-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Transaction History</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoading} />\n\n {walletAddress && (\n <div className=\"pollar-address-row\">\n <span className=\"pollar-address\">{cropAddress(walletAddress)}</span>\n <CopyButton value={walletAddress} label=\"Copy wallet address\" />\n </div>\n )}\n\n <div className=\"pollar-hist-list\">\n {txHistory.step === 'idle' && <div className=\"pollar-modal-empty\">Click Refresh to load transactions.</div>}\n {isLoading && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n {txHistory.step === 'error' && <div className=\"pollar-modal-empty\">{txHistory.message}</div>}\n {txHistory.step === 'loaded' && records.length === 0 && <div className=\"pollar-modal-empty\">No transactions yet.</div>}\n {records.map((record) => {\n const hash = typeof record.hash === 'string' && record.hash.length > 0 ? record.hash : undefined;\n // Each row carries its own chain (a filtered view is still per-chain),\n // so the explorer link follows the row, not the picker.\n const explorerUrl = hash ? explorerUrlFor(record.chain, hash, record.network) : undefined;\n const asset = typeof record.details?.asset === 'string' ? record.details.asset : undefined;\n // `change_trust` summaries embed the asset as `CODE:ISSUER` - split so\n // the issuer can be truncated and copied on its own.\n const colon = asset ? asset.indexOf(':') : -1;\n const trustline =\n record.operation === 'change_trust' && asset && colon > 0\n ? {\n prefix: record.summary.split(':')[0],\n code: asset.slice(0, colon),\n issuer: asset.slice(colon + 1),\n }\n : undefined;\n // `invoke_contract` summaries carry a server-truncated contract id, so\n // rebuild the chip from the full id in details instead.\n const contract =\n record.operation === 'invoke_contract' &&\n typeof record.details?.contractId === 'string' &&\n typeof record.details?.method === 'string'\n ? { method: record.details.method, contractId: record.details.contractId }\n : undefined;\n return (\n <div key={record.id} className=\"pollar-hist-item\">\n <div className=\"pollar-hist-item-top\">\n <span className=\"pollar-hist-item-summary\">\n {trustline ? (\n <>\n <span className=\"pollar-hist-item-title\">\n {trustline.prefix}: {trustline.code}\n </span>\n <AddressChip value={trustline.issuer} label=\"Copy issuer\" />\n </>\n ) : contract ? (\n <>\n <span className=\"pollar-hist-item-title\">Invoke {contract.method}() on</span>\n <AddressChip value={contract.contractId} label=\"Copy contract address\" />\n </>\n ) : (\n renderSummary(record.summary)\n )}\n </span>\n <StatusBadge status={record.status} />\n </div>\n\n <span className=\"pollar-hist-item-meta\">\n <span>{record.operation}</span>\n {typeof record.details?.sponsored === 'boolean' && (\n <span>· {record.details.sponsored ? 'Sponsored' : 'Self-paid'}</span>\n )}\n {record.fee && (\n <span>\n · {record.fee.amount} {record.fee.unit}\n </span>\n )}\n </span>\n\n <div className=\"pollar-hist-item-footer\">\n <span>{formatDate(record.createdAt)}</span>\n {hash && (\n <>\n <span className=\"pollar-hist-item-dot\">·</span>\n <span className=\"pollar-hist-item-hash\">{truncateMiddle(hash, 6, 6)}</span>\n <CopyButton value={hash} label=\"Copy transaction hash\" className=\"pollar-copy-btn-sm\" />\n <a\n className=\"pollar-hist-item-explorer\"\n href={explorerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"View on block explorer\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <path\n d=\"M5 2H2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M8 1h4m0 0v4m0-4L6 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </a>\n </>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {showPagination && (\n <div className=\"pollar-hist-pagination\">\n <span className=\"pollar-hist-pagination-info\">\n {offset + 1}–{Math.min(offset + PAGE_SIZE, total)} of {total}\n </span>\n <div className=\"pollar-hist-pagination-btns\">\n <button className=\"pollar-hist-page-btn\" onClick={onPrev} disabled={!hasPrev}>\n ← Prev\n </button>\n <button className=\"pollar-hist-page-btn\" onClick={onNext} disabled={!hasNext}>\n Next →\n </button>\n </div>\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { useCallback, useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './TxHistoryModal.css';\nimport { TxHistoryModalTemplate } from './TxHistoryModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\nconst PAGE_SIZE = 10;\n\ninterface TxHistoryModalProps {\n onClose: () => void;\n}\n\nexport function TxHistoryModal({ onClose }: TxHistoryModalProps) {\n const { getClient, styles, txHistory, wallets } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const [offset, setOffset] = useState(0);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network, like the other modals.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n\n // The chain filter is a server query param (pagination is server-side), so a\n // fetch always carries the selected chain. Null while chains resolve - the\n // effect below waits for it rather than fetching the whole unfiltered set.\n const load = useCallback(\n (nextOffset: number, chain: WalletChain) => {\n setOffset(nextOffset);\n void getClient().fetchTxHistory({ limit: PAGE_SIZE, offset: nextOffset, chain });\n },\n [getClient],\n );\n\n // (Re)load from page 1 whenever the selected chain changes. Switching networks\n // must reset the offset - page 3 of Stellar is not page 3 of Solana.\n useEffect(() => {\n if (selectedChain) load(0, selectedChain);\n }, [selectedChain, load]);\n\n const onSelectChain = (chain: WalletChain) => setSelectedChain(chain);\n const paged = (nextOffset: number) => {\n if (selectedChain) load(nextOffset, selectedChain);\n };\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <TxHistoryModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n txHistory={txHistory}\n offset={offset}\n chains={chains}\n selectedChain={selectedChain}\n walletAddress={walletAddress}\n onSelectChain={onSelectChain}\n onRefresh={() => paged(offset)}\n onPrev={() => paged(Math.max(0, offset - PAGE_SIZE))}\n onNext={() => paged(offset + PAGE_SIZE)}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { EnabledAssetRecord, StellarNetwork, WalletBalanceRecord, WalletBalanceState, WalletChain } from '@pollar/core';\nimport { ChainSelect, resolveChain } from '../ChainSelect';\nimport { BusyOverlay, CopyButton, cropAddress, PollarModalFooter, RefreshIcon, useStickyData } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\n// Stellar amounts are int64 scaled by 10^7, so 7 decimals is the ledger's exact\n// precision and the default. A Polygon/Solana token carries its own `decimals`\n// and is rendered at that precision, capped at 7 so an 18-decimal ERC-20 doesn't\n// blow the column apart. Digits are padded either way so amounts line up.\n//\n// A null balance means the chain could not be read. It renders as a dash, never\n// as 0.0000000 - a wallet that failed to load must not look empty.\nfunction formatBalance(balance: string | null, decimals = 7): string {\n if (balance === null) return '—';\n const digits = Math.min(decimals, 7);\n const n = parseFloat(balance);\n return isNaN(n) ? balance : n.toLocaleString(undefined, { minimumFractionDigits: digits, maximumFractionDigits: digits });\n}\n\n/** A testnet faucet for a given asset: where to top it up, and the link text. */\ninterface FaucetHint {\n url: string;\n label: string;\n}\n\n/**\n * The faucet for a balance row, or null when none applies. Testnet-only: the\n * caller passes `null` on mainnet, where these faucets don't fund. Solana's\n * native SOL points at the Solana faucet; USDC (an SPL token) at Circle's.\n */\nfunction faucetFor(record: WalletBalanceRecord): FaucetHint | null {\n if (record.type === 'native') return { url: 'https://faucet.solana.com/', label: 'Get test SOL' };\n if (record.code === 'USDC') return { url: 'https://faucet.circle.com/', label: 'Get test USDC' };\n return null;\n}\n\n// No per-row chain tag: the list is filtered to the internally selected\n// network, so every row would carry the same tag.\nfunction assetMetadataFor(record: WalletBalanceRecord, metadata: EnabledAssetRecord[]): EnabledAssetRecord | undefined {\n return metadata.find(\n (asset) =>\n resolveChain(asset.chain) === resolveChain(record.chain) &&\n asset.code === record.code &&\n (asset.issuer ?? '') === (record.issuer ?? ''),\n );\n}\n\nfunction AssetIcon({ code }: { code: string }) {\n return (\n <span className=\"pollar-bal-asset-icon\" aria-hidden>\n {code.slice(0, 2).toUpperCase()}\n </span>\n );\n}\n\nfunction BalanceItem({\n record,\n faucet,\n metadata,\n}: {\n record: WalletBalanceRecord;\n faucet: FaucetHint | null;\n metadata?: EnabledAssetRecord | undefined;\n}) {\n const balanceDiffers = record.balance !== record.available;\n const secondary = metadata?.name ?? (record.issuer ? cropAddress(record.issuer) : 'Native asset');\n return (\n <div className=\"pollar-bal-item\">\n <div className=\"pollar-bal-asset-info\">\n <span className=\"pollar-bal-asset-leading\">\n <AssetIcon code={record.code} />\n <span className=\"pollar-bal-asset-copy\">\n <span className=\"pollar-bal-asset\">{record.code}</span>\n <span className=\"pollar-bal-asset-secondary\">\n {secondary}\n {record.issuer && <CopyButton value={record.issuer} label=\"Copy issuer address\" className=\"pollar-copy-btn-sm\" />}\n </span>\n </span>\n </span>\n {faucet && (\n <span className=\"pollar-bal-faucet-hint\">\n Need more?{' '}\n <a href={faucet.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {faucet.label}\n </a>\n {/* Pollar's Solana testnet is the devnet cluster, and both faucets\n fund devnet - spell it out so nobody requests on the wrong one. */}\n <span className=\"pollar-bal-faucet-net\"> (devnet)</span>\n </span>\n )}\n </div>\n <div className=\"pollar-bal-amounts\">\n <span className=\"pollar-bal-amount\">{formatBalance(record.balance, record.decimals)}</span>\n {balanceDiffers && (\n <span className=\"pollar-bal-available\">{formatBalance(record.available, record.decimals)} available</span>\n )}\n </div>\n </div>\n );\n}\n\nexport interface WalletBalanceModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n walletBalance: WalletBalanceState;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n /** Asset catalog metadata, when already available in the provider. */\n assetMetadata?: EnabledAssetRecord[];\n /**\n * The networks the user holds a wallet on, in the app's configured order.\n * The picker renders only with two or more, so a single-chain app shows none.\n */\n chains?: WalletChain[];\n selectedChain: WalletChain | null;\n /** testnet vs mainnet - gates the Solana devnet faucet hint. */\n network: StellarNetwork;\n onSelectChain?: (chain: WalletChain) => void;\n onRefresh: () => void;\n onClose: () => void;\n}\n\nexport function WalletBalanceModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n walletBalance,\n walletAddress,\n assetMetadata = [],\n chains,\n selectedChain,\n network,\n onSelectChain,\n onRefresh,\n onClose,\n}: WalletBalanceModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = walletBalance.step === 'loading';\n // Keep the previous payload on screen while refreshing; the overlay below\n // blocks interaction so nothing is read against data that is changing.\n const data = useStickyData(walletBalance.step === 'loaded' ? walletBalance.data : null);\n // Only the picked network's balances. The backend returns every chain in one\n // payload, so this is a local filter - switching networks costs no request.\n const balances = (data?.balances ?? []).filter((b) => resolveChain(b.chain) === selectedChain);\n // These faucets fund devnet/testnet only, so mainnet gets no hint at all.\n const showFaucets = selectedChain === 'SOLANA' && network === 'testnet';\n\n return (\n <div className=\"pollar-modal-card pollar-bal-modal\" data-theme={theme} style={cssVars} onClick={(e) => e.stopPropagation()}>\n {isLoading && data && <BusyOverlay label=\"Refreshing balances…\" />}\n\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Wallet Balance</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <RefreshIcon spinning={isLoading} />\n </button>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {chains && onSelectChain && (\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoading} />\n )}\n\n {walletAddress && (\n <div className=\"pollar-address-row\">\n <span className=\"pollar-address\">{cropAddress(walletAddress)}</span>\n <CopyButton value={walletAddress} label=\"Copy wallet address\" />\n </div>\n )}\n\n {/* First load only - a refresh keeps the old list under the overlay. */}\n {isLoading && !data && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n\n {walletBalance.step === 'error' && <div className=\"pollar-modal-error\">{walletBalance.message}</div>}\n\n {data && !data.exists && <div className=\"pollar-modal-empty\">Account not found on {data.network}.</div>}\n\n {data?.exists && balances.length === 0 && <div className=\"pollar-modal-empty\">No balances found on this network.</div>}\n\n {data?.exists && balances.length > 0 && (\n <div className=\"pollar-bal-list\">\n {balances.map((b) => (\n <BalanceItem\n key={(b.chain ?? '') + b.code + (b.issuer ?? '')}\n record={b}\n metadata={assetMetadataFor(b, assetMetadata)}\n faucet={showFaucets ? faucetFor(b) : null}\n />\n ))}\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './WalletBalanceModal.css';\nimport { WalletBalanceModalTemplate } from './WalletBalanceModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface WalletBalanceModalProps {\n onClose: () => void;\n}\n\nexport function WalletBalanceModal({ onClose }: WalletBalanceModalProps) {\n const { walletBalance, refreshWalletBalance, wallets, network, styles, enabledAssets } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n\n useEffect(() => {\n void refreshWalletBalance();\n }, [refreshWalletBalance]);\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <WalletBalanceModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n walletBalance={walletBalance}\n walletAddress={walletAddress}\n assetMetadata={enabledAssets.step === 'loaded' ? enabledAssets.data.assets : []}\n chains={chains}\n selectedChain={selectedChain}\n network={network}\n onSelectChain={setSelectedChain}\n onRefresh={() => refreshWalletBalance()}\n onClose={onClose}\n />\n </div>\n );\n}\n","import type { PasskeyCeremony, PasskeySigner } from '@pollar/core';\nimport { startAuthentication, startRegistration } from '@simplewebauthn/browser';\n\n// hex -> base64url, for passing the raw auth digest as the WebAuthn challenge.\nfunction hexToBase64url(hex: string): string {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n// WebAuthn user.id must be a base64url string in the JSON options. It is a\n// per-credential opaque handle (the authenticator stores it for the account\n// picker); the server identifies users by credentialId, not this.\nfunction randomUserId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * Browser passkey ceremony for the smart-wallet flow.\n *\n * `mode` is set explicitly by the caller's button, so there's no ambiguous\n * autodetect:\n * - `'login'` -> `get()` only (returning user - the OS shows the account\n * picker for discoverable credentials on this domain). A\n * failure here is surfaced as-is; it never falls through to\n * registration, so cancelling the prompt can't accidentally\n * create a second wallet.\n * - `'register'` -> `create()` only (new user -> the server deploys the\n * C-address).\n *\n * rpId = the current page's hostname (the customer app's domain), which is what\n * the passkey is bound to - the anti-phishing guarantee.\n */\nexport const browserPasskeyCeremony: PasskeyCeremony = async ({ challenge, mode }) => {\n const rpId = window.location.hostname;\n\n if (mode === 'login') {\n const response = await startAuthentication({\n optionsJSON: { challenge, rpId, userVerification: 'required' },\n });\n return { kind: 'login', response };\n }\n\n const userId = randomUserId();\n const response = await startRegistration({\n optionsJSON: {\n challenge,\n rp: { id: rpId, name: rpId },\n user: { id: userId, name: 'Smart Wallet', displayName: 'Smart Wallet' },\n // ES256 (secp256r1) - the curve the on-chain WebAuthn verifier expects.\n pubKeyCredParams: [{ type: 'public-key', alg: -7 }],\n authenticatorSelection: { residentKey: 'required', userVerification: 'required' },\n attestation: 'none',\n timeout: 60_000,\n },\n });\n return { kind: 'register', response };\n};\n\n/**\n * Browser passkey signer for smart-wallet transactions. Runs a WebAuthn `get()`\n * whose challenge is the raw auth digest (the on-chain verifier checks\n * clientDataJSON.challenge === base64url(digest)), and returns the public\n * assertion fields (base64url) for the server to assemble into the Soroban auth\n * entry. The secp256r1 key never leaves the device.\n */\nexport const browserPasskeySigner: PasskeySigner = async ({ credentialId, challenge }) => {\n const rpId = window.location.hostname;\n const { response } = await startAuthentication({\n optionsJSON: {\n challenge: hexToBase64url(challenge),\n rpId,\n allowCredentials: [{ id: credentialId, type: 'public-key' }],\n userVerification: 'required',\n },\n });\n // @simplewebauthn/browser returns these as base64url strings.\n return {\n authenticatorData: response.authenticatorData,\n clientDataJSON: response.clientDataJSON,\n signature: response.signature,\n };\n};\n","'use client';\n\nimport {\n isPollarClient,\n BuildOutcome,\n EnabledAssetsState,\n isInteractiveAuthAdapter,\n NetworkState,\n OnStorageDegrade,\n PollarAdapters,\n PollarClient,\n PollarClientConfig,\n PollarLoginOptions,\n PollarPersistedSession,\n SendPaymentParams,\n SessionsState,\n SignOutcome,\n StellarNetwork,\n SubmitOutcome,\n SwapQuote,\n SwapQuoteParams,\n SwapToken,\n SwapVenue,\n EarnProviderId,\n EarnOpportunity,\n EarnPosition,\n EarnPositionParams,\n EarnTxParams,\n TrustlineOutcome,\n TransactionState,\n TxBuildBody,\n TxHistoryState,\n WalletBalanceState,\n WalletInfo,\n} from '@pollar/core';\nimport { createContext, ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { ModalErrorBoundary, setModalErrorLogger } from './components/commons';\nimport { DistributionRulesModal } from './components/distribution-rules-modal/DistributionRulesModal';\nimport { EnabledAssetsModal } from './components/enabled-assets-modal/EnabledAssetsModal';\nimport { KycModal } from './components/kyc-modal/KycModal';\nimport { AppKycFlow } from './components/kyc-modal/AppKycFlow';\nimport { LoginModal } from './components/login-modal/LoginModal';\nimport { RampWidget } from './components/ramp-widget/RampWidget';\nimport { ReceiveModal } from './components/receive-modal/ReceiveModal';\nimport { SendModal } from './components/send-modal/SendModal';\nimport { SwapModal } from './components/swap-modal/SwapModal';\nimport { EarnModal } from './components/earn-modal/EarnModal';\nimport { CardModal } from './components/card-modal/CardModal';\nimport { SessionsModal } from './components/sessions-modal/SessionsModal';\nimport { TransactionModal } from './components/transaction-modal/TransactionModal';\nimport { TxHistoryModal } from './components/tx-history-modal/TxHistoryModal';\nimport { WalletBalanceModal } from './components/wallet-balance-modal/WalletBalanceModal';\nimport { browserPasskeyCeremony, browserPasskeySigner } from './lib/passkey-ceremony';\nimport type { PollarConfig, PollarStyles } from './types';\n\nconst DEFAULT_APP_CONFIG: PollarConfig = {\n application: { name: '', network: 'testnet', chains: [] },\n styles: {},\n};\n\n/**\n * Compares the fields of a persisted session that actually drive UI re-renders.\n * Replaces a per-listener `JSON.stringify(...) !== JSON.stringify(...)` call -\n * cheaper, allocation-free, and explicit about what counts as \"changed\".\n *\n * If a field is added to `PollarPersistedSession` that consumers read through\n * context, list it here too.\n */\nfunction sessionsEqual(a: PollarPersistedSession | null, b: PollarPersistedSession | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.clientSessionId === b.clientSessionId &&\n a.userId === b.userId &&\n a.status === b.status &&\n a.token?.accessToken === b.token?.accessToken &&\n a.token?.refreshToken === b.token?.refreshToken &&\n a.token?.expiresAt === b.token?.expiresAt &&\n a.wallet?.address === b.wallet?.address &&\n // The wallet's on-chain account can move from CREATING to READY without any\n // other field changing. Leaving it out of the comparison is what would make\n // the whole provisioning UI dead: the short-circuit below would swallow the\n // one emission that says the wait is over.\n a.wallet?.provisioning === b.wallet?.provisioning\n );\n}\n\ninterface PollarContextValue {\n /**\n * The authenticated user's wallet as a discriminated union over `custody`\n * (`internal` | `smart` | `external`), or `null` when unauthenticated. Every\n * field is meaningful for any login method - `custody` is always present and\n * strictly determines the shape of `provider`. Use `wallet.address` for the\n * on-chain address and `wallet.provider` for the wallet/login provider.\n */\n wallet: WalletInfo | null;\n /**\n * Every wallet the user holds, one per chain - a superset of {@link wallet},\n * with `chain` populated. `[]` when unauthenticated. Drives the network\n * selector in the Send / Wallet Balance / Assets modals: each entry is a\n * network the user can switch to, and the first one is the default.\n */\n wallets: WalletInfo[];\n getClient: () => PollarClient;\n openLoginModal: () => void;\n\n isAuthenticated: boolean;\n /**\n * Whether the signed-in user has a wallet. False for an app that creates\n * wallets on demand until {@link createWallet} runs, and always for one that\n * creates none.\n */\n hasWallet: boolean;\n /** Create the signed-in user's wallet; see `PollarClient.createWallet`. */\n createWallet: () => Promise<WalletInfo>;\n /**\n * `true` once the server has confirmed the session (login / refresh /\n * `/auth/session/resume`). `false` while a cold-start session is still\n * optimistic - gate sensitive actions (e.g. signing) on this.\n */\n verified: boolean;\n login: (options: PollarLoginOptions) => void;\n logout: () => void;\n // sessions\n sessions: SessionsState;\n /** Open the active-sessions modal. */\n openSessionsModal: () => void;\n appConfig: PollarConfig;\n styles: PollarStyles;\n /** Remote app-config load state. 'loading' while the initial fetch is in\n * flight, 'error' if it failed (styles fall back to empty defaults), 'ready'\n * once resolved - or immediately 'ready' when `appConfig` is passed as a prop.\n * The login modal shows a spinner/retry instead of an empty shell until this\n * is 'ready'. */\n configStatus: 'loading' | 'ready' | 'error';\n /** Re-run the remote app-config fetch after an error. No-op when `appConfig`\n * was supplied as a prop. */\n retryConfig: () => void;\n // transactions\n openTxModal: () => void;\n tx: TransactionState;\n buildTx: (\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ) => Promise<BuildOutcome>;\n signAndSubmitTx: (unsignedXdr?: string) => Promise<SubmitOutcome>;\n /** Sign only. Embedded sessions sign server-side, external sessions through their adapter. Smart wallets use `signAndSubmitTx`. */\n signTx: (unsignedXdr: string) => Promise<SignOutcome>;\n submitTx: (signedXdr: string) => Promise<SubmitOutcome>;\n /** One-shot: build -> sign -> submit. Drives the same TransactionState flow as the split calls. */\n buildAndSignAndSubmitTx: (\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ) => Promise<SubmitOutcome>;\n /** Alias of `buildAndSignAndSubmitTx`. */\n runTx: (\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ) => Promise<SubmitOutcome>;\n /**\n * Send a payment on any chain the user holds a wallet on. Stellar keeps the\n * split flow (so external adapters and passkeys still work); a chain whose\n * signature expires goes through one server-side call and is embedded-only.\n */\n sendPayment: (params: SendPaymentParams) => Promise<SubmitOutcome>;\n // network\n network: StellarNetwork;\n setNetwork: (network: StellarNetwork) => void;\n // wallet balance\n walletBalance: WalletBalanceState;\n refreshWalletBalance: () => Promise<void>;\n // enabled assets\n /**\n * The application's dashboard-enabled assets paired with the authenticated\n * wallet's on-chain trustline state (`trustlineEstablished` per asset). Driven\n * by {@link refreshAssets}; mirrors {@link walletBalance}.\n */\n enabledAssets: EnabledAssetsState;\n refreshAssets: () => Promise<void>;\n /**\n * Establishes (omit `limit`) or removes (`limit: '0'`) a trustline for an\n * asset. Sponsorship is derived automatically from the app's dashboard config\n * (the app covers the reserve + fee when eligible); pass `skipSponsorship` to\n * force the user's own wallet to pay. Mirrors {@link PollarClient.setTrustline}.\n */\n setTrustline: (\n asset: { code: string; issuer: string },\n opts?: {\n limit?: string;\n /** Force self-pay even when the app would sponsor the trustline. */\n skipSponsorship?: boolean;\n },\n ) => Promise<TrustlineOutcome>;\n /** Open the enabled-assets / trustline-state modal. */\n openEnabledAssetsModal: () => void;\n // kyc\n openKycModal: (options?: {\n corridorId?: string;\n providerId?: string;\n country?: string;\n level?: 'basic' | 'intermediate' | 'enhanced';\n onApproved?: () => void;\n }) => void;\n // ramps\n openRampModal: () => void;\n // tx history\n txHistory: TxHistoryState;\n openTxHistoryModal: () => void;\n // wallet balance modal\n openWalletBalanceModal: () => void;\n // send / receive\n openSendModal: () => void;\n openReceiveModal: () => void;\n // swap (DEX/AMM)\n /**\n * The swap venues this app exposes to end-users (empty = swap disabled, hide\n * swap UI). Mirrors {@link PollarClient.getSwapConfig}.\n */\n getSwapConfig: () => Promise<SwapVenue[]>;\n /**\n * The curated \"buy\" tokens this app opted into (admin catalog). Mirrors\n * {@link PollarClient.getSwapTokens}.\n */\n getSwapTokens: () => Promise<SwapToken[]>;\n /**\n * Quote an asset-to-asset swap across the requested venue(s). Read-only;\n * returns quotes ranked best-first. Mirrors {@link PollarClient.getSwapQuote}.\n */\n getSwapQuote: (params: SwapQuoteParams) => Promise<SwapQuote[]>;\n /**\n * Execute a swap from a quote (establishes the buy-asset trustline first when\n * needed). Drives the transaction state machine. Mirrors {@link PollarClient.swap}.\n */\n swap: (quote: SwapQuote, opts?: { autoTrustline?: boolean }) => Promise<SubmitOutcome>;\n /** Open the swap modal. */\n openSwapModal: () => void;\n // earn (yield vaults / lending)\n /**\n * The yield providers this app exposes to end-users (empty = Earn disabled,\n * hide Earn UI). Mirrors {@link PollarClient.getEarnProviders}.\n */\n getEarnProviders: () => Promise<EarnProviderId[]>;\n /**\n * The vaults (DeFindex) or pools (Blend) a provider exposes, with live APY.\n * Mirrors {@link PollarClient.getEarnOpportunities}.\n */\n getEarnOpportunities: (provider: EarnProviderId) => Promise<EarnOpportunity[]>;\n /**\n * The connected wallet's position (balance + APY) in a vault/pool. Read-only.\n * Mirrors {@link PollarClient.getEarnPosition}.\n */\n getEarnPosition: (params: EarnPositionParams) => Promise<EarnPosition>;\n /**\n * Deposit into a vault/pool (asset amount). Drives the transaction state\n * machine. Mirrors {@link PollarClient.earnDeposit}.\n */\n earnDeposit: (params: EarnTxParams) => Promise<SubmitOutcome>;\n /**\n * Withdraw from a vault/pool (amount in the position `withdrawUnit`). Mirrors\n * {@link PollarClient.earnWithdraw}.\n */\n earnWithdraw: (params: EarnTxParams) => Promise<SubmitOutcome>;\n /** Open the Earn modal. */\n openEarnModal: () => void;\n // cards\n /**\n * Open the Cards modal: sign-up, identity verification, issuing, the card\n * itself and its activity. The card calls live on {@link PollarClient}\n * (`getCardProviders`, `issueCard`, `revealCardSecrets`, ...).\n */\n openCardModal: () => void;\n // distribution\n openDistributionRulesModal: () => void;\n // adapters\n adapters?: PollarAdapters;\n}\n\nconst PollarContext = createContext<PollarContextValue | null>(null);\n\ninterface PollarProviderProps {\n /**\n * Either a pre-built `PollarClient` instance (useful for testing or for\n * reusing the same client outside React) or a `PollarClientConfig` that the\n * provider will use to construct one on mount.\n *\n * The client is locked at first render: changing this prop afterwards is\n * ignored. To swap clients, unmount and remount the provider.\n *\n * Either form gets the web passkey ceremony installed (a pre-built instance\n * is filled in via `setPasskeyDefaults`), so the \"Smart Wallet\" login works\n * without the consumer wiring WebAuthn. A ceremony you configured yourself is\n * always kept.\n */\n client: PollarClient | PollarClientConfig;\n /**\n * Local REPLACEMENT for the `/applications/config` response, not a patch over\n * it. Passing anything at all skips the remote fetch entirely; what you pass\n * is used verbatim and is never merged with the server's answer, so there is\n * no \"fill in the fields I left out\".\n *\n * `styles` may be partial (every field in it is optional), but `application`\n * may not: `name`, `network` and `chains` are all required by the type. If you\n * bypass the type anyway (plain JS, or a cast), each missing field lands on a\n * default scattered across the components rather than on anything central:\n *\n * chains absent -> the chain order/filter falls back to the order the\n * session listed the user's wallets in (see useChains)\n * name absent -> 'Pollar'\n * theme absent -> 'light'\n * accentColor absent -> '#005DB4'\n * emailEnabled, providers, embeddedWallets, smartWallet\n * absent -> false. NOTE: that means EVERY login method is off\n * and the login modal renders with no way in.\n *\n * Leave this `undefined` to have the SDK fetch `/applications/config` on\n * mount, which is also what keeps branding, login methods and chains current:\n * that fetch re-runs on every mount, so dashboard changes land on the next\n * page load. Supplying this prop opts out of that too.\n */\n appConfig?: PollarConfig;\n adapters?: PollarAdapters;\n /**\n * Notified when persistent storage silently degrades to in-memory mode\n * (Safari private browsing quota errors, sandboxed iframes, etc.). Use this\n * to surface a UI hint that the session won't survive a reload, log to\n * telemetry, or fall back to a different storage strategy.\n *\n * Fires at most once per provider lifetime; late mounts get the latched\n * state replayed on subscribe.\n */\n onStorageDegrade?: OnStorageDegrade;\n children: ReactNode;\n}\n\n/**\n * Clients built from a `PollarClientConfig`, keyed by that exact config object.\n *\n * React StrictMode double-invokes the `useState` initializer below on mount and\n * discards the FIRST pass's hook state entirely - the value the component keeps\n * comes from the second pass, and `useRef` carries nothing between the two. So\n * a ref guard cannot see the first construction, and without this map the\n * provider built TWO clients and only ever tore down the one React kept. The\n * orphan outlived the provider, holding a cross-tab `storage` listener, a\n * refresh loop and a live-client registry entry for the life of the page - and\n * two live clients on one API key share a session row and a DPoP keypair, which\n * is exactly the configuration `@pollar/core`'s session teardown has to defend\n * against. (See `tests/smoke-react.cjs`, which renders through jsdom because\n * `react-test-renderer` does not reproduce the double render at all.)\n *\n * Both passes receive the same props object - React re-invokes a component's\n * render function in place and reconciles children from the last pass - so\n * keying on the config makes the second pass reuse the first pass's client\n * instead of building another. Weak, so an abandoned config never keeps a\n * client alive; and the entry is dropped as soon as the mount effect claims the\n * client, so a later provider rendered with the same (retained) config object\n * builds its own rather than receiving one this provider is about to destroy.\n *\n * Two providers sharing one config OBJECT still share the client. That is the\n * better outcome of the two - one client per config identity, rather than two\n * fighting over the same session row - and it matches what the SDK already\n * warns about for multiple clients on one API key.\n */\nconst clientByConfig = new WeakMap<PollarClientConfig, PollarClient>();\n\nexport function PollarProvider({\n client,\n appConfig: appConfigProp,\n adapters,\n onStorageDegrade,\n children,\n}: PollarProviderProps) {\n // Inject the browser passkey ceremony so `loginSmartWallet()` /\n // `createSmartWallet()` work out of the box on web, whichever way the client\n // arrives: built here from a config, or handed over ready-made (a consumer\n // singleton shared with non-React code). The consumer can override it (e.g. a\n // React Native native provider) via `client.passkey`; `??` keeps an explicit\n // ceremony winning while an absent/undefined one still gets the default.\n const [pollarClient] = useState<PollarClient>(() => {\n if (isPollarClient(client)) {\n client.setPasskeyDefaults({ passkey: browserPasskeyCeremony, passkeySign: browserPasskeySigner });\n return client;\n }\n // Reuse the instance a discarded render pass already built (see\n // `clientByConfig`) instead of constructing a second one that nothing\n // would ever tear down.\n const alreadyBuilt = clientByConfig.get(client);\n if (alreadyBuilt) return alreadyBuilt;\n const built = new PollarClient({\n ...client,\n passkey: client.passkey ?? browserPasskeyCeremony,\n passkeySign: client.passkeySign ?? browserPasskeySigner,\n });\n clientByConfig.set(client, built);\n return built;\n });\n // Only a client WE constructed is ours to tear down on unmount; a client the\n // consumer passed in is theirs to manage. Captured once (the useState\n // initializer above made the same decision).\n const ownsClientRef = useRef(!isPollarClient(client));\n const destroyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n /** The config this provider built from, until the mount effect claims it. */\n const builtFromConfigRef = useRef<PollarClientConfig | null>(isPollarClient(client) ? null : client);\n\n // Tear down the client on a real unmount so its cross-tab storage listener,\n // refresh timer, and live-client registry entry don't leak - matters when the\n // provider is keyed (e.g. `key={apiKey}`) and remounts on network change.\n useEffect(() => {\n if (!ownsClientRef.current) return;\n // Claim the client. Effects run after the double render, so the shared\n // entry has done its job; dropping it keeps a future provider from being\n // handed a client this one will destroy on unmount.\n if (builtFromConfigRef.current) {\n clientByConfig.delete(builtFromConfigRef.current);\n builtFromConfigRef.current = null;\n }\n // This mount is live again - cancel any teardown scheduled by a prior\n // (StrictMode dev) unmount before it can destroy the client we still use.\n if (destroyTimerRef.current) {\n clearTimeout(destroyTimerRef.current);\n destroyTimerRef.current = null;\n }\n return () => {\n // Defer to a macrotask: React StrictMode unmounts then synchronously\n // remounts in dev, and the remount's effect (above) cancels this before it\n // runs. On a real unmount nothing re-mounts to cancel it, so it fires.\n destroyTimerRef.current = setTimeout(() => pollarClient.destroy(), 0);\n };\n }, [pollarClient]);\n const [networkState, setNetworkState] = useState<NetworkState>(() => pollarClient.getNetworkState());\n const [sessionState, setSessionState] = useState<PollarPersistedSession | null>(null);\n // `true` once the server has confirmed the restored session (via login,\n // refresh, or `/auth/session/resume`). Use it to gate sensitive actions\n // while a cold-start session is still optimistic.\n const [verified, setVerified] = useState(false);\n const [transaction, setTransaction] = useState<TransactionState>({ step: 'idle' });\n const [txHistory, setTxHistory] = useState<TxHistoryState>({ step: 'idle' });\n const [sessions, setSessions] = useState<SessionsState>({ step: 'idle' });\n const [walletBalance, setWalletBalance] = useState<WalletBalanceState>({ step: 'idle' });\n const [enabledAssets, setEnabledAssets] = useState<EnabledAssetsState>({ step: 'idle' });\n const [resolvedConfig, setResolvedConfig] = useState<PollarConfig>(() => appConfigProp ?? DEFAULT_APP_CONFIG);\n const [configStatus, setConfigStatus] = useState<'loading' | 'ready' | 'error'>(\n appConfigProp !== undefined ? 'ready' : 'loading',\n );\n const [configRetry, setConfigRetry] = useState(0);\n const retryConfig = useCallback(() => setConfigRetry((n) => n + 1), []);\n\n // A locally-passed `appConfig` is tracked by CONTENT, not by identity. A\n // consumer writing `appConfig={{ ... }}` inline hands us a new object on every\n // render, so keying the config effect on the object itself would re-run it,\n // set state with a fresh reference, re-render, and never settle. The\n // serialized form only changes when the config really changes, and\n // `PollarConfig` is a plain JSON response shape, so it serializes losslessly.\n const appConfigKey = appConfigProp === undefined ? '' : JSON.stringify(appConfigProp);\n // The effect reads the prop through this ref so it does not have to key on it.\n const appConfigPropRef = useRef(appConfigProp);\n appConfigPropRef.current = appConfigProp;\n\n useEffect(() => {\n return pollarClient.onTransactionStateChange(setTransaction);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onTxHistoryStateChange(setTxHistory);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onSessionsStateChange(setSessions);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onWalletBalanceStateChange(setWalletBalance);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onEnabledAssetsStateChange(setEnabledAssets);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onNetworkStateChange((state) => {\n setNetworkState(state);\n });\n }, [pollarClient]);\n\n useEffect(() => {\n if (!onStorageDegrade) return;\n return pollarClient.onStorageDegrade(onStorageDegrade);\n }, [pollarClient, onStorageDegrade]);\n\n useEffect(() => {\n return pollarClient.onAuthStateChange((authState) => {\n if (authState.step === 'authenticated') {\n setSessionState((prev) => (sessionsEqual(prev, authState.session) ? prev : authState.session));\n // The session object is identical between the optimistic restore and\n // the post-resume confirmation, so `verified` is tracked separately -\n // otherwise the sessionsEqual short-circuit would swallow the flip.\n setVerified(authState.verified);\n } else if (authState.step === 'idle') {\n setSessionState(null);\n setVerified(false);\n }\n });\n }, [pollarClient]);\n\n // Auto-login for interactive adapters (e.g. Privy). When the adapter's\n // provider authenticates *outside* the sub-modal flow - after an OAuth redirect\n // (the page reloaded, so the sub-modal promise is gone) or a persisted provider\n // session on load - and Pollar has no session yet, trigger `login({ provider })`\n // so `connect()` + SEP-10 run. Read the session through a ref so the\n // subscription is set up once and never re-subscribes on session changes.\n const sessionRef = useRef(sessionState);\n sessionRef.current = sessionState;\n useEffect(() => {\n const unsubscribes: Array<() => void> = [];\n for (const { id } of pollarClient.listWalletAdapters()) {\n const adapter = pollarClient.getWalletAdapter(id);\n if (!isInteractiveAuthAdapter(adapter) || !adapter.onProviderAuthChange) continue;\n let triggered = false;\n unsubscribes.push(\n adapter.onProviderAuthChange((state) => {\n // Reset on sign-out so a later re-auth can trigger again (rising edge).\n if (!state.authenticated || !state.address) {\n triggered = false;\n return;\n }\n if (triggered || sessionRef.current) return;\n triggered = true;\n pollarClient.login({ provider: id } as PollarLoginOptions);\n }),\n );\n }\n return () => {\n for (const unsubscribe of unsubscribes) unsubscribe();\n };\n }, [pollarClient]);\n\n // Route the modal error boundary's logs through the client's level-gated\n // logger (it's a class component that can't read context directly).\n useEffect(() => {\n setModalErrorLogger(pollarClient.getLogger());\n }, [pollarClient]);\n\n useEffect(() => {\n // PRESENCE of `appConfig` is the opt-out, not its contents: any value at all\n // means the consumer owns the config, so the remote fetch never runs and\n // what they passed is used as-is. It is 'ready' immediately because there is\n // nothing to wait for. It is also re-applied here, not only seeded in the\n // initial state, so a consumer that swaps the config after mount is not left\n // with the value from the first render.\n //\n // Otherwise this runs on every mount, which is what keeps branding, login\n // methods and chains current: a change in the dashboard lands on the next\n // page load with no re-login.\n const localConfig = appConfigPropRef.current;\n if (localConfig !== undefined) {\n // Same fallback as the initial state above, so a JS consumer passing an\n // explicit null still lands on the default config instead of a null one.\n setResolvedConfig(localConfig ?? DEFAULT_APP_CONFIG);\n setConfigStatus('ready');\n return;\n }\n let cancelled = false;\n setConfigStatus('loading');\n pollarClient\n .getAppConfig()\n .then((fetched) => {\n if (cancelled) return;\n if (!fetched) {\n setConfigStatus('error');\n return;\n }\n setResolvedConfig(fetched as PollarConfig);\n setConfigStatus('ready');\n })\n .catch((err) => {\n if (cancelled) return;\n pollarClient.getLogger().error('[PollarProvider] getAppConfig failed', err);\n setConfigStatus('error');\n });\n return () => {\n cancelled = true;\n };\n }, [pollarClient, appConfigKey, configRetry]);\n\n const [loginModalOpen, setLoginModalOpen] = useState(false);\n const [transactionModalOpen, setTransactionModalOpen] = useState(false);\n const [kycModalOpen, setKycModalOpen] = useState(false);\n const [kycModalOptions, setKycModalOptions] = useState<{\n corridorId?: string;\n providerId?: string;\n country?: string;\n level?: 'basic' | 'intermediate' | 'enhanced';\n onApproved?: () => void;\n }>({});\n const [rampModalOpen, setRampModalOpen] = useState(false);\n const [txHistoryModalOpen, setTxHistoryModalOpen] = useState(false);\n const [walletBalanceModalOpen, setWalletBalanceModalOpen] = useState(false);\n const [enabledAssetsModalOpen, setEnabledAssetsModalOpen] = useState(false);\n const [sendModalOpen, setSendModalOpen] = useState(false);\n const [swapModalOpen, setSwapModalOpen] = useState(false);\n const [earnModalOpen, setEarnModalOpen] = useState(false);\n // Bumped every time a tx-driving modal opens, used as its `key` so a re-open\n // remounts it (local `step` back to the form) even when it was already open on\n // a terminal \"Done!\"/error screen. Paired with `resetTransactionState()`.\n const [sendModalKey, setSendModalKey] = useState(0);\n const [swapModalKey, setSwapModalKey] = useState(0);\n const [earnModalKey, setEarnModalKey] = useState(0);\n const [cardModalOpen, setCardModalOpen] = useState(false);\n const [cardModalKey, setCardModalKey] = useState(0);\n const [receiveModalOpen, setReceiveModalOpen] = useState(false);\n const [sessionsModalOpen, setSessionsModalOpen] = useState(false);\n const [distributionRulesModalOpen, setDistributionRulesModalOpen] = useState(false);\n\n // When the session ends (logout, revoked, ended in another tab) every modal that\n // acts on it closes, so none keeps the previous user's data on screen; reopening\n // loads from scratch. Losing the network does not end the session (core keeps it\n // and retries), so this never fires offline. The login modal stays.\n useEffect(\n () =>\n pollarClient.onAuthStateChange((authState) => {\n if (authState.step !== 'idle') return;\n setTransactionModalOpen(false);\n setKycModalOpen(false);\n setRampModalOpen(false);\n setTxHistoryModalOpen(false);\n setWalletBalanceModalOpen(false);\n setEnabledAssetsModalOpen(false);\n setSendModalOpen(false);\n setSwapModalOpen(false);\n setEarnModalOpen(false);\n setCardModalOpen(false);\n setReceiveModalOpen(false);\n setSessionsModalOpen(false);\n setDistributionRulesModalOpen(false);\n }),\n [pollarClient],\n );\n\n // PII (incl. providers.wallet.address) lives on `client.getUserProfile()`, not on the\n // persisted session. For every wallet type, `wallet.address` holds the on-chain\n // address we care about.\n const walletAddress = sessionState?.wallet?.address || '';\n // A scalar dependency for the context memo below, for the same reason\n // `walletAddress` is one: the memo reads the wallet through\n // `pollarClient.getWallet()`, so it only recomputes when something in its\n // dependency list moves. Without this, a wallet going from CREATING to READY\n // updates the session and re-renders nothing.\n const walletProvisioning = sessionState?.wallet?.provisioning;\n // Signed in is having a session: a user of an app that creates wallets on\n // demand is authenticated before they have an address.\n const hasSession = sessionState !== null;\n const getClient = useCallback(() => pollarClient, [pollarClient]);\n // refreshBalance resolves the own wallet server-side from the session;\n // walletAddress stays in deps so the callback re-binds when the wallet changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- walletAddress is an intentional re-bind trigger, not read in the body\n const refreshWalletBalance = useCallback(() => pollarClient.refreshBalance(), [pollarClient, walletAddress]);\n // refreshAssets resolves the own wallet server-side from the session;\n // walletAddress stays in deps so the callback re-binds when the wallet changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- walletAddress is an intentional re-bind trigger, not read in the body\n const refreshAssets = useCallback(() => pollarClient.refreshAssets(), [pollarClient, walletAddress]);\n\n const contextValue: PollarContextValue = useMemo(() => {\n const styles: PollarStyles = resolvedConfig.styles ?? {};\n return {\n // session\n wallet: pollarClient.getWallet(),\n wallets: pollarClient.getWallets(),\n isAuthenticated: hasSession,\n hasWallet: pollarClient.hasWallet(),\n createWallet: () => pollarClient.createWallet(),\n verified,\n // client\n getClient,\n // auth\n login: (options: PollarLoginOptions) => pollarClient.login(options),\n logout: () => pollarClient.logout(),\n openLoginModal: () => setLoginModalOpen(true),\n // transactions\n tx: transaction,\n buildTx: (operation, params, options) => pollarClient.buildTx(operation, params, options),\n signAndSubmitTx: (unsignedXdr?: string) => pollarClient.signAndSubmitTx(unsignedXdr),\n signTx: (unsignedXdr: string) => pollarClient.signTx(unsignedXdr),\n submitTx: (signedXdr: string) => pollarClient.submitTx(signedXdr),\n buildAndSignAndSubmitTx: (operation, params, options) => pollarClient.buildAndSignAndSubmitTx(operation, params, options),\n runTx: (operation, params, options) => pollarClient.runTx(operation, params, options),\n sendPayment: (params) => pollarClient.sendPayment(params),\n openTxModal: () => setTransactionModalOpen(true),\n // tx history\n txHistory,\n openTxHistoryModal: () => setTxHistoryModalOpen(true),\n // wallet balance\n walletBalance,\n refreshWalletBalance,\n openWalletBalanceModal: () => setWalletBalanceModalOpen(true),\n // enabled assets\n enabledAssets,\n refreshAssets,\n setTrustline: (asset, opts) => pollarClient.setTrustline(asset, opts),\n openEnabledAssetsModal: () => setEnabledAssetsModalOpen(true),\n // send / receive\n openSendModal: () => {\n pollarClient.resetTransactionState();\n setSendModalKey((k) => k + 1);\n setSendModalOpen(true);\n },\n openReceiveModal: () => setReceiveModalOpen(true),\n // swap\n getSwapConfig: () => pollarClient.getSwapConfig(),\n getSwapTokens: () => pollarClient.getSwapTokens(),\n getSwapQuote: (params) => pollarClient.getSwapQuote(params),\n swap: (quote, opts) => pollarClient.swap(quote, opts),\n openSwapModal: () => {\n pollarClient.resetTransactionState();\n setSwapModalKey((k) => k + 1);\n setSwapModalOpen(true);\n },\n // earn\n getEarnProviders: () => pollarClient.getEarnProviders(),\n getEarnOpportunities: (provider) => pollarClient.getEarnOpportunities(provider),\n getEarnPosition: (params) => pollarClient.getEarnPosition(params),\n earnDeposit: (params) => pollarClient.earnDeposit(params),\n earnWithdraw: (params) => pollarClient.earnWithdraw(params),\n openEarnModal: () => {\n pollarClient.resetTransactionState();\n setEarnModalKey((k) => k + 1);\n setEarnModalOpen(true);\n },\n // cards\n openCardModal: () => {\n setCardModalKey((k) => k + 1);\n setCardModalOpen(true);\n },\n // sessions\n sessions,\n openSessionsModal: () => setSessionsModalOpen(true),\n // distribution\n openDistributionRulesModal: () => setDistributionRulesModalOpen(true),\n // network\n network: networkState.step === 'connected' ? networkState.network : 'testnet',\n setNetwork: (network: StellarNetwork) => pollarClient.setNetwork(network),\n // kyc\n openKycModal: (options = {}) => {\n setKycModalOptions(options);\n setKycModalOpen(true);\n },\n // ramp\n openRampModal: () => setRampModalOpen(true),\n // config\n appConfig: resolvedConfig,\n styles,\n configStatus,\n retryConfig,\n adapters,\n } as PollarContextValue;\n // eslint-disable-next-line react-hooks/exhaustive-deps -- walletProvisioning is an intentional recompute trigger, not read in the body\n }, [\n walletAddress,\n walletProvisioning,\n hasSession,\n verified,\n pollarClient,\n getClient,\n transaction,\n txHistory,\n sessions,\n walletBalance,\n refreshWalletBalance,\n enabledAssets,\n refreshAssets,\n networkState,\n resolvedConfig,\n configStatus,\n retryConfig,\n adapters,\n ]);\n\n return (\n <PollarContext.Provider value={contextValue}>\n {children}\n {loginModalOpen && (\n <ModalErrorBoundary onClose={() => setLoginModalOpen(false)}>\n <LoginModal onClose={() => setLoginModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {transactionModalOpen && (\n <ModalErrorBoundary onClose={() => setTransactionModalOpen(false)}>\n <TransactionModal onClose={() => setTransactionModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {kycModalOpen && (\n <ModalErrorBoundary onClose={() => setKycModalOpen(false)}>\n {kycModalOptions.corridorId === undefined && kycModalOptions.providerId === undefined ? (\n // The app's own KYC: its configured steps, in order.\n <AppKycFlow\n onClose={() => setKycModalOpen(false)}\n {...(kycModalOptions.country !== undefined && { country: kycModalOptions.country })}\n {...(kycModalOptions.level !== undefined && { level: kycModalOptions.level })}\n {...(kycModalOptions.onApproved !== undefined && { onApproved: kycModalOptions.onApproved })}\n />\n ) : (\n <KycModal\n onClose={() => setKycModalOpen(false)}\n {...(kycModalOptions.country !== undefined && { country: kycModalOptions.country })}\n {...(kycModalOptions.corridorId !== undefined && { corridorId: kycModalOptions.corridorId })}\n {...(kycModalOptions.providerId !== undefined && { providerId: kycModalOptions.providerId })}\n {...(kycModalOptions.level !== undefined && { level: kycModalOptions.level })}\n {...(kycModalOptions.onApproved !== undefined && { onApproved: kycModalOptions.onApproved })}\n />\n )}\n </ModalErrorBoundary>\n )}\n {rampModalOpen && (\n <ModalErrorBoundary onClose={() => setRampModalOpen(false)}>\n <RampWidget onClose={() => setRampModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {txHistoryModalOpen && (\n <ModalErrorBoundary onClose={() => setTxHistoryModalOpen(false)}>\n <TxHistoryModal onClose={() => setTxHistoryModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {walletBalanceModalOpen && (\n <ModalErrorBoundary onClose={() => setWalletBalanceModalOpen(false)}>\n <WalletBalanceModal onClose={() => setWalletBalanceModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {enabledAssetsModalOpen && (\n <ModalErrorBoundary onClose={() => setEnabledAssetsModalOpen(false)}>\n <EnabledAssetsModal onClose={() => setEnabledAssetsModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {sendModalOpen && (\n <ModalErrorBoundary key={sendModalKey} onClose={() => setSendModalOpen(false)}>\n <SendModal onClose={() => setSendModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {swapModalOpen && (\n <ModalErrorBoundary key={swapModalKey} onClose={() => setSwapModalOpen(false)}>\n <SwapModal onClose={() => setSwapModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {earnModalOpen && (\n <ModalErrorBoundary key={earnModalKey} onClose={() => setEarnModalOpen(false)}>\n <EarnModal onClose={() => setEarnModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {cardModalOpen && (\n // Keyed by the wallet too: a different user, or signing in with it open, starts it from scratch.\n <ModalErrorBoundary key={`${cardModalKey}:${walletAddress}`} onClose={() => setCardModalOpen(false)}>\n <CardModal onClose={() => setCardModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {receiveModalOpen && (\n <ModalErrorBoundary onClose={() => setReceiveModalOpen(false)}>\n <ReceiveModal onClose={() => setReceiveModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {sessionsModalOpen && (\n <ModalErrorBoundary onClose={() => setSessionsModalOpen(false)}>\n <SessionsModal onClose={() => setSessionsModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {distributionRulesModalOpen && (\n <ModalErrorBoundary onClose={() => setDistributionRulesModalOpen(false)}>\n <DistributionRulesModal onClose={() => setDistributionRulesModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n </PollarContext.Provider>\n );\n}\n\nexport function usePollar() {\n const ctx = useContext(PollarContext);\n if (!ctx) {\n throw new Error('usePollar must be used inside <PollarProvider>');\n }\n return ctx;\n}\n","'use client';\n\nimport type { PollarAdapter, SubmitOutcome } from '@pollar/core';\nimport { usePollar } from './context';\n\ntype WrappedAdapter<T extends PollarAdapter> = {\n [K in keyof T]: (params: Parameters<T[K]>[0]) => Promise<SubmitOutcome>;\n};\n\nexport function createPollarAdapterHook<T extends PollarAdapter>(key: string) {\n return function usePollarAdapter(): WrappedAdapter<T> {\n const { adapters, signAndSubmitTx } = usePollar();\n const adapter = adapters?.[key] as T | undefined;\n\n if (!adapter) {\n throw new Error(`No adapter \"${key}\" provided to PollarProvider`);\n }\n\n return Object.fromEntries(\n Object.entries(adapter).map(([name, fn]) => [\n name,\n async (params: Parameters<typeof fn>[0]) => {\n const { unsignedTransaction } = await fn(params);\n return signAndSubmitTx(unsignedTransaction);\n },\n ]),\n ) as WrappedAdapter<T>;\n };\n}\n","'use client';\n\nimport { LOGO_POLLAR } from '../../constants';\nimport './WalletButton.css';\n\nfunction ButtonLogo() {\n return <img src={LOGO_POLLAR} alt=\"Pollar\" width={22} height={22} className=\"pollar-wallet-btn-logo\" />;\n}\n\nexport interface WalletButtonTemplateProps {\n walletAddress: string | null;\n accentColor: string;\n open: boolean;\n copied: boolean;\n dropdownBg: string;\n dropdownBorder: string;\n itemColor: string;\n wrapperRef: React.RefObject<HTMLDivElement>;\n isInProgress: boolean;\n /** Show the \"Create account\" action (external wallet not yet on-chain, IMMEDIATE funding). */\n showCreateAccount: boolean;\n /**\n * Why the wallet cannot act on-chain yet (its account is being created, or\n * that failed), or null when it can. Shown as a banner in the dropdown, since\n * the address itself is valid and worth copying either way. Optional, so a\n * custom template written before this existed keeps compiling.\n */\n notReadyReason?: string | null;\n creatingAccount: boolean;\n /**\n * Signed in with no wallet yet (an app that creates wallets on demand, or\n * none). The button then shows the account menu instead of Login, with Create\n * wallet only when `onCreateWallet` is set. Optional, so a custom template\n * written before this existed keeps compiling.\n */\n signedIn?: boolean;\n creatingWallet?: boolean;\n createWalletError?: string | null;\n onCreateWallet?: () => void;\n onToggleOpen: () => void;\n onCreateAccount: () => void;\n onCopy: () => void;\n onWalletBalance: () => void;\n onTxHistory: () => void;\n onSend: () => void;\n onReceive: () => void;\n onSessions: () => void;\n onKyc: () => void;\n onRamp: () => void;\n onDistributionRules: () => void;\n onLogout: () => void;\n onLogin: () => void;\n}\n\nfunction cropWallet(address: string) {\n if (address.length <= 12) return address;\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function WalletButtonTemplate({\n walletAddress,\n accentColor,\n open,\n copied,\n dropdownBg,\n dropdownBorder,\n itemColor,\n wrapperRef,\n isInProgress,\n showCreateAccount,\n notReadyReason,\n creatingAccount,\n onToggleOpen,\n onCreateAccount,\n onCopy,\n onWalletBalance,\n onTxHistory,\n onSend,\n onReceive,\n onSessions,\n onKyc,\n onRamp,\n onDistributionRules,\n onLogout,\n onLogin,\n signedIn,\n creatingWallet,\n createWalletError,\n onCreateWallet,\n}: WalletButtonTemplateProps) {\n if (!walletAddress && signedIn) {\n return (\n <div className=\"pollar-wallet-wrapper\" ref={wrapperRef}>\n <button className=\"pollar-wallet-btn\" style={{ backgroundColor: accentColor }} onClick={onToggleOpen}>\n <span className=\"pollar-wallet-btn-label\">{onCreateWallet ? 'No wallet' : 'Signed in'}</span>\n <svg\n className={`pollar-wallet-chevron${open ? ' pollar-open' : ''}`}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"2,4 6,8 10,4\" />\n </svg>\n </button>\n\n {open && (\n <div className=\"pollar-wallet-dropdown\" style={{ backgroundColor: dropdownBg, borderColor: dropdownBorder }}>\n {createWalletError && (\n <>\n <div className=\"pollar-wallet-dropdown-notice\" style={{ color: itemColor }} role=\"status\">\n {createWalletError}\n </div>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n {onCreateWallet && (\n <>\n <button\n className=\"pollar-wallet-dropdown-item\"\n style={{ color: itemColor }}\n onClick={onCreateWallet}\n disabled={creatingWallet}\n >\n {creatingWallet ? 'Creating wallet…' : 'Create wallet'}\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onSessions}>\n Active sessions\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n <button className=\"pollar-wallet-dropdown-item pollar-danger\" onClick={onLogout}>\n Log out\n </button>\n </div>\n )}\n </div>\n );\n }\n\n if (!walletAddress) {\n return (\n <button type=\"button\" className=\"pollar-wallet-login-btn\" style={{ backgroundColor: accentColor }} onClick={onLogin}>\n <ButtonLogo />\n Login with Pollar\n </button>\n );\n }\n\n return (\n <div className=\"pollar-wallet-wrapper\" ref={wrapperRef}>\n <button\n className=\"pollar-wallet-btn\"\n style={{ backgroundColor: accentColor }}\n onClick={isInProgress ? undefined : onToggleOpen}\n disabled={isInProgress}\n aria-busy={isInProgress}\n >\n <span className=\"pollar-wallet-btn-label\">{cropWallet(walletAddress)}</span>\n {isInProgress ? (\n <svg className=\"pollar-wallet-btn-spinner\" viewBox=\"0 0 12 12\" width=\"12\" height=\"12\" fill=\"none\" aria-hidden>\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"rgba(255,255,255,0.35)\" strokeWidth=\"1.5\" />\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"4.5\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeDasharray=\"14 9\"\n transform=\"rotate(-90 6 6)\"\n />\n </svg>\n ) : (\n <svg\n className={`pollar-wallet-chevron${open ? ' pollar-open' : ''}`}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"2,4 6,8 10,4\" />\n </svg>\n )}\n </button>\n\n {open && (\n <div className=\"pollar-wallet-dropdown\" style={{ backgroundColor: dropdownBg, borderColor: dropdownBorder }}>\n {notReadyReason && (\n <>\n <div className=\"pollar-wallet-dropdown-notice\" style={{ color: itemColor }} role=\"status\">\n {notReadyReason}\n </div>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n {showCreateAccount && (\n <>\n <button\n className=\"pollar-wallet-dropdown-item\"\n style={{ color: itemColor }}\n onClick={onCreateAccount}\n disabled={creatingAccount}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <line x1=\"19\" y1=\"8\" x2=\"19\" y2=\"14\" />\n <line x1=\"22\" y1=\"11\" x2=\"16\" y2=\"11\" />\n </svg>\n {creatingAccount ? 'Creating account…' : 'Create account'}\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onSend}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n Send\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onReceive}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"8 17 12 21 16 17\" />\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\" />\n <path d=\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\" />\n </svg>\n Receive\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onCopy}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n {copied ? 'Copied!' : 'Copy address'}\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onWalletBalance}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\" />\n <circle cx=\"16\" cy=\"12\" r=\"2\" />\n <path d=\"M22 8H12\" />\n </svg>\n Wallet balance\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onTxHistory}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10,9 9,9 8,9\" />\n </svg>\n Transaction history\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n {/* Buy / Sell (ramp) */}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onRamp}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"17 1 21 5 17 9\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <polyline points=\"7 23 3 19 7 15\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </svg>\n Buy / Sell\n </button>\n {/* Identity verification */}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onKyc}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z\" />\n <path d=\"M2 21v-1a6 6 0 0 1 6-6h2\" />\n <polyline points=\"16 11 18 13 22 9\" />\n </svg>\n Identity verification\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onDistributionRules}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\" />\n <line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\" />\n </svg>\n Distribution rules\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onSessions}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n Active sessions\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n <button className=\"pollar-wallet-dropdown-item pollar-danger\" onClick={onLogout}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <polyline points=\"16,17 21,12 16,7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n Log out\n </button>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { isPollarApiError } from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { walletNotReadyReason } from '../../lib/wallet-provisioning';\nimport { useChains } from '../../useChains';\nimport { WalletButtonTemplate } from './WalletButtonTemplate';\nimport './WalletButton.css';\n\nexport function WalletButton() {\n const {\n getClient,\n wallet,\n styles,\n openLoginModal,\n openTxHistoryModal,\n openWalletBalanceModal,\n openSendModal,\n openReceiveModal,\n openSessionsModal,\n openKycModal,\n openRampModal,\n openDistributionRulesModal,\n tx: transaction,\n isAuthenticated,\n createWallet,\n appConfig,\n } = usePollar();\n // The address shown (and copied) is the one on the app's FIRST configured\n // chain, not `wallet.address` - that field is the Stellar wallet by definition\n // in core, so this button used to say \"Stellar\" to an app whose users live on\n // Polygon. Falls back to it while `/config` loads and for a legacy session that\n // enumerates no wallets.\n const { primaryChain, primaryAddress } = useChains();\n const walletAddress = primaryAddress || (wallet?.address ?? '');\n const [open, setOpen] = useState(false);\n const [copied, setCopied] = useState(false);\n const [creating, setCreating] = useState(false);\n const [created, setCreated] = useState(false);\n const [creatingWallet, setCreatingWallet] = useState(false);\n const [createWalletError, setCreateWalletError] = useState<string | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isInProgress = transaction.step === 'building' || transaction.step === 'signing';\n // Offer on-chain account creation only for an EXTERNAL wallet Stellar doesn't\n // have yet, under IMMEDIATE funding. `existsOnStellar === false` (not just\n // falsy) so an unknown/legacy session doesn't wrongly show it. `created` hides\n // it optimistically after a successful create (the session's existsOnStellar\n // only refreshes on the next login/resume).\n const canCreateAccount =\n !created && wallet?.custody === 'external' && wallet.existsOnStellar === false && wallet.fundingMode === 'IMMEDIATE';\n // A platform-managed wallet whose account is still being created. Surfaced in\n // the dropdown rather than on the button: the address is real and copyable,\n // what is missing is the account behind it. `null` for an external wallet,\n // which the app never provisions (that one gets Create account above).\n //\n // Keyed to `primaryChain` - the chain whose address this button SHOWS - so a\n // Solana-first app does not caption a working Solana address with the wait on\n // its user's separate Stellar wallet.\n const notReadyReason = walletNotReadyReason(wallet, primaryChain);\n\n const { theme = 'light', accentColor = '#005DB4' } = styles;\n const isDark = theme === 'dark';\n const dropdownBg = isDark ? '#18181b' : '#fff';\n const dropdownBorder = isDark ? '#3f3f46' : '#e4e4e7';\n const itemColor = isDark ? '#fafafa' : '#18181b';\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n async function handleCopy() {\n if (!walletAddress) return;\n await navigator.clipboard.writeText(walletAddress);\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 1500);\n }\n\n function handleLogout() {\n setOpen(false);\n getClient().logout();\n }\n\n async function handleCreateAccount() {\n if (creating) return;\n setCreating(true);\n try {\n const res = await getClient().createAccount();\n if (res.status === 'success' || res.status === 'pending') {\n setCreated(true);\n setOpen(false);\n await getClient().refreshBalance();\n }\n // On error, keep the item so the user can retry (createAccount surfaces the\n // reason in res.details; the send/receive modals also report failures).\n } finally {\n setCreating(false);\n }\n }\n\n async function handleCreateWallet() {\n if (creatingWallet) return;\n setCreatingWallet(true);\n setCreateWalletError(null);\n try {\n await createWallet();\n setOpen(false);\n } catch (err) {\n setCreateWalletError(\n isPollarApiError(err) && err.code === 'SDK_WALLET_PROVISIONING_DISABLED'\n ? 'This app does not create wallets.'\n : 'Could not create the wallet. Try again.',\n );\n } finally {\n setCreatingWallet(false);\n }\n }\n\n function handleWalletBalance() {\n setOpen(false);\n openWalletBalanceModal();\n }\n\n function handleTxHistory() {\n setOpen(false);\n openTxHistoryModal();\n }\n\n function handleSend() {\n setOpen(false);\n openSendModal();\n }\n\n function handleReceive() {\n setOpen(false);\n openReceiveModal();\n }\n\n function handleSessions() {\n setOpen(false);\n openSessionsModal();\n }\n\n function handleKyc() {\n setOpen(false);\n openKycModal();\n }\n\n function handleRamp() {\n setOpen(false);\n openRampModal();\n }\n\n function handleDistributionRules() {\n setOpen(false);\n openDistributionRulesModal();\n }\n\n return (\n <WalletButtonTemplate\n walletAddress={walletAddress ?? null}\n accentColor={accentColor}\n open={open}\n copied={copied}\n dropdownBg={dropdownBg}\n dropdownBorder={dropdownBorder}\n itemColor={itemColor}\n wrapperRef={wrapperRef}\n isInProgress={isInProgress}\n showCreateAccount={canCreateAccount}\n signedIn={isAuthenticated}\n creatingWallet={creatingWallet}\n createWalletError={createWalletError}\n {...(appConfig.application?.walletProvisioning === 'NONE' ? {} : { onCreateWallet: handleCreateWallet })}\n notReadyReason={notReadyReason}\n creatingAccount={creating}\n onToggleOpen={() => setOpen((v) => !v)}\n onCreateAccount={handleCreateAccount}\n onCopy={handleCopy}\n onWalletBalance={handleWalletBalance}\n onTxHistory={handleTxHistory}\n onSend={handleSend}\n onReceive={handleReceive}\n onSessions={handleSessions}\n onKyc={handleKyc}\n onRamp={handleRamp}\n onDistributionRules={handleDistributionRules}\n onLogout={handleLogout}\n onLogin={openLoginModal}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/qr.js/lib/ErrorCorrectLevel.js","../../../node_modules/qr.js/lib/mode.js","../../../node_modules/qr.js/lib/8BitByte.js","../../../node_modules/qr.js/lib/RSBlock.js","../../../node_modules/qr.js/lib/BitBuffer.js","../../../node_modules/qr.js/lib/math.js","../../../node_modules/qr.js/lib/Polynomial.js","../../../node_modules/qr.js/lib/util.js","../../../node_modules/qr.js/lib/QRCode.js","../src/constants.ts","../src/components/commons.tsx","../src/components/modal-theme.ts","../src/components/distribution-rules-modal/DistributionRulesModalTemplate.tsx","../src/components/distribution-rules-modal/DistributionRulesModal.tsx","../src/components/ChainSelect.tsx","../src/useChains.ts","../src/components/enabled-assets-modal/EnabledAssetsModalTemplate.tsx","../src/components/enabled-assets-modal/EnabledAssetsModal.tsx","../src/components/kyc-modal/KycStatus.tsx","../src/components/kyc-modal/kyc-messages.ts","../src/components/kyc-modal/KycModalTemplate.tsx","../src/components/kyc-modal/KycModal.tsx","../src/components/requirement-form-modal/form-fields.ts","../src/components/requirement-form-modal/RequirementFormModal.tsx","../src/components/kyc-modal/AppKycFlow.tsx","../src/components/login-modal/EmailCodeInput.tsx","../src/components/login-modal/GithubButton.tsx","../src/components/login-modal/GoogleButton.tsx","../src/components/login-modal/LoginModalTemplate.tsx","../src/components/login-modal/PrivyLoginSubmodal.tsx","../src/components/login-modal/LoginModal.tsx","../src/components/ramp-widget/ramp-kyc.ts","../src/components/ramp-widget/RouteDisplay.tsx","../src/components/ramp-widget/RampWidgetTemplate.tsx","../src/components/registry-check-modal/registry-copy.ts","../src/components/registry-check-modal/RegistryCheckModal.tsx","../src/components/provider-registration-modal/ProviderRegistrationModal.tsx","../src/components/ramp-widget/RampWidget.tsx","../src/lib/wallet-provisioning.ts","../src/lib/qr-code/index.tsx","../src/components/PollarLogo.tsx","../src/components/receive-modal/ReceiveModalTemplate.tsx","../src/components/receive-modal/ReceiveModal.tsx","../src/components/transaction-modal/TxStatusView.tsx","../src/components/send-modal/SendModalTemplate.tsx","../src/components/send-modal/SendModal.tsx","../src/components/swap-modal/SwapModalTemplate.tsx","../src/components/swap-modal/SwapModal.tsx","../src/components/earn-modal/EarnModal.tsx","../src/components/card-modal/card-kyc.ts","../src/components/card-modal/CardModal.tsx","../src/components/sessions-modal/SessionsModalTemplate.tsx","../src/components/sessions-modal/SessionsModal.tsx","../src/useCosign.ts","../src/components/cosign-modal/CosignModalTemplate.tsx","../src/components/cosign-modal/CosignModal.tsx","../src/components/confirm-modal/ConfirmModal.tsx","../src/components/transaction-modal/TransactionModalTemplate.tsx","../src/components/transaction-modal/TransactionModal.tsx","../src/components/tx-history-modal/TxHistoryModalTemplate.tsx","../src/components/tx-history-modal/TxHistoryModal.tsx","../src/components/wallet-balance-modal/WalletBalanceModalTemplate.tsx","../src/components/wallet-balance-modal/WalletBalanceModal.tsx","../src/lib/passkey-ceremony.ts","../src/context.tsx","../src/usePollarAdapter.ts","../src/components/wallet-button/WalletButtonTemplate.tsx","../src/components/wallet-button/WalletButton.tsx"],"names":["QRCode","Component","jsxs","jsx","useState","useRef","useEffect","Fragment","useCallback","useMemo","assetKey","providerId","isPollarApiError","error","step","AUTH_ERROR_CODES","isInteractiveAuthAdapter","explorerTxUrl","forwardRef","QRCodeSvg","QRCodeImpl","ErrorCorrectLevel","CHAIN_NAME","transactionErrorMessage","WalletType","IN_FLIGHT_STEPS","toBaseUnits","formatAmount","whole","fraction","AssetIcon","PROVIDER_LABELS","nonEmpty","CloseIcon","cosignGroupOf","cosignStepKeyOf","stepInGroup","OPERATION_LABELS","labelOf","detailRows","PAGE_SIZE","formatBalance","response","startAuthentication","startRegistration","createContext","isPollarClient","PollarClient","useContext"],"mappings":"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","file":"index.js","sourcesContent":["module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","module.exports = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n","var mode = require('./mode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = mode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function(buffer) {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n\n","// ErrorCorrectLevel\nvar ECL = require('./ErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock == undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = new Array();\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n}\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase ECL.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase ECL.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase ECL.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase ECL.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n}\n\nmodule.exports = QRRSBlock;\n","function QRBitBuffer() {\n\tthis.buffer = new Array();\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","var math = require('./math');\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math.gexp(math.glog(this.get(i) ) + math.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math.glog(this.get(0) ) - math.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math.gexp(math.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","var Mode = require('./mode');\nvar Polynomial = require('./Polynomial');\nvar math = require('./math');\n\nvar QRMaskPattern = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n\nvar QRUtil = {\n\n PATTERN_POSITION_TABLE : [\n\t [],\n\t [6, 18],\n\t [6, 22],\n\t [6, 26],\n\t [6, 30],\n\t [6, 34],\n\t [6, 22, 38],\n\t [6, 24, 42],\n\t [6, 26, 46],\n\t [6, 28, 50],\n\t [6, 30, 54],\t\t\n\t [6, 32, 58],\n\t [6, 34, 62],\n\t [6, 26, 46, 66],\n\t [6, 26, 48, 70],\n\t [6, 26, 50, 74],\n\t [6, 30, 54, 78],\n\t [6, 30, 56, 82],\n\t [6, 30, 58, 86],\n\t [6, 34, 62, 90],\n\t [6, 28, 50, 72, 94],\n\t [6, 26, 50, 74, 98],\n\t [6, 30, 54, 78, 102],\n\t [6, 28, 54, 80, 106],\n\t [6, 32, 58, 84, 110],\n\t [6, 30, 58, 86, 114],\n\t [6, 34, 62, 90, 118],\n\t [6, 26, 50, 74, 98, 122],\n\t [6, 30, 54, 78, 102, 126],\n\t [6, 26, 52, 78, 104, 130],\n\t [6, 30, 56, 82, 108, 134],\n\t [6, 34, 60, 86, 112, 138],\n\t [6, 30, 58, 86, 114, 142],\n\t [6, 34, 62, 90, 118, 146],\n\t [6, 30, 54, 78, 102, 126, 150],\n\t [6, 24, 50, 76, 102, 128, 154],\n\t [6, 28, 54, 80, 106, 132, 158],\n\t [6, 32, 58, 84, 110, 136, 162],\n\t [6, 26, 54, 82, 110, 138, 166],\n\t [6, 30, 58, 86, 114, 142, 170]\n ],\n\n G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)\t| (1 << 4) | (1 << 1),\n\n getBCHTypeInfo : function(data) {\n\t var d = data << 10;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n\t\t d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \t\n\t }\n\t return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n },\n\n getBCHTypeNumber : function(data) {\n\t var d = data << 12;\n\t while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n\t\t d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \t\n\t }\n\t return (data << 12) | d;\n },\n\n getBCHDigit : function(data) {\n\n\t var digit = 0;\n\n\t while (data != 0) {\n\t\t digit++;\n\t\t data >>>= 1;\n\t }\n\n\t return digit;\n },\n\n getPatternPosition : function(typeNumber) {\n\t return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n },\n\n getMask : function(maskPattern, i, j) {\n\t \n\t switch (maskPattern) {\n\t\t \n\t case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;\n\t case QRMaskPattern.PATTERN001 : return i % 2 == 0;\n\t case QRMaskPattern.PATTERN010 : return j % 3 == 0;\n\t case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;\n\t case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;\n\t case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;\n\t case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;\n\t case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;\n\n\t default :\n\t\t throw new Error(\"bad maskPattern:\" + maskPattern);\n\t }\n },\n\n getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n\t var a = new Polynomial([1], 0);\n\n\t for (var i = 0; i < errorCorrectLength; i++) {\n\t\t a = a.multiply(new Polynomial([1, math.gexp(i)], 0) );\n\t }\n\n\t return a;\n },\n\n getLengthInBits : function(mode, type) {\n\n\t if (1 <= type && type < 10) {\n\n\t\t // 1 - 9\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 10;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 9;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 8;\n\t\t case Mode.MODE_KANJI \t: return 8;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 27) {\n\n\t\t // 10 - 26\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 12;\n\t\t case Mode.MODE_ALPHA_NUM \t: return 11;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 10;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else if (type < 41) {\n\n\t\t // 27 - 40\n\n\t\t switch(mode) {\n\t\t case Mode.MODE_NUMBER \t: return 14;\n\t\t case Mode.MODE_ALPHA_NUM\t: return 13;\n\t\t case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t case Mode.MODE_KANJI \t: return 12;\n\t\t default :\n\t\t\t throw new Error(\"mode:\" + mode);\n\t\t }\n\n\t } else {\n\t\t throw new Error(\"type:\" + type);\n\t }\n },\n\n getLostPoint : function(qrCode) {\n\t \n\t var moduleCount = qrCode.getModuleCount();\n\t \n\t var lostPoint = 0;\n\t \n\t // LEVEL1\n\t \n\t for (var row = 0; row < moduleCount; row++) {\n\n\t\t for (var col = 0; col < moduleCount; col++) {\n\n\t\t\t var sameCount = 0;\n\t\t\t var dark = qrCode.isDark(row, col);\n\n\t\t\t\tfor (var r = -1; r <= 1; r++) {\n\n\t\t\t\t if (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t continue;\n\t\t\t\t }\n\n\t\t\t\t for (var c = -1; c <= 1; c++) {\n\n\t\t\t\t\t if (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (r == 0 && c == 0) {\n\t\t\t\t\t\t continue;\n\t\t\t\t\t }\n\n\t\t\t\t\t if (dark == qrCode.isDark(row + r, col + c) ) {\n\t\t\t\t\t\t sameCount++;\n\t\t\t\t\t }\n\t\t\t\t }\n\t\t\t }\n\n\t\t\t if (sameCount > 5) {\n\t\t\t\t lostPoint += (3 + sameCount - 5);\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL2\n\n\t for (var row = 0; row < moduleCount - 1; row++) {\n\t\t for (var col = 0; col < moduleCount - 1; col++) {\n\t\t\t var count = 0;\n\t\t\t if (qrCode.isDark(row, col ) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col ) ) count++;\n\t\t\t if (qrCode.isDark(row, col + 1) ) count++;\n\t\t\t if (qrCode.isDark(row + 1, col + 1) ) count++;\n\t\t\t if (count == 0 || count == 4) {\n\t\t\t\t lostPoint += 3;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL3\n\n\t for (var row = 0; row < moduleCount; row++) {\n\t\t for (var col = 0; col < moduleCount - 6; col++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row, col + 1)\n\t\t\t\t\t && qrCode.isDark(row, col + 2)\n\t\t\t\t\t && qrCode.isDark(row, col + 3)\n\t\t\t\t\t && qrCode.isDark(row, col + 4)\n\t\t\t\t\t && !qrCode.isDark(row, col + 5)\n\t\t\t\t\t && qrCode.isDark(row, col + 6) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount - 6; row++) {\n\t\t\t if (qrCode.isDark(row, col)\n\t\t\t\t\t && !qrCode.isDark(row + 1, col)\n\t\t\t\t\t && qrCode.isDark(row + 2, col)\n\t\t\t\t\t && qrCode.isDark(row + 3, col)\n\t\t\t\t\t && qrCode.isDark(row + 4, col)\n\t\t\t\t\t && !qrCode.isDark(row + 5, col)\n\t\t\t\t\t && qrCode.isDark(row + 6, col) ) {\n\t\t\t\t lostPoint += 40;\n\t\t\t }\n\t\t }\n\t }\n\n\t // LEVEL4\n\t \n\t var darkCount = 0;\n\n\t for (var col = 0; col < moduleCount; col++) {\n\t\t for (var row = 0; row < moduleCount; row++) {\n\t\t\t if (qrCode.isDark(row, col) ) {\n\t\t\t\t darkCount++;\n\t\t\t }\n\t\t }\n\t }\n\t \n\t var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\t lostPoint += ratio * 10;\n\n\t return lostPoint;\t\t\n }\n};\n\nmodule.exports = QRUtil;\n","var BitByte = require('./8BitByte');\nvar RSBlock = require('./RSBlock');\nvar BitBuffer = require('./BitBuffer');\nvar util = require('./util');\nvar Polynomial = require('./Polynomial');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\n// for client side minification\nvar proto = QRCode.prototype;\n\nproto.addData = function(data) {\n\tvar newData = new BitByte(data);\n\tthis.dataList.push(newData);\n\tthis.dataCache = null;\n};\n\nproto.isDark = function(row, col) {\n\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\tthrow new Error(row + \",\" + col);\n\t}\n\treturn this.modules[row][col];\n};\n\nproto.getModuleCount = function() {\n\treturn this.moduleCount;\n};\n\nproto.make = function() {\n\t// Calculate automatically typeNumber if provided is < 1\n\tif (this.typeNumber < 1 ){\n\t\tvar typeNumber = 1;\n\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\tvar buffer = new BitBuffer();\n\t\t\tvar totalDataCount = 0;\n\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.dataList.length; i++) {\n\t\t\t\tvar data = this.dataList[i];\n\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\tdata.write(buffer);\n\t\t\t}\n\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.typeNumber = typeNumber;\n\t}\n\tthis.makeImpl(false, this.getBestMaskPattern() );\n};\n\nproto.makeImpl = function(test, maskPattern) {\n\t\n\tthis.moduleCount = this.typeNumber * 4 + 17;\n\tthis.modules = new Array(this.moduleCount);\n\t\n\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\n\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\n\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t}\n\t}\n\n\tthis.setupPositionProbePattern(0, 0);\n\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\tthis.setupPositionAdjustPattern();\n\tthis.setupTimingPattern();\n\tthis.setupTypeInfo(test, maskPattern);\n\t\n\tif (this.typeNumber >= 7) {\n\t\tthis.setupTypeNumber(test);\n\t}\n\n\tif (this.dataCache == null) {\n\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t}\n\n\tthis.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function(row, col) {\n\t\n\tfor (var r = -1; r <= 7; r++) {\n\t\t\n\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\n\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\n\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\n\t\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t\t\t\t|| (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t\t\t\t|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t}\n\t\t}\t\t\n\t}\t\t\n};\n\nproto.getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i++) {\n\t\t\n\t\tthis.makeImpl(true, i);\n\n\t\tvar lostPoint = util.getLostPoint(this);\n\n\t\tif (i == 0 || minLostPoint > lostPoint) {\n\t\t\tminLostPoint = lostPoint;\n\t\t\tpattern = i;\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\nproto.createMovieClip = function(target_mc, instance_name, depth) {\n\n\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\tvar cs = 1;\n\n\tthis.make();\n\n\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\n\t\tvar y = row * cs;\n\t\t\n\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\n\t\t\tvar x = col * cs;\n\t\t\tvar dark = this.modules[row][col];\n\t\t\n\t\t\tif (dark) {\n\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\tqr_mc.endFill();\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn qr_mc;\n};\n\nproto.setupTimingPattern = function() {\n\t\n\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\tif (this.modules[r][6] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\tif (this.modules[6][c] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[6][c] = (c % 2 == 0);\n\t}\n};\n\nproto.setupPositionAdjustPattern = function() {\n\n\tvar pos = util.getPatternPosition(this.typeNumber);\n\t\n\tfor (var i = 0; i < pos.length; i++) {\n\t\n\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\n\t\t\tvar row = pos[i];\n\t\t\tvar col = pos[j];\n\t\t\t\n\t\t\tif (this.modules[row][col] != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\n\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\n\t\t\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t\t\t\t\t|| (r == 0 && c == 0) ) {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nproto.setupTypeNumber = function(test) {\n\n\tvar bits = util.getBCHTypeNumber(this.typeNumber);\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n};\n\nproto.setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\tvar bits = util.getBCHTypeInfo(data);\n\n\t// vertical\t\t\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t\tif (i < 6) {\n\t\t\tthis.modules[i][8] = mod;\n\t\t} else if (i < 8) {\n\t\t\tthis.modules[i + 1][8] = mod;\n\t\t} else {\n\t\t\tthis.modules[this.moduleCount - 15 + i][8] = mod;\n\t\t}\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\t\n\t\tif (i < 8) {\n\t\t\tthis.modules[8][this.moduleCount - i - 1] = mod;\n\t\t} else if (i < 9) {\n\t\t\tthis.modules[8][15 - i - 1 + 1] = mod;\n\t\t} else {\n\t\t\tthis.modules[8][15 - i - 1] = mod;\n\t\t}\n\t}\n\n\t// fixed module\n\tthis.modules[this.moduleCount - 8][8] = (!test);\n};\n\nproto.mapData = function(data, maskPattern) {\n\t\n\tvar inc = -1;\n\tvar row = this.moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\t\n\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\n\t\tif (col == 6) col--;\n\n\t\twhile (true) {\n\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col - c] == null) {\n\t\t\t\t\t\n\t\t\t\t\tvar dark = false;\n\n\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar mask = util.getMask(maskPattern, row, col - c);\n\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\tbitIndex--;\n\n\t\t\t\t\tif (bitIndex == -1) {\n\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\trow += inc;\n\n\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\trow -= inc;\n\t\t\t\tinc = -inc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new BitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\"\n\t\t\t+ buffer.getLengthInBits()\n\t\t\t+ \">\"\n\t\t\t+ totalDataCount * 8\n\t\t\t+ \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = util.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var i = 0; i < ecdata[r].length; i++) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < dcdata[r].length) {\n\t\t\t\tdata[index++] = dcdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < ecdata[r].length) {\n\t\t\t\tdata[index++] = ecdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n};\n\nmodule.exports = QRCode;\n\n","export const LOGO_POLLAR = 'https://pollar.xyz/assets/logo_pollar.png';\nexport const LOGO_POLLAR_WORDMARK_ON_LIGHT = 'https://www.pollar.xyz/brandkit/pollar-logo-horizontal-on-light.png';\nexport const LOGO_POLLAR_WORDMARK_ON_DARK = 'https://www.pollar.xyz/brandkit/pollar-logo-horizontal-on-dark.png';\nexport const LOGO_POLLAR_MARK_ON_LIGHT = 'https://www.pollar.xyz/brandkit/pollar-mark-on-light.png';\nexport const LOGO_POLLAR_MARK_ON_DARK = 'https://www.pollar.xyz/brandkit/pollar-mark-on-dark.png';\nexport const LOGO_GITHUB = 'https://pollar.xyz/assets/GitHub_Invertocat_White.png';\nexport const LOGO_FREIGHTER = 'https://pollar.xyz/assets/logo_freighter.png';\nexport const LOGO_ALBEDO = 'https://pollar.xyz/assets/logo_albedo.svg';\n","type StateStatus = 'NONE' | 'LOADING' | 'SUCCESS' | 'ERROR';\n\nimport type { PollarLogger, StellarNetwork, WalletChain } from '@pollar/core';\nimport {\n Component,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react';\nimport { LOGO_POLLAR_WORDMARK_ON_DARK, LOGO_POLLAR_WORDMARK_ON_LIGHT } from '../constants';\n\ndeclare const __POLLAR_VERSION__: string;\n\n// Module-level sink for the error boundary (a class component, so it can't read\n// React context inside `componentDidCatch`). `PollarProvider` points this at the\n// client's level-gated logger on mount; defaults to `console` until then.\nlet _modalLog: PollarLogger = console;\nexport function setModalErrorLogger(logger: PollarLogger): void {\n _modalLog = logger;\n}\n\ninterface ModalErrorBoundaryState {\n crashed: boolean;\n}\n\nexport class ModalErrorBoundary extends Component<{ children: ReactNode; onClose: () => void }, ModalErrorBoundaryState> {\n state: ModalErrorBoundaryState = { crashed: false };\n\n static getDerivedStateFromError(): ModalErrorBoundaryState {\n return { crashed: true };\n }\n\n componentDidCatch(error: unknown) {\n _modalLog.error('[PollarProvider] Modal crashed:', error);\n }\n\n render() {\n if (this.state.crashed) {\n this.props.onClose();\n return null;\n }\n return this.props.children;\n }\n}\n\nexport const PollarModalFooter = () => {\n return (\n <div className=\"pollar-footer\">\n <span className=\"pollar-footer-protected\">Protected by</span>\n <img src={LOGO_POLLAR_WORDMARK_ON_LIGHT} alt=\"Pollar\" className=\"pollar-footer-logo pollar-logo-on-light\" />\n <img src={LOGO_POLLAR_WORDMARK_ON_DARK} alt=\"Pollar\" className=\"pollar-footer-logo pollar-logo-on-dark\" />\n <span className=\"pollar-footer-version\">v{__POLLAR_VERSION__}</span>\n </div>\n );\n};\n\n/** The explorer page of a transaction, by the chain it ran on. */\nexport function explorerTxUrl(chain: WalletChain, hash: string, network: StellarNetwork): string {\n if (chain === 'SOLANA') {\n return `https://explorer.solana.com/tx/${hash}${network === 'testnet' ? '?cluster=devnet' : ''}`;\n }\n if (chain === 'POLYGON') {\n return `https://${network === 'testnet' ? 'amoy.' : ''}polygonscan.com/tx/${hash}`;\n }\n return `https://stellar.expert/explorer/${network === 'testnet' ? 'testnet' : 'public'}/tx/${hash}`;\n}\n\n/** Shared refresh glyph used by compact modal header actions. */\nexport function RefreshIcon({ spinning = false, className = '' }: { spinning?: boolean; className?: string }) {\n return (\n <svg\n className={`${spinning ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}${className ? ` ${className}` : ''}`}\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M2.125 8.5C2.125 6.80924 2.79665 5.18774 3.99219 3.99219C5.18774 2.79665 6.80924 2.125 8.5 2.125C10.2822 2.1317 11.9928 2.82712 13.2742 4.06583L14.875 5.66667\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14.8747 2.125V5.66667H11.333\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14.875 8.5C14.875 10.1908 14.2033 11.8123 13.0078 13.0078C11.8123 14.2033 10.1908 14.875 8.5 14.875C6.7178 14.8683 5.00719 14.1729 3.72583 12.9342L2.125 11.3333\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.125 14.875V11.3333H5.66667\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\ninterface CopyButtonProps {\n /** Text written to the clipboard (the full, un-cropped value). */\n value: string;\n /** Accessible label for the button (e.g. \"Copy address\"). */\n label?: string;\n /** Extra class (e.g. `pollar-copy-btn-sm` for the compact issuer variant). */\n className?: string;\n}\n\n/** Self-contained copy-to-clipboard icon button with a transient \"copied\" tick. */\nexport function CopyButton({ value, label = 'Copy', className }: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n };\n }, []);\n\n function handleCopy(e: ReactMouseEvent<HTMLButtonElement>) {\n e.stopPropagation();\n if (!value || !navigator.clipboard) return;\n void navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n setCopied(false);\n timerRef.current = null;\n }, 1500);\n });\n }\n\n return (\n <button\n type=\"button\"\n className={`pollar-copy-btn${className ? ` ${className}` : ''}`}\n onClick={handleCopy}\n aria-label={copied ? 'Copied' : label}\n >\n {copied ? (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path d=\"M3.5 7l2.5 2.5 4.5-5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9H2a1 1 0 01-1-1V2a1 1 0 011-1h6a1 1 0 011 1v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n </button>\n );\n}\n\ninterface ModalStatusBannerProps {\n message: string;\n status: StateStatus;\n onCancel?: (() => void) | undefined;\n onRetry?: (() => void) | undefined;\n}\n\nexport function ModalStatusBanner({ message, status, onCancel, onRetry }: ModalStatusBannerProps) {\n if (!message && status === 'NONE') {\n return <div className=\"pollar-status\" />;\n }\n\n const isLoading = status === 'LOADING';\n const icon =\n status === 'ERROR' ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path d=\"M4.5 4.5l5 5M9.5 4.5l-5 5\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ) : status === 'SUCCESS' ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path d=\"M3.5 7l2.5 2.5 4.5-5\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : status === 'LOADING' ? (\n <></>\n ) : null;\n\n return (\n <div className=\"pollar-status\" data-kind={status}>\n {icon}\n <span>{message}</span>\n {isLoading && onCancel && (\n <button type=\"button\" className=\"pollar-status-cancel\" onClick={onCancel}>\n Cancel\n </button>\n )}\n {status === 'ERROR' && onRetry && (\n <button type=\"button\" className=\"pollar-status-cancel\" onClick={onRetry}>\n Retry\n </button>\n )}\n </div>\n );\n}\n\n/**\n * The chain an asset lives on, as a short accented tag.\n *\n * Shared by the balance and asset lists: both render per-chain rows and must\n * agree on the label and colour, so the palette lives in one place. Callers show\n * it only when the app spans more than one chain - a Stellar-only app would just\n * see the same tag on every row.\n */\nconst CHAIN_TAG: Record<string, { label: string; color: string }> = {\n STELLAR: { label: 'Stellar', color: '#7d00ff' },\n POLYGON: { label: 'Polygon', color: '#8247e5' },\n SOLANA: { label: 'Solana', color: '#14f195' },\n};\n\nexport function ChainTag({ chain }: { chain: string }) {\n const tag = CHAIN_TAG[chain] ?? { label: chain, color: '#6b7280' };\n return (\n <span className=\"pollar-chain-tag\" style={{ '--pollar-chain-color': tag.color } as CSSProperties}>\n {tag.label}\n </span>\n );\n}\n\n/** Middle-truncates an on-chain address (issuer, ERC-20 contract, SPL mint). */\nexport function cropAddress(address: string): string {\n if (address.length <= 16) return address;\n return `${address.slice(0, 8)}...${address.slice(-8)}`;\n}\n\n/**\n * Remembers the last non-null value it was given.\n *\n * The balance/assets state machines drop their payload while a refresh is in\n * flight (`step` leaves `'loaded'`), which would blank the list on every\n * refresh. Holding the previous data lets the modal keep rendering it under a\n * {@link BusyOverlay} instead - the list never collapses and then reflows.\n */\nexport function useStickyData<T>(data: T | null): T | null {\n const lastRef = useRef<T | null>(null);\n if (data !== null) lastRef.current = data;\n return data ?? lastRef.current;\n}\n\n/**\n * Blocks a modal while a refresh is in flight, keeping the stale data visible\n * (and readable) underneath. Covers the whole card, so nothing can be clicked\n * against data that is about to change.\n */\nexport function BusyOverlay({ label = 'Loading…' }: { label?: string }) {\n return (\n <div className=\"pollar-busy-overlay\" aria-busy=\"true\" aria-live=\"polite\">\n <div className=\"pollar-busy-overlay-inner\">\n <div className=\"pollar-spinner\" />\n <span>{label}</span>\n </div>\n </div>\n );\n}\n\ninterface ToggleProps {\n checked: boolean;\n onChange: () => void;\n disabled?: boolean;\n busy?: boolean;\n label: string;\n}\n\n/**\n * On/off switch. Used for trustlines, where the state is binary and the old\n * \"status pill + Enable/Disable button\" pair said the same thing twice.\n */\nexport function Toggle({ checked, onChange, disabled = false, busy = false, label }: ToggleProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n className={`pollar-switch${checked ? ' pollar-switch-on' : ''}${busy ? ' pollar-switch-busy' : ''}`}\n onClick={onChange}\n disabled={disabled || busy}\n >\n <span className=\"pollar-switch-knob\">\n {busy && <span className=\"pollar-spinner pollar-spinner-sm pollar-spinner-current\" />}\n </span>\n </button>\n );\n}\n","import type { CSSProperties } from 'react';\nimport type { PollarStyles } from '../types';\n\n/** Per-app overrides for the modal chrome, configured in the dashboard's\n * Branding screen. Every field is optional: absent means \"use the value the\n * theme derives\", which is what every modal rendered before these existed. */\nexport interface ModalStyleOverrides {\n /** Card background. Overrides the theme's white / #1a1a1a. */\n backgroundColor?: string | null | undefined;\n /** Body text. Overrides the theme's #111827 / white. Secondary (\"muted\") text\n * keeps its theme color, so the two stay distinguishable. */\n textColor?: string | null | undefined;\n /** Fill of the SECONDARY buttons (the wallet / social / provider entries, the\n * retry button). The primary button is the accent's job. Unset => the theme's\n * own surface color, which is what these buttons always used. */\n buttonColor?: string | null | undefined;\n /** Radius of the modal card itself, in px. */\n modalBorderRadius?: number | null | undefined;\n /** Radius of the buttons inside the modal, in px. Independent of the card's. */\n buttonBorderRadius?: number | null | undefined;\n}\n\n/** The card radius the modals used before it was configurable (1rem). */\nconst DEFAULT_MODAL_BORDER_RADIUS = 16;\n/** Same, for the buttons. */\nconst DEFAULT_BUTTON_BORDER_RADIUS = 6;\n/** Stacking order of the fixed overlay, before it was configurable. */\nconst DEFAULT_OVERLAY_Z_INDEX = 50;\n\n/** A configured length, as a CSS px string. Anything that isn't a finite,\n * non-negative number falls back to `fallback` - a malformed stored value must\n * not collapse the card's chrome. */\nfunction px(value: number | null | undefined, fallback: number): string {\n return `${typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback}px`;\n}\n\n/** A configured color, or the theme's own when unset. Empty string counts as\n * unset: that's what the dashboard sends when the field is cleared. */\nfunction color(value: string | null | undefined, fallback: string): string {\n return typeof value === 'string' && value.trim() !== '' ? value : fallback;\n}\n\n/** `#rgb` / `#rrggbb` as 0-255 channels, or null for anything else (a named\n * color, a `color-mix()`, a typo). */\nfunction parseHex(value: string): [number, number, number] | null {\n const hex = value.trim().replace(/^#/, '');\n const full = hex.length === 3 ? [...hex].map((c) => c + c).join('') : hex;\n if (!/^[0-9a-f]{6}$/i.test(full)) return null;\n return [Number.parseInt(full.slice(0, 2), 16), Number.parseInt(full.slice(2, 4), 16), Number.parseInt(full.slice(4, 6), 16)];\n}\n\n/** Text color that stays legible on `background`. The primary button's label was\n * hardcoded white, which a light fill (the Amber accent preset, say) turns\n * invisible - so it follows the fill's luminance instead. Unparseable colors\n * keep white, the pre-existing behavior. */\nexport function readableTextOn(background: string): string {\n const rgb = parseHex(background);\n if (!rgb) return '#ffffff';\n // Relative luminance, sRGB coefficients (WCAG). The 0.6 cut lands white on\n // Pollar blue (#005DB4) exactly as before, and dark on a pale fill.\n const [r, g, b] = rgb;\n return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255 > 0.6 ? '#111827' : '#ffffff';\n}\n\n/** How much room a modal gives its header. 'hero' is the identity-forward set\n * (login, KYC, ramp, the Privy sub-modal): roomier padding and a larger\n * centered heading. 'compact' is every utility modal (send, balance, history,\n * ...), which keeps the card's own 1.75rem padding. */\nexport type ModalVariant = 'hero' | 'compact';\n\n/** Theme-derived CSS custom properties shared by every Pollar modal, plus the\n * per-app overrides on top. One definition so the whole modal family stays\n * visually in lockstep - a var added here reaches all of them at once. */\nexport function buildModalCssVars(\n theme: string,\n accentColor: string,\n overrides: ModalStyleOverrides = {},\n variant: ModalVariant = 'compact',\n): CSSProperties {\n const isDark = theme === 'dark';\n const textColor = color(overrides.textColor, isDark ? '#ffffff' : '#111827');\n // Only emitted when actually configured. Left out, the secondary buttons fall\n // back inside the CSS to whatever each already used - the theme surface for\n // the filled ones, `transparent` for the ghost one - so an unset field can't\n // flatten those two into the same look.\n const secondaryBg = color(overrides.buttonColor, '');\n return {\n '--pollar-accent': accentColor,\n '--pollar-bg': color(overrides.backgroundColor, isDark ? '#1a1a1a' : '#ffffff'),\n '--pollar-border': isDark ? '#374151' : '#e5e7eb',\n '--pollar-text': textColor,\n '--pollar-muted': isDark ? '#9ca3af' : '#6b7280',\n // The primary button is the accent's, straight up; its label follows the\n // accent's luminance so a pale accent doesn't render white-on-white.\n '--pollar-btn-primary-fg': readableTextOn(accentColor),\n ...(secondaryBg\n ? {\n '--pollar-btn-secondary-bg': secondaryBg,\n '--pollar-btn-secondary-fg': readableTextOn(secondaryBg),\n }\n : {}),\n '--pollar-input-bg': isDark ? '#374151' : '#f9fafb',\n '--pollar-error-bg': isDark ? '#2a1515' : '#fef2f2',\n '--pollar-error-border': isDark ? '#7f1d1d' : '#fecaca',\n '--pollar-error-text': isDark ? '#f87171' : '#dc2626',\n '--pollar-success-text': isDark ? '#4ade80' : '#16a34a',\n '--pollar-logo-on-light-display': isDark ? 'none' : 'block',\n '--pollar-logo-on-dark-display': isDark ? 'block' : 'none',\n '--pollar-modal-border-radius': px(overrides.modalBorderRadius, DEFAULT_MODAL_BORDER_RADIUS),\n '--pollar-buttons-border-radius': px(overrides.buttonBorderRadius, DEFAULT_BUTTON_BORDER_RADIUS),\n '--pollar-buttons-height': '44px',\n '--pollar-input-height': '44px',\n '--pollar-input-border-radius': '0.5rem',\n '--pollar-card-border-radius': '10px',\n ...(variant === 'hero'\n ? {\n '--pollar-modal-padding': '2rem',\n '--pollar-modal-heading-size': '1.375rem',\n '--pollar-modal-subtitle-size': '0.9rem',\n }\n : {}),\n } as CSSProperties;\n}\n\n/** Everything a modal wrapper needs to dress itself from the app's branding:\n * the theme pair its template already took, the overrides to forward to that\n * template, and the inline style for the fixed overlay behind it. */\nexport interface ModalChrome {\n theme: string;\n accentColor: string;\n styleOverrides: ModalStyleOverrides;\n overlayStyle: CSSProperties;\n}\n\n/** Resolve the branding config into the props/styles a modal wrapper applies.\n * Called by every `.pollar-overlay` renderer so the z-index and the card\n * overrides can't drift apart between modals. */\nexport function modalChrome(styles: PollarStyles): ModalChrome {\n const zIndex = styles.modalZIndex;\n return {\n theme: styles.theme ?? 'light',\n accentColor: styles.accentColor ?? '#005DB4',\n styleOverrides: {\n backgroundColor: styles.backgroundColor,\n textColor: styles.textColor,\n buttonColor: styles.buttonColor,\n modalBorderRadius: styles.modalBorderRadius,\n buttonBorderRadius: styles.buttonBorderRadius,\n },\n overlayStyle: {\n '--pollar-overlay-z-index': typeof zIndex === 'number' && Number.isFinite(zIndex) ? zIndex : DEFAULT_OVERLAY_Z_INDEX,\n } as CSSProperties,\n };\n}\n","'use client';\n\nimport { DistributionRule, DistributionRulesState } from '@pollar/core';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\ninterface DistributionRulesModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n state: DistributionRulesState;\n claimingId: string | null;\n claimErrors: Record<string, string>;\n claimedIds: Set<string>;\n onRefresh: () => void;\n onClaim: (rule: DistributionRule) => void;\n onClose: () => void;\n}\n\nconst PERIOD_LABEL: Record<DistributionRule['period'], string> = {\n DAY: 'every 24h',\n DAY_CALENDAR: 'daily',\n WEEK: 'every 7 days',\n MONTH: 'every 30 days',\n MONTH_CALENDAR: 'monthly',\n LIFETIME: 'one-time',\n};\n\n// Reasons returned by sdk-api are the ErrorCode enum values from\n// @pollar/shared. Mapped to short user-facing strings; anything unknown\n// falls back to \"Not available\".\nconst REASON_LABEL: Record<string, string> = {\n DISTRIBUTION_RULE_DISABLED: 'Disabled',\n DISTRIBUTION_RULE_NOT_STARTED: 'Not started yet',\n DISTRIBUTION_RULE_EXPIRED: 'Expired',\n DISTRIBUTION_RULE_EXHAUSTED: 'Fully claimed',\n // Per-user, per-window claim limit (resets next period) - not permanent.\n DISTRIBUTION_RATE_LIMIT_EXCEEDED: 'Claimed for this period',\n};\n\nfunction reasonLabel(reason: string | null): string {\n if (!reason) return 'Not available';\n return REASON_LABEL[reason] ?? 'Not available';\n}\n\nfunction formatAmount(amount: string): string {\n const n = parseFloat(amount);\n return isNaN(n) ? amount : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\nfunction formatValidity(rule: DistributionRule): string | null {\n const from = rule.validFrom ? new Date(rule.validFrom) : null;\n const until = rule.validUntil ? new Date(rule.validUntil) : null;\n if (!from && !until) return null;\n const fmt = (d: Date) => d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n if (from && until) return `${fmt(from)} → ${fmt(until)}`;\n if (until) return `Until ${fmt(until)}`;\n if (from) return `From ${fmt(from)}`;\n return null;\n}\n\nfunction RuleCard({\n rule,\n isClaiming,\n isClaimed,\n errorMessage,\n onClaim,\n}: {\n rule: DistributionRule;\n isClaiming: boolean;\n isClaimed: boolean;\n errorMessage?: string;\n onClaim: () => void;\n}) {\n const validity = formatValidity(rule);\n const effectivelyClaimable = rule.claimable && !isClaimed;\n\n return (\n <div className=\"pollar-dist-item\" data-claimable={effectivelyClaimable ? 'true' : 'false'}>\n <div className=\"pollar-dist-item-row\">\n <span className=\"pollar-dist-item-name\">{rule.name}</span>\n <span className=\"pollar-dist-item-amount\">\n {formatAmount(rule.amount)} <span className=\"pollar-dist-item-asset\">{rule.assetCode}</span>\n </span>\n </div>\n <div className=\"pollar-dist-item-meta\">\n <span>{PERIOD_LABEL[rule.period]}</span>\n {validity && <span>· {validity}</span>}\n </div>\n <div className=\"pollar-dist-item-action\">\n {isClaimed ? (\n <span className=\"pollar-dist-item-status\" data-kind=\"claimed\">\n Claimed\n </span>\n ) : effectivelyClaimable ? (\n <button type=\"button\" className=\"pollar-btn-primary pollar-dist-claim-btn\" onClick={onClaim} disabled={isClaiming}>\n {isClaiming ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Claiming…\n </>\n ) : (\n 'Claim'\n )}\n </button>\n ) : (\n <span className=\"pollar-dist-item-status\" data-kind=\"unavailable\">\n {reasonLabel(rule.reason)}\n </span>\n )}\n </div>\n {errorMessage && <div className=\"pollar-dist-item-error\">{errorMessage}</div>}\n </div>\n );\n}\n\nexport function DistributionRulesModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n state,\n claimingId,\n claimErrors,\n claimedIds,\n onRefresh,\n onClaim,\n onClose,\n}: DistributionRulesModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = state.step === 'loading';\n const rules = state.step === 'loaded' ? state.rules : [];\n\n return (\n <div\n className=\"pollar-modal-card pollar-dist-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Distribution Rules</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n <div className=\"pollar-dist-list\">\n {isLoading && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n {state.step === 'error' && <div className=\"pollar-modal-error\">{state.message}</div>}\n {state.step === 'loaded' && rules.length === 0 && (\n <div className=\"pollar-modal-empty\">No distribution rules available.</div>\n )}\n {rules.map((rule) => (\n <RuleCard\n key={rule.id}\n rule={rule}\n isClaiming={claimingId === rule.id}\n isClaimed={claimedIds.has(rule.id)}\n {...(claimErrors[rule.id] && { errorMessage: claimErrors[rule.id] })}\n onClaim={() => onClaim(rule)}\n />\n ))}\n </div>\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { DistributionRule, DistributionRulesState } from '@pollar/core';\nimport { useCallback, useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport './DistributionRulesModal.css';\nimport { DistributionRulesModalTemplate } from './DistributionRulesModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface DistributionRulesModalProps {\n onClose: () => void;\n}\n\nexport function DistributionRulesModal({ onClose }: DistributionRulesModalProps) {\n const { getClient, styles } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [state, setState] = useState<DistributionRulesState>({ step: 'idle' });\n const [claimingId, setClaimingId] = useState<string | null>(null);\n const [claimErrors, setClaimErrors] = useState<Record<string, string>>({});\n const [claimedIds, setClaimedIds] = useState<Set<string>>(() => new Set());\n\n const load = useCallback(async () => {\n setState({ step: 'loading' });\n try {\n const rules = await getClient().listDistributionRules();\n setState({ step: 'loaded', rules });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to load distribution rules';\n setState({ step: 'error', message });\n }\n }, [getClient]);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n const handleClaim = useCallback(\n async (rule: DistributionRule) => {\n setClaimingId(rule.id);\n setClaimErrors((prev) => {\n if (!prev[rule.id]) return prev;\n const next = { ...prev };\n delete next[rule.id];\n return next;\n });\n try {\n await getClient().claimDistributionRule({ ruleId: rule.id });\n setClaimedIds((prev) => {\n const next = new Set(prev);\n next.add(rule.id);\n return next;\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Claim failed';\n setClaimErrors((prev) => ({ ...prev, [rule.id]: message }));\n } finally {\n setClaimingId(null);\n }\n },\n [getClient],\n );\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <DistributionRulesModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n state={state}\n claimingId={claimingId}\n claimErrors={claimErrors}\n claimedIds={claimedIds}\n onRefresh={() => void load()}\n onClaim={handleClaim}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\n// --- Shared network picker ----------------------------------------------------\n// One chain <select> used by the Send, Wallet Balance and Assets modals. The\n// options are the chains the user actually holds a wallet on (`getWallets()`),\n// so every option always resolves to an address; the parent defaults to the\n// first one. Everything else in those modals - address, assets, balances - is\n// filtered by whatever is picked here.\n// -----------------------------------------------------------------------------\n\nimport type { WalletChain, WalletInfo } from '@pollar/core';\nimport './send-modal/SendModal.css';\nimport './shared.css';\n\nconst CHAIN_LABEL: Record<string, string> = {\n STELLAR: 'Stellar',\n POLYGON: 'Polygon',\n SOLANA: 'Solana',\n};\n\n/**\n * The chain a record lives on, with the legacy shape folded in: sessions and\n * balance rows minted before multi-chain carry no `chain` and are Stellar by\n * definition, so absent counts as STELLAR rather than as \"unknown\".\n */\nexport function resolveChain(chain: WalletChain | undefined): WalletChain {\n return chain ?? 'STELLAR';\n}\n\n/**\n * The selectable chains - the first is the default everywhere (network picker,\n * the address the wallet button shows). De-duplicated because two wallets on one\n * chain (e.g. an embedded and a linked external Stellar wallet) are still one\n * network choice.\n *\n * `order` is the app's chain list from `/applications/config`, as arranged in the\n * dashboard. When passed it both ORDERS and FILTERS: a chain missing from it is\n * dropped, because the app switched it off and must stop appearing everywhere.\n *\n * Filtering here and not only in the backend is deliberate. `wallets` comes from\n * the session, which is written at login and then persisted for as long as the\n * session lives; `/config` is refetched on every page load. So a chain disabled\n * today disappears on the next reload even for a user who logged in last week\n * and still carries it in their stored session.\n *\n * Without `order` (config still loading) the fallback is the order the backend\n * listed the wallets in.\n */\nexport function chainsOf(wallets: WalletInfo[], order?: readonly WalletChain[]): WalletChain[] {\n const held: WalletChain[] = [];\n for (const w of wallets) {\n const chain = resolveChain(w.chain);\n if (!held.includes(chain)) held.push(chain);\n }\n if (!order || order.length === 0) return held;\n\n return order.filter((c) => held.includes(c));\n}\n\n/** The address to show for `chain`, or '' when the user has no wallet there. */\nexport function addressForChain(wallets: WalletInfo[], chain: WalletChain | null): string {\n if (!chain) return '';\n return wallets.find((w) => resolveChain(w.chain) === chain)?.address ?? '';\n}\n\nexport interface ChainSelectProps {\n label?: string;\n value: WalletChain | null;\n options: WalletChain[];\n onChange: (chain: WalletChain) => void;\n disabled?: boolean;\n}\n\nexport function ChainSelect({ label = 'Network', value, options, onChange, disabled = false }: ChainSelectProps) {\n // A single-network app gets no picker: one option is not a choice, and the\n // modals would carry a dead control. The parent still defaults to that chain,\n // so everything below stays filtered to it. Matches how the per-row ChainTag\n // is gated on `multichain` elsewhere.\n if (options.length < 2) return null;\n\n return (\n <div className=\"pollar-send-field pollar-chain-field\">\n <label className=\"pollar-send-label\">{label}</label>\n <select\n className=\"pollar-input pollar-send-select\"\n value={value ?? ''}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value as WalletChain)}\n >\n {/* Only present before the parent defaults to the first chain; hidden\n from the open dropdown. */}\n {value === null && <option value=\"\" disabled hidden />}\n {options.map((chain) => (\n <option key={chain} value={chain}>\n {CHAIN_LABEL[chain] ?? chain}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","'use client';\n\n// --- Chain order, one source of truth -----------------------------------------\n// Every component that shows \"the user's address\" or offers a network picker\n// reads it from here, so the wallet button and the modals can never disagree\n// about which chain is first.\n//\n// The order and the membership both come from `/applications/config`\n// (`appConfig.application.chains`), which is the app's own list as arranged in\n// the dashboard. Two reasons it is the authority and `getWallets()` is not:\n//\n// - `wallets[]` is written into the session at LOGIN and then persisted. A\n// chain switched off today would keep showing for anyone with a live\n// session. `/config` is refetched on every page load, so it corrects itself.\n// - Before this, the backend listed `wallets[]` `ORDER BY network` (the Prisma\n// enum order), identical for every app on the platform. That is fixed\n// server-side now, but a session persisted before the fix still carries the\n// old array, and re-deriving here repairs it without forcing a re-login.\n// -----------------------------------------------------------------------------\n\nimport type { WalletChain } from '@pollar/core';\nimport { useMemo } from 'react';\nimport { addressForChain, chainsOf } from './components/ChainSelect';\nimport { usePollar } from './context';\n\nexport interface UseChainsResult {\n /**\n * Chains to offer, in the app's configured order: those the app serves AND the\n * user already holds a wallet on. `[]` until `/config` resolves, so a network\n * picker driven by this renders nothing rather than a list it may have to\n * reorder a moment later.\n */\n chains: WalletChain[];\n /** The app's first configured chain that the user holds. `null` until ready. */\n primaryChain: WalletChain | null;\n /**\n * The address on {@link primaryChain}. While `/config` is still in flight this\n * falls back to the first wallet the session lists, so a logged-in user never\n * sees the wallet button blank out into a \"Connect\" state on every reload.\n */\n primaryAddress: string;\n /** `false` while `/config` is in flight or failed. Gate any chain UI on it. */\n ready: boolean;\n}\n\nexport function useChains(): UseChainsResult {\n const { wallets, appConfig, configStatus } = usePollar();\n const configured = appConfig?.application?.chains as WalletChain[] | undefined;\n const ready = configStatus === 'ready';\n\n return useMemo(() => {\n if (!ready) {\n // No configured order yet, so no opinion about which chain leads. The\n // picker stays empty; the button borrows the session's first address\n // purely so it has something to render.\n const fallback = chainsOf(wallets);\n return {\n chains: [],\n primaryChain: null,\n primaryAddress: addressForChain(wallets, fallback[0] ?? null),\n ready: false,\n };\n }\n const chains = chainsOf(wallets, configured);\n const primaryChain = chains[0] ?? null;\n return { chains, primaryChain, primaryAddress: addressForChain(wallets, primaryChain), ready: true };\n }, [wallets, configured, ready]);\n}\n","'use client';\n\nimport { EnabledAssetRecord, EnabledAssetsState, WalletChain } from '@pollar/core';\nimport { useState } from 'react';\nimport { ChainSelect, resolveChain } from '../ChainSelect';\nimport { BusyOverlay, CopyButton, cropAddress, PollarModalFooter, Toggle, useStickyData } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nfunction assetKey(record: { code: string; issuer?: string }): string {\n return record.code + (record.issuer ?? '');\n}\n\n/** Row key. Chain-qualified: the same code+issuer can exist on two chains. */\nfunction rowKey(record: EnabledAssetRecord): string {\n return (record.chain ?? '') + assetKey(record);\n}\n\nfunction AssetItem({\n record,\n busy,\n disabled,\n onToggle,\n}: {\n record: EnabledAssetRecord;\n busy: boolean;\n disabled: boolean;\n onToggle: (record: EnabledAssetRecord) => void;\n}) {\n // Absent means \"not established\": an unknown trustline must never render as\n // an on switch, which would read as already enabled.\n const established = record.trustlineEstablished ?? false;\n const isNative = record.type === 'native';\n // A trustline is a Stellar concept. On Polygon/Solana a token is simply held,\n // so those rows are informational: no label, no switch.\n const isStellar = resolveChain(record.chain) === 'STELLAR';\n\n return (\n <div className=\"pollar-asset-item\">\n <div className=\"pollar-asset-info\">\n <div className=\"pollar-asset-code-row\">\n <span className=\"pollar-asset-code\">{record.code}</span>\n {record.enabledInApp && <span className=\"pollar-asset-tag\">App</span>}\n </div>\n {record.name && <span className=\"pollar-asset-name\">{record.name}</span>}\n {record.issuer && (\n <span className=\"pollar-issuer\">\n <span className=\"pollar-issuer-addr\">{cropAddress(record.issuer)}</span>\n <CopyButton value={record.issuer} label=\"Copy issuer address\" className=\"pollar-copy-btn-sm\" />\n </span>\n )}\n {isStellar && !isNative && record.enabledInApp && (\n <span className=\"pollar-asset-sponsor\">\n {record.sponsored ? 'Reserve sponsored by the app' : 'You pay the reserve (~0.5 XLM)'}\n </span>\n )}\n </div>\n {isStellar && (\n <div className=\"pollar-asset-actions\">\n <span className=\"pollar-asset-trustline-label\">Trustline</span>\n {/* Native XLM needs no trustline - it is implicit and can't be removed,\n so the switch shows the state but stays locked on. */}\n <Toggle\n checked={established}\n busy={busy}\n disabled={isNative || disabled}\n onChange={() => onToggle(record)}\n label={`${established ? 'Disable' : 'Enable'} ${record.code} trustline`}\n />\n </div>\n )}\n </div>\n );\n}\n\nexport interface EnabledAssetsModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n enabledAssets: EnabledAssetsState;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n /** Networks the user holds a wallet on; the first one is the default. */\n chains: WalletChain[];\n selectedChain: WalletChain | null;\n onSelectChain: (chain: WalletChain) => void;\n /** Key (`code+issuer`) of the asset whose trustline action is in flight. */\n busyKey: string | null;\n actionError: string | null;\n onRefresh: () => void;\n onClose: () => void;\n onToggleTrustline: (record: EnabledAssetRecord) => void;\n onAddCustom: () => void;\n}\n\nexport function EnabledAssetsModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n enabledAssets,\n walletAddress,\n chains,\n selectedChain,\n onSelectChain,\n busyKey,\n actionError,\n onRefresh,\n onClose,\n onToggleTrustline,\n onAddCustom,\n}: EnabledAssetsModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = enabledAssets.step === 'loading';\n // Keep the previous payload on screen while refreshing; the overlay below\n // blocks interaction so nothing is acted on against data that is changing.\n const data = useStickyData(enabledAssets.step === 'loaded' ? enabledAssets.data : null);\n const busy = busyKey !== null;\n // Only the picked network's assets. The backend returns every chain in one\n // payload, so this is a local filter - switching networks costs no request.\n const assets = (data?.assets ?? []).filter((a) => resolveChain(a.chain) === selectedChain);\n // Trustlines are Stellar-only, so the custom-trustline form is offered only\n // while Stellar is the selected network.\n const isStellarSelected = selectedChain === 'STELLAR';\n\n return (\n <div\n className=\"pollar-modal-card pollar-asset-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n {isLoading && data && <BusyOverlay label=\"Refreshing assets…\" />}\n\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Assets</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading || busy}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoading || busy} />\n\n {walletAddress && (\n <div className=\"pollar-address-row\">\n <span className=\"pollar-address\">{cropAddress(walletAddress)}</span>\n <CopyButton value={walletAddress} label=\"Copy wallet address\" />\n </div>\n )}\n\n {/* First load only - a refresh keeps the old list under the overlay. */}\n {isLoading && !data && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n\n {enabledAssets.step === 'error' && <div className=\"pollar-modal-error\">{enabledAssets.message}</div>}\n\n {actionError && <div className=\"pollar-modal-action-error\">{actionError}</div>}\n\n {data && !data.exists && <div className=\"pollar-modal-empty\">Account not found on {data.network}.</div>}\n\n {data && assets.length === 0 && <div className=\"pollar-modal-empty\">No assets found on this network.</div>}\n\n {data && assets.length > 0 && (\n <div className=\"pollar-asset-list\">\n {assets.map((a) => (\n <AssetItem\n key={rowKey(a)}\n record={a}\n busy={busyKey === assetKey(a)}\n disabled={busy && busyKey !== assetKey(a)}\n onToggle={onToggleTrustline}\n />\n ))}\n </div>\n )}\n\n {isStellarSelected && (\n <button className=\"pollar-asset-add-custom\" onClick={onAddCustom} disabled={busy}>\n + Add custom trustline\n </button>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n\nexport interface CustomTrustlineModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n busy: boolean;\n actionError: string | null;\n onBack: () => void;\n onClose: () => void;\n onSubmit: (input: { code: string; issuer: string; limit?: string }) => void;\n}\n\nfunction isValidIssuer(issuer: string): boolean {\n return issuer.length === 56 && issuer.startsWith('G');\n}\n\nexport function CustomTrustlineModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n busy,\n actionError,\n onBack,\n onClose,\n onSubmit,\n}: CustomTrustlineModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const [code, setCode] = useState('');\n const [issuer, setIssuer] = useState('');\n const [limit, setLimit] = useState('');\n\n const codeOk = code.trim().length >= 1 && code.trim().length <= 12;\n const issuerOk = isValidIssuer(issuer.trim());\n const canSubmit = codeOk && issuerOk && !busy;\n\n const submit = () => {\n if (!canSubmit) return;\n const trimmedLimit = limit.trim();\n onSubmit({ code: code.trim(), issuer: issuer.trim(), ...(trimmedLimit ? { limit: trimmedLimit } : {}) });\n };\n\n return (\n <div\n className=\"pollar-modal-card pollar-asset-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-modal-header-actions\">\n <button className=\"pollar-modal-close\" onClick={onBack} disabled={busy} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n <h2 className=\"pollar-modal-title\">Add custom trustline</h2>\n </div>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n <p className=\"pollar-asset-custom-hint\">\n Custom trustlines aren't sponsored — your wallet pays the 0.5 XLM reserve and the transaction fee.\n </p>\n\n <div className=\"pollar-field\">\n <label className=\"pollar-label\" htmlFor=\"pollar-trustline-code\">\n Asset code\n </label>\n <input\n id=\"pollar-trustline-code\"\n className=\"pollar-input\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n placeholder=\"USDC\"\n maxLength={12}\n autoComplete=\"off\"\n spellCheck={false}\n disabled={busy}\n />\n </div>\n\n <div className=\"pollar-field\">\n <label className=\"pollar-label\" htmlFor=\"pollar-trustline-issuer\">\n Issuer\n </label>\n <input\n id=\"pollar-trustline-issuer\"\n className=\"pollar-input\"\n value={issuer}\n onChange={(e) => setIssuer(e.target.value)}\n placeholder=\"G…\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={busy}\n />\n {issuer.trim().length > 0 && !issuerOk && (\n <span className=\"pollar-field-error\">Issuer must be a 56-character Stellar address starting with G.</span>\n )}\n </div>\n\n <div className=\"pollar-field\">\n <label className=\"pollar-label\" htmlFor=\"pollar-trustline-limit\">\n Limit <span className=\"pollar-label-optional\">(optional)</span>\n </label>\n <input\n id=\"pollar-trustline-limit\"\n className=\"pollar-input\"\n value={limit}\n onChange={(e) => setLimit(e.target.value)}\n placeholder=\"Maximum\"\n inputMode=\"decimal\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={busy}\n />\n </div>\n\n {actionError && <div className=\"pollar-modal-action-error\">{actionError}</div>}\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={submit} disabled={!canSubmit}>\n {busy ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Enabling…\n </>\n ) : (\n 'Enable trustline'\n )}\n </button>\n </div>\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { EnabledAssetRecord, WalletChain } from '@pollar/core';\nimport { useCallback, useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './EnabledAssetsModal.css';\nimport { CustomTrustlineModalTemplate, EnabledAssetsModalTemplate } from './EnabledAssetsModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface EnabledAssetsModalProps {\n onClose: () => void;\n}\n\nfunction assetKey(record: { code: string; issuer?: string }): string {\n return record.code + (record.issuer ?? '');\n}\n\nexport function EnabledAssetsModal({ onClose }: EnabledAssetsModalProps) {\n const { enabledAssets, refreshAssets, setTrustline, wallets, styles } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n\n const [view, setView] = useState<'list' | 'custom'>('list');\n // Key of the in-flight asset (`code+issuer`), or 'custom' for the custom form.\n const [busyKey, setBusyKey] = useState<string | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n\n useEffect(() => {\n void refreshAssets();\n }, [refreshAssets]);\n\n const runAction = useCallback(\n async (\n key: string,\n asset: { code: string; issuer: string },\n opts: { limit?: string; skipSponsorship?: boolean },\n ): Promise<boolean> => {\n setBusyKey(key);\n setActionError(null);\n const res = await setTrustline(asset, opts);\n if (res.status === 'error') {\n setActionError(res.details || 'Trustline update failed. Please try again.');\n setBusyKey(null);\n return false;\n }\n await refreshAssets();\n setBusyKey(null);\n return true;\n },\n [setTrustline, refreshAssets],\n );\n\n const handleToggle = useCallback(\n (record: EnabledAssetRecord) => {\n const removing = record.trustlineEstablished;\n // Sponsorship is derived automatically from the app config now - no flag.\n void runAction(\n assetKey(record),\n { code: record.code, issuer: record.issuer ?? '' },\n { ...(removing ? { limit: '0' } : {}) },\n );\n },\n [runAction],\n );\n\n const handleCustomSubmit = useCallback(\n async (input: { code: string; issuer: string; limit?: string }) => {\n // Custom (non-configured) assets are never app-sponsored - the user pays.\n const ok = await runAction(\n 'custom',\n { code: input.code, issuer: input.issuer },\n { ...(input.limit ? { limit: input.limit } : {}), skipSponsorship: true },\n );\n if (ok) setView('list');\n },\n [runAction],\n );\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n {view === 'list' ? (\n <EnabledAssetsModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n enabledAssets={enabledAssets}\n walletAddress={walletAddress}\n chains={chains}\n selectedChain={selectedChain}\n onSelectChain={setSelectedChain}\n busyKey={busyKey}\n actionError={actionError}\n onRefresh={() => refreshAssets()}\n onClose={onClose}\n onToggleTrustline={handleToggle}\n onAddCustom={() => {\n setActionError(null);\n setView('custom');\n }}\n />\n ) : (\n <CustomTrustlineModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n busy={busyKey === 'custom'}\n actionError={actionError}\n onBack={() => {\n setActionError(null);\n setView('list');\n }}\n onClose={onClose}\n onSubmit={handleCustomSubmit}\n />\n )}\n </div>\n );\n}\n","'use client';\n\nimport type { KycStatus as KycStatusValue } from '@pollar/core';\nimport type { CSSProperties } from 'react';\n\ninterface KycStatusProps {\n status: KycStatusValue;\n /** Replaces the status label, keeping its color. */\n label?: string;\n className?: string;\n}\n\nconst STATUS_CONFIG: Record<KycStatusValue, { label: string; color: string; dot: boolean }> = {\n none: { label: 'Not started', color: '#6b7280', dot: false },\n pending: { label: 'Pending review', color: '#f59e0b', dot: true },\n approved: { label: 'Verified', color: '#10b981', dot: false },\n rejected: { label: 'Rejected', color: '#ef4444', dot: false },\n expired: { label: 'Expired', color: '#6b7280', dot: false },\n};\n\nexport function KycStatus({ status, label, className }: KycStatusProps) {\n const config = STATUS_CONFIG[status] ?? STATUS_CONFIG.none;\n return (\n <span\n className={`pollar-kyc-badge${className ? ` ${className}` : ''}`}\n style={{ '--pollar-kyc-color': config.color } as CSSProperties}\n >\n {config.dot && <span className=\"pollar-kyc-badge-dot\" />}\n {label ?? config.label}\n </span>\n );\n}\n","/** What a failed KYC call means for the user, by backend code. */\nexport function kycErrorMessage(error: unknown, phase: 'load' | 'start'): string {\n const code = (error as { code?: unknown } | null)?.code;\n switch (code) {\n case 'SDK_KYC_NOT_CONFIGURED':\n return 'Identity verification is not available for this app yet.';\n case 'SDK_KYC_PROVIDER_ERROR':\n return 'The verification service is not responding right now. Please try again in a moment.';\n case 'SDK_KYC_SESSION_EXPIRED':\n return 'Your previous verification session expired. Select the provider to start a new one.';\n case 'SDK_KYC_PROVIDER_NOT_FOUND':\n case 'SDK_KYC_PROVIDER_NOT_ENABLED':\n return 'This verification option is no longer available. Refresh to see the current options.';\n case 'SDK_RAMPS_PROVIDER_NOT_CONFIGURED':\n return 'This route is not set up for identity verification yet.';\n case 'VALIDATION_ERROR':\n return 'This verification option is not available for your country.';\n default:\n return phase === 'load'\n ? 'Could not load verification options. Please refresh to try again.'\n : 'Could not start verification. Please try again.';\n }\n}\n\n/** Why a verification is held for a person to review, in the user's terms. */\nexport function kycReviewMessage(reviewReason: string | null | undefined): string {\n if (reviewReason === 'DUPLICATE_DOCUMENT') {\n return 'This document is already linked to another account, so our team is reviewing it. You can check again later.';\n }\n return 'Your verification is still being reviewed. You can check again shortly.';\n}\n\n/** A decision the vendor approved that Pollar is still recording. */\nexport function kycProcessingMessage(): string {\n return 'Your verification was approved. We are finishing setting it up; check again in a minute.';\n}\n","'use client';\n\nimport type { KycProvider, KycStartResponse, KycStatus as KycStatusValue } from '@pollar/core';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\nimport { KycStatus as KycStatusBadge } from './KycStatus';\nimport { kycProcessingMessage, kycReviewMessage } from './kyc-messages';\n\nexport type KycStep = 'select_provider' | 'verifying' | 'polling' | 'done';\n\ninterface KycModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n step: KycStep;\n providers: KycProvider[];\n selectedProvider: KycProvider | null;\n session: KycStartResponse | null;\n kycStatus: KycStatusValue;\n /** Set when the decision is held for manual review (e.g. DUPLICATE_DOCUMENT). */\n reviewReason?: string | null;\n /** The vendor approved and Pollar is still recording it (`kycStatus` stays `pending`). */\n processing?: boolean;\n isLoading: boolean;\n error?: string | null;\n onSelectProvider: (provider: KycProvider) => void;\n onDoneVerifying: () => void;\n /** Open a new session after the previous one expired. */\n onStartAgain?: () => void;\n onRefresh: () => void;\n onClose: () => void;\n}\n\nexport function KycModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n providers,\n selectedProvider,\n session,\n kycStatus,\n reviewReason,\n processing = false,\n isLoading,\n error,\n onSelectProvider,\n onDoneVerifying,\n onStartAgain,\n onRefresh,\n onClose,\n}: KycModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n return (\n <div\n className={`pollar-modal-card pollar-kyc-modal ${step === 'verifying' ? 'pollar-kyc-modal--verifying' : ''}`}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Identity verification\"\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-kyc-header-text\">\n <h2 className=\"pollar-modal-title\">Identity verification</h2>\n <p className=\"pollar-kyc-subtitle\">\n {step === 'select_provider' && 'Choose your verification provider'}\n {step === 'verifying' && `Complete the steps below with ${selectedProvider?.name}`}\n {step === 'polling' && 'Waiting for verification result'}\n {step === 'done' && (kycStatus === 'approved' ? 'You’re ready to continue' : 'Your verification status')}\n </p>\n </div>\n <div className=\"pollar-modal-header-actions\">\n {step === 'select_provider' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh providers\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {error && (\n <p className=\"pollar-kyc-error\" role=\"alert\">\n {error}\n </p>\n )}\n\n {step === 'select_provider' &&\n (isLoading && providers.length === 0 ? (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading providers…</span>\n </div>\n ) : (\n <div className=\"pollar-kyc-providers\">\n {providers.length === 0 && (\n <p style={{ color: 'var(--pollar-muted)', textAlign: 'center' }}>No providers available for your country.</p>\n )}\n {providers.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n className=\"pollar-kyc-provider-btn\"\n disabled={isLoading}\n onClick={() => onSelectProvider(p)}\n >\n <span className=\"pollar-kyc-provider-name\">{p.name}</span>\n <span className=\"pollar-kyc-provider-flow\">\n {isLoading && selectedProvider?.id === p.id\n ? 'Opening…'\n : p.flow === 'redirect'\n ? 'Continue in a new tab'\n : 'Continue here'}\n </span>\n </button>\n ))}\n </div>\n ))}\n\n {step === 'verifying' && selectedProvider && (\n <>\n <div className=\"pollar-kyc-session-bar\">\n <span className=\"pollar-kyc-session-label\">\n <span className=\"pollar-kyc-session-dot\" />\n Verification in progress\n </span>\n {session?.kycUrl && (\n <a href={session.kycUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Open in new tab ↗\n </a>\n )}\n </div>\n <div className=\"pollar-kyc-iframe-wrap\">\n {session?.kycUrl && selectedProvider.flow === 'redirect' ? (\n <div className=\"pollar-kyc-iframe-mock\">\n <p>Complete verification in a separate tab, then return here to check your status.</p>\n <a className=\"pollar-btn-primary\" href={session.kycUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Open verification\n </a>\n </div>\n ) : session?.kycUrl ? (\n <iframe className=\"pollar-kyc-iframe\" src={session.kycUrl} title=\"KYC verification\" allow=\"camera; microphone\" />\n ) : (\n <div className=\"pollar-kyc-iframe-mock\">\n <span>\n {selectedProvider.flow === 'form'\n ? 'The identity verification form will appear here.'\n : 'Identity verification will open here.'}\n </span>\n </div>\n )}\n </div>\n <div className=\"pollar-kyc-footer\">\n <p>Finished the steps? Check your status to continue.</p>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n Close\n </button>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onDoneVerifying}>\n Check status\n </button>\n </div>\n </div>\n </>\n )}\n\n {step === 'polling' && (\n <div className=\"pollar-kyc-polling\">\n <div className=\"pollar-spinner\" />\n <p className=\"pollar-kyc-polling-text\">Checking verification status…</p>\n </div>\n )}\n\n {step === 'done' && (\n <div className=\"pollar-kyc-result\">\n <span className={`pollar-kyc-result-icon pollar-kyc-result-icon--${kycStatus}`} aria-hidden=\"true\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {kycStatus === 'approved' ? (\n <path d=\"m5 12 4 4L19 6\" />\n ) : kycStatus === 'rejected' ? (\n <path d=\"m7 7 10 10M17 7 7 17\" />\n ) : (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"M12 7v5l3 2\" />\n </>\n )}\n </svg>\n </span>\n <KycStatusBadge status={kycStatus} {...(processing ? { label: 'Approved' } : {})} />\n <p className=\"pollar-kyc-result-text\">\n {kycStatus === 'approved'\n ? 'Your identity has been verified successfully.'\n : kycStatus === 'rejected'\n ? 'Your verification was not approved. Contact support for the next steps.'\n : kycStatus === 'expired'\n ? 'Your verification expired. Start again to verify your identity.'\n : processing\n ? kycProcessingMessage()\n : kycReviewMessage(reviewReason)}\n </p>\n <div className=\"pollar-modal-actions\">\n {kycStatus === 'expired' && onStartAgain && (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onStartAgain} disabled={isLoading}>\n Start again\n </button>\n )}\n {kycStatus !== 'approved' && kycStatus !== 'rejected' && kycStatus !== 'expired' && (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onDoneVerifying}>\n Check again\n </button>\n )}\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )}\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport {\n isPollarApiError,\n type KycProvider,\n type KycStartResponse,\n type KycStatus as KycStatusValue,\n type KycStatusContent,\n} from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport type { KycStep } from './KycModalTemplate';\nimport { KycModalTemplate } from './KycModalTemplate';\nimport { kycErrorMessage } from './kyc-messages';\nimport '../shared.css';\nimport './KycModal.css';\nimport { modalChrome } from '../modal-theme';\n\ninterface KycModalProps {\n corridorId?: string;\n /** A card provider's steps, in place of a route's. */\n cardProviderId?: string;\n /** Open this option directly instead of listing the choices (the one a ramp's KYC gate names). */\n providerId?: string;\n onClose: () => void;\n /** ISO 3166-1 alpha-2 country code to filter providers. Defaults to 'MX'. */\n country?: string;\n /** Legacy fallback for older backends. Named options select their own workflow. */\n level?: 'basic' | 'intermediate' | 'enhanced';\n /** Called when KYC is successfully approved. */\n onApproved?: () => void;\n}\n\nfunction newIdempotencyKey(): string {\n const c = globalThis.crypto;\n if (c && typeof c.randomUUID === 'function') return c.randomUUID();\n return `kyc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;\n}\n\nexport function KycModal({\n onClose,\n country = 'MX',\n level = 'basic',\n onApproved,\n corridorId,\n cardProviderId,\n providerId,\n}: KycModalProps) {\n const { getClient, styles } = usePollar();\n\n const [step, setStep] = useState<KycStep>('select_provider');\n const [providers, setProviders] = useState<KycProvider[]>([]);\n const [selectedProvider, setSelectedProvider] = useState<KycProvider | null>(null);\n const [session, setSession] = useState<KycStartResponse | null>(null);\n const [kycStatus, setKycStatus] = useState<KycStatusValue>('none');\n const [reviewReason, setReviewReason] = useState<string | null>(null);\n const [processing, setProcessing] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n // One key per option for this modal: a retried start returns the vendor session\n // already opened instead of creating (and billing) another one.\n const idempotencyKeys = useRef<Record<string, string>>({});\n const autoOpened = useRef(false);\n\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n function finish(status: KycStatusValue, reason: string | null = null, isProcessing = false) {\n setKycStatus(status);\n setReviewReason(reason);\n setProcessing(isProcessing);\n setStep('done');\n if (status === 'approved') onApproved?.();\n }\n\n function finishWith(read: KycStatusContent) {\n if (read.status === 'pending' && read.decisionStatus === 'approved') finish('pending', null, true);\n else if (read.decisionStatus === 'manual_review') finish('pending', read.reviewReason ?? null);\n else finish(read.decisionStatus === 'expired' ? 'expired' : read.status);\n }\n\n function readStatus(providerId: string) {\n return corridorId || cardProviderId\n ? client.getKycStatus(undefined, corridorId, cardProviderId)\n : client.getKycStatus(providerId);\n }\n\n // One session request at a time: a second one for the same key would only wait on\n // the first, and the auto-open path can fire alongside a click.\n const starting = useRef(false);\n\n /** `listed`: the option came from the country-filtered list. Off it, the backend picks the option's own country. */\n async function handleSelectProvider(provider: KycProvider, listed = true) {\n if (starting.current) return;\n starting.current = true;\n setSelectedProvider(provider);\n setError(null);\n setIsLoading(true);\n const key = (idempotencyKeys.current[provider.id] ??= newIdempotencyKey());\n try {\n const result = await client.resolveKyc(\n provider.id,\n provider.levels?.[0] ?? level,\n listed ? country : undefined,\n corridorId,\n key,\n cardProviderId,\n );\n if (result.alreadyApproved) {\n finish('approved');\n return;\n }\n setSession(result as KycStartResponse);\n setStep('verifying');\n } catch (e) {\n const code = isPollarApiError(e) ? e.code : undefined;\n if (code === 'SDK_KYC_ALREADY_APPROVED') {\n finish('approved');\n return;\n }\n // A session of this user is in the provider's review, or approved and still being\n // recorded: show which one instead of opening another session.\n if (code === 'SDK_KYC_UNDER_REVIEW') {\n await readStatus(provider.id).then(finishWith, () => finish('pending'));\n return;\n }\n if (code === 'SDK_KYC_SESSION_EXPIRED') delete idempotencyKeys.current[provider.id];\n setError(kycErrorMessage(e, 'start'));\n setStep('select_provider');\n } finally {\n starting.current = false;\n setIsLoading(false);\n }\n }\n\n const loadProviders = useCallback(() => {\n setIsLoading(true);\n setError(null);\n return getClient()\n .getKycProviders(country, corridorId, cardProviderId)\n .then((result) => {\n setProviders(result.providers);\n return result.providers;\n })\n .catch((e: unknown) => {\n setProviders([]);\n setError(kycErrorMessage(e, 'load'));\n return [] as KycProvider[];\n })\n .finally(() => setIsLoading(false));\n }, [getClient, country, corridorId, cardProviderId]);\n\n useEffect(() => {\n void loadProviders().then((list) => {\n if (!providerId || autoOpened.current) return;\n autoOpened.current = true;\n const target = list.find((p) => p.id === providerId);\n // The option a gate or a step names was chosen by the backend for this user: the\n // country this list was filtered by must not hide it behind \"no providers\".\n if (target) void handleSelectProvider(target);\n else\n void handleSelectProvider(\n { id: providerId, name: 'Identity verification', flow: 'iframe', levels: [level] } as KycProvider,\n false,\n );\n });\n // handleSelectProvider reads the latest props on each call; listing it would reload providers every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loadProviders, providerId]);\n\n async function handleDoneVerifying() {\n if (!selectedProvider) return;\n setError(null);\n setStep('polling');\n try {\n const read = await client.pollKycDecision(selectedProvider.id, {\n intervalMs: 3000,\n timeoutMs: 120_000,\n ...(corridorId ? { corridorId } : {}),\n ...(cardProviderId ? { cardProviderId } : {}),\n });\n finishWith(read);\n } catch {\n setError('We could not confirm your result yet. Check again shortly; this does not mean your verification was rejected.');\n setStep('verifying');\n }\n }\n\n function handleStartAgain() {\n if (selectedProvider) delete idempotencyKeys.current[selectedProvider.id];\n setSession(null);\n setKycStatus('none');\n setReviewReason(null);\n setProcessing(false);\n if (selectedProvider) void handleSelectProvider(selectedProvider);\n else setStep('select_provider');\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <KycModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n providers={providers}\n selectedProvider={selectedProvider}\n session={session}\n kycStatus={kycStatus}\n reviewReason={reviewReason}\n processing={processing}\n isLoading={isLoading}\n error={error}\n onSelectProvider={handleSelectProvider}\n onDoneVerifying={handleDoneVerifying}\n onStartAgain={handleStartAgain}\n onRefresh={() => void loadProviders()}\n onClose={onClose}\n />\n </div>\n );\n}\n","import type { RequirementFormAnswers, RequirementFormField } from '@pollar/core';\n\nexport type FormLanguage = 'en' | 'es';\n\n/** Field labels come in English and Spanish; the browser's language picks one. */\nexport function formLanguage(): FormLanguage {\n const language = typeof navigator !== 'undefined' ? navigator.language : '';\n return language.toLowerCase().startsWith('es') ? 'es' : 'en';\n}\n\nexport function localized(text: { en?: string; es?: string } | undefined, language: FormLanguage): string {\n return (language === 'es' ? text?.es || text?.en : text?.en || text?.es) ?? '';\n}\n\n/** Values as the inputs hold them: text for every text-like input. */\nexport type FormValues = Record<string, string | boolean | string[]>;\n\nexport function initialValues(fields: RequirementFormField[], answers: RequirementFormAnswers): FormValues {\n const values: FormValues = {};\n for (const field of fields) {\n const answer = answers[field.key];\n if (field.type === 'checkbox') values[field.key] = answer === true;\n else if (field.type === 'multiselect') values[field.key] = Array.isArray(answer) ? answer : [];\n else values[field.key] = answer === undefined || answer === null ? '' : String(answer);\n }\n return values;\n}\n\nconst DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n/**\n * What one input can tell before the server does, with the same rules the server\n * applies: a number that is not one or is out of range, a date outside\n * `YYYY-MM-DD`, text longer than allowed or not matching the field's pattern. The\n * server checks all of it again, so a custom UI cannot skip it; this only answers\n * sooner. Empty values are left to the server's `required`.\n */\nexport function localFieldError(field: RequirementFormField, value: FormValues[string] | undefined): string | null {\n if (typeof value !== 'string' || !value.trim()) return null;\n const text = value.trim();\n const rules = field.validation ?? {};\n if (field.type === 'number') {\n const number = Number(text);\n if (!Number.isFinite(number)) return 'invalid_type';\n if (rules.min !== undefined && number < rules.min) return 'too_small';\n if (rules.max !== undefined && number > rules.max) return 'too_large';\n return null;\n }\n if (field.type === 'date') {\n return DATE.test(text) && !Number.isNaN(Date.parse(`${text}T00:00:00Z`)) ? null : 'invalid_format';\n }\n if (field.type === 'select' || field.type === 'multiselect' || field.type === 'checkbox') return null;\n if (rules.maxLength !== undefined && text.length > rules.maxLength) return 'too_long';\n if (rules.pattern) {\n try {\n if (!new RegExp(rules.pattern).test(text)) return 'pattern';\n } catch {\n // A pattern this engine cannot compile is left to the server.\n }\n }\n return null;\n}\n\nexport function localFieldErrors(fields: RequirementFormField[], values: FormValues): Record<string, string> {\n const errors: Record<string, string> = {};\n for (const field of fields) {\n const error = localFieldError(field, values[field.key]);\n if (error) errors[field.key] = error;\n }\n return errors;\n}\n\n/** The answers to send: numbers as numbers, empty inputs left out so the server reports them. */\nexport function answersOf(fields: RequirementFormField[], values: FormValues): RequirementFormAnswers {\n const answers: RequirementFormAnswers = {};\n for (const field of fields) {\n const value = values[field.key];\n if (field.type === 'checkbox') {\n answers[field.key] = value === true;\n } else if (field.type === 'multiselect') {\n if (Array.isArray(value) && value.length) answers[field.key] = value;\n } else if (typeof value === 'string' && value.trim()) {\n answers[field.key] = field.type === 'number' ? Number(value) : value.trim();\n }\n }\n return answers;\n}\n\nconst MESSAGES: Record<FormLanguage, Record<string, string>> = {\n en: {\n required: 'This field is required.',\n invalid_type: 'This value is not valid.',\n invalid_option: 'Choose one of the options.',\n too_long: 'This is too long.',\n too_small: 'This value is too small.',\n too_large: 'This value is too large.',\n pattern: 'This does not have the expected format.',\n invalid_format: 'This does not have the expected format.',\n },\n es: {\n required: 'Este campo es obligatorio.',\n invalid_type: 'Este valor no es válido.',\n invalid_option: 'Elige una de las opciones.',\n too_long: 'Es demasiado largo.',\n too_small: 'Este valor es demasiado bajo.',\n too_large: 'Este valor es demasiado alto.',\n pattern: 'No tiene el formato esperado.',\n invalid_format: 'No tiene el formato esperado.',\n },\n};\n\nexport function fieldErrorMessage(code: string, language: FormLanguage): string {\n return MESSAGES[language][code] ?? MESSAGES[language].invalid_type!;\n}\n\n/** The per-field errors of a KYC_FORM_INVALID_ANSWERS error, by key; null when it names none. */\nexport function fieldErrorsOf(error: unknown): Record<string, string> | null {\n if (!error || typeof error !== 'object') return null;\n const { code, body } = error as { code?: unknown; body?: { errors?: unknown } };\n if (code !== 'KYC_FORM_INVALID_ANSWERS' || !Array.isArray(body?.errors)) return null;\n const errors: Record<string, string> = {};\n for (const item of body.errors as { key?: unknown; code?: unknown }[]) {\n if (typeof item.key === 'string' && typeof item.code === 'string') errors[item.key] = item.code;\n }\n return Object.keys(errors).length ? errors : null;\n}\n\nexport const COPY: Record<\n FormLanguage,\n Record<'title' | 'loading' | 'submit' | 'submitting' | 'close' | 'loadError' | 'submitError' | 'step', string>\n> = {\n en: {\n title: 'A few more details',\n loading: 'Loading the form…',\n submit: 'Continue',\n submitting: 'Saving…',\n close: 'Close',\n loadError: 'Could not load the form. Please try again.',\n submitError: 'Could not save your answers. Please try again.',\n step: 'Step {n} of {total}',\n },\n es: {\n title: 'Unos datos más',\n loading: 'Cargando el formulario…',\n submit: 'Continuar',\n submitting: 'Guardando…',\n close: 'Cerrar',\n loadError: 'No se pudo cargar el formulario. Intenta de nuevo.',\n submitError: 'No se pudieron guardar tus respuestas. Intenta de nuevo.',\n step: 'Paso {n} de {total}',\n },\n};\n","'use client';\n\nimport type { RequirementForm, RequirementFormField } from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport {\n answersOf,\n COPY,\n fieldErrorMessage,\n fieldErrorsOf,\n formLanguage,\n initialValues,\n localFieldError,\n localFieldErrors,\n localized,\n type FormLanguage,\n type FormValues,\n} from './form-fields';\nimport '../shared.css';\nimport './RequirementFormModal.css';\n\ninterface RequirementFormModalProps {\n formId: string;\n /** Position of this step over the route's steps, when known. */\n progress?: { position: number; total: number };\n onClose: () => void;\n /** Called once the answers are stored. */\n onSubmitted: () => void;\n}\n\nfunction FieldInput({\n field,\n value,\n language,\n disabled,\n onChange,\n onBlur,\n}: {\n field: RequirementFormField;\n value: FormValues[string];\n language: FormLanguage;\n disabled: boolean;\n onChange: (value: FormValues[string]) => void;\n onBlur: () => void;\n}) {\n const id = `pollar-form-${field.key}`;\n const text = typeof value === 'string' ? value : '';\n switch (field.type) {\n case 'select':\n return (\n <select id={id} className=\"pollar-input\" value={text} disabled={disabled} onChange={(e) => onChange(e.target.value)}>\n <option value=\"\" />\n {(field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>\n {localized(option.label, language)}\n </option>\n ))}\n </select>\n );\n case 'multiselect': {\n const selected = Array.isArray(value) ? value : [];\n return (\n <div className=\"pollar-form-choices\">\n {(field.options ?? []).map((option) => (\n <label key={option.value} className=\"pollar-form-choice\">\n <input\n type=\"checkbox\"\n checked={selected.includes(option.value)}\n disabled={disabled}\n onChange={(e) =>\n onChange(e.target.checked ? [...selected, option.value] : selected.filter((item) => item !== option.value))\n }\n />\n {localized(option.label, language)}\n </label>\n ))}\n </div>\n );\n }\n case 'textarea':\n return (\n <textarea\n id={id}\n className=\"pollar-input pollar-form-textarea\"\n value={text}\n disabled={disabled}\n maxLength={field.validation?.maxLength}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n />\n );\n default:\n return (\n <input\n id={id}\n className=\"pollar-input\"\n type={field.type === 'phone' ? 'tel' : field.type === 'text' ? 'text' : field.type}\n inputMode={field.type === 'number' ? 'decimal' : undefined}\n value={text}\n disabled={disabled}\n min={field.validation?.min}\n max={field.validation?.max}\n maxLength={field.validation?.maxLength}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n />\n );\n }\n}\n\n/** One FORM requirement step: the form a route asks for, prefilled with the user's previous answers. */\nexport function RequirementFormModal({ formId, progress, onClose, onSubmitted }: RequirementFormModalProps) {\n const { getClient, styles } = usePollar();\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n const language = useMemo(formLanguage, []);\n const copy = COPY[language];\n\n const [form, setForm] = useState<RequirementForm | null>(null);\n const [values, setValues] = useState<FormValues>({});\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n client\n .getRequirementForm(formId)\n .then((loaded) => {\n if (!mounted.current) return;\n setForm(loaded);\n setValues(initialValues(loaded.fields, loaded.answers));\n })\n .catch(() => mounted.current && setError(copy.loadError));\n // The client instance and the copy do not change while the modal is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formId]);\n\n /** Show (or clear) one field's local error; an empty value keeps what the server said. */\n function recheck(field: RequirementFormField, value: FormValues[string] | undefined, onlyIfShown: boolean) {\n if (typeof value === 'string' && !value.trim()) return;\n setFieldErrors((errors) => {\n if (onlyIfShown && !(field.key in errors)) return errors;\n const next = { ...errors };\n const error = localFieldError(field, value);\n if (error) next[field.key] = error;\n else delete next[field.key];\n return next;\n });\n }\n\n // A field is checked when the user leaves it; once it shows an error, every keystroke rechecks it.\n function change(field: RequirementFormField, value: FormValues[string]) {\n setValues((v) => ({ ...v, [field.key]: value }));\n recheck(field, value, true);\n }\n\n function blur(field: RequirementFormField) {\n recheck(field, values[field.key], false);\n }\n\n async function submit() {\n if (!form) return;\n setError(null);\n const local = localFieldErrors(form.fields, values);\n if (Object.keys(local).length) return setFieldErrors(local);\n setSubmitting(true);\n setFieldErrors({});\n try {\n await client.submitRequirementForm(form.formId, answersOf(form.fields, values));\n if (mounted.current) onSubmitted();\n } catch (e) {\n if (!mounted.current) return;\n const byField = fieldErrorsOf(e);\n if (byField) setFieldErrors(byField);\n else setError(copy.submitError);\n } finally {\n if (mounted.current) setSubmitting(false);\n }\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-form-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={form?.name ?? copy.title}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-form-header-text\">\n <h2 className=\"pollar-modal-title\">{form?.name ?? copy.title}</h2>\n {progress && (\n <p className=\"pollar-form-subtitle\">\n {copy.step.replace('{n}', String(progress.position)).replace('{total}', String(progress.total))}\n </p>\n )}\n </div>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label={copy.close}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {error && (\n <p className=\"pollar-form-error\" role=\"alert\">\n {error}\n </p>\n )}\n\n {!form && !error && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>{copy.loading}</span>\n </div>\n )}\n\n {form && (\n <form\n className=\"pollar-form-body\"\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n >\n {form.description && <p className=\"pollar-form-description\">{form.description}</p>}\n {form.fields.map((field) => {\n const fieldError = fieldErrors[field.key];\n const help = localized(field.help, language);\n return (\n <div key={field.key} className=\"pollar-form-field\">\n {field.type === 'checkbox' ? (\n <label className=\"pollar-form-choice\">\n <input\n type=\"checkbox\"\n checked={values[field.key] === true}\n disabled={submitting}\n onChange={(e) => setValues((v) => ({ ...v, [field.key]: e.target.checked }))}\n />\n {localized(field.label, language)}\n {field.required && <span className=\"pollar-form-required\"> *</span>}\n </label>\n ) : (\n <>\n <label htmlFor={`pollar-form-${field.key}`} className=\"pollar-form-label\">\n {localized(field.label, language)}\n {field.required && <span className=\"pollar-form-required\"> *</span>}\n </label>\n <FieldInput\n field={field}\n value={values[field.key] ?? ''}\n language={language}\n disabled={submitting}\n onChange={(value) => change(field, value)}\n onBlur={() => blur(field)}\n />\n </>\n )}\n {help && <span className=\"pollar-form-help\">{help}</span>}\n {fieldError && (\n <span className=\"pollar-form-field-error\" role=\"alert\">\n {fieldErrorMessage(fieldError, language)}\n </span>\n )}\n </div>\n );\n })}\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose} disabled={submitting}>\n {copy.close}\n </button>\n <button type=\"submit\" className=\"pollar-btn-primary\" disabled={submitting}>\n {submitting ? copy.submitting : copy.submit}\n </button>\n </div>\n </form>\n )}\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { AppRequirementStep } from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport { KycModal } from './KycModal';\n\ninterface AppKycFlowProps {\n onClose: () => void;\n country?: string;\n level?: 'basic' | 'intermediate' | 'enhanced';\n /** Called once every step of the app's own KYC is complete. */\n onApproved?: () => void;\n}\n\ntype FlowState =\n | { kind: 'loading' }\n /** The app has no steps: the KYC modal lists its enabled options, as it always did. */\n | { kind: 'options' }\n | { kind: 'step'; step: AppRequirementStep }\n /** Every step was already complete on open; the KYC modal shows the verified state on the option the user passed. */\n | { kind: 'done'; providerId: string };\n\n/**\n * The app's own KYC, step by step: the user completes every step the app configured,\n * in order, and only the pending one is shown. A KYC step opens the KYC modal on its\n * option; a form step opens the form. After each one the steps are read again.\n */\nexport function AppKycFlow({ onClose, country, level, onApproved }: AppKycFlowProps) {\n const { getClient } = usePollar();\n const client = getClient();\n const [state, setState] = useState<FlowState>({ kind: 'loading' });\n const kycStepDone = useRef(false);\n // On the first read a complete flow shows its verified state; after a step it just closes.\n const firstRead = useRef(true);\n // One read at a time: development runs the mount effect twice, and the second read\n // would see the first one's `firstRead` and close the flow instead of showing it.\n const loading = useRef(false);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n /**\n * The KYC option the user holds an approval on, among the ones a step accepts. A\n * status read never opens a vendor session; opening an option the user did not pass\n * would start (and bill) one.\n */\n async function approvedOption(steps: { type: string; optionIds: string[] }[]): Promise<string | null> {\n for (const step of steps) {\n if (step.type !== 'KYC') continue;\n for (const optionId of step.optionIds) {\n const status = await client.getKycStatus(optionId).catch(() => null);\n if (status?.status === 'approved') return optionId;\n }\n }\n return null;\n }\n\n const load = useCallback(async () => {\n if (loading.current) return;\n loading.current = true;\n kycStepDone.current = false;\n try {\n const requirements = await client.getAppRequirements();\n if (!mounted.current) return;\n if (!requirements.total) return setState({ kind: 'options' });\n const first = firstRead.current;\n firstRead.current = false;\n if (requirements.next) return setState({ kind: 'step', step: requirements.next });\n onApproved?.();\n const providerId = first ? await approvedOption(requirements.steps) : null;\n if (!mounted.current) return;\n if (providerId) setState({ kind: 'done', providerId });\n else onClose();\n } catch {\n // Without the steps the modal still works as it did: it lists the enabled options.\n if (mounted.current) setState({ kind: 'options' });\n } finally {\n loading.current = false;\n }\n // The client instance and the callback are fixed while the flow is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n void load();\n }, [load]);\n\n if (state.kind === 'loading') return null;\n\n if (state.kind === 'options') {\n return (\n <KycModal\n onClose={onClose}\n {...(country !== undefined && { country })}\n {...(level !== undefined && { level })}\n {...(onApproved !== undefined && { onApproved })}\n />\n );\n }\n\n if (state.kind === 'done') {\n return <KycModal onClose={onClose} providerId={state.providerId} {...(country !== undefined && { country })} />;\n }\n\n const { step } = state;\n const progress = { position: step.completed + 1, total: step.total };\n if (step.type === 'FORM') {\n return (\n <RequirementFormModal\n key={step.optionId}\n formId={step.optionId}\n progress={progress}\n onClose={onClose}\n onSubmitted={() => void load()}\n />\n );\n }\n // The KYC modal shows its own result; closing it after an approval moves to the next step.\n return (\n <KycModal\n key={step.optionId}\n providerId={step.optionId}\n {...(country !== undefined && { country })}\n {...(level !== undefined && { level })}\n onApproved={() => {\n kycStepDone.current = true;\n }}\n onClose={() => {\n if (kycStepDone.current) void load();\n else onClose();\n }}\n />\n );\n}\n","import { useRef, useState } from 'react';\n\ninterface EmailCodeInputProps {\n email?: string;\n onSubmit: (code: string) => void;\n}\n\nexport function EmailCodeInput({ email, onSubmit }: EmailCodeInputProps) {\n const [digits, setDigits] = useState(['', '', '', '', '', '']);\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n function submit(next: string[]) {\n if (next.every(Boolean)) onSubmit(next.join(''));\n }\n\n function handleChange(index: number, value: string) {\n const cleaned = value.replace(/\\D/g, '').slice(-1);\n const next = digits.map((d, i) => (i === index ? cleaned : d));\n setDigits(next);\n if (cleaned && index < 5) inputRefs.current[index + 1]?.focus();\n submit(next);\n }\n\n function handleKeyDown(index: number, e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Backspace' && !digits[index] && index > 0) {\n inputRefs.current[index - 1]?.focus();\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLInputElement>) {\n e.preventDefault();\n const text = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n const next = Array.from({ length: 6 }, (_, i) => text[i] ?? '');\n setDigits(next);\n inputRefs.current[Math.min(text.length - 1, 5)]?.focus();\n submit(next);\n }\n\n return (\n <div className=\"pollar-code-section\">\n <p className=\"pollar-code-label\">Enter the 6-digit code sent to {email ? <strong>{email}</strong> : 'your email'}</p>\n <div className=\"pollar-code-inputs\">\n {digits.map((digit, i) => (\n <input\n key={i}\n ref={(el) => {\n inputRefs.current[i] = el;\n }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={2}\n value={digit}\n className=\"pollar-code-input\"\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n />\n ))}\n </div>\n </div>\n );\n}\n","// https://brand.github.com/foundations/logo\nimport './GithubButton.css';\n\nexport const GithubButton = ({ disabled, onClick }: { disabled: boolean; onClick: () => void }) => {\n return (\n <button className=\"pollar-github-button\" disabled={disabled} onClick={onClick}>\n <svg className=\"pollar-github-button-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden>\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"pollar-github-button-contents\">GitHub</span>\n </button>\n );\n};\n","// https://developers.google.com/identity/branding-guidelines\nimport './GoogleButton.css';\n\nexport const GoogleButton = ({ disabled, onClick }: { disabled: boolean; onClick: () => void }) => {\n return (\n <button className=\"pollar-gsi-material-button\" disabled={disabled} onClick={onClick}>\n <div className=\"pollar-gsi-material-button-state\"></div>\n <div className=\"pollar-gsi-material-button-content-wrapper\">\n <div className=\"pollar-gsi-material-button-icon\">\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" style={{ display: 'block' }}>\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n ></path>\n <path\n fill=\"#4285F4\"\n d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"\n ></path>\n <path\n fill=\"#FBBC05\"\n d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"\n ></path>\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n ></path>\n <path fill=\"none\" d=\"M0 0h48v48H0z\"></path>\n </svg>\n </div>\n <span className=\"pollar-gsi-material-button-contents\">Google</span>\n <span style={{ display: 'none' }}>Google</span>\n </div>\n </button>\n );\n};\n","'use client';\n\nimport { AUTH_ERROR_CODES, AuthState, WalletId } from '@pollar/core';\n\ntype StateStatus = 'NONE' | 'LOADING' | 'SUCCESS' | 'ERROR';\nimport { useState } from 'react';\nimport { LOGO_POLLAR } from '../../constants';\nimport { ModalStatusBanner, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\nimport { EmailCodeInput } from './EmailCodeInput';\nimport { GithubButton } from './GithubButton';\nimport { GoogleButton } from './GoogleButton';\n\n// Re-exported from its old home so consumers that imported it from this module\n// (the dashboard's branding preview, among others) keep working.\nexport { buildModalCssVars } from '../modal-theme';\nexport type { ModalStyleOverrides } from '../modal-theme';\n\ntype WalletAdapterEntry = { id: WalletId; meta: { label: string; iconUrl?: string; group?: string } };\n\nfunction WalletAdapterButtons({\n walletAdapters,\n onConnect,\n isLoading,\n variant = 'list',\n}: {\n walletAdapters: WalletAdapterEntry[];\n onConnect: (id: WalletId) => void;\n isLoading: boolean;\n // 'list' -> borderless rows for inside a group sub-picker (large icon + name).\n // 'entry' -> bordered buttons that match the root-level entries (Google, Wallet,\n // Smart Wallet) so a root adapter like Privy doesn't read as bare text.\n variant?: 'list' | 'entry';\n}) {\n if (variant === 'entry') {\n return (\n <>\n {walletAdapters.map((a) => (\n <button\n key={a.id}\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-entry-btn\"\n onClick={() => onConnect(a.id)}\n >\n {a.meta.iconUrl && <img src={a.meta.iconUrl} alt={a.meta.label} className=\"pollar-wallet-icon\" />}\n {a.meta.label}\n </button>\n ))}\n </>\n );\n }\n return (\n <div className=\"pollar-wallet-list\">\n {walletAdapters.map((a) => (\n <button\n key={a.id}\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-list-btn\"\n onClick={() => onConnect(a.id)}\n >\n {a.meta.iconUrl && <img src={a.meta.iconUrl} alt={a.meta.label} className=\"pollar-wallet-list-icon\" />}\n <span className=\"pollar-wallet-list-name\">{a.meta.label}</span>\n </button>\n ))}\n </div>\n );\n}\n\nconst AUTH_STATE_MESSAGES: Record<AuthState['step'], string> = {\n idle: '',\n creating_session: 'Initializing…',\n entering_email: '',\n sending_email: 'Sending…',\n entering_code: 'Code sent — check your inbox',\n verifying_email_code: 'Verifying…',\n opening_oauth: 'Redirecting…',\n connecting_wallet: 'Connecting wallet…',\n signing_wallet_challenge: 'Confirm in your wallet…',\n wallet_not_installed: 'Wallet not installed',\n authenticating_wallet: 'Signing in with wallet…',\n creating_passkey: 'Waiting for passkey…',\n deploying_smart_account: 'Creating your wallet…',\n authenticating: 'Authenticating…',\n authenticated: 'Welcome!',\n error: '',\n};\n\nfunction authStateToStatus(step: AuthState['step']): StateStatus {\n const loading: AuthState['step'][] = [\n 'creating_session',\n 'sending_email',\n 'verifying_email_code',\n 'opening_oauth',\n 'connecting_wallet',\n 'signing_wallet_challenge',\n 'authenticating_wallet',\n 'creating_passkey',\n 'deploying_smart_account',\n 'authenticating',\n ];\n const success: AuthState['step'][] = ['authenticated', 'entering_code'];\n const error: AuthState['step'][] = ['error', 'wallet_not_installed'];\n\n if (loading.includes(step)) return 'LOADING';\n if (success.includes(step)) return 'SUCCESS';\n if (error.includes(step)) return 'ERROR';\n return 'NONE';\n}\n\ninterface LoginModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n logoUrl: string | null;\n emailEnabled: boolean;\n embeddedWallets: boolean;\n /** Show the \"Smart Wallet\" (passkey) option. Optional & defaults to off so\n * adding it isn't a breaking change for existing template consumers. */\n smartWallet?: boolean;\n providers: {\n google: boolean;\n discord: boolean;\n x: boolean;\n github: boolean;\n apple: boolean;\n };\n /** Registered wallet adapters to render as buttons (Freighter, Albedo, Privy, ...). */\n walletAdapters: WalletAdapterEntry[];\n appName: string;\n email?: string;\n onEmailChange?: (email: string) => void;\n onEmailSubmit?: () => void;\n onSocialLogin?: (provider: 'google' | 'github') => void;\n onWalletConnect?: (id: WalletId) => void;\n /** Log in with an existing passkey (returning user). */\n onLoginSmartWallet?: () => void;\n /** Create a new passkey + smart wallet (new user). */\n onCreateSmartWallet?: () => void;\n authState: AuthState;\n codeInputKey?: number;\n onCodeSubmit?: (code: string) => void;\n onBack: () => void;\n onCancel: () => void;\n onRetry: () => void;\n}\n\nexport function LoginModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n logoUrl,\n emailEnabled,\n embeddedWallets,\n smartWallet = false,\n providers,\n walletAdapters,\n appName,\n email = '',\n onEmailChange,\n onEmailSubmit,\n onSocialLogin,\n onWalletConnect,\n onLoginSmartWallet,\n onCreateSmartWallet,\n authState,\n codeInputKey,\n onCodeSubmit,\n onBack,\n onCancel,\n onRetry,\n}: LoginModalTemplateProps) {\n const [showPasskeyChooser, setShowPasskeyChooser] = useState(false);\n // Which wallet group's sub-picker is open (gateway label), or null for the root view.\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const enabledSocial = Object.entries(providers).filter(([, enabled]) => enabled);\n\n // Split registered adapters into root-level buttons (no `meta.group`, e.g. Privy)\n // and gateway groups (adapters sharing a `meta.group` collapse behind one button\n // that opens a sub-picker - e.g. the Stellar Wallets Kit wallets under \"Wallet\").\n const rootAdapters = walletAdapters.filter((a) => !a.meta.group);\n const walletGroups = walletAdapters\n .filter((a) => a.meta.group)\n .reduce<{ label: string; adapters: WalletAdapterEntry[] }[]>((acc, a) => {\n const label = a.meta.group as string;\n const existing = acc.find((g) => g.label === label);\n if (existing) existing.adapters.push(a);\n else acc.push({ label, adapters: [a] });\n return acc;\n }, []);\n const activeGroupAdapters = walletGroups.find((g) => g.label === activeGroup)?.adapters ?? [];\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n const status = authStateToStatus(authState.step);\n const isLoading = status === 'LOADING';\n const isEmailCodeError =\n authState.step === 'error' &&\n (authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_EXPIRED ||\n authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_INVALID);\n const awaitingEmailCode = authState.step === 'entering_code' || authState.step === 'verifying_email_code' || isEmailCodeError;\n const statusMessage = authState.step === 'error' ? authState.message : AUTH_STATE_MESSAGES[authState.step];\n\n const BackButton = ({ onClick }: { onClick: () => void }) => (\n <button type=\"button\" className=\"pollar-back-btn\" onClick={onClick} aria-label=\"Back\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n );\n\n return (\n <div className=\"pollar-modal-card pollar-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onCancel} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n <div className=\"pollar-header\">\n <div className=\"pollar-logo-wrap\">\n <img src={logoUrl ?? LOGO_POLLAR} alt=\"Logo\" className=\"pollar-logo\" />\n </div>\n <h2 className=\"pollar-title\">{appName}</h2>\n <p className=\"pollar-subtitle\">Log in or sign up</p>\n </div>\n\n {awaitingEmailCode ? (\n <>\n <BackButton onClick={onBack} />\n <EmailCodeInput key={codeInputKey} email={email} onSubmit={onCodeSubmit ?? (() => {})} />\n </>\n ) : activeGroup ? (\n <>\n <BackButton onClick={() => setActiveGroup(null)} />\n <WalletAdapterButtons\n walletAdapters={activeGroupAdapters}\n onConnect={onWalletConnect ?? (() => {})}\n isLoading={isLoading}\n />\n </>\n ) : showPasskeyChooser ? (\n <>\n <BackButton onClick={() => setShowPasskeyChooser(false)} />\n <div className=\"pollar-wallet-section\">\n <button type=\"button\" disabled={isLoading} className=\"pollar-btn-primary\" onClick={onCreateSmartWallet}>\n Create a new wallet\n </button>\n <button type=\"button\" disabled={isLoading} className=\"pollar-wallet-entry-btn\" onClick={onLoginSmartWallet}>\n Log in with an existing wallet\n </button>\n </div>\n </>\n ) : (\n <>\n {emailEnabled && (\n <div className=\"pollar-email-section\">\n <input\n type=\"email\"\n placeholder=\"you@email.com\"\n value={email}\n disabled={isLoading}\n className=\"pollar-input\"\n onChange={(e) => onEmailChange?.(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && onEmailSubmit?.()}\n />\n <button\n type=\"button\"\n disabled={isLoading || !email}\n className=\"pollar-btn-primary\"\n style={{ marginTop: '0.75rem' }}\n onClick={onEmailSubmit}\n >\n Submit\n </button>\n </div>\n )}\n\n {emailEnabled && enabledSocial.length > 0 && (\n <div className=\"pollar-divider\">\n <div className=\"pollar-divider-line\" />\n <div className=\"pollar-divider-label\">\n <span className=\"pollar-divider-text\">or continue with</span>\n </div>\n </div>\n )}\n\n {enabledSocial.length > 0 && (\n <div className=\"pollar-social-list\">\n {enabledSocial.some(([key]) => key === 'google') && (\n <GoogleButton disabled={isLoading} onClick={() => onSocialLogin?.('google')} />\n )}\n {enabledSocial.some(([key]) => key === 'github') && (\n <GithubButton disabled={isLoading} onClick={() => onSocialLogin?.('github')} />\n )}\n </div>\n )}\n\n {(embeddedWallets || smartWallet) && (\n <div className=\"pollar-wallet-section\">\n {embeddedWallets && (\n <>\n {walletGroups.map((g) => (\n <button\n key={g.label}\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-entry-btn\"\n onClick={() => setActiveGroup(g.label)}\n >\n <svg\n width=\"18\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n {g.label}\n </button>\n ))}\n {rootAdapters.length > 0 && (\n <WalletAdapterButtons\n walletAdapters={rootAdapters}\n onConnect={onWalletConnect ?? (() => {})}\n isLoading={isLoading}\n variant=\"entry\"\n />\n )}\n </>\n )}\n\n {smartWallet && (\n <button\n type=\"button\"\n disabled={isLoading}\n className=\"pollar-wallet-entry-btn\"\n onClick={() => setShowPasskeyChooser(true)}\n >\n <svg\n width=\"18\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M16 8V6a4 4 0 00-8 0v2M5 8h14a1 1 0 011 1v10a1 1 0 01-1 1H5a1 1 0 01-1-1V9a1 1 0 011-1zm7 5v2\" />\n </svg>\n Smart Wallet\n </button>\n )}\n </div>\n )}\n </>\n )}\n\n <ModalStatusBanner\n message={statusMessage}\n status={status}\n onCancel={onCancel}\n onRetry={isEmailCodeError ? undefined : onRetry}\n />\n\n <PollarModalFooter />\n </div>\n );\n}\n\n/** Placeholder shown inside the login modal while the app config is loading, or\n * when its remote fetch failed - instead of the empty shell that renders when\n * `styles` is still the default `{}`. Mirrors the template's card chrome (logo,\n * title, footer) so the swap to the real form isn't jarring. */\nexport function LoginModalStatus({\n status,\n theme,\n accentColor,\n styleOverrides,\n logoUrl,\n appName,\n onRetry,\n onCancel,\n}: {\n status: 'loading' | 'error';\n theme: string;\n accentColor: string;\n styleOverrides?: ModalStyleOverrides;\n logoUrl: string | null;\n appName: string;\n onRetry: () => void;\n onCancel: () => void;\n}) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n return (\n <div className=\"pollar-modal-card pollar-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onCancel} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n <div className=\"pollar-header\">\n <div className=\"pollar-logo-wrap\">\n <img src={logoUrl ?? LOGO_POLLAR} alt=\"Logo\" className=\"pollar-logo\" />\n </div>\n <h2 className=\"pollar-title\">{appName}</h2>\n <p className=\"pollar-subtitle\">Log in or sign up</p>\n </div>\n\n {status === 'loading' ? (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading...</span>\n </div>\n ) : (\n <div className=\"pollar-wallet-section\">\n <p className=\"pollar-modal-error\">Could not load sign-in options. Check your connection and try again.</p>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onRetry}>\n Try again\n </button>\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport type { InteractiveAuthAdapter } from '@pollar/core';\nimport { LOGO_POLLAR } from '../../constants';\nimport { ModalStatusBanner, PollarModalFooter } from '../commons';\nimport { EmailCodeInput } from './EmailCodeInput';\nimport { GithubButton } from './GithubButton';\nimport { GoogleButton } from './GoogleButton';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\ntype StateStatus = 'NONE' | 'LOADING' | 'SUCCESS' | 'ERROR';\n\ninterface PrivyLoginSubmodalProps {\n /** The interactive adapter whose login (email/oauth) we drive. */\n adapter: InteractiveAuthAdapter;\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n logoUrl: string | null;\n appName: string;\n /** Return to the root login view. */\n onBack: () => void;\n /** Close the whole login modal. */\n onCancel: () => void;\n /** The provider login finished - hand off to `login({ provider })`. */\n onAuthenticated: () => void;\n}\n\n/**\n * Sub-modal for an {@link InteractiveAuthAdapter} (e.g. `@pollar/privy-adapter`).\n * It renders the adapter's `getAuthOptions()` (email / Google / GitHub), runs the\n * provider login by calling the adapter's methods, then signals\n * {@link PrivyLoginSubmodalProps.onAuthenticated} so the host triggers the normal\n * `login({ provider })` (which runs `connect()` + SEP-10).\n *\n * Owned by `@pollar/react`; reuses the login-modal CSS classes/vars.\n */\nexport function PrivyLoginSubmodal({\n adapter,\n theme,\n accentColor,\n styleOverrides,\n logoUrl,\n appName,\n onBack,\n onCancel,\n onAuthenticated,\n}: PrivyLoginSubmodalProps) {\n const options = useMemo(() => adapter.getAuthOptions(), [adapter]);\n const [email, setEmail] = useState('');\n const [view, setView] = useState<'root' | 'email-code'>('root');\n const [status, setStatus] = useState<StateStatus>('NONE');\n const [message, setMessage] = useState('');\n\n const isLoading = status === 'LOADING';\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n function fail(error: unknown) {\n setStatus('ERROR');\n setMessage(error instanceof Error ? error.message : 'Something went wrong. Please try again.');\n }\n\n async function handleEmailSubmit() {\n if (!email) return;\n setStatus('LOADING');\n setMessage('');\n try {\n await adapter.sendEmailCode(email);\n setStatus('SUCCESS');\n setMessage('Code sent — check your inbox');\n setView('email-code');\n } catch (error) {\n fail(error);\n }\n }\n\n async function handleCodeSubmit(code: string) {\n setStatus('LOADING');\n setMessage('Verifying…');\n try {\n await adapter.verifyEmailCode(code);\n onAuthenticated();\n } catch (error) {\n fail(error);\n }\n }\n\n async function handleOAuth(provider: 'google' | 'github') {\n setStatus('LOADING');\n setMessage('');\n try {\n // On web Privy may redirect for OAuth; completion then arrives after the\n // round-trip. Email login resolves in-session and is the robust path.\n await adapter.loginWithOAuth(provider);\n onAuthenticated();\n } catch (error) {\n fail(error);\n }\n }\n\n const BackButton = ({ onClick }: { onClick: () => void }) => (\n <button type=\"button\" className=\"pollar-back-btn\" onClick={onClick} aria-label=\"Back\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n );\n\n const showEmail = options.includes('email');\n const showGoogle = options.includes('google');\n const showGithub = options.includes('github');\n\n return (\n <div className=\"pollar-modal-card pollar-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onCancel} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n\n <div className=\"pollar-header\">\n <div className=\"pollar-logo-wrap\">\n <img src={logoUrl ?? LOGO_POLLAR} alt=\"Logo\" className=\"pollar-logo\" />\n </div>\n <h2 className=\"pollar-title\">{appName}</h2>\n <p className=\"pollar-subtitle\">{adapter.meta.label}</p>\n </div>\n\n {view === 'email-code' ? (\n <>\n <BackButton onClick={() => setView('root')} />\n <EmailCodeInput email={email} onSubmit={handleCodeSubmit} />\n </>\n ) : (\n <>\n <BackButton onClick={onBack} />\n {showEmail && (\n <div className=\"pollar-email-section\">\n <input\n type=\"email\"\n placeholder=\"you@email.com\"\n value={email}\n disabled={isLoading}\n className=\"pollar-input\"\n onChange={(e) => setEmail(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleEmailSubmit()}\n />\n <button\n type=\"button\"\n disabled={isLoading || !email}\n className=\"pollar-btn-primary\"\n style={{ marginTop: '0.75rem' }}\n onClick={handleEmailSubmit}\n >\n Submit\n </button>\n </div>\n )}\n\n {showEmail && (showGoogle || showGithub) && (\n <div className=\"pollar-divider\">\n <div className=\"pollar-divider-line\" />\n <div className=\"pollar-divider-label\">\n <span className=\"pollar-divider-text\">or continue with</span>\n </div>\n </div>\n )}\n\n {(showGoogle || showGithub) && (\n <div className=\"pollar-social-list\">\n {showGoogle && <GoogleButton disabled={isLoading} onClick={() => handleOAuth('google')} />}\n {showGithub && <GithubButton disabled={isLoading} onClick={() => handleOAuth('github')} />}\n </div>\n )}\n </>\n )}\n\n <ModalStatusBanner message={message} status={status} onCancel={onCancel} onRetry={undefined} />\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport {\n AUTH_ERROR_CODES,\n AuthState,\n InteractiveAuthAdapter,\n isInteractiveAuthAdapter,\n PollarLoginOptions,\n WalletChain,\n WalletId,\n} from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { modalChrome } from '../modal-theme';\nimport { LoginModalStatus, LoginModalTemplate } from './LoginModalTemplate';\nimport { PrivyLoginSubmodal } from './PrivyLoginSubmodal';\nimport '../shared.css';\nimport './LoginModal.css';\n\ntype TimeoutHandle = ReturnType<typeof setTimeout>;\n\ninterface LoginModalProps {\n onClose: () => void;\n}\n\nexport function LoginModal({ onClose }: LoginModalProps) {\n const [email, setEmail] = useState('');\n const { getClient, styles, appConfig: config, configStatus, retryConfig } = usePollar();\n const [authState, setAuthState] = useState<AuthState>(() => getClient().getAuthState());\n // Registered wallet adapters (built-ins + config) -> one login button each.\n // An adapter only shows when the app serves its chain: a Phantom login on an\n // app without Solana would leave the user with a wallet the app cannot use.\n const servedChains = config?.application?.chains as WalletChain[] | undefined;\n const walletAdapters = useMemo(\n () =>\n getClient()\n .listWalletAdapters()\n .filter((a) => !servedChains || servedChains.includes(a.chain)),\n [getClient, servedChains],\n );\n const [codeInputKey, setCodeInputKey] = useState(0);\n const pendingEmail = useRef<string | null>(null);\n // When set, an interactive adapter (e.g. Privy) takes over the modal with its\n // own login sub-view instead of going straight to login({ provider }).\n const [interactiveAdapter, setInteractiveAdapter] = useState<InteractiveAuthAdapter | null>(null);\n\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const autoCloseTimer = useRef<TimeoutHandle | null>(null);\n\n useEffect(() => {\n const unsubscribe = getClient().onAuthStateChange((next) => {\n setAuthState(next);\n if (next.step === 'entering_email' && pendingEmail.current) {\n getClient().sendEmailCode(pendingEmail.current);\n pendingEmail.current = null;\n }\n if (next.step === 'error' && next.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_INVALID) {\n setCodeInputKey((k) => k + 1);\n }\n if (next.step === 'authenticated') {\n // Clear any timer already pending - if `authenticated` fires more than\n // once, overwriting the handle would orphan the previous timeout\n // (cleanup only tracks the latest).\n if (autoCloseTimer.current !== null) {\n clearTimeout(autoCloseTimer.current);\n }\n autoCloseTimer.current = setTimeout(() => {\n autoCloseTimer.current = null;\n onCloseRef.current();\n }, 1000);\n }\n });\n return () => {\n unsubscribe();\n if (autoCloseTimer.current !== null) {\n clearTimeout(autoCloseTimer.current);\n autoCloseTimer.current = null;\n }\n };\n }, [getClient]);\n\n const { logoUrl, emailEnabled, embeddedWallets, smartWallet, providers } = styles;\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n // Opt-in: the Smart Wallet (passkey) option only shows when the dashboard\n // explicitly enables it. Absent -> hidden.\n const smartWalletEnabled = smartWallet ?? false;\n // The heading is the app's name unless Branding set a custom one. Blank counts\n // as unset, which is what the dashboard sends when the field is cleared.\n const modalTitle = styles.modalTitle?.trim() || config.application?.name || 'Pollar';\n\n function handleClose() {\n setEmail('');\n getClient().cancelLogin();\n onClose();\n }\n\n function handleEmailSubmit() {\n if (!email) return;\n pendingEmail.current = email;\n getClient().beginEmailLogin();\n }\n\n function handleSocialLogin(provider: 'google' | 'github') {\n getClient().login({ provider });\n }\n\n function handleWalletConnect(type: WalletId) {\n // Interactive adapters (e.g. Privy) drive their own multi-step login that we\n // render as a sub-modal; open it instead of going straight to login().\n const adapter = getClient().getWalletAdapter(type);\n if (isInteractiveAuthAdapter(adapter)) {\n setInteractiveAdapter(adapter);\n return;\n }\n // Any other registered wallet adapter (freighter/albedo/swk...). The adapter\n // opens its own connect/auth UI; the SDK wraps the generic SEP-10 flow.\n getClient().login({ provider: type } as PollarLoginOptions);\n }\n\n function handleLoginSmartWallet() {\n getClient().loginSmartWallet();\n }\n\n function handleCreateSmartWallet() {\n getClient().createSmartWallet();\n }\n\n function handleVerifyCode(code: string) {\n getClient().verifyEmailCode(code);\n }\n\n function handleBack() {\n setEmail('');\n getClient().cancelLogin();\n }\n\n function handleRetry() {\n getClient().logout();\n if (styles.emailEnabled) {\n getClient().beginEmailLogin();\n }\n }\n\n function handleInteractiveAuthenticated() {\n const provider = interactiveAdapter?.type;\n setInteractiveAdapter(null);\n if (provider) {\n // Provider login (Privy) is done; run the normal flow so connect() + SEP-10\n // execute against the now-authenticated wallet.\n getClient().login({ provider } as PollarLoginOptions);\n }\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={handleClose}>\n {configStatus !== 'ready' ? (\n <LoginModalStatus\n status={configStatus === 'error' ? 'error' : 'loading'}\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n logoUrl={logoUrl ?? null}\n appName={modalTitle}\n onRetry={retryConfig}\n onCancel={handleClose}\n />\n ) : interactiveAdapter ? (\n <PrivyLoginSubmodal\n adapter={interactiveAdapter}\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n logoUrl={logoUrl ?? null}\n appName={modalTitle}\n onBack={() => setInteractiveAdapter(null)}\n onCancel={handleClose}\n onAuthenticated={handleInteractiveAuthenticated}\n />\n ) : (\n <LoginModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n logoUrl={logoUrl ?? null}\n emailEnabled={!!emailEnabled}\n embeddedWallets={!!embeddedWallets}\n smartWallet={smartWalletEnabled}\n providers={{\n google: !!providers?.google,\n discord: !!providers?.discord,\n x: !!providers?.x,\n github: !!providers?.github,\n apple: !!providers?.apple,\n }}\n walletAdapters={walletAdapters}\n appName={modalTitle}\n email={email}\n onEmailChange={setEmail}\n onEmailSubmit={handleEmailSubmit}\n onSocialLogin={handleSocialLogin}\n onWalletConnect={handleWalletConnect}\n onLoginSmartWallet={handleLoginSmartWallet}\n onCreateSmartWallet={handleCreateSmartWallet}\n authState={authState}\n codeInputKey={codeInputKey}\n onCodeSubmit={handleVerifyCode}\n onBack={handleBack}\n onCancel={handleClose}\n onRetry={handleRetry}\n />\n )}\n </div>\n );\n}\n","import type { RampQuoteRequirement } from '@pollar/core';\nimport { kycReviewMessage } from '../kyc-modal/kyc-messages';\n\n/**\n * A requirement step the user must complete before a route: a KYC option, a form, a\n * registry option, or (for PROVIDER_REGISTRATION) the registration of `corridorId`.\n */\nexport type PendingRequirement = {\n rampProviderId: string;\n corridorId: string;\n type: 'KYC' | 'FORM' | 'REGISTRY_CHECK' | 'PROVIDER_REGISTRATION';\n optionId: string;\n /** Known when it comes from the quote; the start gate does not say. */\n progress?: { position: number; total: number };\n};\n\nconst nonEmpty = (value: unknown): value is string => typeof value === 'string' && !!value.trim();\n\n/**\n * The step the backend's start gate names, or null for any other error. v2 says\n * `requirementType` and `optionId`; a KYC-only body names the option as `kycProviderId`.\n */\nexport function requiredRampKyc(error: unknown): PendingRequirement | null {\n if (!error || typeof error !== 'object') return null;\n const { code, body } = error as { code?: unknown; body?: unknown };\n if (code !== 'SDK_RAMPS_KYC_REQUIRED' || !body || typeof body !== 'object') return null;\n const { rampProviderId, corridorId, requirementType, optionId, kycProviderId } = body as Record<string, unknown>;\n if (!nonEmpty(rampProviderId) || !nonEmpty(corridorId)) return null;\n if (\n (requirementType === 'FORM' || requirementType === 'REGISTRY_CHECK' || requirementType === 'PROVIDER_REGISTRATION') &&\n nonEmpty(optionId)\n ) {\n return { rampProviderId, corridorId, type: requirementType, optionId };\n }\n const kyc = nonEmpty(optionId) && requirementType === 'KYC' ? optionId : kycProviderId;\n return nonEmpty(kyc) ? { rampProviderId, corridorId, type: 'KYC', optionId: kyc } : null;\n}\n\n/** The step a locked route names in the quote. */\nexport function pendingFromQuote(requirement: RampQuoteRequirement): PendingRequirement {\n return {\n rampProviderId: requirement.rampProviderId,\n corridorId: requirement.corridorId,\n type: requirement.type,\n optionId: requirement.optionId,\n progress: { position: requirement.completed + 1, total: requirement.total },\n };\n}\n\n/**\n * What a route held back by a requirement step says, and the button it offers. A verification\n * held for review (`reviewReason`) or rejected has nothing the user can do from\n * here, so those rows carry no button.\n */\nexport function lockedRouteCopy(requirement: Pick<RampQuoteRequirement, 'status' | 'reviewReason'> & { type?: string }): {\n message: string;\n action: string | null;\n} {\n if (requirement.type === 'FORM') return { message: 'Answer a few questions to see this route', action: 'Continue' };\n if (requirement.type === 'PROVIDER_REGISTRATION') {\n return { message: 'Register with the provider to see this route', action: 'Continue' };\n }\n if (requirement.type === 'REGISTRY_CHECK') {\n return requirement.status === 'pending'\n ? { message: 'Your details are under review', action: null }\n : { message: 'Confirm your details to see this route', action: 'Confirm' };\n }\n switch (requirement.status) {\n case 'expired':\n return { message: 'Your verification expired', action: 'Verify again' };\n case 'pending':\n if (!requirement.reviewReason) return { message: 'Verification in progress', action: 'Continue' };\n return {\n message:\n requirement.reviewReason === 'DUPLICATE_DOCUMENT'\n ? kycReviewMessage(requirement.reviewReason)\n : 'Your verification is under review',\n action: null,\n };\n case 'rejected':\n return { message: 'Verification was not approved', action: null };\n default:\n return { message: 'Verify your identity to see this route', action: 'Verify' };\n }\n}\n","'use client';\n\nimport type { RampQuote, RampQuoteRequirement } from '@pollar/core';\nimport { lockedRouteCopy } from './ramp-kyc';\n\ninterface RouteDisplayProps {\n quote: RampQuote;\n /** This route is the one being started - it owns the in-flight request. */\n busy?: boolean;\n /** Another route is starting, so this one is not selectable meanwhile. */\n disabled?: boolean;\n onSelect: (quote: RampQuote) => void;\n}\n\nconst RAIL_LABELS: Record<string, string> = {\n SPEI: 'SPEI (Mexico)',\n PIX: 'PIX (Brazil)',\n PSE: 'PSE (Colombia)',\n ACH: 'ACH (US)',\n};\n\nexport function RouteDisplay({ quote, busy = false, disabled = false, onSelect }: RouteDisplayProps) {\n // Picking a route fires a request that can take seconds (the provider is\n // contacted server-side). Without this the card looked inert and the only\n // hint that anything happened was the network tab.\n const inert = busy || disabled;\n const select = () => {\n if (!inert) onSelect(quote);\n };\n return (\n <div\n className=\"pollar-ramp-route-card\"\n data-recommended={quote.recommended}\n data-busy={busy || undefined}\n data-disabled={disabled || undefined}\n role=\"button\"\n aria-busy={busy}\n aria-disabled={inert}\n tabIndex={inert ? -1 : 0}\n onClick={select}\n onKeyDown={(e) => e.key === 'Enter' && select()}\n >\n <div className=\"pollar-ramp-route-left\">\n <span className=\"pollar-ramp-route-provider\">{quote.provider}</span>\n <span className=\"pollar-ramp-route-meta\">\n {busy ? 'Starting…' : `${RAIL_LABELS[quote.rail] ?? quote.rail} · ${quote.protocol} · ${quote.estimatedTime}`}\n </span>\n </div>\n <div className=\"pollar-ramp-route-right\">\n {busy ? (\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n ) : (\n <>\n <span className=\"pollar-ramp-route-fee\">{quote.fee}% fee</span>\n {quote.recommended && <span className=\"pollar-ramp-route-badge\">Best rate</span>}\n </>\n )}\n </div>\n </div>\n );\n}\n\ninterface LockedRouteDisplayProps {\n requirement: RampQuoteRequirement;\n /** A route is starting, so verification cannot be opened meanwhile. */\n disabled?: boolean;\n onVerify: (requirement: RampQuoteRequirement) => void;\n}\n\n/** A route the backend did not quote because its corridor has a requirement step the user has not completed. */\nexport function LockedRouteDisplay({ requirement, disabled = false, onVerify }: LockedRouteDisplayProps) {\n const { message, action } = lockedRouteCopy(requirement);\n return (\n <div\n className=\"pollar-ramp-route-card\"\n data-locked\n data-kyc-status={requirement.status}\n data-disabled={disabled || undefined}\n >\n <div className=\"pollar-ramp-route-left\">\n <span className=\"pollar-ramp-route-provider\">{requirement.provider}</span>\n <span className=\"pollar-ramp-route-meta\">{message}</span>\n </div>\n {action && (\n <div className=\"pollar-ramp-route-right\">\n <button\n type=\"button\"\n className=\"pollar-btn-secondary pollar-ramp-route-verify\"\n disabled={disabled}\n onClick={() => onVerify(requirement)}\n >\n {action}\n </button>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport type {\n RampCountry,\n RampDepositInstructions,\n RampDirection,\n RampInstructionField,\n RampQuote,\n RampQuoteRequirement,\n RampScannable,\n RampTxStatus,\n} from '@pollar/core';\nimport { LockedRouteDisplay, RouteDisplay } from './RouteDisplay';\nimport { CopyButton, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport type RampStep = 'input' | 'loading_quote' | 'select_route' | 'contact' | 'status' | 'error';\n\n// Basic client-side email check so an invalid address never round-trips to the\n// provider (which rejects it with a generic VALIDATION_ERROR).\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/**\n * A collected field is complete when it's non-empty and (for email) well-formed.\n * An `optional` field is complete while blank, but still has to be well-formed\n * once something is typed into it.\n */\nfunction isFieldValid(spec: RampFieldSpec, raw: string | undefined): boolean {\n const value = (raw ?? '').trim();\n if (!value) return spec.optional === true;\n if (spec.type === 'email') return EMAIL_RE.test(value);\n return true;\n}\n\n/**\n * The `src` for a scannable that is not inline-safe. `encoding` and `inlineSafe`\n * are independent in the contract: an SVG a provider sent (so not inline-safe)\n * still arrives as `utf8`, and base64-wrapping that text yields a data URL the\n * browser cannot decode - a blank QR on the payment screen.\n */\nfunction scannableImageSrc(image: RampScannable['image']): string {\n return image.encoding === 'base64'\n ? `data:${image.mediaType};base64,${image.data}`\n : `data:${image.mediaType};charset=utf-8,${encodeURIComponent(image.data)}`;\n}\n\n/** A field a provider declares (via the quote) that the client must collect. */\nexport interface RampFieldSpec {\n key: string;\n label: string;\n type: 'text' | 'email' | 'tel' | 'select';\n bankType?: 'CLABE' | 'PIX' | 'PSE' | 'ACH' | 'BREB';\n /** For `type: 'select'` - dropdown choices (e.g. Stereum's Bolivian banks). */\n options?: { value: string; label: string; placeholder?: string }[];\n /** Declared but not mandatory (Abroad's tax id). Blank must not block Continue. */\n optional?: boolean;\n /** Example of the expected shape, for formats a user cannot guess. */\n placeholder?: string;\n /**\n * Key of a sibling `select` whose chosen option supplies the placeholder. One\n * Pix field can then show a CPF mask, an email or a +55 number as the user\n * switches kind, without this component knowing what a Pix key is.\n */\n placeholderFrom?: string;\n /** Secondary line under the field, for a rule the label has no room for. */\n hint?: string;\n}\n\n/** \"a\", \"a and b\", \"a, b and c\" - for naming what a step is asking for. */\nfunction listOf(items: string[]): string {\n const last = items[items.length - 1];\n if (last === undefined) return 'a few details';\n if (items.length === 1) return last;\n return `${items.slice(0, -1).join(', ')} and ${last}`;\n}\n\n/** The placeholder to show: the one a sibling select dictates, else the static one. */\nfunction placeholderFor(field: RampFieldSpec, fields: RampFieldSpec[], values: Record<string, string>): string | undefined {\n if (field.placeholderFrom) {\n const source = fields.find((f) => f.key === field.placeholderFrom);\n const chosen = source?.options?.find((o) => o.value === values[field.placeholderFrom as string]);\n if (chosen?.placeholder) return chosen.placeholder;\n }\n return field.placeholder;\n}\n\nconst CHAIN_NAME = { STELLAR: 'Stellar', POLYGON: 'Polygon', SOLANA: 'Solana' } as const;\nconst EXPLORER_NAME = { STELLAR: 'Stellar Expert', POLYGON: 'Polygonscan', SOLANA: 'Solana Explorer' } as const;\n\ninterface RampWidgetTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n step: RampStep;\n /** Labels of the steps this run goes through. Length varies by route: only\n * providers that collect fields add a 'Details' step. */\n flowSteps: string[];\n /** Index into `flowSteps`, or -1 when the current step is outside the flow\n * (the error step) and the progress bar should be hidden. */\n flowStepIndex: number;\n /** Quote whose start request is in flight, so its row can show it. */\n startingQuoteId: string | null;\n direction: RampDirection;\n amount: string;\n currency: string;\n country: string;\n requiredFields: RampFieldSpec[];\n fieldValues: Record<string, string>;\n countries: RampCountry[];\n countriesLoading: boolean;\n refreshing: boolean;\n quotes: RampQuote[];\n /** Routes not quoted until the user completes the requirement step their corridor names (KYC, form, registry check or provider registration). */\n kycRequired: RampQuoteRequirement[];\n isLoading: boolean;\n // status step\n provider: string;\n txStatus: RampTxStatus | null;\n kycUrl: string | null;\n tosUrl: string | null;\n /** Provider gated the flow on KYC and published no link; nothing was signed. */\n kycBlocking: boolean;\n /**\n * Which part of provider onboarding is outstanding, when any is. Optional\n * because this template is exported for integrators who render their own\n * chrome: a required prop would break every one of them on upgrade. Omitted,\n * the gate falls back to the identity-verification wording.\n */\n onboardingStatus?: 'kyc' | 'endorsement' | 'awaiting_provider' | null;\n /** The gate has since cleared - the user needs a fresh quote to continue. */\n kycJustApproved: boolean;\n /** Superseded by `txHash`, which carries the settlement on any chain; read when `txHash` is absent. */\n stellarTxHash: string | null;\n /** The on-chain transaction that settled the ramp, on `txChain`. */\n txHash?: string | null;\n /** Chain of `txHash`; Stellar when omitted. */\n txChain?: 'STELLAR' | 'POLYGON' | 'SOLANA' | null;\n /** Explorer URL for the transaction (chain- and network-aware); null when unknown. */\n explorerUrl: string | null;\n /**\n * The user's money is in one of their wallets between two steps of the route.\n * Optional for integrators rendering their own chrome; omitted, the state is\n * not shown.\n */\n fundsInTransit?: boolean;\n /** A retry of the pending step is in flight. */\n retrying?: boolean;\n onRetryTransit?: () => void;\n depositInstructions: RampDepositInstructions | null;\n canComplete: boolean;\n completing: boolean;\n errorMsg: string | null;\n /** Neutral guidance on the route list, e.g. after identity verification sent the user back to it. */\n noticeMsg?: string | null;\n onDirectionChange: (d: RampDirection) => void;\n onAmountChange: (v: string) => void;\n onFieldChange: (key: string, value: string) => void;\n onCountryChange: (v: string) => void;\n onFindRoute: () => void;\n onSelectQuote: (q: RampQuote) => void;\n onVerifyRoute: (requirement: RampQuoteRequirement) => void;\n onContactContinue: () => void;\n onOpenKyc: () => void;\n onOpenTos: () => void;\n onCompleteWithdraw: () => void;\n /** Step back to the amount, keeping what was entered. Distinct from `onRetry`\n * (which restarts a failed flow) so a \"Back\" button reads as navigation. */\n onBack: () => void;\n onRetry: () => void;\n onRefresh: () => void;\n onClose: () => void;\n}\n\nconst LOADING_STEPS = ['Detecting your country…', 'Consulting providers…', 'Route found!'];\n\n/**\n * Flag emoji from a 2-letter ISO 3166-1 alpha-2 country code by mapping each\n * letter to its Regional Indicator Symbol code point (U+1F1E6 = 'A'). Returns an\n * empty string for anything that isn't a pair of ASCII letters.\n */\nfunction flagEmoji(code: string): string {\n const cc = code.trim().toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) return '';\n const base = 0x1f1e6;\n return String.fromCodePoint(base + (cc.charCodeAt(0) - 65), base + (cc.charCodeAt(1) - 65));\n}\n\nconst STATUS_LABEL: Record<RampTxStatus, string> = {\n pending: 'Pending',\n processing: 'Processing',\n completed: 'Completed',\n failed: 'Failed',\n};\n\n/**\n * A timestamp field arrives as ISO-8601; render it in the viewer's locale.\n * Anything unparseable falls back to the raw string rather than showing\n * \"Invalid Date\".\n */\nfunction displayValue(field: RampInstructionField): string {\n if (field.type !== 'datetime') return field.value;\n const at = new Date(field.value);\n return Number.isNaN(at.getTime()) ? field.value : at.toLocaleString();\n}\n\nexport function RampWidgetTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n flowSteps,\n flowStepIndex,\n startingQuoteId,\n direction,\n amount,\n currency,\n country,\n requiredFields,\n fieldValues,\n countries,\n countriesLoading,\n refreshing,\n quotes,\n kycRequired,\n isLoading,\n provider,\n txStatus,\n kycUrl,\n tosUrl,\n kycBlocking,\n onboardingStatus,\n kycJustApproved,\n stellarTxHash,\n txHash,\n txChain,\n explorerUrl,\n fundsInTransit = false,\n retrying = false,\n onRetryTransit,\n depositInstructions,\n canComplete,\n completing,\n errorMsg,\n noticeMsg,\n onDirectionChange,\n onAmountChange,\n onFieldChange,\n onCountryChange,\n onFindRoute,\n onSelectQuote,\n onVerifyRoute,\n onContactContinue,\n onOpenKyc,\n onOpenTos,\n onCompleteWithdraw,\n onBack,\n onRetry,\n onRefresh,\n onClose,\n}: RampWidgetTemplateProps) {\n const settledHash = txHash ?? stellarTxHash;\n const chainName = CHAIN_NAME[txChain ?? 'STELLAR'];\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n\n const stepTitle: Record<RampStep, string> = {\n input: direction === 'onramp' ? 'Buy crypto' : 'Sell crypto',\n loading_quote: 'Finding best route',\n select_route: 'Select provider',\n contact: 'Your details',\n status: direction === 'onramp' ? 'Complete your deposit' : 'Complete your withdrawal',\n error: 'Something went wrong',\n };\n\n const stepSubtitle: Record<RampStep, string> = {\n input: direction === 'onramp' ? 'Enter the amount you want to deposit' : 'Enter the amount you want to withdraw',\n loading_quote: 'Comparing providers in real time…',\n select_route: 'All prices include fees',\n // What this step actually asks for is whatever the route declared, and that\n // is rarely a name and an email: an Abroad off-ramp asks where to send the\n // money, not who you are. Say which, rather than asserting the Bridge case\n // over every provider.\n contact: `${provider || 'This provider'} needs ${listOf(requiredFields.filter((f) => !f.optional).map((f) => f.label.toLowerCase()))} to continue`,\n status: `Finish the flow at ${provider || 'the provider'} to continue`,\n error: 'Please try again',\n };\n\n return (\n <div className=\"pollar-modal-card pollar-ramp-modal\" style={cssVars} onClick={(e) => e.stopPropagation()}>\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-ramp-header-text\">\n <h2 className=\"pollar-modal-title\">{stepTitle[step]}</h2>\n <p className=\"pollar-ramp-subtitle\">{stepSubtitle[step]}</p>\n </div>\n <div className=\"pollar-modal-header-actions\">\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onRefresh} disabled={refreshing} aria-label=\"Refresh\">\n <svg\n className={refreshing ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* How far along the run is. The segment count comes from the route, not\n from a constant: a provider that collects no fields genuinely has one\n step fewer. Hidden on the error step, which is not part of the flow. */}\n {flowStepIndex >= 0 && flowSteps.length > 0 && (\n <div className=\"pollar-ramp-steps\">\n <span className=\"pollar-ramp-steps-label\">\n Step {flowStepIndex + 1} of {flowSteps.length}\n </span>\n <div\n className=\"pollar-ramp-steps-track\"\n role=\"progressbar\"\n aria-valuenow={flowStepIndex + 1}\n aria-valuemin={1}\n aria-valuemax={flowSteps.length}\n aria-label={flowSteps[flowStepIndex]}\n >\n {flowSteps.map((label, i) => (\n <span key={label} className=\"pollar-ramp-steps-segment\" data-done={i <= flowStepIndex || undefined} />\n ))}\n </div>\n </div>\n )}\n\n {step === 'input' && (\n <>\n <div className=\"pollar-tabs\">\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={direction === 'onramp'}\n onClick={() => onDirectionChange('onramp')}\n >\n Buy\n </button>\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={direction === 'offramp'}\n onClick={() => onDirectionChange('offramp')}\n >\n Sell\n </button>\n </div>\n\n <div className=\"pollar-ramp-field\">\n <label className=\"pollar-ramp-label\">Country</label>\n {countriesLoading ? (\n <div className=\"pollar-ramp-input pollar-select-loading\">\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n <span>Loading countries…</span>\n </div>\n ) : countries.length === 0 ? (\n <div className=\"pollar-modal-error\">No ramp providers available on this network yet.</div>\n ) : (\n <select className=\"pollar-ramp-input\" value={country} onChange={(e) => onCountryChange(e.target.value)}>\n {countries.map((c) => (\n <option key={c.code} value={c.code}>\n {flagEmoji(c.code)} {c.code}\n {c.currency ? ` — ${c.currency}` : ''}\n </option>\n ))}\n </select>\n )}\n </div>\n\n <div className=\"pollar-ramp-field\">\n <label className=\"pollar-ramp-label\">Amount{currency ? ` (${currency})` : ''}</label>\n <input\n type=\"number\"\n className=\"pollar-ramp-input\"\n placeholder=\"0.00\"\n value={amount}\n min=\"0\"\n onChange={(e) => onAmountChange(e.target.value)}\n />\n {/* Why the user was sent back here (e.g. the route's minimum), kept\n under the field they came to fix. Clears as soon as they type. */}\n {errorMsg && <span className=\"pollar-ramp-field-error\">{errorMsg}</span>}\n </div>\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n disabled={!amount || isLoading || countriesLoading || countries.length === 0}\n onClick={onFindRoute}\n >\n Find best route\n </button>\n </div>\n </>\n )}\n\n {step === 'loading_quote' && (\n <div className=\"pollar-ramp-loading\">\n <div className=\"pollar-spinner pollar-ramp-loading-spinner\" />\n {LOADING_STEPS.map((text, i) => (\n <div key={i} className=\"pollar-ramp-loading-row\">\n <div className=\"pollar-ramp-loading-dot\" />\n <span>{text}</span>\n </div>\n ))}\n </div>\n )}\n\n {step === 'select_route' && (\n <>\n {noticeMsg && <p className=\"pollar-ramp-payment-note\">{noticeMsg}</p>}\n <div className=\"pollar-ramp-route-list\">\n {quotes.map((q, i) => (\n <RouteDisplay\n key={i}\n quote={q}\n busy={startingQuoteId != null && q.quoteId === startingQuoteId}\n disabled={startingQuoteId != null && q.quoteId !== startingQuoteId}\n onSelect={onSelectQuote}\n />\n ))}\n {kycRequired.map((r) => (\n <LockedRouteDisplay\n key={`${r.rampProviderId}:${r.corridorId}`}\n requirement={r}\n disabled={startingQuoteId != null}\n onVerify={onVerifyRoute}\n />\n ))}\n </div>\n {/* A route whose limits the amount breaks reports it here, so the user\n can pick another route or go back and edit - without leaving the\n list for the error step. */}\n {errorMsg && (\n <p className=\"pollar-ramp-payment-note\" style={{ color: 'var(--pollar-error-text)' }}>\n {errorMsg}\n </p>\n )}\n {/* Back returns to the amount, which is the only way out of a route\n whose minimum the amount misses - so it takes the primary weight\n while that message is up. The header's X still closes the modal. */}\n <button type=\"button\" className={errorMsg ? 'pollar-btn-primary' : 'pollar-btn-secondary'} onClick={onBack}>\n Back\n </button>\n </>\n )}\n\n {step === 'contact' && (\n <>\n {requiredFields.map((f) => (\n <div key={f.key} className=\"pollar-ramp-field\">\n <label className=\"pollar-ramp-label\">\n {f.label}\n {f.optional && <span className=\"pollar-ramp-field-optional\"> (optional)</span>}\n </label>\n {f.type === 'select' ? (\n <select\n className=\"pollar-ramp-input\"\n value={fieldValues[f.key] ?? ''}\n onChange={(e) => onFieldChange(f.key, e.target.value)}\n >\n <option value=\"\" disabled>\n Select…\n </option>\n {(f.options ?? []).map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n type={f.type}\n className=\"pollar-ramp-input\"\n value={fieldValues[f.key] ?? ''}\n placeholder={placeholderFor(f, requiredFields, fieldValues)}\n autoComplete={f.type === 'email' ? 'email' : 'off'}\n onChange={(e) => onFieldChange(f.key, e.target.value)}\n />\n )}\n {f.hint && <span className=\"pollar-ramp-field-hint\">{f.hint}</span>}\n {f.type === 'email' && (fieldValues[f.key] ?? '').trim() !== '' && !isFieldValid(f, fieldValues[f.key]) && (\n <span className=\"pollar-ramp-field-error\">Enter a valid email address.</span>\n )}\n </div>\n ))}\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onBack}>\n Back\n </button>\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n disabled={requiredFields.some((f) => !isFieldValid(f, fieldValues[f.key])) || isLoading}\n onClick={onContactContinue}\n >\n {isLoading ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Starting…\n </>\n ) : (\n 'Continue'\n )}\n </button>\n </div>\n </>\n )}\n\n {step === 'status' && (\n <div className=\"pollar-ramp-payment\">\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Provider</span>\n <div className=\"pollar-ramp-payment-value\">\n <code>{provider}</code>\n </div>\n </div>\n\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Status</span>\n <div className=\"pollar-ramp-payment-value\">\n <code style={{ color: txStatus === 'completed' ? 'var(--pollar-success-text)' : undefined }}>\n {txStatus ? STATUS_LABEL[txStatus] : 'Processing'}\n </code>\n {txStatus !== 'completed' && txStatus !== 'failed' && (\n <span className=\"pollar-spinner pollar-spinner-sm\" aria-label=\"Checking status\" />\n )}\n </div>\n </div>\n\n {fundsInTransit && txStatus !== 'completed' && txStatus !== 'failed' && (\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Funds in transit</span>\n <p className=\"pollar-ramp-payment-note\">\n Your money is safe in your own wallet, waiting for the next step of the transfer.\n </p>\n {onRetryTransit && (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onRetryTransit} disabled={retrying}>\n {retrying ? 'Retrying...' : 'Retry now'}\n </button>\n )}\n </div>\n )}\n\n {settledHash && (\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">{chainName} tx</span>\n <div className=\"pollar-ramp-payment-value\" style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <code style={{ flex: 1, wordBreak: 'break-all' }}>\n {settledHash.slice(0, 8)}…{settledHash.slice(-8)}\n </code>\n <CopyButton value={settledHash} label=\"Copy transaction hash\" />\n {explorerUrl && (\n <a\n href={explorerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"pollar-copy-btn\"\n aria-label={`View on ${EXPLORER_NAME[txChain ?? 'STELLAR']}`}\n title={`View on ${EXPLORER_NAME[txChain ?? 'STELLAR']}`}\n >\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path\n d=\"M6 3H3v8h8V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.5 2.5h3v3M11 3L6.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </a>\n )}\n </div>\n </div>\n )}\n\n {/* The code to scan. The server sends it rendered, so there is no QR\n library here and no per-provider branch: a Pollar-made SVG is\n inlined (it uses `currentColor`, so it follows the modal's theme),\n and a provider's own bitmap goes through an <img>. */}\n {depositInstructions?.scannable && txStatus !== 'completed' && (\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">Payment QR</span>\n <div className=\"pollar-ramp-payment-value\">\n {depositInstructions.scannable.image.inlineSafe ? (\n <div\n className=\"pollar-ramp-qr\"\n aria-label=\"Payment QR\"\n dangerouslySetInnerHTML={{ __html: depositInstructions.scannable.image.data }}\n />\n ) : (\n <img\n src={scannableImageSrc(depositInstructions.scannable.image)}\n alt=\"Payment QR\"\n style={{ width: '100%', maxWidth: 220, height: 'auto', display: 'block', margin: '0 auto' }}\n />\n )}\n </div>\n </div>\n )}\n\n {/* The payload as text, when it is worth pasting. On the phone holding\n the screen there is nothing to scan, and a Pix code is designed to\n be pasted. The server decides by setting `payloadLabel`. */}\n {depositInstructions?.scannable?.payload &&\n depositInstructions.scannable.payloadLabel &&\n txStatus !== 'completed' && (\n <div className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">{depositInstructions.scannable.payloadLabel}</span>\n <div className=\"pollar-ramp-payment-value\">\n <span style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <code style={{ flex: 1, wordBreak: 'break-all' }}>{depositInstructions.scannable.payload}</code>\n <CopyButton\n value={depositInstructions.scannable.payload}\n label={`Copy ${depositInstructions.scannable.payloadLabel}`}\n />\n </span>\n </div>\n </div>\n )}\n\n {/* Everything else. Labelled and formatted server-side, so this only\n iterates - it knows nothing about which provider served the route. */}\n {depositInstructions &&\n txStatus !== 'completed' &&\n depositInstructions.fields.map((f) => (\n <div key={f.key} className=\"pollar-ramp-payment-field\">\n <span className=\"pollar-ramp-payment-label\">{f.label}</span>\n <div className=\"pollar-ramp-payment-value\">\n {f.copyable ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <code style={{ flex: 1, wordBreak: 'break-all' }}>{f.value}</code>\n <CopyButton value={f.value} label={`Copy ${f.label}`} />\n </span>\n ) : f.type === 'url' ? (\n <a href={f.value} target=\"_blank\" rel=\"noopener noreferrer\">\n {f.value}\n </a>\n ) : (\n <span>{displayValue(f)}</span>\n )}\n </div>\n </div>\n ))}\n\n {/* KYC / ToS onboarding steps at the provider. Hidden once deposit\n instructions exist - by then onboarding is done and the only\n remaining action is to pay using the instructions above. */}\n {tosUrl && !depositInstructions && txStatus !== 'completed' && (\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onOpenTos}>\n Accept terms at {provider}\n </button>\n )}\n\n {kycUrl && !depositInstructions && txStatus !== 'completed' && (\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onOpenKyc}>\n Continue at {provider}\n </button>\n )}\n\n {/* Link-less gate: there is nowhere to send the user, so say what is\n blocking and keep the withdraw button out of reach. No funds have\n moved and nothing was signed.\n\n Two different situations reach this, and telling the user the wrong\n one is worse than saying nothing: `awaiting_provider` means their\n verification is already done and the provider is finishing its own\n setup, so asking them to \"complete verification\" sends them back\n through a flow that cannot change anything. */}\n {kycBlocking && onboardingStatus === 'awaiting_provider' && (\n <p className=\"pollar-ramp-payment-note\">\n {provider} is still setting up your account for this payment method. Your verification is complete and there is\n nothing left for you to do — nothing has been sent, and this will update on its own once {provider} is ready.\n </p>\n )}\n\n {kycBlocking && onboardingStatus !== 'awaiting_provider' && (\n <p className=\"pollar-ramp-payment-note\">\n {provider} needs to verify your identity before this payout. Nothing has been sent yet — complete verification\n with {provider}, and this will update on its own.\n </p>\n )}\n\n {/* Approval unblocks the next quote, not this one: the provider consumed\n this transaction's quote when it asked for KYC. So the withdraw stays\n out of reach and the only way forward is a fresh quote. */}\n {kycJustApproved && (\n <>\n <p className=\"pollar-ramp-payment-note\">\n {provider} approved your verification. Request a new quote to continue — the previous one was consumed.\n </p>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onRetry}>\n Request a new quote\n </button>\n </>\n )}\n\n {canComplete && (\n <button type=\"button\" className=\"pollar-btn-primary\" disabled={completing} onClick={onCompleteWithdraw}>\n {completing ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n Submitting…\n </>\n ) : (\n \"I've completed KYC — withdraw\"\n )}\n </button>\n )}\n\n {errorMsg && (\n <p className=\"pollar-ramp-payment-note\" style={{ color: 'var(--pollar-error-text)' }}>\n {errorMsg}\n </p>\n )}\n\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n {txStatus === 'completed' ? 'Done' : 'Close'}\n </button>\n </div>\n )}\n\n {step === 'error' && (\n <div className=\"pollar-ramp-payment\">\n <p className=\"pollar-ramp-payment-note\" style={{ color: 'var(--pollar-error-text)' }}>\n {errorMsg ?? 'Unexpected error.'}\n </p>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n Close\n </button>\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onRetry}>\n Try again\n </button>\n </div>\n </div>\n )}\n <PollarModalFooter />\n </div>\n );\n}\n","import type { FormLanguage } from '../requirement-form-modal/form-fields';\n\ntype RegistryCopy = Record<\n | 'title'\n | 'intro'\n | 'givenNames'\n | 'surname1'\n | 'surname2'\n | 'birthdate'\n | 'documentNumber'\n | 'complement'\n | 'submit'\n | 'submitting'\n | 'close'\n | 'approved'\n | 'review'\n | 'notApplicable'\n | 'identityRequired'\n | 'nameMismatch'\n | 'rejected'\n | 'loadError'\n | 'submitError'\n | 'step',\n string\n>;\n\nexport const REGISTRY_COPY: Record<FormLanguage, RegistryCopy> = {\n en: {\n title: 'Confirm your details',\n intro:\n \"We check these details with SEGIP, Bolivia's civil registry. They come from your verified document: you can only adjust how your surnames are split and your ID complement.\",\n givenNames: 'Names',\n surname1: 'First surname',\n surname2: 'Second surname',\n birthdate: 'Date of birth',\n documentNumber: 'ID number',\n complement: 'Complement (if your ID has one)',\n submit: 'Confirm',\n submitting: 'Checking…',\n close: 'Close',\n approved: 'Your details were confirmed.',\n review: 'Your details are being reviewed. You can continue once they are confirmed.',\n notApplicable:\n 'This check is only for Bolivian ID cards (CI). Your verified document is not one, so this route is not available.',\n identityRequired: 'Verify your identity first.',\n nameMismatch: 'Both surnames together must read as on your document: {full}.',\n rejected: 'The registry did not confirm: {fields}. Check how they are written and try again.',\n loadError: 'Could not load your details. Please try again.',\n submitError: 'Could not check your details. Please try again.',\n step: 'Step {n} of {total}',\n },\n es: {\n title: 'Confirma tus datos',\n intro:\n 'Validamos estos datos con el SEGIP, el registro civil de Bolivia. Vienen de tu documento verificado: solo puedes ajustar cómo se separan tus apellidos y el complemento de tu CI.',\n givenNames: 'Nombres',\n surname1: 'Primer apellido',\n surname2: 'Segundo apellido',\n birthdate: 'Fecha de nacimiento',\n documentNumber: 'Número de CI',\n complement: 'Complemento (si tu CI lo tiene)',\n submit: 'Confirmar',\n submitting: 'Validando…',\n close: 'Cerrar',\n approved: 'Tus datos fueron confirmados.',\n review: 'Tus datos están en revisión. Podrás continuar cuando se confirmen.',\n notApplicable:\n 'Esta validación es solo para cédulas bolivianas (CI). Tu documento verificado no lo es, así que esta ruta no está disponible.',\n identityRequired: 'Primero verifica tu identidad.',\n nameMismatch: 'Los dos apellidos juntos deben leerse como en tu documento: {full}.',\n rejected: 'El registro no confirmó: {fields}. Revisa cómo están escritos e intenta de nuevo.',\n loadError: 'No se pudieron cargar tus datos. Intenta de nuevo.',\n submitError: 'No se pudieron validar tus datos. Intenta de nuevo.',\n step: 'Paso {n} de {total}',\n },\n};\n\ntype RegistrationCopy = Record<\n | 'title'\n | 'intro'\n | 'consent'\n | 'submit'\n | 'submitting'\n | 'close'\n | 'notReady'\n | 'missing'\n | 'invalid'\n | 'fix'\n | 'incomplete'\n | 'providerDown'\n | 'ipNotSupported'\n | 'emailTaken'\n | 'loadError'\n | 'submitError'\n | 'step'\n | 'terms',\n string\n>;\n\nexport const REGISTRATION_COPY: Record<FormLanguage, RegistrationCopy> = {\n en: {\n title: 'Register with the payment provider',\n intro: 'To use this route, the provider registers you as its customer. These details will be sent to it:',\n consent: 'I agree to share these details with the provider.',\n submit: 'Register',\n submitting: 'Registering…',\n close: 'Close',\n notReady: 'Complete the previous steps first.',\n missing: 'Some details are missing: {fields}.',\n invalid: 'Some details need to be corrected: {fields}.',\n fix: 'Review my details',\n incomplete: 'Your registration with the provider did not finish. Register again to complete it.',\n providerDown: 'The provider is not responding right now. Please try again in a few minutes.',\n ipNotSupported:\n 'The provider cannot accept your current connection (IPv6). Please try again from another network, for example Wi-Fi.',\n emailTaken:\n 'This email is already registered with the provider through another app. Use a different email to register here.',\n loadError: 'Could not load the registration. Please try again.',\n submitError: 'Could not register you. Please try again.',\n step: 'Step {n} of {total}',\n terms: \"Read the provider's terms of service\",\n },\n es: {\n title: 'Registro con el proveedor de pagos',\n intro: 'Para usar esta ruta, el proveedor te registra como su cliente. Se le enviarán estos datos:',\n consent: 'Acepto compartir estos datos con el proveedor.',\n submit: 'Registrarme',\n submitting: 'Registrando…',\n close: 'Cerrar',\n notReady: 'Primero completa los pasos anteriores.',\n missing: 'Faltan algunos datos: {fields}.',\n invalid: 'Hay datos que corregir: {fields}.',\n fix: 'Revisar mis datos',\n incomplete: 'Tu registro con el proveedor no se completó. Regístrate de nuevo para terminarlo.',\n providerDown: 'El proveedor no responde en este momento. Intenta de nuevo en unos minutos.',\n ipNotSupported: 'El proveedor no acepta tu conexión actual (IPv6). Intenta desde otra red, por ejemplo Wi-Fi.',\n emailTaken: 'Este email ya está registrado con el proveedor desde otra app. Usa otro email para registrarte aquí.',\n loadError: 'No se pudo cargar el registro. Intenta de nuevo.',\n submitError: 'No se pudo completar el registro. Intenta de nuevo.',\n step: 'Paso {n} de {total}',\n terms: 'Leer los términos de servicio del proveedor',\n },\n};\n\n/** The fields a registration shares, by the key the server lists them with. */\nexport const SHARED_FIELD_LABELS: Record<FormLanguage, Record<string, string>> = {\n en: {\n name: 'Names',\n lastname: 'Surnames',\n document_type: 'Document type',\n document_number: 'Document number',\n country: 'Country',\n state_of_residence: 'Department of residence',\n economic_activity: 'Economic activity',\n source_of_funds: 'Source of funds',\n destination_of_funds: 'Use of funds',\n income_level: 'Income level',\n doc_provider_id: 'SEGIP validation',\n first_name: 'First name',\n last_name: 'Last name',\n email: 'Email',\n birth_date: 'Date of birth',\n document_country: 'Document country',\n phone_country_code: 'Phone country code',\n phone_number: 'Phone number',\n occupation: 'Occupation',\n annual_salary: 'Annual income',\n account_purpose: 'Purpose of the card',\n expected_monthly_volume: 'Expected monthly spend',\n address_line1: 'Street address',\n address_line2: 'Address line 2',\n city: 'City',\n region: 'State or province',\n postal_code: 'Postal code',\n country_code: 'Country of residence',\n },\n es: {\n name: 'Nombres',\n lastname: 'Apellidos',\n document_type: 'Tipo de documento',\n document_number: 'Número de documento',\n country: 'País',\n state_of_residence: 'Departamento de residencia',\n economic_activity: 'Actividad económica',\n source_of_funds: 'Origen de los fondos',\n destination_of_funds: 'Destino de los fondos',\n income_level: 'Nivel de ingresos',\n doc_provider_id: 'Validación SEGIP',\n first_name: 'Nombres',\n last_name: 'Apellidos',\n email: 'Correo electrónico',\n birth_date: 'Fecha de nacimiento',\n document_country: 'País del documento',\n phone_country_code: 'Código de país del teléfono',\n phone_number: 'Teléfono',\n occupation: 'Ocupación',\n annual_salary: 'Ingreso anual',\n account_purpose: 'Uso de la tarjeta',\n expected_monthly_volume: 'Gasto mensual esperado',\n address_line1: 'Dirección',\n address_line2: 'Dirección (línea 2)',\n city: 'Ciudad',\n region: 'Estado o provincia',\n postal_code: 'Código postal',\n country_code: 'País de residencia',\n },\n};\n\nexport const errorCode = (error: unknown) =>\n error && typeof error === 'object' && typeof (error as { code?: unknown }).code === 'string'\n ? (error as { code: string }).code\n : null;\n\n/** `body.missing` of a KYC_REGISTRATION_MISSING_DATA error. */\nexport function missingFieldsOf(error: unknown): string[] {\n const body = error && typeof error === 'object' ? (error as { body?: { missing?: unknown } }).body : undefined;\n return Array.isArray(body?.missing) ? body.missing.filter((item): item is string => typeof item === 'string') : [];\n}\n\n/**\n * `body.invalid` and `body.forms` of a KYC_REGISTRATION_MISSING_DATA error: the\n * listed keys that have an answer the provider cannot use, and the forms that hold\n * the listed keys, to reopen.\n */\nexport function registrationFixOf(error: unknown): { invalid: string[]; forms: { formId: string; keys: string[] }[] } {\n const body =\n error && typeof error === 'object' ? (error as { body?: { invalid?: unknown; forms?: unknown } }).body : undefined;\n const strings = (value: unknown) =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n const forms = Array.isArray(body?.forms)\n ? body.forms.flatMap((item): { formId: string; keys: string[] }[] => {\n const form = item && typeof item === 'object' ? (item as { formId?: unknown; keys?: unknown }) : {};\n return typeof form.formId === 'string' ? [{ formId: form.formId, keys: strings(form.keys) }] : [];\n })\n : [];\n return { invalid: strings(body?.invalid), forms };\n}\n","'use client';\n\nimport type { RegistryCheck, RegistryCheckPrefill } from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { formLanguage } from '../requirement-form-modal/form-fields';\nimport { errorCode, REGISTRY_COPY } from './registry-copy';\nimport '../shared.css';\nimport '../requirement-form-modal/RequirementFormModal.css';\n\ninterface RegistryCheckModalProps {\n optionId: string;\n /** Position of this step over the route's steps, when known. */\n progress?: { position: number; total: number };\n onClose: () => void;\n /** Called once the registry confirmed the data. */\n onApproved: () => void;\n}\n\n/**\n * One REGISTRY_CHECK step (SEGIP): the user's verified data, prefilled and read-only\n * except for the surname split and the CI complement, sent to the registry on confirm.\n */\nexport function RegistryCheckModal({ optionId, progress, onClose, onApproved }: RegistryCheckModalProps) {\n const { getClient, styles } = usePollar();\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n const language = useMemo(formLanguage, []);\n const copy = REGISTRY_COPY[language];\n\n const [check, setCheck] = useState<RegistryCheck | null>(null);\n const [surname1, setSurname1] = useState('');\n const [surname2, setSurname2] = useState('');\n const [complement, setComplement] = useState('');\n const [error, setError] = useState<string | null>(null);\n /** Fields the registry did not confirm on the last check, outlined until the next try. */\n const [rejected, setRejected] = useState<string[]>([]);\n const [review, setReview] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n client\n .getRegistryCheck(optionId)\n .then((loaded) => {\n if (!mounted.current) return;\n if (loaded.status === 'approved') return onApproved();\n setCheck(loaded);\n if (loaded.status === 'pending') setReview(true);\n // A check the registry did not confirm on the surnames or the complement: say which, keep the form open.\n if (loaded.status === 'rejected') showRejected(loaded.rejectedFields);\n if (loaded.prefill.applies) {\n setSurname1(loaded.prefill.surname1);\n setSurname2(loaded.prefill.surname2 ?? '');\n setComplement(loaded.prefill.complementNumber ?? '');\n }\n })\n .catch((e: unknown) => {\n if (!mounted.current) return;\n setError(errorCode(e) === 'KYC_REGISTRY_IDENTITY_REQUIRED' ? copy.identityRequired : copy.loadError);\n });\n // The client instance and the copy do not change while the modal is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [optionId]);\n\n const prefill: RegistryCheckPrefill | null = check?.prefill.applies ? check.prefill : null;\n\n /** Say which fields the registry did not confirm and outline them; the form stays open. */\n function showRejected(fields: string[] | undefined) {\n const labels: Record<string, string> = {\n surname1: copy.surname1,\n surname2: copy.surname2,\n complementNumber: copy.complement,\n };\n const named = fields?.length ? fields : ['surname2'];\n setRejected(named);\n setError(copy.rejected.replace('{fields}', named.map((field) => labels[field] ?? field).join(', ')));\n }\n\n async function submit() {\n if (!prefill) return;\n setSubmitting(true);\n setError(null);\n setRejected([]);\n try {\n const result = await client.submitRegistryCheck(optionId, {\n surname1: surname1.trim(),\n ...(surname2.trim() ? { surname2: surname2.trim() } : {}),\n ...(complement.trim() ? { complementNumber: complement.trim() } : {}),\n });\n if (!mounted.current) return;\n if (result.status === 'approved') onApproved();\n else if (result.status === 'rejected') showRejected(result.rejectedFields);\n else setReview(true);\n } catch (e) {\n if (!mounted.current) return;\n const code = errorCode(e);\n // A check recorded while this screen was open (a slow answer the client gave up on) is the approval.\n if (code === 'SDK_KYC_ALREADY_APPROVED') return onApproved();\n if (code === 'KYC_REGISTRY_NAME_MISMATCH') {\n setError(copy.nameMismatch.replace('{full}', [prefill.surname1, prefill.surname2].filter(Boolean).join(' ')));\n } else if (code === 'SDK_KYC_UNDER_REVIEW') setReview(true);\n else setError(copy.submitError);\n } finally {\n if (mounted.current) setSubmitting(false);\n }\n }\n\n const readOnly = (label: string, value: string) => (\n <div className=\"pollar-form-field\">\n <span className=\"pollar-form-label\">{label}</span>\n <input className=\"pollar-input\" value={value} readOnly disabled />\n </div>\n );\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-form-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={copy.title}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-form-header-text\">\n <h2 className=\"pollar-modal-title\">{copy.title}</h2>\n {progress && (\n <p className=\"pollar-form-subtitle\">\n {copy.step.replace('{n}', String(progress.position)).replace('{total}', String(progress.total))}\n </p>\n )}\n </div>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label={copy.close}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {error && (\n <p className=\"pollar-form-error\" role=\"alert\">\n {error}\n </p>\n )}\n\n {!check && !error && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n </div>\n )}\n\n {check && (review || !prefill) && (\n <div className=\"pollar-form-body\">\n <p className=\"pollar-form-error\" role=\"status\">\n {review ? copy.review : copy.notApplicable}\n </p>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose}>\n {copy.close}\n </button>\n </div>\n </div>\n )}\n\n {prefill && !review && (\n <form\n className=\"pollar-form-body\"\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n >\n <p className=\"pollar-form-description\">{copy.intro}</p>\n {readOnly(copy.givenNames, prefill.givenNames)}\n <div className=\"pollar-form-field\">\n <label htmlFor=\"pollar-registry-surname1\" className=\"pollar-form-label\">\n {copy.surname1}\n <span className=\"pollar-form-required\"> *</span>\n </label>\n <input\n id=\"pollar-registry-surname1\"\n className=\"pollar-input\"\n value={surname1}\n required\n disabled={submitting}\n aria-invalid={rejected.includes('surname1') || undefined}\n onChange={(e) => setSurname1(e.target.value)}\n />\n </div>\n <div className=\"pollar-form-field\">\n <label htmlFor=\"pollar-registry-surname2\" className=\"pollar-form-label\">\n {copy.surname2}\n </label>\n <input\n id=\"pollar-registry-surname2\"\n className=\"pollar-input\"\n value={surname2}\n disabled={submitting}\n aria-invalid={rejected.includes('surname2') || undefined}\n onChange={(e) => setSurname2(e.target.value)}\n />\n </div>\n {readOnly(copy.birthdate, prefill.birthdate)}\n {readOnly(copy.documentNumber, prefill.documentNumber)}\n <div className=\"pollar-form-field\">\n <label htmlFor=\"pollar-registry-complement\" className=\"pollar-form-label\">\n {copy.complement}\n </label>\n <input\n id=\"pollar-registry-complement\"\n className=\"pollar-input\"\n value={complement}\n maxLength={3}\n disabled={submitting}\n aria-invalid={rejected.includes('complementNumber') || undefined}\n onChange={(e) => setComplement(e.target.value.toUpperCase().replace(/[^0-9A-Z]/g, ''))}\n />\n </div>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose} disabled={submitting}>\n {copy.close}\n </button>\n <button type=\"submit\" className=\"pollar-btn-primary\" disabled={submitting || !surname1.trim()}>\n {submitting ? copy.submitting : copy.submit}\n </button>\n </div>\n </form>\n )}\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { ProviderRegistration } from '@pollar/core';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { formLanguage } from '../requirement-form-modal/form-fields';\nimport {\n errorCode,\n missingFieldsOf,\n REGISTRATION_COPY,\n registrationFixOf,\n SHARED_FIELD_LABELS,\n} from '../registry-check-modal/registry-copy';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport '../shared.css';\nimport '../requirement-form-modal/RequirementFormModal.css';\n\ninterface ProviderRegistrationModalProps {\n /** The route whose ramp the user registers with. */\n corridorId?: string;\n /** Or the card provider. One of the two. */\n cardProviderId?: string;\n /** Position of this step over the route's steps, when known. */\n progress?: { position: number; total: number };\n onClose: () => void;\n /** Called once the user is registered with the provider. */\n onRegistered: () => void;\n}\n\n/**\n * One PROVIDER_REGISTRATION step: what the ramp provider receives, listed before the\n * user consents. Registering is the consent; nothing is sent until then.\n */\nexport function ProviderRegistrationModal({\n corridorId,\n cardProviderId,\n progress,\n onClose,\n onRegistered,\n}: ProviderRegistrationModalProps) {\n const { getClient, styles } = usePollar();\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides, 'hero');\n const language = useMemo(formLanguage, []);\n const copy = REGISTRATION_COPY[language];\n const labels = SHARED_FIELD_LABELS[language];\n\n const [registration, setRegistration] = useState<\n (Pick<ProviderRegistration, 'ready' | 'fields'> & { status: ProviderRegistration['status'] | 'incomplete' }) | null\n >(null);\n const [termsUrl, setTermsUrl] = useState<string | null>(null);\n const [consent, setConsent] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n // The form holding answers the registration could not use: reopened to fix them, then the registration is sent again.\n const [fixForm, setFixForm] = useState<string | null>(null);\n const [fixing, setFixing] = useState<string | null>(null);\n const mounted = useRef(true);\n useEffect(() => {\n // Set on every mount: development mounts components twice, and the cleanup of the\n // first mount would otherwise leave this false and drop every response.\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n const load = cardProviderId\n ? client.getCardProviderRegistration(cardProviderId).then((loaded) => {\n setTermsUrl(loaded.termsUrl);\n return loaded;\n })\n : client.getProviderRegistration(corridorId ?? '');\n load\n .then((loaded) => {\n if (!mounted.current) return;\n if (loaded.status === 'registered') onRegistered();\n else setRegistration(loaded);\n })\n .catch(() => mounted.current && setError(copy.loadError));\n // The client instance, the copy and the callback do not change while the modal is open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [corridorId, cardProviderId]);\n\n async function submit() {\n setSubmitting(true);\n setError(null);\n setFixForm(null);\n try {\n if (cardProviderId) await client.submitCardProviderRegistration(cardProviderId);\n else await client.submitProviderRegistration(corridorId ?? '');\n if (mounted.current) onRegistered();\n } catch (e) {\n if (!mounted.current) return;\n const code = errorCode(e);\n if (code === 'KYC_REGISTRATION_MISSING_DATA') {\n const fix = registrationFixOf(e);\n const named = (keys: string[]) => keys.map((key) => labels[key] ?? key).join(', ');\n const missing = missingFieldsOf(e).filter((key) => !fix.invalid.includes(key));\n setError(\n [\n fix.invalid.length ? copy.invalid.replace('{fields}', named(fix.invalid)) : null,\n missing.length ? copy.missing.replace('{fields}', named(missing)) : null,\n ]\n .filter(Boolean)\n .join(' '),\n );\n setFixForm(fix.forms[0]?.formId ?? null);\n } else if (code === 'KYC_REGISTRATION_STEPS_PENDING') setError(copy.notReady);\n else if (code === 'SDK_CARDS_PROVIDER_ERROR') setError(copy.providerDown);\n else if (code === 'SDK_CARDS_IP_NOT_SUPPORTED') setError(copy.ipNotSupported);\n else if (code === 'SDK_CARDS_PROVIDER_USER_TAKEN') setError(copy.emailTaken);\n else setError(copy.submitError);\n } finally {\n if (mounted.current) setSubmitting(false);\n }\n }\n\n if (fixing) {\n return (\n <RequirementFormModal\n formId={fixing}\n onClose={() => setFixing(null)}\n onSubmitted={() => {\n setFixing(null);\n void submit();\n }}\n />\n );\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-form-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={copy.title}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-form-header-text\">\n <h2 className=\"pollar-modal-title\">{copy.title}</h2>\n {progress && (\n <p className=\"pollar-form-subtitle\">\n {copy.step.replace('{n}', String(progress.position)).replace('{total}', String(progress.total))}\n </p>\n )}\n </div>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label={copy.close}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {error && (\n <p className=\"pollar-form-error\" role=\"alert\">\n {error}\n </p>\n )}\n {fixForm && !submitting && (\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={() => setFixing(fixForm)}>\n {copy.fix}\n </button>\n </div>\n )}\n\n {!registration && !error && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n </div>\n )}\n\n {registration && (\n <form\n className=\"pollar-form-body\"\n onSubmit={(e) => {\n e.preventDefault();\n void submit();\n }}\n >\n {registration.ready ? (\n <>\n {registration.status === 'incomplete' && (\n <p className=\"pollar-form-error\" role=\"status\">\n {copy.incomplete}\n </p>\n )}\n <p className=\"pollar-form-description\">{copy.intro}</p>\n <ul className=\"pollar-form-description\">\n {registration.fields.map((key) => (\n <li key={key}>{labels[key] ?? key}</li>\n ))}\n </ul>\n {termsUrl && (\n <p className=\"pollar-form-description\">\n <a href={termsUrl} target=\"_blank\" rel=\"noreferrer\">\n {copy.terms}\n </a>\n </p>\n )}\n <label className=\"pollar-form-choice\">\n <input\n type=\"checkbox\"\n checked={consent}\n disabled={submitting}\n onChange={(e) => setConsent(e.target.checked)}\n />\n {copy.consent}\n </label>\n </>\n ) : (\n <p className=\"pollar-form-error\" role=\"status\">\n {copy.notReady}\n </p>\n )}\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={onClose} disabled={submitting}>\n {copy.close}\n </button>\n {registration.ready && (\n <button type=\"submit\" className=\"pollar-btn-primary\" disabled={submitting || !consent}>\n {submitting ? copy.submitting : copy.submit}\n </button>\n )}\n </div>\n </form>\n )}\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type {\n RampCountry,\n RampDepositInstructions,\n RampDirection,\n RampQuote,\n RampQuoteRequirement,\n RampsOfframpBody,\n RampsOnrampBody,\n RampsTransactionResponse,\n RampTxStatus,\n StellarNetwork,\n} from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport type { RampFieldSpec, RampStep } from './RampWidgetTemplate';\nimport { RampWidgetTemplate } from './RampWidgetTemplate';\nimport '../shared.css';\nimport './RampWidget.css';\nimport { modalChrome } from '../modal-theme';\nimport { KycModal } from '../kyc-modal/KycModal';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport { RegistryCheckModal } from '../registry-check-modal/RegistryCheckModal';\nimport { ProviderRegistrationModal } from '../provider-registration-modal/ProviderRegistrationModal';\nimport { pendingFromQuote, requiredRampKyc, type PendingRequirement } from './ramp-kyc';\n\ninterface RampWidgetProps {\n onClose: () => void;\n}\n\nconst TERMINAL: RampTxStatus[] = ['completed', 'failed'];\n\n/** Fields the quote declares the client must collect (empty for SEP-24). */\nfunction requiredFieldsOf(quote: RampQuote): RampFieldSpec[] {\n return (quote as { requiredFields?: RampFieldSpec[] }).requiredFields ?? [];\n}\n\n/**\n * The steps a run actually goes through. Not fixed: 'Details' only exists when\n * the chosen route asks for fields (Bridge wants a name and email; SEP-24\n * anchors collect everything on their own hosted page), so a progress bar that\n * always said \"of 4\" would lie to half the providers.\n *\n * Before a route is picked the total is a forecast: if any offered route would\n * ask for details, the step is shown, and choosing one settles it.\n */\nfunction flowStepsOf(quotes: RampQuote[], selected: RampQuote | null): string[] {\n const needsDetails =\n selected != null ? requiredFieldsOf(selected).length > 0 : quotes.some((q) => requiredFieldsOf(q).length > 0);\n return needsDetails ? ['Amount', 'Provider', 'Details', 'Complete'] : ['Amount', 'Provider', 'Complete'];\n}\n\n/** Which of those steps the current widget step sits on. `error` belongs to no\n * step - the flow stopped rather than advanced - so the bar hides there. */\nconst STEP_LABEL: Partial<Record<RampStep, string>> = {\n input: 'Amount',\n loading_quote: 'Amount',\n select_route: 'Provider',\n contact: 'Details',\n status: 'Complete',\n};\n\n/** A bound the amount broke, or null when it fits. Providers declare their\n * limits on the quote (`minAmount` / `maxAmount`); the ones that don't simply\n * never trip this, and the backend stays the last word either way. */\nfunction brokenLimitOf(amount: number, quote: RampQuote): { limit: 'min' | 'max'; value: number } | null {\n const { minAmount, maxAmount } = quote as { minAmount?: number; maxAmount?: number };\n if (!Number.isFinite(amount)) return null;\n if (minAmount != null && amount < minAmount) return { limit: 'min', value: minAmount };\n if (maxAmount != null && amount > maxAmount) return { limit: 'max', value: maxAmount };\n return null;\n}\n\n/** \"The minimum amount is 11 ARS\" - one phrasing, used both when we catch the\n * limit before submitting and when the backend is the one to report it. */\nfunction limitMessage(limit: 'min' | 'max', value: number, currency: string): string {\n return `The ${limit === 'min' ? 'minimum' : 'maximum'} amount for this route is ${value} ${currency}.`;\n}\n\n/** Ramp failures a user can act on. Anything unlisted keeps the raw code, which\n * is still the most useful thing to show for a cause we can't phrase. */\nconst RAMP_ERROR_MESSAGES: Record<string, string> = {\n SDK_RAMPS_QUOTE_EXPIRED: 'This quote expired. Request a new one and try again.',\n SDK_RAMPS_ASSET_NOT_ENABLED: 'This currency is not available for that route right now.',\n SDK_RAMPS_KYC_REQUIRED: 'The provider needs to verify your identity before continuing.',\n SDK_RAMPS_WALLET_UNSUPPORTED: 'This wallet type cannot be used for this ramp.',\n SDK_RAMPS_PROVIDER_NOT_CONFIGURED: 'This ramp provider is not configured for this app yet.',\n SDK_RAMPS_ANCHOR_ERROR: 'The provider rejected the request. Please try again in a moment.',\n SDK_RAMPS_BRIDGE_ERROR: 'The provider rejected the request. Please try again in a moment.',\n SDK_RAMPS_ETHERFUSE_ERROR: 'The provider rejected the request. Please try again in a moment.',\n SDK_RAMPS_INSUFFICIENT_BALANCE: 'This wallet does not hold enough to cover that amount. Try a smaller one.',\n // Nothing moved on-chain, so the balance is untouched. Almost always no XLM\n // for the network fee on a wallet the app does not sponsor.\n SDK_RAMPS_ONCHAIN_SUBMIT_FAILED:\n 'The network rejected the transaction, so nothing was sent. The wallet may need XLM for the fee.',\n};\n\n/**\n * Turn a thrown ramp error into something worth reading. An out-of-range amount\n * arrives with the bound as fields (`limit` / `limitAmount` / `limitCurrency`),\n * so the exact figure gets stated rather than the bare code the modal used to\n * show. Every provider that reports the range gets this for free.\n */\nfunction rampErrorMessage(e: unknown, fallback: string): string {\n const body = (e as { body?: Record<string, unknown> } | undefined)?.body;\n const code = (e as { code?: unknown } | undefined)?.code;\n if (typeof code !== 'string') return e instanceof Error ? e.message : fallback;\n\n const limit = body?.limit;\n const value = body?.limitAmount;\n const currency = body?.limitCurrency;\n if ((limit === 'min' || limit === 'max') && typeof value === 'number' && typeof currency === 'string') {\n return limitMessage(limit, value, currency);\n }\n return RAMP_ERROR_MESSAGES[code] ?? (e instanceof Error ? e.message : fallback);\n}\n\n// Common shape of the on/off-ramp, complete and signature responses.\ninterface RampResult {\n txId: string;\n provider: string;\n status: RampTxStatus;\n kycUrl?: string;\n // Bridge splits onboarding into two hosted steps: KYC (identity) and ToS\n // acceptance. Both must be completed before the customer activates.\n tosUrl?: string;\n // The provider gated the flow on identity verification and offers no hosted\n // URL (Abroad, and Bridge while it provisions). Nothing was built or signed.\n kycRequired?: boolean;\n // Which part of onboarding is outstanding. `awaiting_provider` means the user\n // has nothing left to do and the provider is working through its own steps -\n // there is no page to open and no status of theirs to poll.\n onboardingStatus?: 'kyc' | 'endorsement' | 'awaiting_provider';\n stellarTxHash?: string;\n /**\n * `cctp_approve` / `cctp_burn`: a Stereum off-ramp from a wallet the user\n * brought on Stellar signs the bridge itself, the approve and then the burn.\n */\n pendingSignature?: { unsignedXdr: string; action: 'sep10' | 'withdraw_payment' | 'cctp_approve' | 'cctp_burn' };\n // REST providers (Bridge) return deposit instructions as data (e.g. a Pix\n // `br_code` / bank details for on-ramp) instead of an interactive URL.\n depositInstructions?: RampDepositInstructions;\n}\n\ntype RampChain = NonNullable<RampsTransactionResponse['chain']>;\n\n/** The explorer transaction URL of a ramp's settlement, by its chain; testnet is Solana devnet and Polygon Amoy. */\nfunction explorerTxUrl(chain: RampChain, hash: string | null, network: StellarNetwork): string | null {\n if (!hash) return null;\n const testnet = network === 'testnet';\n if (chain === 'SOLANA') return `https://explorer.solana.com/tx/${hash}${testnet ? '?cluster=devnet' : ''}`;\n if (chain === 'POLYGON') return `https://${testnet ? 'amoy.' : ''}polygonscan.com/tx/${hash}`;\n return `https://stellar.expert/explorer/${testnet ? 'testnet' : 'public'}/tx/${hash}`;\n}\n\nexport function RampWidget({ onClose }: RampWidgetProps) {\n const { getClient, signTx, wallet, styles, network } = usePollar();\n const walletAddress = wallet?.address ?? '';\n const client = getClient();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<RampStep>('input');\n const [direction, setDirection] = useState<RampDirection>('onramp');\n const [amount, setAmount] = useState('');\n const [currency, setCurrency] = useState('');\n const [country, setCountry] = useState('');\n // Values for the fields a provider declares via the quote's `requiredFields`\n // (e.g. Bridge on-ramp: full name + email; off-ramp: + Pix key). Keyed by\n // field key; only collected when the selected route needs them.\n const [fieldValues, setFieldValues] = useState<Record<string, string>>({});\n const setFieldValue = (key: string, value: string) => setFieldValues((v) => ({ ...v, [key]: value }));\n const [countries, setCountries] = useState<RampCountry[]>([]);\n const [countriesLoading, setCountriesLoading] = useState(true);\n const [refreshing, setRefreshing] = useState(false);\n const [quotes, setQuotes] = useState<RampQuote[]>([]);\n const [requirementsRequired, setRequirementsRequired] = useState<RampQuoteRequirement[]>([]);\n const [selectedQuote, setSelectedQuote] = useState<RampQuote | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [pendingKyc, setPendingKyc] = useState<PendingRequirement | null>(null);\n const [noticeMsg, setNoticeMsg] = useState<string | null>(null);\n const kycAttempt = useRef<typeof pendingKyc>(null);\n useEffect(\n () => () => {\n kycAttempt.current = null;\n },\n [],\n );\n\n // status step\n const [txId, setTxId] = useState<string | null>(null);\n const [provider, setProvider] = useState('');\n const [kycUrl, setKycUrl] = useState<string | null>(null);\n const [tosUrl, setTosUrl] = useState<string | null>(null);\n // Link-less KYC gate (Abroad): `kycPending` is what the provider told us on\n // start; `kycApproved` is what polling has since learned.\n const [kycPending, setKycPending] = useState(false);\n const [kycApproved, setKycApproved] = useState(false);\n const [onboardingStatus, setOnboardingStatus] = useState<RampResult['onboardingStatus']>(undefined);\n const [txStatus, setTxStatus] = useState<RampTxStatus | null>(null);\n const [stellarTxHash, setStellarTxHash] = useState<string | null>(null);\n // The settlement on any chain; Stellar-only providers still answer `stellarTxHash` alone.\n const [txHash, setTxHash] = useState<string | null>(null);\n const [txChain, setTxChain] = useState<RampChain | null>(null);\n const [fundsInTransit, setFundsInTransit] = useState(false);\n const [retrying, setRetrying] = useState(false);\n const [depositInstructions, setDepositInstructions] = useState<RampDepositInstructions | null>(null);\n const [completing, setCompleting] = useState(false);\n const [errorMsg, setErrorMsg] = useState<string | null>(null);\n\n // Set while the user's wallet is asked to sign, so the status poll does not ask twice.\n const signingRef = useRef(false);\n const directionRef = useRef(direction);\n directionRef.current = direction;\n\n function applySettlement(tx: RampsTransactionResponse) {\n if (tx.stellarTxHash) setStellarTxHash(tx.stellarTxHash);\n if (tx.txHash) setTxHash(tx.txHash);\n if (tx.chain) setTxChain(tx.chain);\n setFundsInTransit(tx.fundsInTransit === true);\n }\n\n async function handleRetryTransit() {\n if (!txId || retrying) return;\n setRetrying(true);\n setErrorMsg(null);\n try {\n const tx = await client.retryRampTransaction(txId);\n setTxStatus(tx.status);\n applySettlement(tx);\n } catch (e) {\n setErrorMsg(e instanceof Error && e.message ? e.message : 'Could not retry the transfer. Try again in a moment.');\n } finally {\n setRetrying(false);\n }\n }\n\n // Poll the anchor transaction status while on the status step until terminal.\n useEffect(() => {\n if (step !== 'status' || !txId) return;\n if (txStatus && TERMINAL.includes(txStatus)) return;\n let active = true;\n const id = setInterval(async () => {\n try {\n const tx = await client.getRampTransaction(txId);\n if (!active) return;\n setTxStatus(tx.status);\n applySettlement(tx);\n // The order waits on the user's own wallet (a reload, or the burn the\n // server asks for once the approve landed): prompt it, one at a time.\n const pending = (tx as { pendingSignature?: RampResult['pendingSignature'] }).pendingSignature;\n if (pending && !signingRef.current) {\n signingRef.current = true;\n void resumeRef.current(txId, pending).finally(() => {\n signingRef.current = false;\n });\n }\n if (tx.kycUrl) setKycUrl(tx.kycUrl);\n // depositInstructions is returned by REST providers (Bridge) - e.g. a Pix\n // `br_code` / bank details for on-ramp.\n if (tx.depositInstructions) setDepositInstructions(tx.depositInstructions);\n if (TERMINAL.includes(tx.status)) clearInterval(id);\n } catch {\n /* transient - keep polling */\n }\n }, 5000);\n return () => {\n active = false;\n clearInterval(id);\n };\n }, [step, txId, txStatus, client]);\n\n // A link-less KYC gate has nothing to open, so poll the provider until the user\n // clears it elsewhere. Stops as soon as it's approved.\n //\n // Not for `awaiting_provider`: that gate is not the user's verification and\n // `getRampKycStatus` answers for a different provider entirely, so polling it\n // would ask the wrong question every ten seconds and never get an answer. The\n // transaction poll above is what surfaces movement there.\n useEffect(() => {\n if (step !== 'status' || !kycPending || kycApproved) return;\n if (onboardingStatus === 'awaiting_provider') return;\n let active = true;\n const check = async () => {\n try {\n const { hasApproved } = await client.getRampKycStatus();\n if (active && hasApproved) setKycApproved(true);\n } catch {\n /* transient - keep polling */\n }\n };\n void check();\n const id = setInterval(check, 10000);\n return () => {\n active = false;\n clearInterval(id);\n };\n }, [step, kycPending, kycApproved, onboardingStatus, client]);\n\n /**\n * Fetch the ramp countries supported on the app's network. When `resetSelection`\n * is set (initial load) - or the current selection is no longer offered - pick\n * the first country and adopt its primary currency.\n */\n async function loadCountries(resetSelection: boolean) {\n setCountriesLoading(true);\n try {\n const { countries: list } = await client.getRampCountries();\n setCountries(list);\n const first = list[0];\n const stillValid = list.some((c) => c.code === country);\n if (first && (resetSelection || !stillValid)) {\n setCountry(first.code);\n if (first.currency) setCurrency(first.currency);\n }\n } catch {\n setCountries([]);\n } finally {\n setCountriesLoading(false);\n }\n }\n\n // Load the supported countries when the widget opens.\n useEffect(() => {\n loadCountries(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function handleCountryChange(code: string) {\n setCountry(code);\n const match = countries.find((c) => c.code === code);\n if (match?.currency) setCurrency(match.currency);\n }\n\n // Refresh the data backing the current step: always the country list, plus the\n // quotes (select_route) or the anchor transaction (status).\n async function handleRefresh() {\n if (refreshing) return;\n setRefreshing(true);\n try {\n await loadCountries(false);\n if (step === 'select_route') {\n const result = await client.getRampsQuote({ country, amount: Number(amount), currency, direction });\n setQuotes(result.quotes ?? []);\n setRequirementsRequired(result.requirementsRequired ?? []);\n } else if (step === 'status' && txId) {\n const tx = await client.getRampTransaction(txId);\n setTxStatus(tx.status);\n applySettlement(tx);\n if (tx.kycUrl) setKycUrl(tx.kycUrl);\n if (tx.depositInstructions) setDepositInstructions(tx.depositInstructions);\n }\n } catch {\n /* transient - leave the current data in place */\n } finally {\n setRefreshing(false);\n }\n }\n\n /** Back to the amount step. `keepMessage` carries the reason forward: when the\n * user steps back because the amount missed a route's minimum, dropping the\n * figure would leave them correcting it blind. A plain retry clears it. */\n function resetToInput({ keepMessage = false }: { keepMessage?: boolean } = {}) {\n setStep('input');\n setQuotes([]);\n setRequirementsRequired([]);\n setSelectedQuote(null);\n // Clear the collected provider fields (name/email/etc.) so a retry re-shows\n // the 'contact' step. Otherwise a stale (possibly invalid) value keeps the\n // field non-empty, `handleSelectQuote` treats it as complete, skips the step\n // and replays the same failing request.\n setFieldValues({});\n setTxId(null);\n setProvider('');\n setKycUrl(null);\n setTosUrl(null);\n setTxStatus(null);\n setStellarTxHash(null);\n setTxHash(null);\n setTxChain(null);\n setFundsInTransit(false);\n setDepositInstructions(null);\n setKycPending(false);\n setKycApproved(false);\n setNoticeMsg(null);\n if (!keepMessage) setErrorMsg(null);\n }\n\n /**\n * EXTERNAL wallets (Freighter/Albedo): the backend returns an unsigned XDR the\n * user must sign locally, then we resume the flow. `sep10` yields the anchor\n * session (kycUrl); `withdraw_payment` broadcasts the on-chain withdrawal.\n */\n async function resumeWithSignature(id: string, ps: NonNullable<RampResult['pendingSignature']>) {\n const outcome = await signTx(ps.unsignedXdr);\n if (outcome.status === 'cosign_pending') {\n // A co-signed wallet answers with the request the user's device must\n // approve; the ramp resumes once the signed XDR comes back through it.\n setErrorMsg('Approve the signature on your device, then resume.');\n setStep('error');\n return;\n }\n if (outcome.status !== 'signed') {\n setErrorMsg(outcome.message ?? outcome.details ?? 'Signing was cancelled.');\n setStep('error');\n return;\n }\n const result = (await client.submitRampSignature(id, {\n signedXdr: outcome.signedXdr,\n // The CCTP actions are not in the generated schema until it is regenerated.\n action: ps.action as 'withdraw_payment',\n })) as RampResult;\n await applyResult(result);\n }\n // The status poll calls the latest one without restarting on every render.\n const resumeRef = useRef(resumeWithSignature);\n resumeRef.current = resumeWithSignature;\n\n async function applyResult(result: RampResult) {\n setTxId(result.txId);\n setProvider(result.provider);\n if (result.pendingSignature) {\n await resumeWithSignature(result.txId, result.pendingSignature);\n return;\n }\n setKycUrl(result.kycUrl ?? null);\n setTosUrl(result.tosUrl ?? null);\n setOnboardingStatus(result.onboardingStatus);\n setKycPending(result.kycRequired === true);\n if (result.kycRequired) setKycApproved(false);\n setTxStatus(result.status);\n setStellarTxHash(result.stellarTxHash ?? null);\n setDepositInstructions(result.depositInstructions ?? null);\n setStep('status');\n }\n\n /**\n * Quote the current input. A route held back by a requirement step still counts as an answer:\n * it is shown locked, so \"no providers\" only means nothing came back at all.\n */\n async function loadQuotes(): Promise<boolean> {\n const result = await client.getRampsQuote({ country, amount: Number(amount), currency, direction });\n const list = result.quotes ?? [];\n const locked = result.requirementsRequired ?? [];\n if (list.length === 0 && locked.length === 0) {\n // A provider that serves the route but is down is not \"no providers\".\n const down = (result.unavailable ?? []).map((u) => u.provider);\n setErrorMsg(\n down.length > 0\n ? `${down.join(', ')} ${down.length === 1 ? 'is' : 'are'} temporarily unavailable. Please try again later.`\n : `No ramp providers available for ${country} yet.`,\n );\n setStep('error');\n return false;\n }\n setQuotes(list);\n setRequirementsRequired(locked);\n return true;\n }\n\n async function handleFindRoute() {\n setStep('loading_quote');\n setIsLoading(true);\n setErrorMsg(null);\n try {\n if (!(await loadQuotes())) return;\n setStep('select_route');\n } catch (e) {\n setErrorMsg(rampErrorMessage(e, 'Failed to fetch quotes.'));\n setStep('error');\n } finally {\n setIsLoading(false);\n }\n }\n\n // Each quote declares the fields it needs (`requiredFields`). If any are unset,\n // collect them in the 'contact' step first; otherwise start immediately.\n function handleSelectQuote(quote: RampQuote) {\n setSelectedQuote(quote);\n setErrorMsg(null);\n setNoticeMsg(null);\n // The limits are per route, and the amount was typed before the routes were\n // known - so this is the first moment we can check it. Catching it here\n // states the figure without spending a round trip on a certain rejection.\n const broken = brokenLimitOf(Number(amount), quote);\n if (broken) {\n setErrorMsg(limitMessage(broken.limit, broken.value, currency));\n return;\n }\n const fields = requiredFieldsOf(quote);\n // An `optional` field left blank is not missing (Abroad's tax id) - it must\n // not drag the user into the details step on its own.\n const missing = fields.some((f) => !f.optional && !(fieldValues[f.key] ?? '').trim());\n if (fields.length > 0 && missing) {\n setStep('contact');\n return;\n }\n void startRamp(quote);\n }\n\n function handleContactContinue() {\n if (selectedQuote) void startRamp(selectedQuote);\n }\n\n async function startRamp(quote: RampQuote) {\n setIsLoading(true);\n setErrorMsg(null);\n try {\n const base: Record<string, unknown> = { quoteId: quote.quoteId, amount: Number(amount), currency, country };\n if (walletAddress) base.walletAddress = walletAddress;\n // Map each declared field to the request body: a field with `bankType`\n // becomes `bankDetails`; the standard body fields map by name; any other\n // provider-specific field (e.g. Stereum's bankCode / account holder) goes\n // into `fields`, which the backend reads per provider.\n const STANDARD_BODY_KEYS = new Set(['email', 'fullName', 'taxId', 'qrCode']);\n const extraFields: Record<string, string> = {};\n for (const f of requiredFieldsOf(quote)) {\n const val = (fieldValues[f.key] ?? '').trim();\n if (!val) continue;\n if (f.bankType) base.bankDetails = { type: f.bankType, value: val };\n else if (STANDARD_BODY_KEYS.has(f.key)) base[f.key] = val;\n else extraFields[f.key] = val;\n }\n if (Object.keys(extraFields).length > 0) base.fields = extraFields;\n const result = (\n direction === 'onramp'\n ? await client.createOnRamp(base as RampsOnrampBody)\n : await client.createOffRamp(base as RampsOfframpBody)\n ) as RampResult;\n await applyResult(result);\n } catch (e) {\n const requirement = requiredRampKyc(e);\n if (requirement) {\n setStep(requiredFieldsOf(quote).length ? 'contact' : 'select_route');\n setErrorMsg(\n requirement.type === 'KYC'\n ? 'Identity verification is required before continuing.'\n : 'A few more details are required before continuing.',\n );\n kycAttempt.current = requirement;\n setPendingKyc(requirement);\n return;\n }\n setErrorMsg(rampErrorMessage(e, 'Failed to start the ramp.'));\n setStep('error');\n } finally {\n setIsLoading(false);\n }\n }\n\n /**\n * Back to the route list with fresh prices for the same input. A verification\n * takes minutes and quotes live about as long, so the one that hit the gate is\n * usually expired by now; the user picks again rather than an order starting on\n * a price they did not see.\n */\n async function requoteAfterKyc(completed: PendingRequirement['type'] = 'KYC') {\n setStep('loading_quote');\n setIsLoading(true);\n setErrorMsg(null);\n setSelectedQuote(null);\n try {\n if (!(await loadQuotes())) return;\n setNoticeMsg(\n completed === 'KYC'\n ? 'Your identity is verified. Prices may have changed, so choose a route to continue.'\n : 'Thanks, your details are saved. Prices may have changed, so choose a route to continue.',\n );\n setStep('select_route');\n } catch (e) {\n setErrorMsg(rampErrorMessage(e, 'Failed to fetch quotes.'));\n setStep('error');\n } finally {\n setIsLoading(false);\n }\n }\n\n /** Open the step a locked route names (KYC, form, registry check or registration); completing it re-quotes like the start gate does. */\n function handleVerifyRoute(requirement: RampQuoteRequirement) {\n const attempt = pendingFromQuote(requirement);\n setErrorMsg(null);\n setNoticeMsg(null);\n kycAttempt.current = attempt;\n setPendingKyc(attempt);\n }\n\n function handleOpenKyc() {\n if (kycUrl) window.open(kycUrl, '_blank', 'noopener,noreferrer');\n }\n\n function handleOpenTos() {\n if (tosUrl) window.open(tosUrl, '_blank', 'noopener,noreferrer');\n }\n\n async function handleCompleteWithdraw() {\n if (!txId) return;\n setCompleting(true);\n setErrorMsg(null);\n try {\n const result = (await client.completeWithdraw(txId)) as RampResult;\n if (result.pendingSignature) {\n await resumeWithSignature(txId, result.pendingSignature);\n return;\n }\n setTxStatus(result.status);\n setStellarTxHash(result.stellarTxHash ?? null);\n } catch (e) {\n const msg = e instanceof Error ? e.message : '';\n setErrorMsg(\n msg.includes('KYC') ? 'Finish KYC at the provider first, then try again.' : msg || 'Failed to complete the withdrawal.',\n );\n } finally {\n setCompleting(false);\n }\n }\n\n // A link-less KYC gate blocks the withdraw for good: the provider consumed the\n // quote when it answered `kycRequired`, so completing would either fail or -\n // worse - move real funds into a deposit it cannot pay out. Approval clears the\n // gate for the NEXT quote, not for this transaction, so `kycPending` (not\n // `kycBlocking`) is what keeps the button away.\n const kycBlocking = kycPending && !kycApproved;\n const canComplete =\n direction === 'offramp' && step === 'status' && txStatus !== 'completed' && !stellarTxHash && !txHash && !kycPending;\n\n const flowSteps = flowStepsOf(quotes, selectedQuote);\n const flowStepIndex = flowSteps.indexOf(STEP_LABEL[step] ?? '');\n\n // Keep this widget's state while a step is open so cancelling preserves the form.\n if (pendingKyc?.type === 'FORM') {\n return (\n <RequirementFormModal\n formId={pendingKyc.optionId}\n {...(pendingKyc.progress ? { progress: pendingKyc.progress } : {})}\n onClose={() => {\n kycAttempt.current = null;\n setPendingKyc(null);\n }}\n onSubmitted={() => {\n if (kycAttempt.current !== pendingKyc) return;\n kycAttempt.current = null;\n setPendingKyc(null);\n void requoteAfterKyc('FORM');\n }}\n />\n );\n }\n\n if (pendingKyc?.type === 'REGISTRY_CHECK' || pendingKyc?.type === 'PROVIDER_REGISTRATION') {\n const close = () => {\n kycAttempt.current = null;\n setPendingKyc(null);\n };\n const done = () => {\n if (kycAttempt.current !== pendingKyc) return;\n close();\n void requoteAfterKyc(pendingKyc.type);\n };\n const progress = pendingKyc.progress ? { progress: pendingKyc.progress } : {};\n return pendingKyc.type === 'REGISTRY_CHECK' ? (\n <RegistryCheckModal optionId={pendingKyc.optionId} {...progress} onClose={close} onApproved={done} />\n ) : (\n <ProviderRegistrationModal corridorId={pendingKyc.corridorId} {...progress} onClose={close} onRegistered={done} />\n );\n }\n\n if (pendingKyc) {\n return (\n <KycModal\n country={country}\n corridorId={pendingKyc.corridorId}\n providerId={pendingKyc.optionId}\n onClose={() => {\n kycAttempt.current = null;\n setPendingKyc(null);\n }}\n onApproved={() => {\n // Ignore duplicate approvals or polling that finishes after cancellation.\n if (kycAttempt.current !== pendingKyc) return;\n kycAttempt.current = null;\n setPendingKyc(null);\n void requoteAfterKyc();\n }}\n />\n );\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <RampWidgetTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n flowSteps={flowSteps}\n flowStepIndex={flowStepIndex}\n startingQuoteId={isLoading && selectedQuote ? selectedQuote.quoteId : null}\n direction={direction}\n amount={amount}\n currency={currency}\n country={country}\n requiredFields={selectedQuote ? requiredFieldsOf(selectedQuote) : []}\n fieldValues={fieldValues}\n countries={countries}\n countriesLoading={countriesLoading}\n refreshing={refreshing}\n quotes={quotes}\n kycRequired={requirementsRequired}\n isLoading={isLoading}\n provider={provider}\n txStatus={txStatus}\n kycUrl={kycUrl}\n tosUrl={tosUrl}\n kycBlocking={kycBlocking}\n onboardingStatus={onboardingStatus ?? null}\n kycJustApproved={kycPending && kycApproved}\n stellarTxHash={stellarTxHash}\n txHash={txHash}\n txChain={txChain}\n explorerUrl={explorerTxUrl(txChain ?? 'STELLAR', txHash ?? stellarTxHash, network)}\n fundsInTransit={fundsInTransit}\n retrying={retrying}\n onRetryTransit={handleRetryTransit}\n depositInstructions={depositInstructions}\n canComplete={canComplete}\n completing={completing}\n errorMsg={errorMsg}\n noticeMsg={noticeMsg}\n onDirectionChange={setDirection}\n onAmountChange={(next) => {\n // Editing the amount is the user acting on the limit message, so it\n // stops applying the moment they type.\n setAmount(next);\n setErrorMsg(null);\n }}\n onFieldChange={setFieldValue}\n onCountryChange={handleCountryChange}\n onFindRoute={handleFindRoute}\n onSelectQuote={handleSelectQuote}\n onVerifyRoute={handleVerifyRoute}\n onContactContinue={handleContactContinue}\n onOpenKyc={handleOpenKyc}\n onOpenTos={handleOpenTos}\n onCompleteWithdraw={handleCompleteWithdraw}\n onBack={() => resetToInput({ keepMessage: true })}\n onRetry={() => resetToInput()}\n onRefresh={handleRefresh}\n onClose={onClose}\n />\n </div>\n );\n}\n","import type { WalletChain, WalletInfo } from '@pollar/core';\n\n/**\n * The one place the widget decides whether a wallet can act on-chain, and what\n * to say when it cannot.\n *\n * Only STELLAR is gated: `provisioning` describes the Stellar account, and a\n * Solana wallet has nothing to wait for. Only the ACCOUNT is described, never\n * trustlines - an asset the app enabled yesterday is not a reason to stop a\n * user from sending the one they already hold.\n *\n * A `null` chain is \"not known yet\" (the app's chain order comes from\n * `/config`, which is still in flight on a cold start) and reads as no reason\n * to block. Guessing STELLAR there would tell a Solana-first user their wallet\n * is being prepared, next to a Solana address that sends and receives fine.\n *\n * Returns null when the wallet is usable, so a caller reads it as \"no reason to\n * block\".\n */\nexport function walletNotReadyReason(\n wallet: WalletInfo | null | undefined,\n chain: WalletChain | null | undefined,\n): string | null {\n if (chain !== 'STELLAR') return null;\n if (wallet?.provisioning === 'CREATING') {\n return 'Your wallet is still being prepared on the network. This usually takes a few seconds.';\n }\n if (wallet?.provisioning === 'FAILED') {\n return 'Your wallet could not be created on the network. Sign in again to retry.';\n }\n return null;\n}\n","/**\n * QRCode component - vendored from react-qr-code (MIT License)\n * Original: https://github.com/rosskhanas/react-qr-code\n * Adapted: removed prop-types dependency, added TypeScript types.\n *\n * MIT License\n * Copyright (c) 2018 Ross Khanas\n */\n\n// @ts-expect-error - qr.js ships CJS without type declarations; bundled via noExternal\nimport ErrorCorrectLevel from 'qr.js/lib/ErrorCorrectLevel';\n// @ts-expect-error - same as above\nimport QRCodeImpl from 'qr.js/lib/QRCode';\nimport { forwardRef, type SVGProps } from 'react';\n\n// --- Internal SVG renderer ----------------------------------------------------\n\ninterface QRCodeSvgProps extends SVGProps<SVGSVGElement> {\n bgColor: string;\n bgD: string;\n fgColor: string;\n fgD: string;\n size: number;\n title?: string;\n viewBoxSize: number;\n xmlns?: string | undefined;\n}\n\nconst QRCodeSvg = forwardRef<SVGSVGElement, QRCodeSvgProps>(function QRCodeSvg(\n { bgColor, bgD, fgD, fgColor, size, title, viewBoxSize, xmlns = 'http://www.w3.org/2000/svg', ...props },\n ref,\n) {\n return (\n <svg {...props} height={size} ref={ref} viewBox={`0 0 ${viewBoxSize} ${viewBoxSize}`} width={size} xmlns={xmlns}>\n {title ? <title>{title}</title> : null}\n <path d={bgD} fill={bgColor} />\n <path d={fgD} fill={fgColor} />\n </svg>\n );\n});\n\nQRCodeSvg.displayName = 'QRCodeSvg';\n\n// --- Public component ---------------------------------------------------------\n\nexport interface QRCodeProps extends SVGProps<SVGSVGElement> {\n value: string;\n size?: number;\n bgColor?: string;\n fgColor?: string;\n level?: 'L' | 'M' | 'Q' | 'H';\n title?: string;\n}\n\nfunction bytesToBinaryString(bytes: number[]): string {\n return bytes.map((b) => String.fromCharCode(b & 0xff)).join('');\n}\n\nfunction encodeStringToUtf8Bytes(input: string): number[] {\n return Array.from(new TextEncoder().encode(input));\n}\n\nexport const QRCode = forwardRef<SVGSVGElement, QRCodeProps>(function QRCode(\n { bgColor = '#FFFFFF', fgColor = '#000000', level = 'L', size = 256, value, ...props },\n ref,\n) {\n const qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n const utf8Bytes = encodeStringToUtf8Bytes(value);\n const binaryString = bytesToBinaryString(utf8Bytes);\n qrcode.addData(binaryString, 'Byte');\n qrcode.make();\n\n const cells: boolean[][] = qrcode.modules;\n\n return (\n <QRCodeSvg\n {...props}\n bgColor={bgColor}\n bgD={cells\n .map((row, rowIndex) =>\n row.map((cell, cellIndex) => (!cell ? `M ${cellIndex} ${rowIndex} l 1 0 0 1 -1 0 Z` : '')).join(' '),\n )\n .join(' ')}\n fgColor={fgColor}\n fgD={cells\n .map((row, rowIndex) =>\n row.map((cell, cellIndex) => (cell ? `M ${cellIndex} ${rowIndex} l 1 0 0 1 -1 0 Z` : '')).join(' '),\n )\n .join(' ')}\n ref={ref}\n size={size}\n viewBoxSize={cells.length}\n />\n );\n});\n","import type { SVGProps } from 'react';\n\nexport function PollarLogo(props: SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"45\" height=\"48\" viewBox=\"0 0 45 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M27.2476 11.7526L23.3926 10.0529L24.6679 9.14844L26.8168 9.19868L27.7248 10.3873L27.2476 11.7526Z\"\n fill=\"#005DB4\"\n />\n <path\n d=\"M27.2307 33.2204L35.6034 28.6687L35.5931 25.9484L35.5707 20.0746L37.96 20.0989C37.96 20.0989 35.8728 18.3558 34.958 17.571C34.0431 16.7861 29.1016 12.8772 29.1016 12.8772L29.7315 11.2883L29.723 9.3148L27.3303 7.45046L23.7464 7.40887C23.7464 7.40887 20.5179 8.96827 20.4115 9.12248C20.2227 9.12248 15.4579 9.17619 14.5568 9.17619C12.3907 10.5103 8.21642 13.1527 8.21642 13.1527L8.22672 15.1002L2.54028 18.4858L5.60406 18.8704L5.99368 19.9568L4.93466 21.7276C4.93466 21.7276 3.61131 22.4796 3.43624 22.5264C3.76248 23.1143 4.12596 23.6803 4.52444 24.2209C4.72869 24.4773 5.01362 24.5259 5.26421 24.5969C5.66242 24.7078 6.09152 24.6991 6.50517 24.7563C6.71629 24.784 6.92226 24.8585 7.13509 24.8863C7.34792 24.914 10.6966 25.4061 11.1566 25.4424C11.5767 25.519 11.9895 25.6315 12.3907 25.7786C13.1476 26.1719 13.8685 26.6449 14.622 27.0226C15.4236 27.4298 16.1668 27.9184 16.9426 28.3689C17.5519 28.7258 18.7397 29.5281 18.7397 29.5281L19.4366 30.3372C19.4366 30.3372 17.7819 30.4135 17.219 30.5261C16.9117 30.5885 16.6302 30.63 16.4534 31.0286C16.2286 31.5345 6.69054 47.5703 6.43136 48C6.36442 47.9134 6.38845 28.6687 6.38845 28.6687L8.60776 27.2513L3.81385 26.0662L0.53552 20.818L0 18.3662L6.45368 14.414L6.36957 0H28.8304C28.8304 0 30.5468 0.223514 31.0618 0.377721C31.5767 0.531928 31.98 0.609898 33.7205 1.8938C35.3373 3.30592 39.7502 7.82125 42.3214 10.4098C42.6028 10.694 43.4422 11.7735 43.6087 12.47C43.7752 13.1665 44 14.2442 44 15.0586C43.9708 19.1148 44.0172 23.2853 43.9571 27.3397C43.9382 28.615 43.516 29.8226 42.8449 30.9506C42.5531 31.4427 41.3276 32.8201 40.3595 33.8233C39.9109 34.2848 39.3577 34.6291 38.7478 34.8266L27.2307 38.5847V33.2204Z\"\n fill=\"#005DB4\"\n />\n <path\n d=\"M14.2192 17.0897C13.6705 17.1694 11.7754 15.6937 11.7754 15.6937L13.4741 14.3999H16.5112L18.0217 15.7182C18.0217 15.7182 16.6853 15.708 16.2399 15.708C15.6669 16.3927 14.7679 17.0181 14.2152 17.0999\"\n fill=\"#005DB4\"\n />\n </svg>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { QRCode } from '../../lib/qr-code';\nimport { ChainSelect } from '../ChainSelect';\nimport { PollarModalFooter } from '../commons';\nimport { PollarLogo } from '../PollarLogo';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\n/** Network name as it reads in a sentence (\"Share your Stellar address\"). */\nconst CHAIN_NAME: Record<string, string> = {\n STELLAR: 'Stellar',\n POLYGON: 'Polygon',\n SOLANA: 'Solana',\n};\n\nexport interface ReceiveModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n /**\n * The networks the user holds an address on, in the app's configured order.\n * The picker renders only with two or more, so a single-chain app shows none.\n */\n chains?: WalletChain[];\n selectedChain: WalletChain | null;\n onSelectChain?: (chain: WalletChain) => void;\n copied: boolean;\n /**\n * Why the wallet cannot receive yet (its Stellar account is still being\n * created, or its creation failed), or null when it can.\n *\n * The address itself is valid either way - what is missing is the account\n * behind it, so a payment sent now is rejected by the network. Optional, so a\n * custom template written before this existed keeps compiling.\n */\n notReadyReason?: string | null;\n onCopy: () => void;\n onClose: () => void;\n}\n\nexport function ReceiveModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n walletAddress,\n chains,\n selectedChain,\n onSelectChain,\n copied,\n notReadyReason,\n onCopy,\n onClose,\n}: ReceiveModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const chainName = selectedChain ? (CHAIN_NAME[selectedChain] ?? selectedChain) : 'wallet';\n\n return (\n <div\n className=\"pollar-modal-card pollar-receive-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Receive</h2>\n <div className=\"pollar-modal-header-actions\">\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Network selector - drives the address and QR below */}\n {chains && onSelectChain && <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} />}\n\n {/* QR code */}\n {walletAddress ? (\n <>\n <div className=\"pollar-receive-qr\">\n <div className=\"pollar-receive-network-badge\">\n <span className=\"pollar-receive-network-dot\" aria-hidden />\n {chainName} network\n </div>\n <div className=\"pollar-receive-qr-frame\">\n <QRCode\n value={walletAddress}\n size={220}\n level=\"H\"\n fgColor=\"#111827\"\n bgColor=\"#ffffff\"\n title={`${chainName} wallet QR code`}\n />\n <span className=\"pollar-receive-qr-mark\" aria-hidden>\n <PollarLogo width=\"22\" height=\"24\" />\n </span>\n </div>\n </div>\n\n {notReadyReason && <div className=\"pollar-receive-notice\">{notReadyReason}</div>}\n\n {/* Address + copy */}\n <div className=\"pollar-receive-address-actions\">\n <div className=\"pollar-receive-address-row\">\n <span className=\"pollar-receive-address\">{walletAddress}</span>\n </div>\n <button type=\"button\" className=\"pollar-receive-copy-btn\" onClick={onCopy} aria-label=\"Copy address\">\n {copied ? (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path\n d=\"M3.5 7l2.5 2.5 4.5-5\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Copied\n </>\n ) : (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9H2a1 1 0 01-1-1V2a1 1 0 011-1h6a1 1 0 011 1v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n Copy\n </>\n )}\n </button>\n </div>\n <p className=\"pollar-receive-warning\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"5.5\" stroke=\"currentColor\" strokeWidth=\"1.25\" />\n <path d=\"M7 6.25V9.25M7 4.5V4.75\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n </svg>\n <span>Only send {chainName} assets to this address</span>\n </p>\n </>\n ) : (\n <div className=\"pollar-modal-empty\">No wallet connected.</div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { walletNotReadyReason } from '../../lib/wallet-provisioning';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './ReceiveModal.css';\nimport { ReceiveModalTemplate } from './ReceiveModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface ReceiveModalProps {\n onClose: () => void;\n}\n\nexport function ReceiveModal({ onClose }: ReceiveModalProps) {\n const { wallet, wallets, styles } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n // The address is real, but until the account is on the ledger a payment to it\n // is rejected by the network. Handing someone a QR without saying so is the\n // one place this window can cost a user a failed transfer from a third party.\n const notReadyReason = walletNotReadyReason(wallet, selectedChain);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n function handleCopy() {\n if (!walletAddress) return;\n navigator.clipboard.writeText(walletAddress).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <ReceiveModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n walletAddress={walletAddress}\n chains={chains}\n selectedChain={selectedChain}\n // The tick belongs to the address that was copied, so switching\n // networks clears it rather than vouching for the new address.\n onSelectChain={(chain) => {\n setCopied(false);\n setSelectedChain(chain);\n }}\n notReadyReason={notReadyReason}\n copied={copied}\n onCopy={handleCopy}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { TransactionState, transactionErrorMessage, WalletId, WalletType } from '@pollar/core';\nimport { LOGO_ALBEDO, LOGO_FREIGHTER, LOGO_POLLAR_MARK_ON_DARK, LOGO_POLLAR_MARK_ON_LIGHT } from '../../constants';\nimport { ModalStatusBanner } from '../commons';\n\nconst STATUS_MESSAGES: Record<TransactionState['step'], string> = {\n idle: '',\n building: 'Building transaction…',\n built: 'Ready to sign and send',\n signing: 'Signing transaction…',\n signed: 'Signed — ready to submit',\n submitting: 'Submitting transaction…',\n submitted: 'Submitted — waiting for confirmation…',\n 'signing-submitting': 'Signing and submitting transaction…',\n awaiting_cosign: 'Waiting for your approval on this device…',\n 'building-signing-submitting': 'Processing transaction…',\n success: 'Transaction sent successfully',\n error: 'Transaction failed',\n};\n\n/** Step values that represent in-flight work (spinner / non-cancellable UI). */\nconst IN_FLIGHT_STEPS = new Set<TransactionState['step']>([\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n]);\n\n/** Step values that should show the transaction details panel. */\nconst SHOW_DETAILS_STEPS = new Set<TransactionState['step']>([\n 'built',\n 'signing',\n 'signed',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'success',\n]);\n\nexport interface TxStatusViewProps {\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null | undefined;\n onSignAndSend: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry?: (() => void) | undefined;\n onDone: () => void;\n}\n\nexport function TxStatusView({\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n onSignAndSend,\n onToggleXdr,\n onCopyHash,\n onRetry,\n onDone,\n}: TxStatusViewProps) {\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const errorDetails = transaction.step === 'error' ? transactionErrorMessage(transaction.code, transaction.details) : null;\n\n const isBuilt = transaction.step === 'built';\n const isInFlight = IN_FLIGHT_STEPS.has(transaction.step);\n const isSuccess = transaction.step === 'success';\n const isError = transaction.step === 'error';\n const showDetails = buildData !== null && SHOW_DETAILS_STEPS.has(transaction.step);\n\n const walletImg =\n walletType === WalletType.FREIGHTER ? LOGO_FREIGHTER : walletType === WalletType.ALBEDO ? LOGO_ALBEDO : null;\n\n const walletAlt = walletType === WalletType.FREIGHTER ? 'Freighter' : walletType === WalletType.ALBEDO ? 'Albedo' : 'Pollar';\n const statusBanner = (\n <ModalStatusBanner\n message={STATUS_MESSAGES[transaction.step]}\n status={isError ? 'ERROR' : isInFlight ? 'LOADING' : isSuccess ? 'SUCCESS' : 'NONE'}\n />\n );\n const showSpinner = isInFlight || isSuccess || isError;\n\n return (\n <>\n {showDetails && buildData && (\n <>\n <div className=\"pollar-tx-summary\">\n <p className=\"pollar-tx-summary-title\">Details</p>\n <ul className=\"pollar-tx-summary-lines\">\n {buildData.summary.lines.map((line, i) => (\n <li key={i} className=\"pollar-tx-summary-line\">\n {line}\n </li>\n ))}\n </ul>\n </div>\n <div className=\"pollar-tx-meta\">\n <div className=\"pollar-tx-meta-item\">\n <span className=\"pollar-tx-meta-label\">Network</span>\n <span className=\"pollar-tx-meta-value\">{buildData.summary.network}</span>\n </div>\n <div className=\"pollar-tx-meta-item\">\n <span className=\"pollar-tx-meta-label\">Fee</span>\n <span className=\"pollar-tx-meta-value\">{buildData.summary.fee}</span>\n </div>\n </div>\n <div className=\"pollar-tx-xdr\">\n <button className=\"pollar-tx-xdr-toggle\" onClick={onToggleXdr}>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden\n style={{ transform: showXdr ? 'rotate(90deg)' : 'rotate(0deg)', transition: 'transform 150ms' }}\n >\n <path d=\"M4 2l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n Raw transaction (XDR)\n </button>\n {showXdr && <pre className=\"pollar-tx-xdr-content\">{buildData.unsignedXdr}</pre>}\n </div>\n </>\n )}\n\n {isError && errorDetails && (\n <div className=\"pollar-tx-error-details\">\n <p className=\"pollar-tx-error-details-label\">Error details</p>\n <pre className=\"pollar-tx-error-details-content\">{errorDetails}</pre>\n </div>\n )}\n\n {isBuilt && (\n <button className=\"pollar-btn-primary pollar-tx-sign-btn\" onClick={onSignAndSend}>\n Sign & Send\n </button>\n )}\n\n {showSpinner && (\n <div className=\"pollar-tx-wallet-spinner\">\n <div className=\"pollar-tx-spinner-ring\">\n <svg\n viewBox=\"0 0 88 88\"\n width=\"88\"\n height=\"88\"\n className={`pollar-tx-spinner-svg${isInFlight ? ' pollar-tx-spinner-rotating' : ''}`}\n aria-hidden\n >\n <circle cx=\"44\" cy=\"44\" r=\"36\" fill=\"none\" stroke=\"var(--pollar-border)\" strokeWidth=\"3\" />\n <circle\n cx=\"44\"\n cy=\"44\"\n r=\"36\"\n fill=\"none\"\n stroke={\n isSuccess ? 'var(--pollar-success-text)' : isError ? 'var(--pollar-error-text)' : 'var(--pollar-accent)'\n }\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeDasharray={isInFlight ? '169.6 56.6' : '999 0'}\n transform=\"rotate(-90 44 44)\"\n style={{ transition: isInFlight ? 'none' : 'stroke 400ms, stroke-dasharray 400ms' }}\n />\n </svg>\n <div className=\"pollar-tx-wallet-icon\">\n {walletImg ? (\n <img src={walletImg} alt={walletAlt} className=\"pollar-tx-wallet-img\" />\n ) : (\n <>\n <img src={LOGO_POLLAR_MARK_ON_LIGHT} alt={walletAlt} className=\"pollar-tx-wallet-img pollar-logo-on-light\" />\n <img src={LOGO_POLLAR_MARK_ON_DARK} alt={walletAlt} className=\"pollar-tx-wallet-img pollar-logo-on-dark\" />\n </>\n )}\n </div>\n </div>\n\n {statusBanner}\n\n {isInFlight && (\n <p className=\"pollar-tx-spinner-label\">\n {walletType === WalletType.FREIGHTER\n ? 'Waiting for Freighter…'\n : walletType === WalletType.ALBEDO\n ? 'Waiting for Albedo…'\n : 'Signing and sending…'}\n </p>\n )}\n\n {isError && onRetry && 'buildData' in transaction && transaction.buildData && (\n <button className=\"pollar-btn-secondary pollar-tx-retry-btn\" onClick={onRetry}>\n Try again\n </button>\n )}\n </div>\n )}\n\n {isSuccess && hash && (\n <div className=\"pollar-tx-result\">\n <span className=\"pollar-tx-result-label\">Transaction hash</span>\n <span className=\"pollar-tx-result-hash\">{hash}</span>\n <div className=\"pollar-tx-result-actions\">\n <button className=\"pollar-tx-result-btn\" onClick={onCopyHash}>\n {copied ? (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path\n d=\"M3.5 7l2.5 2.5 4.5-5\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Copied!\n </>\n ) : (\n <>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9H2a1 1 0 01-1-1V2a1 1 0 011-1h6a1 1 0 011 1v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n Copy hash\n </>\n )}\n </button>\n {explorerUrl && (\n <a className=\"pollar-tx-result-btn\" href={explorerUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <path\n d=\"M5 2H2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M8 1h4m0 0v4m0-4L6 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n View on Explorer\n </a>\n )}\n </div>\n </div>\n )}\n\n {isSuccess && (\n <button className=\"pollar-btn-primary pollar-tx-sign-btn\" onClick={onDone}>\n Done\n </button>\n )}\n\n {!showSpinner && statusBanner}\n </>\n );\n}\n","'use client';\n\nimport { TransactionState, WalletBalanceRecord, WalletChain, WalletId } from '@pollar/core';\nimport { useEffect, useRef, useState, type KeyboardEvent } from 'react';\nimport { ChainSelect } from '../ChainSelect';\nimport { PollarModalFooter, RefreshIcon } from '../commons';\nimport { TxStatusView } from '../transaction-modal/TxStatusView';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\n// A null balance means the chain could not be read; it shows as a dash rather\n// than as 0, so an unreadable wallet never looks empty.\nfunction formatBalance(balance: string | null): string {\n if (balance === null) return '—';\n const n = parseFloat(balance);\n return isNaN(n) ? balance : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\nfunction assetKey(record: WalletBalanceRecord): string {\n return `${record.code}:${record.issuer ?? 'native'}`;\n}\n\nfunction chainLabel(chain: WalletChain | null): string {\n if (chain === 'STELLAR') return 'Stellar';\n if (chain === 'SOLANA') return 'Solana';\n if (chain === 'POLYGON') return 'Polygon';\n return 'network';\n}\n\n// Solana addresses are base58 with no fixed prefix, so they get a label instead.\nfunction destinationPlaceholder(chain: WalletChain | null): string {\n if (chain === 'SOLANA') return 'Solana address';\n if (chain === 'POLYGON') return '0x…';\n return 'G…';\n}\n\nfunction AssetIcon({ code }: { code: string }) {\n return (\n <span className=\"pollar-send-asset-icon\" aria-hidden>\n {code.slice(0, 2).toUpperCase()}\n </span>\n );\n}\n\ninterface SendAssetSelectorProps {\n assets: WalletBalanceRecord[];\n selectedAsset: WalletBalanceRecord | null;\n loading: boolean;\n onSelectAsset: (asset: WalletBalanceRecord) => void;\n}\n\nfunction SendAssetSelector({ assets, selectedAsset, loading, onSelectAsset }: SendAssetSelectorProps) {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const closeOnOutsideClick = (event: MouseEvent) => {\n if (!(event.target instanceof Node) || !triggerRef.current?.parentElement?.contains(event.target)) setOpen(false);\n };\n document.addEventListener('mousedown', closeOnOutsideClick);\n return () => document.removeEventListener('mousedown', closeOnOutsideClick);\n }, [open]);\n\n function handleTriggerKeyDown(event: KeyboardEvent<HTMLButtonElement>) {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setOpen(true);\n }\n }\n\n if (loading) {\n return (\n <div className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Asset</span>\n <div className=\"pollar-send-asset-selector pollar-send-asset-selector-loading\" aria-label=\"Loading assets\">\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n <span>Loading assets…</span>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\" id=\"pollar-send-asset-label\">\n Asset\n </label>\n <div className=\"pollar-send-asset-picker\">\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"pollar-send-asset-selector\"\n aria-labelledby=\"pollar-send-asset-label\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n disabled={!selectedAsset}\n onClick={() => setOpen((value) => !value)}\n onKeyDown={handleTriggerKeyDown}\n >\n {selectedAsset ? (\n <>\n <AssetIcon code={selectedAsset.code} />\n <span className=\"pollar-send-asset-copy\">\n <strong>{selectedAsset.code}</strong>\n <small>\n {selectedAsset.available === null\n ? 'Balance unavailable'\n : `${formatBalance(selectedAsset.available)} available`}\n </small>\n </span>\n </>\n ) : (\n <span className=\"pollar-send-asset-copy\">\n <strong>No assets available</strong>\n </span>\n )}\n <svg className=\"pollar-send-chevron\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"m4 6 4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n\n {open && assets.length > 0 && (\n <div className=\"pollar-send-asset-menu\" role=\"listbox\" aria-label=\"Assets\">\n {assets.map((asset) => {\n const key = assetKey(asset);\n const selected = selectedAsset ? key === assetKey(selectedAsset) : false;\n return (\n <button\n key={key}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n className={`pollar-send-asset-option${selected ? ' is-selected' : ''}`}\n onClick={() => {\n onSelectAsset(asset);\n setOpen(false);\n triggerRef.current?.focus();\n }}\n >\n <AssetIcon code={asset.code} />\n <span className=\"pollar-send-asset-copy\">\n <strong>{asset.code}</strong>\n <small>\n {asset.available === null ? 'Balance unavailable' : `${formatBalance(asset.available)} available`}\n </small>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/** The memo types the backend accepts on a Stellar payment. */\nexport type SendMemoType = 'text' | 'id';\n\nexport interface SendModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n step: 'form' | 'tx';\n txTitle: string;\n assets: WalletBalanceRecord[];\n selectedAsset: WalletBalanceRecord | null;\n selectedChain: WalletChain | null;\n /**\n * The networks the user can send from, in the app's configured order. The\n * picker renders only with two or more, so a single-chain app shows none.\n */\n chains?: WalletChain[];\n /** @deprecated Kept for compatibility; the sender address is no longer shown. */\n walletAddress?: string;\n /** Can a payment be built on {@link selectedChain}? Stellar and Solana only. */\n canSendOnChain: boolean;\n /**\n * Why the wallet cannot act on-chain right now (its Stellar account is still\n * being created, or its creation failed), or null when it can.\n *\n * Separate from {@link canSendOnChain}: that one is about the NETWORK not\n * having a transfer path, this one about the user's own account. Collapsing\n * them would tell someone waiting on a brand-new wallet that Stellar does not\n * support sending. Optional, so a custom template written before this existed\n * keeps compiling.\n */\n notReadyReason?: string | null;\n onSelectChain?: (chain: WalletChain) => void;\n amount: string;\n destination: string;\n formError: string;\n isLoadingBalance: boolean;\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null | undefined;\n showBack: boolean;\n isInProgress: boolean;\n onClose: () => void;\n onBack: () => void;\n onRefresh: () => void;\n onSelectAsset: (asset: WalletBalanceRecord) => void;\n onAmountChange: (value: string) => void;\n onMax: () => void;\n onPaste: () => void;\n onDestinationChange: (value: string) => void;\n /**\n * Optional Stellar memo. The field renders only on Stellar and only when\n * {@link onMemoChange} is passed, so a custom template written before it\n * existed keeps compiling.\n */\n memo?: string;\n memoType?: SendMemoType;\n onMemoChange?: (value: string) => void;\n onMemoTypeChange?: (type: SendMemoType) => void;\n onSubmit: () => void;\n onSignAndSend: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry: () => void;\n onDone: () => void;\n}\n\nexport function SendModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n txTitle,\n assets,\n selectedAsset,\n selectedChain,\n canSendOnChain,\n notReadyReason,\n chains,\n onSelectChain,\n amount,\n destination,\n formError,\n isLoadingBalance,\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n showBack,\n isInProgress,\n onClose,\n onBack,\n onRefresh,\n onSelectAsset,\n onAmountChange,\n onMax,\n onPaste,\n onDestinationChange,\n memo = '',\n memoType = 'text',\n onMemoChange,\n onMemoTypeChange,\n onSubmit,\n onSignAndSend,\n onToggleXdr,\n onCopyHash,\n onRetry,\n onDone,\n}: SendModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const parsedAmount = amount ? Number(amount) : 0;\n const availableAmount =\n selectedAsset?.available === null || selectedAsset?.available === undefined ? 0 : Number(selectedAsset.available);\n const canSubmit =\n canSendOnChain &&\n !notReadyReason &&\n !!selectedAsset &&\n Number.isFinite(parsedAmount) &&\n parsedAmount > 0 &&\n parsedAmount <= availableAmount &&\n !!destination.trim() &&\n !isLoadingBalance;\n\n const title = step === 'form' ? 'Send' : txTitle;\n\n return (\n <div\n className=\"pollar-modal-card pollar-send-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {showBack && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onBack} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <div className=\"pollar-send-title-copy\">\n <h2 className=\"pollar-modal-title\">{title}</h2>\n {step === 'form' && (\n <p className=\"pollar-send-subtitle\">Transfer assets to another {chainLabel(selectedChain)} wallet</p>\n )}\n </div>\n </div>\n {!isInProgress && (\n <div className=\"pollar-modal-header-actions\">\n {step === 'form' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoadingBalance}\n aria-label=\"Refresh\"\n title=\"Refresh balances\"\n >\n <RefreshIcon spinning={isLoadingBalance} />\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n\n {/* Form step */}\n {step === 'form' && (\n <>\n {/* Network selector - drives the asset list below */}\n {chains && onSelectChain && (\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoadingBalance} />\n )}\n\n {!canSendOnChain && <div className=\"pollar-modal-empty\">Sending is not available on this network yet.</div>}\n {canSendOnChain && notReadyReason && <div className=\"pollar-modal-empty\">{notReadyReason}</div>}\n\n {/* Asset selector */}\n <SendAssetSelector\n assets={assets}\n selectedAsset={selectedAsset}\n loading={isLoadingBalance}\n onSelectAsset={onSelectAsset}\n />\n\n {/* Amount */}\n <div className=\"pollar-send-field\">\n <div className=\"pollar-send-label-row\">\n <label className=\"pollar-send-label\">Amount</label>\n {selectedAsset && (\n <span className=\"pollar-send-hint\">\n Available: {formatBalance(selectedAsset.available)} {selectedAsset.code}\n </span>\n )}\n </div>\n <div className=\"pollar-send-input-shell\">\n <input\n className=\"pollar-input pollar-send-amount-input\"\n type=\"text\"\n inputMode=\"decimal\"\n placeholder=\"0.00\"\n value={amount}\n onChange={(e) => onAmountChange(e.target.value)}\n aria-label=\"Amount\"\n />\n <div className=\"pollar-send-input-suffix\">\n <button\n type=\"button\"\n className=\"pollar-send-inline-action\"\n onClick={onMax}\n disabled={!selectedAsset?.available}\n >\n Max\n </button>\n <span>{selectedAsset?.code ?? ''}</span>\n </div>\n </div>\n </div>\n\n {/* Destination */}\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\">Destination wallet</label>\n <div className=\"pollar-send-input-shell\">\n <input\n className=\"pollar-input pollar-send-destination-input\"\n type=\"text\"\n placeholder={destinationPlaceholder(selectedChain)}\n value={destination}\n onChange={(e) => onDestinationChange(e.target.value)}\n aria-label=\"Destination wallet\"\n />\n <button type=\"button\" className=\"pollar-send-inline-action\" onClick={onPaste}>\n Paste\n </button>\n </div>\n </div>\n\n {selectedChain === 'STELLAR' && onMemoChange && (\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\" htmlFor=\"pollar-send-memo\">\n Memo <span className=\"pollar-send-label-optional\">(optional)</span>\n </label>\n <div className=\"pollar-send-memo-row\">\n <select\n className=\"pollar-input pollar-send-memo-type\"\n value={memoType}\n onChange={(e) => onMemoTypeChange?.(e.target.value as SendMemoType)}\n aria-label=\"Memo type\"\n >\n <option value=\"text\">Text</option>\n <option value=\"id\">ID</option>\n </select>\n <input\n id=\"pollar-send-memo\"\n className=\"pollar-input pollar-send-memo-input\"\n type=\"text\"\n inputMode={memoType === 'id' ? 'numeric' : 'text'}\n placeholder={memoType === 'id' ? '123456789' : 'Up to 28 characters'}\n value={memo}\n onChange={(e) => onMemoChange(e.target.value)}\n />\n </div>\n </div>\n )}\n\n {formError && <div className=\"pollar-modal-error\">{formError}</div>}\n\n <div className=\"pollar-modal-actions\">\n <button className=\"pollar-btn-primary\" onClick={onSubmit} disabled={!canSubmit}>\n Continue\n </button>\n </div>\n </>\n )}\n\n {/* Transaction step */}\n {step === 'tx' && (\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={onSignAndSend}\n onToggleXdr={onToggleXdr}\n onCopyHash={onCopyHash}\n onRetry={onRetry}\n onDone={onDone}\n />\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { toBaseUnits, WalletBalanceRecord, WalletChain } from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { walletNotReadyReason } from '../../lib/wallet-provisioning';\nimport { useChains } from '../../useChains';\nimport { resolveChain } from '../ChainSelect';\nimport '../shared.css';\nimport '../transaction-modal/TransactionModal.css';\nimport './SendModal.css';\nimport { SendModalTemplate, type SendMemoType } from './SendModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface SendModalProps {\n onClose: () => void;\n}\n\nconst MAX_MEMO_ID = 18446744073709551615n;\n\n/** A Stellar memo as the build endpoint takes it, undefined when the field is\n * empty, or an error string the form shows. Text is capped at 28 BYTES on-chain\n * (a multibyte character counts more than once); an ID is an unsigned 64-bit\n * integer. */\nfunction parseMemo(type: SendMemoType, raw: string): { type: SendMemoType; value: string } | undefined | string {\n const value = type === 'id' ? raw.trim() : raw;\n if (value.trim() === '') return undefined;\n if (type === 'text') {\n return new TextEncoder().encode(value).length > 28 ? 'The memo text can be at most 28 bytes.' : { type, value };\n }\n if (!/^\\d+$/.test(value) || BigInt(value) > MAX_MEMO_ID) return 'The memo ID must be a whole number up to 2^64 - 1.';\n return { type, value };\n}\n\nfunction assetParam(record: WalletBalanceRecord) {\n if (record.type === 'native') return { type: 'native' as const };\n if (record.type === 'credit_alphanum4') {\n return { type: 'credit_alphanum4' as const, code: record.code, issuer: record.issuer! };\n }\n return { type: 'credit_alphanum12' as const, code: record.code, issuer: record.issuer! };\n}\n\nexport function SendModal({ onClose }: SendModalProps) {\n const {\n walletBalance,\n refreshWalletBalance,\n buildTx,\n sendPayment,\n signAndSubmitTx,\n tx: transaction,\n wallet,\n network,\n styles,\n } = usePollar();\n // External-wallet signing-adapter id (freighter/albedo) drives the wallet logo;\n // null for embedded/smart, which fall back to the Pollar logo.\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<'form' | 'tx'>('form');\n const [amount, setAmount] = useState('');\n const [destination, setDestination] = useState('');\n const [memo, setMemo] = useState('');\n const [memoType, setMemoType] = useState<SendMemoType>('text');\n const [selectedAsset, setSelectedAsset] = useState<WalletBalanceRecord | null>(null);\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const [formError, setFormError] = useState('');\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const canSendOnChain = selectedChain === 'STELLAR' || selectedChain === 'SOLANA' || selectedChain === 'POLYGON';\n // A Stellar account still being created cannot source a payment: every\n // operation would come back `op_no_source_account`. The server refuses these\n // with SDK_WALLET_NOT_READY anyway - saying so here turns that into something\n // the user can act on (wait) instead of a failed transaction.\n const notReadyReason = walletNotReadyReason(wallet, selectedChain);\n // Solana and Polygon amounts are integer base units (lamports / wei / token\n // units), not decimals.\n const isBaseUnitChain = selectedChain === 'SOLANA' || selectedChain === 'POLYGON';\n // Native SOL has 9 decimals, native POL 18.\n const nativeDecimals = selectedChain === 'POLYGON' ? 18 : 9;\n\n useEffect(() => {\n void refreshWalletBalance();\n }, [refreshWalletBalance]);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n const balanceData = walletBalance.step === 'loaded' ? walletBalance.data : null;\n // Only the picked network's assets. The backend returns every chain in one\n // payload, so this is a local filter - switching networks costs no request.\n const allAssets = (balanceData?.balances ?? []).filter((b) => resolveChain(b.chain) === selectedChain);\n // App assets first, then native XLM (always, even at 0, so the user knows to\n // fund) and any other non-app asset the wallet actually holds.\n const sortedAssets = [\n ...allAssets.filter((b) => b.enabledInApp),\n // An unreadable balance (null) is not a positive one, so it stays out.\n ...allAssets.filter((b) => !b.enabledInApp && (b.type === 'native' || parseFloat(b.balance ?? '0') > 0)),\n ];\n\n // Auto-select the first asset once balances load (no \"Select asset\" step).\n // Switching networks strands the previous chain's asset, so it is dropped and\n // re-picked here rather than leaving a selection the form can't spend.\n useEffect(() => {\n const stranded = selectedAsset !== null && resolveChain(selectedAsset.chain) !== selectedChain;\n if (stranded) {\n setSelectedAsset(sortedAssets[0] ?? null);\n return;\n }\n if (!selectedAsset && sortedAssets.length > 0) setSelectedAsset(sortedAssets[0]!);\n }, [sortedAssets, selectedAsset, selectedChain]);\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n // Each chain has its own explorer, and its own way of saying \"testnet\".\n const explorerUrl = !hash\n ? null\n : selectedChain === 'SOLANA'\n ? `https://explorer.solana.com/tx/${hash}${explorerNetwork === 'testnet' ? '?cluster=devnet' : ''}`\n : selectedChain === 'POLYGON'\n ? `https://${explorerNetwork === 'testnet' ? 'amoy.' : ''}polygonscan.com/tx/${hash}`\n : `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}`;\n\n const IN_FLIGHT_STEPS = [\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n ] as const;\n const isInProgress = (IN_FLIGHT_STEPS as readonly string[]).includes(transaction.step);\n const showBack = step === 'tx' && (transaction.step === 'error' || transaction.step === 'success') && !isInProgress;\n\n const txTitle = isInProgress\n ? 'Sending…'\n : transaction.step === 'success'\n ? 'Sent!'\n : transaction.step === 'error'\n ? 'Send failed'\n : 'Confirm Send';\n\n async function handleSubmit() {\n setFormError('');\n if (!canSendOnChain) {\n setFormError('Sending is not available on this network yet.');\n return;\n }\n if (notReadyReason) {\n setFormError(notReadyReason);\n return;\n }\n if (!selectedAsset) {\n setFormError('Select an asset');\n return;\n }\n const parsed = parseFloat(amount);\n if (!amount || isNaN(parsed) || parsed <= 0) {\n setFormError('Enter a valid amount');\n return;\n }\n // A null `available` means the chain could not be read, so it floors to 0 and\n // blocks the send: never let an unreadable balance pass as \"enough\".\n if (parsed > parseFloat(selectedAsset.available ?? '0')) {\n setFormError('Insufficient balance');\n return;\n }\n if (!destination.trim()) {\n setFormError('Enter a destination address');\n return;\n }\n const parsedMemo = selectedChain === 'STELLAR' ? parseMemo(memoType, memo) : undefined;\n if (typeof parsedMemo === 'string') {\n setFormError(parsedMemo);\n return;\n }\n\n // A non-native asset needs BOTH its on-chain id (the SPL mint or ERC-20\n // contract, carried in `issuer`) and its own `decimals`, and neither has a\n // safe default: without the id the payload below drops to a native transfer,\n // so a USDC send would move SOL or POL instead, and the native fallback would\n // multiply a 6-decimal token by 1000 or more. The backend always sends both,\n // so this only fires on malformed data - but it fails the send rather than\n // sending the wrong thing.\n const isNativeAsset = selectedAsset.type === 'native';\n if (isBaseUnitChain && !isNativeAsset && (!selectedAsset.issuer || selectedAsset.decimals === undefined)) {\n setFormError('This token is missing its contract or decimals and cannot be sent.');\n return;\n }\n\n // Solana and Polygon take integer base units while the form (like the balance\n // above it) is in decimals, so convert before sending - with the asset's own\n // decimals, and via strings so an 18-decimal amount is not rounded by a float.\n // The fallback is the native coin's decimals, reached only on the native row\n // (the guard above rejects any other asset that lacks `decimals`).\n let sendAmount = amount;\n if (isBaseUnitChain) {\n try {\n sendAmount = toBaseUnits(amount, selectedAsset.decimals ?? nativeDecimals);\n } catch (e) {\n setFormError(e instanceof Error ? e.message : 'Invalid amount');\n return;\n }\n }\n\n setStep('tx');\n\n if (selectedChain === 'SOLANA' || selectedChain === 'POLYGON') {\n await sendPayment({\n chain: selectedChain,\n destination: destination.trim(),\n amount: sendAmount,\n // A native coin carries no token id; an SPL mint or ERC-20 contract rides\n // in `issuer`, which the guard above proved is present.\n ...(isNativeAsset ? {} : { mint: selectedAsset.issuer }),\n });\n return;\n }\n\n await buildTx(\n 'payment',\n { destination: destination.trim(), amount, asset: assetParam(selectedAsset) },\n parsedMemo ? { memo: parsedMemo } : undefined,\n );\n }\n\n function handleSignAndSend() {\n if (transaction.step === 'built') {\n void signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n function handleMax() {\n if (selectedAsset?.available !== null && selectedAsset?.available !== undefined) {\n setAmount(selectedAsset.available);\n setFormError('');\n }\n }\n\n async function handlePaste() {\n if (!navigator.clipboard?.readText) {\n setFormError('Clipboard access is not available. Paste the address manually.');\n return;\n }\n\n try {\n const value = (await navigator.clipboard.readText()).trim();\n if (!value) {\n setFormError('The clipboard is empty.');\n return;\n }\n setDestination(value);\n setFormError('');\n } catch {\n setFormError('Could not read the clipboard. Paste the address manually.');\n }\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n async function handleRetry() {\n if (transaction.step === 'error' && transaction.buildData) {\n await signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n function handleBack() {\n setStep('form');\n setShowXdr(false);\n setCopied(false);\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={!isInProgress ? onClose : undefined}>\n <SendModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n txTitle={txTitle}\n assets={sortedAssets}\n selectedAsset={selectedAsset}\n chains={chains}\n selectedChain={selectedChain}\n canSendOnChain={canSendOnChain}\n notReadyReason={notReadyReason}\n onSelectChain={setSelectedChain}\n amount={amount}\n destination={destination}\n formError={formError}\n isLoadingBalance={walletBalance.step === 'loading'}\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n showBack={showBack}\n isInProgress={isInProgress}\n onClose={onClose}\n onBack={handleBack}\n onRefresh={() => void refreshWalletBalance()}\n onSelectAsset={setSelectedAsset}\n onAmountChange={setAmount}\n onMax={handleMax}\n onPaste={handlePaste}\n onDestinationChange={setDestination}\n memo={memo}\n memoType={memoType}\n onMemoChange={setMemo}\n onMemoTypeChange={setMemoType}\n onSubmit={() => void handleSubmit()}\n onSignAndSend={handleSignAndSend}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={() => void handleRetry()}\n onDone={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { SwapProvider, SwapQuote, SwapQuoteParams, TransactionState, WalletId } from '@pollar/core';\nimport { useState } from 'react';\nimport { PollarModalFooter, RefreshIcon } from '../commons';\nimport { TxStatusView } from '../transaction-modal/TxStatusView';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport interface SwapAssetOption {\n ref: SwapQuoteParams['sellAsset'];\n code: string;\n issuer?: string | undefined;\n available?: string | undefined;\n enabledInApp?: boolean | undefined;\n}\n\nexport function assetOptionKey(o: SwapAssetOption): string {\n return `${o.code}:${o.issuer ?? 'native'}`;\n}\n\nconst PROVIDER_LABELS: Record<SwapProvider, string> = {\n auto: 'Best price',\n aquarius: 'Aquarius',\n soroswap: 'Soroswap',\n sdex: 'Stellar DEX',\n};\n\nfunction formatAmount(value: string | undefined): string {\n if (value === undefined) return '—';\n const n = parseFloat(value);\n return isNaN(n) ? value : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\n/** Decimal division for display only. All intermediate arithmetic stays in BigInt. */\nfunction formatRate(numerator: string, denominator: string): string | null {\n const parse = (value: string) => {\n const trimmed = value.trim();\n if (!/^\\d+(\\.\\d+)?$/.test(trimmed)) return null;\n const [whole = '0', fraction = ''] = trimmed.split('.');\n return { digits: BigInt(`${whole}${fraction}`), scale: fraction.length };\n };\n const top = parse(numerator);\n const bottom = parse(denominator);\n if (!top || !bottom || bottom.digits === 0n || top.digits === 0n) return null;\n\n const precision = 8;\n const scaledNumerator = top.digits * 10n ** BigInt(bottom.scale + precision);\n const scaledDenominator = bottom.digits * 10n ** BigInt(top.scale);\n const scaled = scaledNumerator / scaledDenominator;\n const whole = scaled / 10n ** BigInt(precision);\n const fraction = (scaled % 10n ** BigInt(precision)).toString().padStart(precision, '0').replace(/0+$/, '');\n return fraction ? `${whole}.${fraction}` : whole.toString();\n}\n\nfunction AssetIcon({ code }: { code: string }) {\n return (\n <span className=\"pollar-swap-asset-icon\" aria-hidden>\n {code.slice(0, 2).toUpperCase()}\n </span>\n );\n}\n\nfunction AssetPill({\n label,\n value,\n options,\n disabled,\n onChange,\n}: {\n label: string;\n value: string;\n options: SwapAssetOption[];\n disabled: boolean;\n onChange: (key: string) => void;\n}) {\n const selected = options.find((option) => assetOptionKey(option) === value);\n const appAssets = options.filter((option) => option.enabledInApp);\n const otherAssets = options.filter((option) => !option.enabledInApp);\n\n return (\n <label className=\"pollar-swap-asset-pill-wrap\">\n <span className=\"sr-only\">{label}</span>\n <AssetIcon code={selected?.code ?? '—'} />\n <select\n className=\"pollar-swap-asset-pill\"\n aria-label={label}\n value={value}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n >\n {value === '' && <option value=\"\" disabled hidden />}\n {appAssets.length > 0 && (\n <optgroup label=\"App assets\">\n {appAssets.map((option) => (\n <option key={assetOptionKey(option)} value={assetOptionKey(option)}>\n {option.code}\n </option>\n ))}\n </optgroup>\n )}\n {otherAssets.length > 0 && (\n <optgroup label=\"Other assets\">\n {otherAssets.map((option) => (\n <option key={assetOptionKey(option)} value={assetOptionKey(option)}>\n {option.code}\n </option>\n ))}\n </optgroup>\n )}\n </select>\n <svg className=\"pollar-swap-chevron\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path\n d=\"m3.5 5.25 3.5 3.5 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </label>\n );\n}\n\nexport interface SwapModalTemplateProps {\n theme: string;\n accentColor: string;\n styleOverrides?: ModalStyleOverrides;\n step: 'form' | 'tx';\n txTitle: string;\n sellOptions: SwapAssetOption[];\n buyOptions: SwapAssetOption[];\n selectedSell: SwapAssetOption | null;\n selectedBuy: SwapAssetOption | null;\n amount: string;\n provider: SwapProvider;\n providers: SwapProvider[];\n quote: SwapQuote | null;\n quoteLoading: boolean;\n quoteError: string;\n formError: string;\n isLoadingData: boolean;\n smartUnsupported: boolean;\n configLoading: boolean;\n swapUnavailable: boolean;\n buyNeedsTrustline: boolean;\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null | undefined;\n showBack: boolean;\n isInProgress: boolean;\n onClose: () => void;\n onBack: () => void;\n onRefresh: () => void;\n onSelectSell: (o: SwapAssetOption) => void;\n onSelectBuy: (o: SwapAssetOption) => void;\n onReverse: () => void;\n onMax: () => void;\n onAddCustomToken: (code: string, issuer: string) => string | null;\n onAmountChange: (value: string) => void;\n onProviderChange: (p: SwapProvider) => void;\n onSwap: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry: () => void;\n onDone: () => void;\n}\n\nexport function SwapModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n step,\n txTitle,\n sellOptions,\n buyOptions,\n selectedSell,\n selectedBuy,\n amount,\n provider,\n providers,\n quote,\n quoteLoading,\n quoteError,\n formError,\n isLoadingData,\n smartUnsupported,\n configLoading,\n swapUnavailable,\n buyNeedsTrustline,\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n showBack,\n isInProgress,\n onClose,\n onBack,\n onRefresh,\n onSelectSell,\n onSelectBuy,\n onAddCustomToken,\n onReverse,\n onMax,\n onAmountChange,\n onProviderChange,\n onSwap,\n onToggleXdr,\n onCopyHash,\n onRetry,\n onDone,\n}: SwapModalTemplateProps) {\n const [customOpen, setCustomOpen] = useState(false);\n const [customCode, setCustomCode] = useState('');\n const [customIssuer, setCustomIssuer] = useState('');\n const [customError, setCustomError] = useState('');\n\n const submitCustomToken = () => {\n const err = onAddCustomToken(customCode, customIssuer);\n if (err) {\n setCustomError(err);\n return;\n }\n setCustomCode('');\n setCustomIssuer('');\n setCustomError('');\n setCustomOpen(false);\n };\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n const sellKey = selectedSell ? assetOptionKey(selectedSell) : '';\n const buyKey = selectedBuy ? assetOptionKey(selectedBuy) : '';\n const sameAsset = !!selectedSell && !!selectedBuy && sellKey === buyKey;\n const canSwap =\n !smartUnsupported &&\n !sameAsset &&\n !!selectedSell &&\n !!selectedBuy &&\n !!amount &&\n !!quote &&\n !quoteLoading &&\n !isLoadingData;\n const rate = quote && amount ? formatRate(quote.amountOut, amount) : null;\n const title = step === 'form' ? 'Swap' : txTitle;\n\n const selectSell = (key: string) => {\n const found = sellOptions.find((option) => assetOptionKey(option) === key);\n if (found) onSelectSell(found);\n };\n const selectBuy = (key: string) => {\n const found = buyOptions.find((option) => assetOptionKey(option) === key);\n if (found) onSelectBuy(found);\n };\n return (\n <div\n className=\"pollar-modal-card pollar-swap-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {showBack && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onBack} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3 5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <h2 className=\"pollar-modal-title\">{title}</h2>\n </div>\n {!isInProgress && (\n <div className=\"pollar-modal-header-actions\">\n {step === 'form' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={configLoading || isLoadingData}\n aria-label=\"Refresh\"\n title=\"Refresh balances and options\"\n >\n <RefreshIcon spinning={configLoading || isLoadingData} />\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n\n {step === 'form' && !configLoading && swapUnavailable && (\n <div className=\"pollar-modal-error\">Swap is not available for this app.</div>\n )}\n\n {step === 'form' && !swapUnavailable && (\n <>\n {smartUnsupported && (\n <div className=\"pollar-modal-error\">Swaps are not yet available for smart (passkey) wallets.</div>\n )}\n\n <div className=\"pollar-swap-panels\">\n <section className=\"pollar-swap-panel\" aria-labelledby=\"pollar-swap-pay-label\">\n <div className=\"pollar-swap-panel-heading\">\n <span id=\"pollar-swap-pay-label\" className=\"pollar-swap-panel-label\">\n You pay\n </span>\n <span className=\"pollar-swap-balance\">Balance: {formatAmount(selectedSell?.available)}</span>\n </div>\n <div className=\"pollar-swap-panel-main\">\n <input\n className=\"pollar-swap-amount\"\n type=\"text\"\n inputMode=\"decimal\"\n aria-label=\"Amount to pay\"\n placeholder=\"0.00\"\n value={amount}\n disabled={configLoading || isLoadingData}\n onChange={(event) => onAmountChange(event.target.value)}\n />\n <div className=\"pollar-swap-panel-selector\">\n <AssetPill\n label=\"Asset to pay\"\n value={sellKey}\n options={sellOptions}\n disabled={configLoading || isLoadingData}\n onChange={selectSell}\n />\n <button\n type=\"button\"\n className=\"pollar-swap-max\"\n onClick={onMax}\n disabled={!selectedSell?.available || configLoading || isLoadingData}\n >\n Max\n </button>\n </div>\n </div>\n </section>\n\n <button\n type=\"button\"\n className=\"pollar-swap-reverse\"\n onClick={onReverse}\n disabled={!selectedSell || !selectedBuy}\n aria-label=\"Swap pay and receive assets\"\n title=\"Swap pay and receive assets\"\n >\n <svg width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\" aria-hidden>\n <path\n d=\"M5 3v10M5 3 2.5 5.5M5 3l2.5 2.5M12 14V4M12 14l2.5-2.5M12 14 9.5 11.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n <section className=\"pollar-swap-panel\" aria-labelledby=\"pollar-swap-receive-label\">\n <div className=\"pollar-swap-panel-heading\">\n <span id=\"pollar-swap-receive-label\" className=\"pollar-swap-panel-label\">\n You receive\n </span>\n <span className=\"pollar-swap-balance\">Balance: {formatAmount(selectedBuy?.available)}</span>\n </div>\n <div className=\"pollar-swap-panel-main\">\n <div className={`pollar-swap-output${quoteLoading ? ' is-loading' : ''}`} aria-live=\"polite\">\n {quoteLoading ? <span className=\"pollar-spinner pollar-spinner-sm\" /> : formatAmount(quote?.amountOut)}\n </div>\n <div className=\"pollar-swap-panel-selector\">\n <AssetPill\n label=\"Asset to receive\"\n value={buyKey}\n options={buyOptions}\n disabled={configLoading || isLoadingData}\n onChange={selectBuy}\n />\n <span className=\"pollar-swap-panel-note\">Quoted amount</span>\n </div>\n </div>\n </section>\n </div>\n\n {/* A buy token the app has not enabled, by code and issuer */}\n <div className=\"pollar-swap-custom-area\">\n {customOpen ? (\n <div className=\"pollar-swap-custom\">\n <input\n className=\"pollar-input\"\n type=\"text\"\n placeholder=\"Code (e.g. USDC)\"\n value={customCode}\n onChange={(e) => setCustomCode(e.target.value)}\n />\n <input\n className=\"pollar-input\"\n type=\"text\"\n placeholder=\"Issuer (G...)\"\n value={customIssuer}\n onChange={(e) => setCustomIssuer(e.target.value)}\n />\n {customError && <div className=\"pollar-modal-error\">{customError}</div>}\n <div className=\"pollar-swap-custom-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={submitCustomToken}>\n Add token\n </button>\n <button\n type=\"button\"\n className=\"pollar-swap-custom-cancel\"\n onClick={() => {\n setCustomOpen(false);\n setCustomError('');\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <button\n type=\"button\"\n className=\"pollar-swap-custom-toggle\"\n disabled={configLoading}\n onClick={() => setCustomOpen(true)}\n >\n + Add a token by code / issuer\n </button>\n )}\n </div>\n\n <div className=\"pollar-swap-rate-row\">\n <div className=\"pollar-swap-rate\" aria-live=\"polite\">\n {rate && selectedSell && selectedBuy ? (\n <>\n 1 {selectedSell.code} ≈ {rate} {selectedBuy.code}\n </>\n ) : quoteLoading ? (\n 'Updating rate…'\n ) : (\n 'Exchange rate unavailable'\n )}\n </div>\n {configLoading ? (\n <div className=\"pollar-swap-route-pill\">\n <span className=\"pollar-spinner pollar-spinner-sm\" /> Loading\n </div>\n ) : (\n <label className=\"pollar-swap-route-wrap\">\n <span className=\"sr-only\">Route</span>\n <select\n className=\"pollar-swap-route-pill\"\n aria-label=\"Route\"\n value={provider}\n disabled={providers.length === 0}\n onChange={(event) => onProviderChange(event.target.value as SwapProvider)}\n >\n {providers.length === 0 ? (\n <option value={provider}>{PROVIDER_LABELS[provider]}</option>\n ) : (\n providers.map((p) => (\n <option key={p} value={p}>\n {PROVIDER_LABELS[p]}\n </option>\n ))\n )}\n </select>\n </label>\n )}\n </div>\n\n {!quoteLoading && quoteError && <div className=\"pollar-modal-error\">{quoteError}</div>}\n {!quoteLoading && !quoteError && !quote && selectedSell && selectedBuy && !!amount && (\n <div className=\"pollar-send-hint\">No route found for this pair.</div>\n )}\n {quote && (\n <div className=\"pollar-swap-quote\">\n <div className=\"pollar-swap-quote-row\">\n <span>Minimum received</span>\n <strong>\n {formatAmount(quote.minReceived)} {selectedBuy?.code}\n </strong>\n </div>\n <div className=\"pollar-swap-quote-row\">\n <span>Price impact</span>\n <strong>{quote.priceImpactPct}%</strong>\n </div>\n <div className=\"pollar-swap-quote-row\">\n <span>Route</span>\n <strong>{PROVIDER_LABELS[quote.provider]}</strong>\n </div>\n </div>\n )}\n {buyNeedsTrustline && selectedBuy && (\n <div className=\"pollar-swap-trustline-notice\">\n To receive {selectedBuy.code} your wallet needs a trustline. Swapping will create it first (~0.5 XLM reserve,\n refundable if you later remove it).\n </div>\n )}\n {sameAsset && <div className=\"pollar-modal-error\">Choose two different assets to swap.</div>}\n {formError && <div className=\"pollar-modal-error\">{formError}</div>}\n\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={onSwap} disabled={!canSwap}>\n {buyNeedsTrustline ? 'Create trustline & swap' : 'Swap'}\n </button>\n </div>\n </>\n )}\n\n {step === 'tx' && (\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={() => {}}\n onToggleXdr={onToggleXdr}\n onCopyHash={onCopyHash}\n onRetry={onRetry}\n onDone={onDone}\n />\n )}\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { SwapProvider, SwapQuote, SwapQuoteParams, SwapToken, SwapVenue } from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport '../transaction-modal/TransactionModal.css';\nimport '../send-modal/SendModal.css';\nimport './SwapModal.css';\nimport { SwapAssetOption, SwapModalTemplate } from './SwapModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface SwapModalProps {\n onClose: () => void;\n}\n\n/** Debounce (ms) before re-quoting as the user edits the amount / assets. */\nconst QUOTE_DEBOUNCE_MS = 400;\n\ntype AssetLike = { type: 'native' | 'credit_alphanum4' | 'credit_alphanum12'; code: string; issuer?: string | undefined };\n\nfunction toRef(a: AssetLike): SwapQuoteParams['sellAsset'] {\n if (a.type === 'native') return { type: 'native' };\n if (a.type === 'credit_alphanum4') return { type: 'credit_alphanum4', code: a.code, issuer: a.issuer! };\n return { type: 'credit_alphanum12', code: a.code, issuer: a.issuer! };\n}\n\n/** A catalog token (code + issuer) -> the asset ref, picking the alphanum width. */\nfunction catalogRef(code: string, issuer: string): SwapQuoteParams['sellAsset'] {\n return code.length <= 4 ? { type: 'credit_alphanum4', code, issuer } : { type: 'credit_alphanum12', code, issuer };\n}\n\nexport function SwapModal({ onClose }: SwapModalProps) {\n const {\n getSwapConfig,\n getSwapTokens,\n getSwapQuote,\n swap,\n walletBalance,\n refreshWalletBalance,\n enabledAssets,\n refreshAssets,\n tx: transaction,\n wallet,\n network,\n styles,\n } = usePollar();\n\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const smartUnsupported = wallet?.custody === 'smart';\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<'form' | 'tx'>('form');\n const [selectedSell, setSelectedSell] = useState<SwapAssetOption | null>(null);\n const [selectedBuy, setSelectedBuy] = useState<SwapAssetOption | null>(null);\n const [amount, setAmount] = useState('');\n const [provider, setProvider] = useState<SwapProvider>('auto');\n const [venues, setVenues] = useState<SwapVenue[] | null>(null); // null = config loading\n const [catalogTokens, setCatalogTokens] = useState<SwapToken[]>([]);\n // Tokens the user pasted by code+issuer (not in the app catalog). Local only.\n const [customTokens, setCustomTokens] = useState<SwapAssetOption[]>([]);\n const [quotes, setQuotes] = useState<SwapQuote[]>([]);\n const [quoteLoading, setQuoteLoading] = useState(false);\n const [quoteError, setQuoteError] = useState('');\n const [formError, setFormError] = useState('');\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Fixed default slippage (0.5%). Exposed as a constant for now; an advanced\n // control can drive this later without touching the quote/execute wiring.\n const slippageBps = 50;\n\n useEffect(() => {\n void refreshWalletBalance();\n void refreshAssets();\n }, [refreshWalletBalance, refreshAssets]);\n\n // Which venues this app exposes (operator config intersected with server capability).\n const loadConfig = useCallback(() => {\n setVenues(null); // back to loading\n return getSwapConfig()\n .then(setVenues)\n .catch(() => setVenues([])); // treat a failed config as \"unavailable\"\n }, [getSwapConfig]);\n\n useEffect(() => {\n void loadConfig();\n }, [loadConfig]);\n\n // Curated \"buy\" catalog tokens the app opted into (may lack a trustline).\n const loadCatalog = useCallback(\n () =>\n getSwapTokens()\n .then(setCatalogTokens)\n .catch(() => setCatalogTokens([])),\n [getSwapTokens],\n );\n\n useEffect(() => {\n void loadCatalog();\n }, [loadCatalog]);\n\n // Re-pull everything the modal shows: balances, app assets, config and catalog.\n function handleRefresh() {\n void refreshWalletBalance();\n void refreshAssets();\n void loadConfig();\n void loadCatalog();\n }\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n const balances = walletBalance.step === 'loaded' ? walletBalance.data.balances : [];\n const assetRecords = enabledAssets.step === 'loaded' ? enabledAssets.data.assets : [];\n const isLoadingData = walletBalance.step === 'loading' || enabledAssets.step === 'loading';\n const availableFor = (code: string, issuer?: string): string | undefined =>\n balances.find((b) => b.code === code && (b.issuer ?? '') === (issuer ?? ''))?.available ?? undefined;\n\n // Sell: native XLM + every asset the wallet has a trustline for, even at a 0\n // balance - so the user always sees what they hold and knows when to fund\n // (the amount field guards against overselling). Buy: app-enabled assets.\n // Swap is Stellar-only, so the guard drops every non-Stellar balance and\n // narrows `type` for toRef(). It has to test `chain`, not `type`: SOL/POL\n // report `type: 'native'` exactly like XLM, and a Solana/Polygon token reports\n // `type: 'token'` with no `trustlineRemoved`, so neither can be told apart\n // from a Stellar row by `type` alone.\n const sellOptions: SwapAssetOption[] = balances\n .filter(\n (b): b is typeof b & { type: 'native' | 'credit_alphanum4' | 'credit_alphanum12' } =>\n (b.chain === undefined || b.chain === 'STELLAR') &&\n (b.type === 'native' || ((b.type === 'credit_alphanum4' || b.type === 'credit_alphanum12') && !b.trustlineRemoved)),\n )\n // A null `available` (chain unreadable) maps to undefined - \"unknown\", which\n // the option already models - rather than to a 0 that would read as \"empty\".\n .map((b) => ({\n ref: toRef(b),\n code: b.code,\n issuer: b.issuer,\n available: b.available ?? undefined,\n enabledInApp: b.enabledInApp,\n }));\n\n const buyKeyOfSell = selectedSell ? `${selectedSell.code}:${selectedSell.issuer ?? 'native'}` : '';\n const optKey = (o: { code: string; issuer?: string | undefined }) => `${o.code}:${o.issuer ?? 'native'}`;\n // Buy list = the app's enabled assets, plus curated catalog tokens the app\n // opted into (deduped; catalog tokens the wallet may not trust yet). Exclude\n // whatever is being sold.\n // Same Stellar-only guard as the sell list: the enabled-asset catalog is now\n // multichain, and a Polygon/Solana token (type 'token') has no Stellar asset\n // ref to swap with. The predicate both drops them and narrows `type` for toRef().\n const enabledBuy: SwapAssetOption[] = assetRecords\n .filter(\n (a): a is typeof a & { type: 'native' | 'credit_alphanum4' | 'credit_alphanum12' } =>\n (a.chain === undefined || a.chain === 'STELLAR') &&\n (a.type === 'native' || a.type === 'credit_alphanum4' || a.type === 'credit_alphanum12'),\n )\n .map((a) => ({\n ref: toRef(a),\n code: a.code,\n issuer: a.issuer,\n available: availableFor(a.code, a.issuer),\n enabledInApp: a.enabledInApp,\n }));\n const enabledKeys = new Set(enabledBuy.map(optKey));\n const catalogBuy: SwapAssetOption[] = catalogTokens\n .map((tk) => ({\n ref: catalogRef(tk.code, tk.issuer),\n code: tk.code,\n issuer: tk.issuer,\n available: availableFor(tk.code, tk.issuer),\n enabledInApp: false,\n }))\n .filter((o) => !enabledKeys.has(optKey(o)));\n const knownKeys = new Set([...enabledKeys, ...catalogBuy.map(optKey)]);\n const customBuy = customTokens\n .filter((o) => !knownKeys.has(optKey(o)))\n .map((o) => ({ ...o, available: availableFor(o.code, o.issuer) }));\n const buyOptions: SwapAssetOption[] = [...enabledBuy, ...catalogBuy, ...customBuy].filter(\n (o) => optKey(o) !== buyKeyOfSell || optKey(o) === (selectedBuy ? optKey(selectedBuy) : ''),\n );\n\n // Auto-select the first sell / buy asset once options are available, and keep a\n // valid selection if the list changes - so the pickers never sit empty.\n useEffect(() => {\n if (sellOptions.length === 0) return;\n if (!selectedSell || !sellOptions.some((o) => optKey(o) === optKey(selectedSell))) {\n setSelectedSell(sellOptions[0]!);\n }\n }, [sellOptions, selectedSell]);\n\n useEffect(() => {\n if (buyOptions.length === 0) return;\n if (!selectedBuy || !buyOptions.some((o) => optKey(o) === optKey(selectedBuy))) {\n setSelectedBuy(buyOptions[0]!);\n }\n }, [buyOptions, selectedBuy]);\n\n // Add a user-pasted token (code + issuer) to the buy list and select it.\n // Returns an error message, or null on success.\n function addCustomToken(code: string, issuer: string): string | null {\n const c = code.trim().toUpperCase();\n const i = issuer.trim();\n if (c.length < 1 || c.length > 12) return 'Code must be 1-12 characters';\n if (i.length !== 56 || !i.startsWith('G')) return 'Issuer must be a Stellar address (G..., 56 chars)';\n const opt: SwapAssetOption = { ref: catalogRef(c, i), code: c, issuer: i, enabledInApp: false };\n setCustomTokens((prev) => (prev.some((o) => optKey(o) === optKey(opt)) ? prev : [...prev, opt]));\n setSelectedBuy(opt);\n return null;\n }\n\n // Does buying `selectedBuy` require creating a trustline first? Native never;\n // a credit asset the wallet already trusts (in enabledAssets with\n // trustlineEstablished) doesn't; anything else (incl. catalog tokens) does.\n // Smart wallets hold SAC tokens (no classic trustlines) so it never applies.\n const buyNeedsTrustline = (() => {\n if (!selectedBuy || smartUnsupported) return false;\n if (selectedBuy.ref.type === 'native') return false;\n const rec = assetRecords.find((a) => a.code === selectedBuy.code && a.issuer === selectedBuy.issuer);\n return !rec?.trustlineEstablished;\n })();\n\n const configLoading = venues === null;\n const swapUnavailable = venues !== null && venues.length === 0;\n // Offer \"Auto\" (best of the enabled set) plus each configured venue.\n const providers: SwapProvider[] = venues && venues.length > 0 ? (['auto', ...venues] as SwapProvider[]) : [];\n const quote = quotes[0] ?? null;\n\n // Re-quote (debounced) whenever the pair / amount / route changes.\n useEffect(() => {\n if (\n step !== 'form' ||\n swapUnavailable ||\n configLoading ||\n !selectedSell ||\n !selectedBuy ||\n !amount ||\n parseFloat(amount) <= 0\n ) {\n setQuotes([]);\n setQuoteError('');\n setQuoteLoading(false);\n return;\n }\n let cancelled = false;\n setQuoteLoading(true);\n setQuoteError('');\n const t = setTimeout(async () => {\n try {\n const qs = await getSwapQuote({\n sellAsset: selectedSell.ref,\n buyAsset: selectedBuy.ref,\n amount,\n provider,\n slippageBps,\n });\n if (!cancelled) setQuotes(qs);\n } catch (e) {\n if (!cancelled) {\n setQuotes([]);\n setQuoteError(e instanceof Error ? e.message : 'Failed to fetch quote');\n }\n } finally {\n if (!cancelled) setQuoteLoading(false);\n }\n }, QUOTE_DEBOUNCE_MS);\n return () => {\n cancelled = true;\n clearTimeout(t);\n };\n }, [step, swapUnavailable, configLoading, selectedSell, selectedBuy, amount, provider, getSwapQuote]);\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n const explorerUrl = hash ? `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}` : null;\n\n const IN_FLIGHT_STEPS = [\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n ] as const;\n const isInProgress = (IN_FLIGHT_STEPS as readonly string[]).includes(transaction.step);\n const showBack = step === 'tx' && (transaction.step === 'error' || transaction.step === 'success') && !isInProgress;\n\n const txTitle = isInProgress\n ? 'Swapping…'\n : transaction.step === 'success'\n ? 'Swapped!'\n : transaction.step === 'error'\n ? 'Swap failed'\n : 'Confirm Swap';\n\n async function handleSwap() {\n setFormError('');\n if (smartUnsupported) {\n setFormError('Swaps are not yet supported for smart (passkey) wallets');\n return;\n }\n if (!selectedSell || !selectedBuy) {\n setFormError('Select both assets');\n return;\n }\n const parsed = parseFloat(amount);\n if (!amount || isNaN(parsed) || parsed <= 0) {\n setFormError('Enter a valid amount');\n return;\n }\n if (selectedSell.available !== undefined && parsed > parseFloat(selectedSell.available)) {\n setFormError('Insufficient balance');\n return;\n }\n if (!quote) {\n setFormError('No route available for this pair');\n return;\n }\n setStep('tx');\n await swap(quote);\n }\n\n async function handleRetry() {\n if (transaction.step === 'error' && quote) await swap(quote);\n }\n\n function handleMax() {\n if (selectedSell?.available !== undefined) setAmount(selectedSell.available);\n }\n\n function handleReverse() {\n if (!selectedSell || !selectedBuy) return;\n const previousSell = selectedSell;\n setSelectedSell(selectedBuy);\n setSelectedBuy(previousSell);\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n function handleBack() {\n setStep('form');\n setShowXdr(false);\n setCopied(false);\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={!isInProgress ? onClose : undefined}>\n <SwapModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n step={step}\n txTitle={txTitle}\n sellOptions={sellOptions}\n buyOptions={buyOptions}\n selectedSell={selectedSell}\n selectedBuy={selectedBuy}\n amount={amount}\n provider={provider}\n providers={providers}\n quote={quote}\n quoteLoading={quoteLoading}\n quoteError={quoteError}\n formError={formError}\n isLoadingData={isLoadingData}\n smartUnsupported={smartUnsupported}\n configLoading={configLoading}\n swapUnavailable={swapUnavailable}\n buyNeedsTrustline={buyNeedsTrustline}\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n showBack={showBack}\n isInProgress={isInProgress}\n onClose={onClose}\n onBack={handleBack}\n onRefresh={handleRefresh}\n onSelectSell={setSelectedSell}\n onSelectBuy={setSelectedBuy}\n onReverse={handleReverse}\n onMax={handleMax}\n onAddCustomToken={addCustomToken}\n onAmountChange={setAmount}\n onProviderChange={setProvider}\n onSwap={() => void handleSwap()}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={() => void handleRetry()}\n onDone={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { EarnOpportunity, EarnPosition, EarnProviderId } from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { TxStatusView } from '../transaction-modal/TxStatusView';\nimport '../shared.css';\nimport '../transaction-modal/TransactionModal.css';\nimport '../send-modal/SendModal.css';\nimport '../swap-modal/SwapModal.css';\nimport './EarnModal.css';\n\ninterface EarnModalProps {\n onClose: () => void;\n}\n\n/** Poll interval (ms) for the live position + APY. */\nconst POSITION_POLL_MS = 10000;\n\nconst PROVIDER_LABELS: Record<EarnProviderId, string> = {\n blend: 'Blend',\n defindex: 'DeFindex',\n};\n\nconst IN_FLIGHT_STEPS = [\n 'building',\n 'signing',\n 'submitting',\n 'submitted',\n 'signing-submitting',\n 'building-signing-submitting',\n] as const;\n\nfunction formatAmount(value: string): string {\n const n = parseFloat(value);\n return isNaN(n) ? value : n.toLocaleString(undefined, { maximumFractionDigits: 7 });\n}\n\nexport function EarnModal({ onClose }: EarnModalProps) {\n const {\n getEarnProviders,\n getEarnOpportunities,\n getEarnPosition,\n earnDeposit,\n earnWithdraw,\n tx: transaction,\n wallet,\n walletBalance,\n refreshWalletBalance,\n enabledAssets,\n refreshAssets,\n setTrustline,\n network,\n styles,\n } = usePollar();\n\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const smartUnsupported = wallet?.custody === 'smart';\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [step, setStep] = useState<'form' | 'tx'>('form');\n const [tab, setTab] = useState<'deposit' | 'withdraw'>('deposit');\n const [providers, setProviders] = useState<EarnProviderId[] | null>(null); // null = loading\n const [provider, setProvider] = useState<EarnProviderId | null>(null);\n const [opportunities, setOpportunities] = useState<EarnOpportunity[]>([]);\n const [opportunityId, setOpportunityId] = useState('');\n const [position, setPosition] = useState<EarnPosition | null>(null);\n const [amount, setAmount] = useState('');\n const [loadingOpps, setLoadingOpps] = useState(false);\n const [formError, setFormError] = useState('');\n const [refreshing, setRefreshing] = useState(false);\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // --- Providers ------------------------------------------------------------\n const loadProviders = useCallback(() => {\n setProviders(null);\n return getEarnProviders()\n .then((ps) => {\n setProviders(ps);\n setProvider((cur) => cur ?? ps[0] ?? null);\n })\n .catch(() => setProviders([]));\n }, [getEarnProviders]);\n\n useEffect(() => {\n void loadProviders();\n }, [loadProviders]);\n\n // The wallet balance drives the Deposit tab's \"In your wallet\" row + Max; the\n // enabled assets drive the deposit-asset trustline check.\n useEffect(() => {\n void refreshWalletBalance();\n void refreshAssets();\n }, [refreshWalletBalance, refreshAssets]);\n\n // --- Opportunities (per provider) -------------------------------------------\n useEffect(() => {\n if (!provider) return;\n let cancelled = false;\n setLoadingOpps(true);\n getEarnOpportunities(provider)\n .then((opps) => {\n if (cancelled) return;\n setOpportunities(opps);\n setOpportunityId((cur) => (opps.some((o) => o.id === cur) ? cur : (opps[0]?.id ?? '')));\n })\n .catch(() => {\n if (!cancelled) setOpportunities([]);\n })\n .finally(() => {\n if (!cancelled) setLoadingOpps(false);\n });\n return () => {\n cancelled = true;\n };\n }, [provider, getEarnOpportunities]);\n\n const selectedOpportunity = opportunities.find((o) => o.id === opportunityId) ?? null;\n\n // --- Position (live, polled) ------------------------------------------------\n const refreshPosition = useCallback(() => {\n if (!provider || !opportunityId || !wallet) return;\n getEarnPosition({ provider, opportunity: opportunityId })\n .then(setPosition)\n .catch(() => {\n /* leave the last snapshot on a transient read error */\n });\n }, [provider, opportunityId, wallet, getEarnPosition]);\n\n useEffect(() => {\n setPosition(null);\n refreshPosition();\n }, [refreshPosition]);\n\n useEffect(() => {\n if (step !== 'form' || !provider || !opportunityId) return;\n const id = setInterval(refreshPosition, POSITION_POLL_MS);\n return () => clearInterval(id);\n }, [step, provider, opportunityId, refreshPosition]);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n // --- Derived ----------------------------------------------------------------\n const providersLoading = providers === null;\n const earnUnavailable = providers !== null && providers.length === 0;\n const withdrawUnit = position?.withdrawUnit ?? 'asset';\n const assetCode = selectedOpportunity?.asset.code ?? '';\n const amountUnitLabel = tab === 'deposit' ? assetCode : withdrawUnit === 'shares' ? 'shares' : assetCode;\n\n // The wallet's spendable balance of the selected opportunity's asset (native\n // XLM matches by type; issued assets by code + issuer). `null` = unknown yet.\n const walletAvailable = (() => {\n if (!selectedOpportunity) return null;\n const balances = walletBalance.step === 'loaded' ? walletBalance.data.balances : [];\n const issuer = selectedOpportunity.asset.issuer;\n const rec = balances.find((b) => (issuer === null ? b.type === 'native' : b.code === assetCode && b.issuer === issuer));\n return rec ? rec.available : null;\n })();\n\n // Depositing an issued asset (e.g. USDC) needs the wallet to trust it first.\n // Native XLM and pure Soroban tokens (no classic issuer) never do; smart\n // (C-address) wallets hold SAC tokens, so no classic trustline applies. When\n // needed, the deposit runs as two signatures: trustline, then deposit.\n const depositAssetRecord = (() => {\n if (!selectedOpportunity?.asset.issuer || enabledAssets.step !== 'loaded') return undefined;\n // Stellar-only: the catalog is multichain now, and Earn (DeFindex/Blend)\n // settles on Stellar. Chain is undefined on the v1 shape, so absent = Stellar.\n return enabledAssets.data.assets.find(\n (a) =>\n (a.chain === undefined || a.chain === 'STELLAR') &&\n a.code === assetCode &&\n a.issuer === selectedOpportunity.asset.issuer,\n );\n })();\n const depositNeedsTrustline =\n tab === 'deposit' && !smartUnsupported && !!selectedOpportunity?.asset.issuer && !depositAssetRecord?.trustlineEstablished;\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n const explorerUrl = hash ? `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}` : null;\n\n const isInProgress = (IN_FLIGHT_STEPS as readonly string[]).includes(transaction.step);\n const showBack = step === 'tx' && (transaction.step === 'error' || transaction.step === 'success') && !isInProgress;\n\n const txTitle = isInProgress\n ? tab === 'deposit'\n ? 'Depositing…'\n : 'Withdrawing…'\n : transaction.step === 'success'\n ? 'Done!'\n : transaction.step === 'error'\n ? tab === 'deposit'\n ? 'Deposit failed'\n : 'Withdraw failed'\n : 'Confirm';\n\n // Over-spend guard: deposit can't exceed the wallet's available balance;\n // withdraw can't exceed the position. Skipped while the relevant figure is\n // still unknown (`null`) so a slow balance read doesn't block a valid amount.\n const parsedAmount = parseFloat(amount);\n const exceedsAvailable =\n tab === 'deposit'\n ? walletAvailable != null && parsedAmount > parseFloat(walletAvailable)\n : position != null && parsedAmount > parseFloat(position.withdrawable);\n\n const canSubmit =\n !smartUnsupported &&\n !!provider &&\n !!opportunityId &&\n !!amount &&\n parsedAmount > 0 &&\n !exceedsAvailable &&\n !providersLoading &&\n !loadingOpps;\n\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n // --- Actions ----------------------------------------------------------------\n async function handleSubmit() {\n setFormError('');\n if (smartUnsupported) {\n setFormError('Earn is not yet supported for smart (passkey) wallets');\n return;\n }\n if (!provider || !opportunityId) {\n setFormError('Select a vault or pool');\n return;\n }\n const parsed = parseFloat(amount);\n if (!amount || isNaN(parsed) || parsed <= 0) {\n setFormError('Enter a valid amount');\n return;\n }\n if (tab === 'deposit' && walletAvailable != null && parsed > parseFloat(walletAvailable)) {\n setFormError('Amount exceeds your wallet balance');\n return;\n }\n if (tab === 'withdraw' && position && parsed > parseFloat(position.withdrawable)) {\n setFormError('Amount exceeds your position');\n return;\n }\n setStep('tx');\n\n // Deposit of an issued asset needs its trustline first (native never does).\n // Establish it, then deposit - two signatures, like swap.\n if (tab === 'deposit' && depositNeedsTrustline && selectedOpportunity?.asset.issuer) {\n // Sponsorship is derived automatically from the app config now - no flag.\n const tl = await setTrustline({ code: assetCode, issuer: selectedOpportunity.asset.issuer });\n if (tl.status === 'error') {\n setFormError(`Trustline for ${assetCode} failed: ${tl.details ?? 'unknown error'}`);\n setStep('form');\n return;\n }\n await refreshAssets();\n }\n\n const params = { provider, opportunity: opportunityId, amount };\n const outcome = tab === 'deposit' ? await earnDeposit(params) : await earnWithdraw(params);\n if (outcome.status === 'success' || outcome.status === 'pending') {\n setAmount('');\n refreshPosition();\n }\n }\n\n async function handleRetry() {\n if (transaction.step !== 'error' || !provider || !opportunityId) return;\n const params = { provider, opportunity: opportunityId, amount };\n if (tab === 'deposit') await earnDeposit(params);\n else await earnWithdraw(params);\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n function handleBack() {\n setStep('form');\n setShowXdr(false);\n setCopied(false);\n refreshPosition();\n }\n\n // Re-fetch everything the modal shows on demand: the opportunities for the\n // current provider (fresh APYs), the wallet's position, and the wallet balance\n // (\"In your wallet\" + Max). Leaves the current data in place on a transient\n // read error.\n async function handleRefresh() {\n if (refreshing || !provider) return;\n setRefreshing(true);\n try {\n void refreshWalletBalance();\n const opps = await getEarnOpportunities(provider);\n setOpportunities(opps);\n setOpportunityId((cur) => (opps.some((o) => o.id === cur) ? cur : (opps[0]?.id ?? '')));\n refreshPosition();\n } catch {\n /* transient - keep the current snapshot */\n } finally {\n setRefreshing(false);\n }\n }\n\n const title = step === 'form' ? 'Earn' : txTitle;\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={!isInProgress ? onClose : undefined}>\n <div\n className=\"pollar-modal-card pollar-send-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {showBack && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={handleBack} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <h2 className=\"pollar-modal-title\">{title}</h2>\n </div>\n <div className=\"pollar-modal-header-actions\">\n {step === 'form' && !earnUnavailable && !smartUnsupported && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={() => void handleRefresh()}\n disabled={refreshing || providersLoading}\n aria-label=\"Refresh\"\n >\n <svg\n className={refreshing ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n {!isInProgress && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n\n {step === 'form' && earnUnavailable && <div className=\"pollar-modal-error\">Earn is not available for this app.</div>}\n\n {step === 'form' && !earnUnavailable && (\n <>\n {smartUnsupported && (\n <div className=\"pollar-modal-error\">Earn is not yet available for smart (passkey) wallets.</div>\n )}\n\n {/* Deposit / Withdraw tabs */}\n <div className=\"pollar-tabs\">\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={tab === 'deposit'}\n onClick={() => {\n setTab('deposit');\n setFormError('');\n }}\n >\n Deposit\n </button>\n <button\n type=\"button\"\n className=\"pollar-tab\"\n data-active={tab === 'withdraw'}\n onClick={() => {\n setTab('withdraw');\n setFormError('');\n }}\n >\n Withdraw\n </button>\n </div>\n\n {/* Provider */}\n {providers && providers.length > 1 && (\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\">Provider</label>\n <select\n className=\"pollar-input pollar-send-select\"\n value={provider ?? ''}\n onChange={(e) => setProvider(e.target.value as EarnProviderId)}\n >\n {providers.map((p) => (\n <option key={p} value={p}>\n {PROVIDER_LABELS[p]}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Opportunity */}\n <div className=\"pollar-send-field\">\n <label className=\"pollar-send-label\">{provider === 'defindex' ? 'Vault' : 'Pool'}</label>\n {loadingOpps || providersLoading ? (\n <div className=\"pollar-input pollar-select-loading\">\n <span className=\"pollar-spinner pollar-spinner-sm\" />\n <span>Loading options…</span>\n </div>\n ) : (\n <select\n className=\"pollar-input pollar-send-select\"\n value={opportunityId}\n disabled={opportunities.length === 0}\n onChange={(e) => setOpportunityId(e.target.value)}\n >\n {opportunities.length === 0 ? (\n <option value=\"\">None available</option>\n ) : (\n opportunities.map((o) => (\n <option key={o.id} value={o.id}>\n {o.name} · {o.apy.toFixed(2)}% APY\n </option>\n ))\n )}\n </select>\n )}\n </div>\n\n {/* Live position panel */}\n {selectedOpportunity && (\n <div className=\"pollar-swap-quote\">\n {tab === 'deposit' && (\n <div className=\"pollar-swap-quote-row\">\n <span className=\"pollar-send-hint\">In your wallet</span>\n <span>\n {walletAvailable != null ? formatAmount(walletAvailable) : '…'} {assetCode}\n </span>\n </div>\n )}\n <div className=\"pollar-swap-quote-row\">\n <span className=\"pollar-send-hint\">Your position</span>\n <span>\n {position ? formatAmount(position.balance) : '…'} {assetCode}\n </span>\n </div>\n <div className=\"pollar-swap-quote-row\">\n <span className=\"pollar-send-hint\">APY</span>\n <span className=\"pollar-earn-live\">{selectedOpportunity.apy.toFixed(2)}%</span>\n </div>\n </div>\n )}\n\n {/* Amount */}\n <div className=\"pollar-send-field\">\n <div className=\"pollar-send-label-row\">\n <label className=\"pollar-send-label\">{tab === 'deposit' ? 'Amount' : 'Withdraw amount'}</label>\n {tab === 'deposit' && walletAvailable != null && (\n <button type=\"button\" className=\"pollar-swap-custom-toggle\" onClick={() => setAmount(walletAvailable)}>\n Max: {formatAmount(walletAvailable)} {amountUnitLabel}\n </button>\n )}\n {tab === 'withdraw' && position && (\n <button type=\"button\" className=\"pollar-swap-custom-toggle\" onClick={() => setAmount(position.withdrawable)}>\n Max: {formatAmount(position.withdrawable)} {amountUnitLabel}\n </button>\n )}\n </div>\n <div className=\"pollar-earn-amount\">\n <input\n className=\"pollar-input\"\n type=\"text\"\n inputMode=\"decimal\"\n placeholder=\"0.00\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n />\n {amountUnitLabel && <span className=\"pollar-earn-amount-unit\">{amountUnitLabel}</span>}\n </div>\n </div>\n\n {formError && <div className=\"pollar-modal-error\">{formError}</div>}\n\n {depositNeedsTrustline && selectedOpportunity && (\n <div className=\"pollar-swap-trustline-notice\">\n To deposit {assetCode} your wallet needs a trustline. This will create it first (~0.5 XLM reserve, refundable if\n you later remove it), then deposit — two signatures.\n </div>\n )}\n\n <div className=\"pollar-modal-actions\">\n <button className=\"pollar-btn-primary\" onClick={() => void handleSubmit()} disabled={!canSubmit}>\n {tab === 'deposit' ? (depositNeedsTrustline ? 'Enable trustline & deposit' : 'Deposit') : 'Withdraw'}\n </button>\n </div>\n </>\n )}\n\n {step === 'tx' && (\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={() => {}}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={() => void handleRetry()}\n onDone={onClose}\n />\n )}\n\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","import type { CardHolder, CardRequirements, CardRequirementStep } from '@pollar/core';\n\n/**\n * A platform step the user must complete before a card provider: a KYC option, a\n * form, a registry option, or (for PROVIDER_REGISTRATION) the provider itself.\n */\nexport type PendingCardStep = {\n cardProviderId: string;\n type: CardRequirementStep['type'];\n optionId: string;\n progress?: { position: number; total: number };\n};\n\nconst nonEmpty = (value: unknown): value is string => typeof value === 'string' && !!value.trim();\n\n/** The step a cards call named in its 409, or null for any other error. */\nexport function requiredCardStep(error: unknown): PendingCardStep | null {\n if (!error || typeof error !== 'object') return null;\n const { code, body } = error as { code?: unknown; body?: unknown };\n if (code !== 'SDK_CARDS_REQUIREMENT_REQUIRED' || !body || typeof body !== 'object') return null;\n const { cardProviderId, requirementType, optionId } = body as Record<string, unknown>;\n if (!nonEmpty(cardProviderId) || !nonEmpty(optionId)) return null;\n if (\n requirementType === 'KYC' ||\n requirementType === 'FORM' ||\n requirementType === 'REGISTRY_CHECK' ||\n requirementType === 'PROVIDER_REGISTRATION'\n ) {\n return { cardProviderId, type: requirementType, optionId };\n }\n return null;\n}\n\n/** The step the provider's requirements name as next. */\nexport function pendingFromRequirement(cardProviderId: string, next: CardRequirementStep): PendingCardStep {\n return {\n cardProviderId,\n type: next.type,\n optionId: next.optionId,\n progress: { position: next.completed + 1, total: next.total },\n };\n}\n\n/** What a step held for review or rejected says; null when the user can act on it. */\nexport function blockedStepMessage(next: CardRequirementStep): string | null {\n if (next.type === 'REGISTRY_CHECK' && next.status === 'pending') return 'Your details are under review.';\n if (next.type !== 'KYC') return null;\n if (next.status === 'pending' && next.reviewReason) return 'Your verification is under review.';\n if (next.status === 'rejected') return 'Your verification was not approved.';\n return null;\n}\n\n/**\n * Which part of the card flow the user is at before the provider has their KYC:\n * `steps` while nobody signed them up or the platform's steps are pending,\n * `provider-form` when the provider's own KYC form is theirs to fill, null past\n * both or while the holder or the requirements are loading. A holder signed up\n * before the app added steps still owes them. With a PROVIDER_REGISTRATION step\n * the platform sends the provider's KYC itself, so the provider's form never shows;\n * a holder still NOT_STARTED there stays on `steps`, whose action re-reads where\n * the user stands, instead of a blank modal.\n */\nexport function cardStage(\n holder: Pick<CardHolder, 'kycStatus'> | null | undefined,\n requirements: Pick<CardRequirements, 'steps' | 'next'> | null | undefined,\n): 'steps' | 'provider-form' | null {\n if (holder === undefined || requirements === undefined) return null;\n if (holder === null || (holder.kycStatus === 'NOT_STARTED' && requirements?.next)) return 'steps';\n if (holder.kycStatus !== 'NOT_STARTED') return null;\n return requirements?.steps.some((step) => step.type === 'PROVIDER_REGISTRATION') ? 'steps' : 'provider-form';\n}\n","'use client';\n\nimport {\n isPollarApiError,\n type CardBalance,\n type CardDepositAddress,\n type CardFunding,\n type CardHolder,\n type CardIncomeRange,\n type CardInfo,\n type CardKycInput,\n type CardOccupation,\n type CardProvider,\n type CardRequirements,\n type CardSecrets,\n type CardTransaction,\n} from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { CopyButton, PollarModalFooter } from '../commons';\nimport { KycModal } from '../kyc-modal/KycModal';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport { ProviderRegistrationModal } from '../provider-registration-modal/ProviderRegistrationModal';\nimport { RegistryCheckModal } from '../registry-check-modal/RegistryCheckModal';\nimport { RequirementFormModal } from '../requirement-form-modal/RequirementFormModal';\nimport { blockedStepMessage, cardStage, pendingFromRequirement, requiredCardStep, type PendingCardStep } from './card-kyc';\nimport '../shared.css';\nimport '../send-modal/SendModal.css';\nimport './CardModal.css';\n\ninterface CardModalProps {\n onClose: () => void;\n}\n\n/** How often the holder is re-read while the provider's identity verification is pending. */\nconst KYC_POLL_MS = 5000;\n/** How long the revealed number stays on screen. */\nconst REVEAL_MS = 30_000;\nconst TX_LIMIT = 10;\n/** How often fundings in flight are re-read while the funding panel is open. */\nconst FUNDING_POLL_MS = 5_000;\nconst FUNDING_INFLIGHT = new Set(['CREATED', 'BURNED', 'ATTESTED', 'MINTED']);\n\n/** What each funding state means to the user: a title, and for one in flight its step and what it waits on. */\nconst FUNDING_COPY: Record<string, { title: string; step?: number; hint?: string }> = {\n CREATED: {\n title: 'Confirming your payment',\n step: 1,\n hint: 'Your USDC payment is being confirmed on Stellar. This takes a few seconds.',\n },\n BURNED: {\n title: 'Sending it to the card network',\n step: 2,\n hint: 'Your USDC left Stellar. Circle is confirming the transfer, usually in about a minute.',\n },\n ATTESTED: {\n title: 'Crossing to the card network',\n step: 3,\n hint: 'Transfer confirmed. Delivering the USDC to the card network.',\n },\n MINTED: {\n title: 'Arrived, crediting your card',\n step: 4,\n hint: 'The USDC reached the card provider, which is adding it to your card. This can take a few minutes.',\n },\n CREDITED: { title: 'Credited to your card' },\n FAILED: { title: 'Failed' },\n};\nconst FUNDING_STEPS = 4;\n\nconst INCOME_RANGES: { value: CardIncomeRange; label: string }[] = [\n { value: '0-1000', label: 'Up to 1,000 USD' },\n { value: '1000-5000', label: '1,000 to 5,000 USD' },\n { value: '5000-10000', label: '5,000 to 10,000 USD' },\n { value: '10000+', label: 'More than 10,000 USD' },\n];\n\nconst TX_LABELS: Record<string, string> = {\n deposit: 'Deposit',\n transactionTransfer: 'Bank deposit',\n spend: 'Purchase',\n spend_adjustment: 'Adjustment',\n fee: 'Fee',\n fee_refund: 'Fee refund',\n withdrawal: 'Withdrawal',\n card_insurance: 'Card issuance',\n};\n\nconst KYC_PENDING_COPY: Record<string, string> = {\n PENDING: 'Your information is being reviewed.',\n NEEDS_ACTION:\n 'Finish verifying your identity with the card provider: you will be asked for a photo of your document and a selfie.',\n IN_REVIEW: 'Your verification is under manual review. This can take a while.',\n};\n\nconst KYC_FINAL_COPY: Record<string, string> = {\n DENIED: 'Your verification was denied.',\n LOCKED: 'Your account is locked.',\n CANCELED: 'Your verification was canceled.',\n};\n\nconst emptyKyc: CardKycInput = {\n firstName: '',\n lastName: '',\n birthDate: '',\n nationalId: '',\n countryOfIssue: '',\n phoneCountryCode: '',\n phoneNumber: '',\n occupation: '',\n annualSalary: '1000-5000',\n accountPurpose: 'Personal expenses',\n expectedMonthlyVolume: '1000-5000',\n address: { line1: '', line2: '', city: '', region: '', postalCode: '', countryCode: '' },\n};\n\nfunction usd(cents: number | null | undefined): string {\n if (cents === null || cents === undefined) return '-';\n return (cents / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' });\n}\n\nfunction money(amount: string, currency: string): string {\n const n = Number(amount);\n try {\n return n.toLocaleString('en-US', { style: 'currency', currency });\n } catch {\n return `${n.toFixed(2)} ${currency}`;\n }\n}\n\nfunction groupPan(pan: string): string {\n return pan\n .replace(/\\s+/g, '')\n .replace(/(.{4})/g, '$1 ')\n .trim();\n}\n\n/** The provider's own words when it rejected something; our code otherwise. */\n/** Errors whose cause the user can act on, said plainly instead of the provider's raw message. */\nconst CARD_ERROR_COPY: Record<string, string> = {\n SDK_CARDS_PROVIDER_ERROR: 'The card provider is not responding right now. Please try again in a few minutes.',\n SDK_CARDS_IP_NOT_SUPPORTED:\n 'The card provider cannot accept your current connection (IPv6). Please try again from another network, for example Wi-Fi.',\n SDK_CARDS_PROVIDER_USER_TAKEN:\n 'This email is already registered with the card provider through another app. Use a different email to get a card here.',\n};\n\nfunction errorText(e: unknown, fallback: string): string {\n if (isPollarApiError(e)) {\n const known = CARD_ERROR_COPY[e.code];\n if (known) return known;\n const providerMessage = e.body.providerMessage;\n if (typeof providerMessage === 'string' && providerMessage) return providerMessage;\n const message = e.body.message;\n if (typeof message === 'string' && message) return message;\n return e.code;\n }\n return e instanceof Error && e.message ? e.message : fallback;\n}\n\nexport function CardModal({ onClose }: CardModalProps) {\n const { getClient, styles, wallet } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const [providers, setProviders] = useState<CardProvider[] | null>(null);\n const [holder, setHolder] = useState<CardHolder | null | undefined>(undefined);\n // undefined while loading; null when the provider has no steps or the server lacks the route.\n const [requirements, setRequirements] = useState<CardRequirements | null | undefined>(undefined);\n const [pendingStep, setPendingStep] = useState<PendingCardStep | null>(null);\n const stepAttempt = useRef<PendingCardStep | null>(null);\n const [cards, setCards] = useState<CardInfo[] | null>(null);\n const [balance, setBalance] = useState<CardBalance | null>(null);\n const [transactions, setTransactions] = useState<CardTransaction[] | null>(null);\n const [deposit, setDeposit] = useState<CardDepositAddress[] | null>(null);\n const [fundings, setFundings] = useState<CardFunding[] | null>(null);\n const [fundAmount, setFundAmount] = useState('');\n const [showManual, setShowManual] = useState(false);\n const [occupations, setOccupations] = useState<CardOccupation[]>([]);\n const [kyc, setKyc] = useState<CardKycInput>(emptyKyc);\n const [terms, setTerms] = useState(false);\n const [nickname, setNickname] = useState('');\n const [secrets, setSecrets] = useState<CardSecrets | null>(null);\n const [panel, setPanel] = useState<'card' | 'fund'>('card');\n const [busy, setBusy] = useState<string | null>(null);\n const [error, setError] = useState('');\n const revealTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const provider = providers?.[0] ?? null;\n const card = cards?.[0] ?? null;\n\n // --- Loading ----------------------------------------------------------------\n const loadHolder = useCallback(async () => {\n const h = await getClient().getCardHolder();\n setHolder(h);\n return h;\n }, [getClient]);\n\n /** The platform's steps for the provider. Null for a provider without any, and for a server without the route. */\n const loadRequirements = useCallback(\n async (cardProviderId: string) => {\n try {\n const r = await getClient().getCardRequirements({ cardProviderId });\n setRequirements(r);\n return r;\n } catch {\n setRequirements(null);\n return null;\n }\n },\n [getClient],\n );\n\n const loadCardData = useCallback(async () => {\n const client = getClient();\n const list = await client.getCards();\n if (list.length === 0) {\n setCards(list);\n return;\n }\n // The card, its balance and its movements land together: no card shown with an empty balance first.\n const [b, tx] = await Promise.all([client.getCardBalance(), client.getCardTransactions({ limit: TX_LIMIT })]);\n setBalance(b);\n setTransactions(tx.transactions);\n setCards(list);\n }, [getClient]);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const ps = await getClient().getCardProviders();\n if (cancelled) return;\n setProviders(ps);\n if (ps.length === 0) return;\n const [h] = await Promise.all([loadHolder(), loadRequirements(ps[0]!.id)]);\n if (cancelled) return;\n if (h?.kycStatus === 'APPROVED') await loadCardData();\n } catch (e) {\n if (!cancelled) {\n setProviders((cur) => cur ?? []);\n setError(errorText(e, 'Could not load your card'));\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [getClient, loadHolder, loadRequirements, loadCardData]);\n\n const stage = cardStage(holder, requirements);\n\n // Prefill the provider's own KYC form from the session profile when it is the next step.\n useEffect(() => {\n if (stage !== 'provider-form') return;\n const profile = getClient().getUserProfile();\n setKyc((k) => ({\n ...k,\n firstName: k.firstName || profile?.first_name || '',\n lastName: k.lastName || profile?.last_name || '',\n }));\n getClient()\n .getCardOccupations()\n .then(setOccupations)\n .catch(() => setOccupations([]));\n }, [stage, getClient]);\n\n // The provider's verification in progress: re-read the holder until it settles.\n const kycPending = holder ? holder.kycStatus in KYC_PENDING_COPY : false;\n useEffect(() => {\n if (!kycPending) return;\n const id = setInterval(() => {\n loadHolder()\n .then((h) => {\n if (h?.kycStatus === 'APPROVED') void loadCardData();\n })\n .catch(() => {\n /* transient; the next tick retries */\n });\n }, KYC_POLL_MS);\n return () => clearInterval(id);\n }, [kycPending, loadHolder, loadCardData]);\n\n useEffect(\n () => () => {\n if (revealTimer.current) clearTimeout(revealTimer.current);\n },\n [],\n );\n\n // --- Actions ------------------------------------------------------------------\n function openStep(step: PendingCardStep) {\n stepAttempt.current = step;\n setPendingStep(step);\n }\n\n async function run(key: string, work: () => Promise<void>, fallback: string) {\n if (busy) return;\n setBusy(key);\n setError('');\n try {\n await work();\n } catch (e) {\n // A step the platform asks for opens in place of the modal; anything else is shown.\n const step = requiredCardStep(e);\n if (step) openStep(step);\n else setError(errorText(e, fallback));\n } finally {\n setBusy(null);\n }\n }\n\n /** After a step: re-read where the user stands and, when the provider registered them, their holder. */\n async function afterStep() {\n if (!provider) return;\n const [h, r] = await Promise.all([loadHolder(), loadRequirements(provider.id)]);\n if (h?.kycStatus === 'APPROVED') await loadCardData();\n if (r?.next && !blockedStepMessage(r.next)) openStep(pendingFromRequirement(provider.id, r.next));\n }\n\n /** The user's first move: the next platform step when one is pending, else the provider sign-up. */\n const start = () =>\n run(\n 'start',\n async () => {\n if (!provider) return;\n if (requirements?.next) {\n openStep(pendingFromRequirement(provider.id, requirements.next));\n return;\n }\n // Signed up but not past the steps: read where the user stands again and open what is pending.\n if (holder) return afterStep();\n setHolder(await getClient().createCardHolder());\n },\n 'Could not start your card application',\n );\n\n const sendKyc = () =>\n run(\n 'kyc',\n async () => {\n const address = { ...kyc.address };\n if (!address.line2) delete address.line2;\n setHolder(await getClient().submitCardKyc({ termsAccepted: terms, kyc: { ...kyc, address } }));\n },\n 'Could not submit your information',\n );\n\n const issue = () =>\n run(\n 'issue',\n async () => {\n await getClient().issueCard(nickname.trim() ? { nickname: nickname.trim() } : {});\n await loadCardData();\n },\n 'Could not issue your card',\n );\n\n const refresh = () =>\n run(\n 'refresh',\n async () => {\n await loadCardData();\n },\n 'Could not refresh your card',\n );\n\n const reveal = () =>\n run(\n 'reveal',\n async () => {\n if (!card) return;\n const s = await getClient().revealCardSecrets(card.id);\n setSecrets(s);\n if (revealTimer.current) clearTimeout(revealTimer.current);\n revealTimer.current = setTimeout(() => setSecrets(null), REVEAL_MS);\n },\n 'Could not show the card details',\n );\n\n const openFund = () =>\n run(\n 'fund',\n async () => {\n setFundings(await getClient().listCardFundings());\n setPanel('fund');\n },\n 'Could not load your fundings',\n );\n\n const fund = () =>\n run(\n 'fund-send',\n async () => {\n const outcome = await getClient().fundCard({ amount: fundAmount.trim() });\n if (outcome.status === 'cancelled') {\n setError('The payment was not signed.');\n return;\n }\n setFundings((cur) => [outcome.funding, ...(cur ?? []).filter((f) => f.id !== outcome.funding.id)]);\n setFundAmount('');\n },\n 'Could not fund the card',\n );\n\n const showManualAddress = () =>\n run(\n 'fund-manual',\n async () => {\n if (!deposit) setDeposit(await getClient().getCardDepositAddresses());\n setShowManual(true);\n },\n 'Could not load the deposit address',\n );\n\n // Fundings move on their own server-side; keep the panel honest while any is in flight.\n const fundingsInflight = (fundings ?? []).some((f) => FUNDING_INFLIGHT.has(f.status));\n useEffect(() => {\n if (panel !== 'fund' || !fundingsInflight) return;\n const id = setInterval(() => {\n getClient()\n .listCardFundings()\n .then((next) => {\n setFundings((previous) => {\n // A funding that just got credited moves the card's balance: re-read it.\n const credited = next.some(\n (f) => f.status === 'CREDITED' && previous?.find((p) => p.id === f.id)?.status !== 'CREDITED',\n );\n if (credited) void loadCardData().catch(() => {});\n return next;\n });\n })\n .catch(() => {\n /* transient; the next tick retries */\n });\n }, FUNDING_POLL_MS);\n return () => clearInterval(id);\n }, [panel, fundingsInflight, getClient, loadCardData]);\n\n const field = (\n key: keyof Omit<CardKycInput, 'address' | 'email'>,\n label: string,\n extra: Partial<JSX.IntrinsicElements['input']> = {},\n ) => (\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">{label}</span>\n <input\n className=\"pollar-input\"\n value={kyc[key] as string}\n onChange={(e) => setKyc((k) => ({ ...k, [key]: e.target.value }))}\n {...extra}\n />\n </label>\n );\n\n const addressField = (\n key: keyof CardKycInput['address'],\n label: string,\n extra: Partial<JSX.IntrinsicElements['input']> = {},\n ) => (\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">{label}</span>\n <input\n className=\"pollar-input\"\n value={kyc.address[key] ?? ''}\n onChange={(e) => setKyc((k) => ({ ...k, address: { ...k.address, [key]: e.target.value } }))}\n {...extra}\n />\n </label>\n );\n\n const rangeField = (key: 'annualSalary' | 'expectedMonthlyVolume', label: string) => (\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">{label}</span>\n <select\n className=\"pollar-input pollar-send-select\"\n value={kyc[key]}\n onChange={(e) => setKyc((k) => ({ ...k, [key]: e.target.value as CardIncomeRange }))}\n >\n {INCOME_RANGES.map((r) => (\n <option key={r.value} value={r.value}>\n {r.label}\n </option>\n ))}\n </select>\n </label>\n );\n\n const kycComplete =\n kyc.firstName &&\n kyc.lastName &&\n /^\\d{4}-\\d{2}-\\d{2}$/.test(kyc.birthDate) &&\n kyc.nationalId &&\n kyc.countryOfIssue.length === 2 &&\n kyc.phoneCountryCode &&\n kyc.phoneNumber &&\n kyc.occupation &&\n kyc.accountPurpose &&\n kyc.address.line1 &&\n kyc.address.city &&\n kyc.address.region &&\n kyc.address.postalCode &&\n kyc.address.countryCode.length === 2;\n\n // --- Platform steps, in place of the modal -------------------------------------\n // The modal's state stays while a step is open, so cancelling returns to the same screen.\n if (pendingStep) {\n const close = () => {\n stepAttempt.current = null;\n setPendingStep(null);\n };\n const done = () => {\n // Ignore a step that finishes after it was cancelled or replaced.\n if (stepAttempt.current !== pendingStep) return;\n close();\n void afterStep();\n };\n const progress = pendingStep.progress ? { progress: pendingStep.progress } : {};\n if (pendingStep.type === 'FORM') {\n return <RequirementFormModal formId={pendingStep.optionId} {...progress} onClose={close} onSubmitted={done} />;\n }\n if (pendingStep.type === 'REGISTRY_CHECK') {\n return <RegistryCheckModal optionId={pendingStep.optionId} {...progress} onClose={close} onApproved={done} />;\n }\n if (pendingStep.type === 'PROVIDER_REGISTRATION') {\n return (\n <ProviderRegistrationModal\n cardProviderId={pendingStep.cardProviderId}\n {...progress}\n onClose={close}\n onRegistered={done}\n />\n );\n }\n return (\n <KycModal\n cardProviderId={pendingStep.cardProviderId}\n providerId={pendingStep.optionId}\n onClose={close}\n onApproved={done}\n />\n );\n }\n\n // --- Render -------------------------------------------------------------------\n // An approved holder also waits for its card data, so the modal never shows blank between the holder and the card.\n const loading =\n providers === null ||\n (providers.length > 0 && (holder === undefined || requirements === undefined)) ||\n (holder?.kycStatus === 'APPROVED' && cards === null && !error);\n const blocked = requirements?.next ? blockedStepMessage(requirements.next) : null;\n const stepsPending = !!requirements?.next;\n const title = panel === 'fund' ? 'Add funds' : card ? (card.nickname ?? 'Your card') : 'Get a card';\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <div\n className=\"pollar-modal-card pollar-card-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <div className=\"pollar-send-header-left\">\n {panel === 'fund' && (\n <button type=\"button\" className=\"pollar-modal-close\" onClick={() => setPanel('card')} aria-label=\"Back\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <h2 className=\"pollar-modal-title\">{title}</h2>\n </div>\n <div className=\"pollar-modal-header-actions\">\n {card && panel === 'card' && (\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={() => void refresh()}\n disabled={busy !== null}\n aria-label=\"Refresh\"\n >\n <svg\n className={busy === 'refresh' ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {loading && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n </div>\n )}\n\n {!loading && providers?.length === 0 && <div className=\"pollar-modal-error\">Cards are not available for this app.</div>}\n {!loading && provider && !provider.available && (\n <div className=\"pollar-modal-error\">Cards are not available right now.</div>\n )}\n\n {/* Step 1: the platform's steps, then the provider sign-up */}\n {!loading && provider && provider.available && stage === 'steps' && (\n <>\n <p>\n Get {provider.cardLabel ?? `a ${provider.name} card`} funded from your wallet{wallet ? '' : ' once you sign in'}.\n You will verify your identity first; it takes a few minutes.\n </p>\n {requirements && requirements.total > 0 && (\n <p className=\"pollar-card-note\">\n {requirements.completed} of {requirements.total} steps done\n </p>\n )}\n {blocked && <div className=\"pollar-modal-error\">{blocked}</div>}\n <div className=\"pollar-modal-actions\">\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n onClick={() => void start()}\n disabled={busy !== null || !wallet || !!blocked}\n >\n {busy === 'start' ? 'Starting...' : stepsPending ? 'Continue' : 'Start'}\n </button>\n </div>\n </>\n )}\n\n {/* Step 2: the provider's own KYC form, when no PROVIDER_REGISTRATION step sends it for the user */}\n {!loading && provider && stage === 'provider-form' && (\n <>\n <p className=\"pollar-card-section-title\">About you</p>\n <div className=\"pollar-card-grid\">\n {field('firstName', 'First name', { autoComplete: 'given-name' })}\n {field('lastName', 'Last name', { autoComplete: 'family-name' })}\n {field('birthDate', 'Birth date', { placeholder: 'YYYY-MM-DD', autoComplete: 'bday' })}\n {field('nationalId', 'ID number')}\n {field('countryOfIssue', 'ID country (2 letters)', { maxLength: 2, placeholder: 'AR' })}\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Occupation</span>\n <select\n className=\"pollar-input pollar-send-select\"\n value={kyc.occupation}\n onChange={(e) => setKyc((k) => ({ ...k, occupation: e.target.value }))}\n >\n <option value=\"\">Select...</option>\n {occupations.map((o) => (\n <option key={o.code} value={o.code}>\n {o.label}\n </option>\n ))}\n </select>\n </label>\n {field('phoneCountryCode', 'Phone country code', { placeholder: '54', inputMode: 'numeric' })}\n {field('phoneNumber', 'Phone number', { placeholder: '91155551234', inputMode: 'numeric' })}\n {rangeField('annualSalary', 'Annual income')}\n {rangeField('expectedMonthlyVolume', 'Expected monthly spend')}\n <div className=\"pollar-card-grid-full\">{field('accountPurpose', 'What will you use the card for?')}</div>\n </div>\n\n <p className=\"pollar-card-section-title\">Address</p>\n <div className=\"pollar-card-grid\">\n <div className=\"pollar-card-grid-full\">\n {addressField('line1', 'Street and number', { autoComplete: 'address-line1' })}\n </div>\n <div className=\"pollar-card-grid-full\">\n {addressField('line2', 'Apartment, floor (optional)', { autoComplete: 'address-line2' })}\n </div>\n {addressField('city', 'City', { autoComplete: 'address-level2' })}\n {addressField('region', 'State or province', { autoComplete: 'address-level1' })}\n {addressField('postalCode', 'Postal code', { autoComplete: 'postal-code' })}\n {addressField('countryCode', 'Country (2 letters)', { maxLength: 2, placeholder: 'AR' })}\n </div>\n\n <label className=\"pollar-card-terms\">\n <input type=\"checkbox\" checked={terms} onChange={(e) => setTerms(e.target.checked)} />\n <span>\n I have read and accept the{' '}\n <a className=\"pollar-card-link\" href={provider.termsUrl ?? '#'} target=\"_blank\" rel=\"noreferrer\">\n {provider.name} terms of service\n </a>\n {provider.termsUrl ? '' : ' (demo: the final terms link is pending)'}.\n </span>\n </label>\n\n <div className=\"pollar-modal-actions\">\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n onClick={() => void sendKyc()}\n disabled={busy !== null || !terms || !kycComplete}\n >\n {busy === 'kyc' ? 'Sending...' : 'Continue'}\n </button>\n </div>\n </>\n )}\n\n {/* Step 3: the provider's verification pending */}\n {!loading && holder && holder.kycStatus in KYC_PENDING_COPY && (\n <>\n <p>{KYC_PENDING_COPY[holder.kycStatus]}</p>\n {holder.kycReason && <p className=\"pollar-card-note\">{holder.kycReason}</p>}\n <div className=\"pollar-modal-actions\">\n {holder.verificationLink && (\n <a className=\"pollar-btn-primary\" href={holder.verificationLink} target=\"_blank\" rel=\"noreferrer\">\n Verify my identity\n </a>\n )}\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={() => void loadHolder().catch(() => {})}>\n I am done\n </button>\n </div>\n <p className=\"pollar-card-note\">This screen updates on its own once the verification comes back.</p>\n </>\n )}\n\n {/* Terminal failures */}\n {!loading && holder && holder.kycStatus in KYC_FINAL_COPY && (\n <div className=\"pollar-modal-error\">\n {KYC_FINAL_COPY[holder.kycStatus]}\n {holder.kycReason ? ` ${holder.kycReason}` : ''}\n </div>\n )}\n\n {/* Step 4: approved, no card yet */}\n {!loading && provider && holder?.kycStatus === 'APPROVED' && cards !== null && !card && (\n <>\n <p>Your identity is verified. Issue your virtual card to start.</p>\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Card name (optional)</span>\n <input\n className=\"pollar-input\"\n value={nickname}\n maxLength={40}\n onChange={(e) => setNickname(e.target.value)}\n placeholder=\"Everyday card\"\n />\n </label>\n <div className=\"pollar-modal-actions\">\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={() => void issue()} disabled={busy !== null}>\n {busy === 'issue' ? 'Issuing...' : 'Issue my card'}\n </button>\n </div>\n </>\n )}\n\n {/* Step 5: the card */}\n {!loading && provider && card && panel === 'card' && (\n <>\n <div className=\"pollar-card-visual\">\n <div className=\"pollar-card-visual-top\">\n <span className=\"pollar-card-brand\">\n {styles.logoUrl && <img src={styles.logoUrl} alt=\"\" className=\"pollar-card-brand-logo\" />}\n <span>{provider.cardLabel ?? provider.name}</span>\n </span>\n <span className=\"pollar-card-status\">{card.status.toLowerCase()}</span>\n </div>\n <div className=\"pollar-card-visual-chip\" />\n <div className=\"pollar-card-visual-number\">\n {secrets ? groupPan(secrets.pan) : `•••• •••• •••• ${card.last4 ?? '••••'}`}\n </div>\n <div className=\"pollar-card-visual-bottom\">\n <div>\n <span>Expires</span>\n <strong>{card.expMonth && card.expYear ? `${card.expMonth}/${card.expYear.slice(-2)}` : '--/--'}</strong>\n </div>\n <div>\n <span>CVC</span>\n <strong>{secrets ? secrets.cvc : '•••'}</strong>\n </div>\n <div>\n <span>{card.type.toLowerCase()}</span>\n <strong>{card.currency}</strong>\n </div>\n </div>\n </div>\n\n <div className=\"pollar-card-balance\">\n <div>\n <span>Available</span>\n <strong>{usd(balance?.spendingPowerCents)}</strong>\n </div>\n <div>\n <span>Limit</span>\n <strong>{usd(balance?.creditLimitCents)}</strong>\n </div>\n <div>\n <span>To pay</span>\n <strong>{usd(balance?.balanceDueCents)}</strong>\n </div>\n </div>\n\n <div className=\"pollar-modal-actions\">\n {provider.supports.revealSecrets &&\n (secrets ? (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={() => setSecrets(null)}>\n Hide details\n </button>\n ) : (\n <button type=\"button\" className=\"pollar-btn-secondary\" onClick={() => void reveal()} disabled={busy !== null}>\n {busy === 'reveal' ? 'Loading...' : 'Show details'}\n </button>\n ))}\n <button type=\"button\" className=\"pollar-btn-primary\" onClick={() => void openFund()} disabled={busy !== null}>\n Add funds\n </button>\n </div>\n {secrets && <p className=\"pollar-card-note\">The details hide on their own in 30 seconds. Do not share them.</p>}\n\n <p className=\"pollar-card-section-title\">Recent activity</p>\n {transactions === null && <p className=\"pollar-card-note\">Loading...</p>}\n {transactions?.length === 0 && <p className=\"pollar-card-note\">No movements yet.</p>}\n {transactions?.map((tx) => {\n const purchase = tx.purchase as {\n localAmount?: number | null;\n localCurrency?: string | null;\n status?: string;\n } | null;\n const local =\n purchase?.localAmount && purchase.localCurrency && purchase.localCurrency !== 'USD'\n ? money(String(purchase.localAmount), purchase.localCurrency)\n : null;\n return (\n <div key={tx.id} className=\"pollar-card-tx\">\n <div>\n {tx.merchantName ?? TX_LABELS[tx.type] ?? tx.type}\n <span className=\"pollar-card-tx-meta\">\n {new Date(tx.occurredAt).toLocaleDateString()}\n {tx.merchantName ? ` · ${TX_LABELS[tx.type] ?? tx.type}` : ''}\n {purchase?.status && purchase.status !== 'completed' ? ` · ${purchase.status}` : ''}\n </span>\n </div>\n <div className=\"pollar-card-tx-amount\" data-direction={tx.direction ?? undefined}>\n {tx.direction === 'credit' ? '+' : tx.direction === 'debit' ? '-' : ''}\n {money(tx.amount, tx.currency)}\n {local && <span className=\"pollar-card-tx-meta\">{local}</span>}\n </div>\n </div>\n );\n })}\n </>\n )}\n\n {/* Funding */}\n {!loading && provider && card && panel === 'fund' && (\n <>\n <p>\n Move {provider.fundingAssets.join(' or ') || 'USDC'} from your wallet to your card. It takes a few minutes to\n cross to the card network.\n </p>\n <label className=\"pollar-send-field\">\n <span className=\"pollar-send-label\">Amount (USDC)</span>\n <input\n className=\"pollar-input\"\n inputMode=\"decimal\"\n placeholder=\"10\"\n value={fundAmount}\n onChange={(e) => setFundAmount(e.target.value.replace(/[^0-9.]/g, ''))}\n />\n </label>\n <div className=\"pollar-modal-actions\">\n <button\n type=\"button\"\n className=\"pollar-btn-primary\"\n onClick={() => void fund()}\n disabled={busy !== null || !(Number(fundAmount) >= 1)}\n >\n {busy === 'fund-send' ? 'Sending...' : 'Fund from my wallet'}\n </button>\n </div>\n\n {fundings && fundings.length > 0 && (\n <>\n <p className=\"pollar-card-section-title\">Your fundings</p>\n {fundings.map((f) => {\n const copy = FUNDING_COPY[f.status];\n const inflight = FUNDING_INFLIGHT.has(f.status);\n return (\n <div key={f.id} className=\"pollar-card-tx\" aria-busy={inflight}>\n <div>\n <span className=\"pollar-card-funding-title\">\n {inflight && <span className=\"pollar-spinner pollar-spinner-sm\" aria-hidden />}\n {copy?.title ?? f.status}\n </span>\n {inflight && copy?.step && (\n <span className=\"pollar-card-tx-meta\" role=\"status\">\n Step {copy.step} of {FUNDING_STEPS} · {copy.hint}\n </span>\n )}\n <span className=\"pollar-card-tx-meta\">\n {new Date(f.createdAt).toLocaleString()}\n {f.status === 'FAILED' && f.error ? ` · ${f.error}` : ''}\n </span>\n </div>\n <div className=\"pollar-card-tx-amount\" data-direction={f.status === 'CREDITED' ? 'credit' : undefined}>\n {money(f.amount, 'USD')}\n </div>\n </div>\n );\n })}\n {fundingsInflight && (\n <p className=\"pollar-card-note\">\n You can close this window: the funding keeps going and your card is credited when it finishes.\n </p>\n )}\n </>\n )}\n\n {!showManual && (\n <p className=\"pollar-card-note\">\n Prefer to send from another wallet?{' '}\n <button\n type=\"button\"\n className=\"pollar-card-link\"\n onClick={() => void showManualAddress()}\n disabled={busy !== null}\n >\n Show the deposit address\n </button>\n </p>\n )}\n {showManual &&\n deposit?.map((d) => (\n <div key={d.network} className=\"pollar-card-deposit\">\n <strong>{d.network}</strong> (chain {d.chainId})<code>{d.address}</code>\n <CopyButton value={d.address} label=\"Copy address\" />\n <p className=\"pollar-card-note\">\n Send only {d.tokens.map((t) => (t.currency ?? 'token').toUpperCase()).join(' or ')} on {d.network}; anything\n else can be lost.\n </p>\n </div>\n ))}\n {showManual && deposit?.length === 0 && (\n <div className=\"pollar-modal-error\">The provider returned no deposit address.</div>\n )}\n {showManual && (\n <p className=\"pollar-card-note\">\n <button type=\"button\" className=\"pollar-card-link\" onClick={() => setShowManual(false)}>\n Hide the deposit address\n </button>\n </p>\n )}\n </>\n )}\n\n {error && <div className=\"pollar-modal-error\">{error}</div>}\n\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { SessionInfo, SessionsState } from '@pollar/core';\nimport { PollarModalFooter, RefreshIcon } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport type { SessionsState };\n\nexport interface SessionsModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n state: SessionsState;\n revokingFamilyId: string | null;\n signingOutEverywhere: boolean;\n revokeError: string | null;\n onRefresh: () => void;\n onRevoke: (familyId: string) => void;\n onLogoutEverywhere: () => void;\n onClose: () => void;\n}\n\n/**\n * Heuristic device label. Prefers the explicit `deviceLabel` set via\n * `PollarClientConfig`; falls back to a stripped User-Agent.\n */\nfunction describeDevice(s: SessionInfo): string {\n if (s.deviceLabel) return normalizeDeviceLabel(s.deviceLabel);\n if (!s.userAgent) return 'Unknown device';\n return parseUserAgent(s.userAgent);\n}\n\nfunction normalizeDeviceLabel(label: string): string {\n // Collapse the whitespace first so the split needs no unbounded `\\s+` on both\n // sides of the separator, which backtracks polynomially on a label with a long\n // run of spaces (CodeQL js/polynomial-redos); the label comes from the API.\n const parts = label.replace(/\\s+/g, ' ').split(/ (?:[—–-]|·) /);\n if (parts.length === 2 && parts[1] !== undefined) return `${parts[0]} · ${parts[1].toLowerCase()}`;\n return label;\n}\n\nfunction detectBrowser(ua: string): string | null {\n // Order matters: Edge / Opera contain \"Chrome\" in their UA, so check them first.\n if (/Edg\\//.test(ua)) return 'Edge';\n if (/OPR\\//.test(ua)) return 'Opera';\n if (/(Chrome|CriOS)\\//.test(ua)) return 'Chrome';\n if (/(Firefox|FxiOS)\\//.test(ua)) return 'Firefox';\n if (/Safari\\//.test(ua)) return 'Safari';\n return null;\n}\n\nfunction detectOS(ua: string): string | null {\n if (/iPhone|iPad|iPod/.test(ua)) return 'iOS';\n if (/Android/.test(ua)) return 'Android';\n if (/Mac OS X/.test(ua)) return 'macOS';\n if (/Windows NT/.test(ua)) return 'Windows';\n if (/Linux/.test(ua)) return 'Linux';\n return null;\n}\n\nfunction parseUserAgent(ua: string): string {\n const browser = detectBrowser(ua);\n const os = detectOS(ua);\n if (browser && os) return `${os} · ${browser.toLowerCase()}`;\n if (os) return os;\n if (browser) return browser;\n return ua.slice(0, 48);\n}\n\nfunction formatRelative(iso: string | null): string {\n if (!iso) return '—';\n const ts = new Date(iso).getTime();\n if (!Number.isFinite(ts)) return '—';\n const diffSec = Math.round((Date.now() - ts) / 1000);\n if (diffSec < 0) return 'just now';\n if (diffSec < 60) return `${diffSec}s ago`;\n const diffMin = Math.round(diffSec / 60);\n if (diffMin < 60) return `${diffMin}m ago`;\n const diffHr = Math.round(diffMin / 60);\n if (diffHr < 24) return `${diffHr}h ago`;\n const diffDay = Math.round(diffHr / 24);\n if (diffDay < 30) return `${diffDay}d ago`;\n return new Date(iso).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n}\n\nfunction shortIp(hash: string | null): string {\n if (!hash) return '';\n return hash.slice(0, 8);\n}\n\ntype DeviceKind = 'desktop' | 'phone' | 'tablet';\n\nfunction deviceKind(session: SessionInfo): DeviceKind {\n const value = `${session.deviceLabel ?? ''} ${session.userAgent ?? ''}`.toLowerCase();\n if (/ipad|tablet/.test(value)) return 'tablet';\n if (/android|iphone|ipod|mobile|phone/.test(value)) return 'phone';\n return 'desktop';\n}\n\nfunction DeviceIcon({ kind, size = 'small' }: { kind: DeviceKind; size?: 'small' | 'large' }) {\n const dimensions = size === 'large' ? 30 : 18;\n if (kind === 'phone') {\n return (\n <svg width={dimensions} height={dimensions} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <rect x=\"7\" y=\"2.5\" width=\"10\" height=\"19\" rx=\"2.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path d=\"M10.5 5h3M11 18.5h2\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n if (kind === 'tablet') {\n return (\n <svg width={dimensions} height={dimensions} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <rect x=\"4.5\" y=\"2.5\" width=\"15\" height=\"19\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path d=\"M11 18.5h2\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n return (\n <svg width={dimensions} height={dimensions} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden>\n <rect x=\"3\" y=\"3.5\" width=\"18\" height=\"12\" rx=\"1.8\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path d=\"M8 20.5h8M12 15.5v5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden>\n <path d=\"m2.5 6.2 2.1 2.1L9.6 3.6\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path d=\"m3 3 8 8M11 3l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function SessionsModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n state,\n revokingFamilyId,\n signingOutEverywhere,\n revokeError,\n onRefresh,\n onRevoke,\n onLogoutEverywhere,\n onClose,\n}: SessionsModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = state.step === 'loading';\n const sessions = state.step === 'loaded' ? state.sessions : [];\n const currentSession = sessions.find((s) => s.current);\n const otherSessions = sessions.filter((s) => !s.current);\n const otherCount = otherSessions.length;\n\n return (\n <div\n className=\"pollar-modal-card pollar-sessions-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Active sessions</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <RefreshIcon spinning={isLoading} />\n </button>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\" title=\"Close\">\n <CloseIcon />\n </button>\n </div>\n </div>\n\n <div className=\"pollar-sessions-list\">\n {(state.step === 'idle' || isLoading) && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n {state.step === 'error' && <div className=\"pollar-modal-empty\">{state.message}</div>}\n {state.step === 'loaded' && sessions.length === 0 && <div className=\"pollar-modal-empty\">No active sessions.</div>}\n {state.step === 'loaded' && currentSession && (\n <div className=\"pollar-sessions-current-card\">\n <div className=\"pollar-sessions-current-icon-wrap\">\n <DeviceIcon kind={deviceKind(currentSession)} size=\"large\" />\n <span className=\"pollar-sessions-current-check\">\n <CheckIcon />\n </span>\n </div>\n <span className=\"pollar-sessions-current-label\">This device</span>\n <strong className=\"pollar-sessions-current-device\">{describeDevice(currentSession)}</strong>\n <div className=\"pollar-sessions-current-status\">\n <span className=\"pollar-sessions-status-dot\" />\n <span>Active now</span>\n {currentSession.ipHash && (\n <>\n <span>·</span>\n <span title={`ip-hash ${currentSession.ipHash}`}>IP {shortIp(currentSession.ipHash)}</span>\n </>\n )}\n </div>\n </div>\n )}\n {state.step === 'loaded' && otherSessions.length > 0 && (\n <section className=\"pollar-sessions-other-section\" aria-labelledby=\"pollar-other-devices-heading\">\n <h3 id=\"pollar-other-devices-heading\" className=\"pollar-sessions-section-title\">\n Other devices <span>{otherCount}</span>\n </h3>\n <div className=\"pollar-sessions-grid\">\n {otherSessions.map((s) => {\n const isRevoking = revokingFamilyId === s.familyId;\n return (\n <div key={s.familyId} className=\"pollar-sessions-item\">\n <div className=\"pollar-sessions-item-top\">\n <span className=\"pollar-sessions-item-icon\">\n <DeviceIcon kind={deviceKind(s)} />\n </span>\n <button\n type=\"button\"\n className=\"pollar-sessions-item-revoke\"\n onClick={() => onRevoke(s.familyId)}\n disabled={isRevoking || signingOutEverywhere}\n aria-label={`Sign out ${describeDevice(s)}`}\n title={isRevoking ? 'Signing out…' : 'Sign out this device'}\n >\n {isRevoking ? <span className=\"pollar-spinner pollar-spinner-sm\" /> : <CloseIcon />}\n </button>\n </div>\n <strong className=\"pollar-sessions-item-device\">{describeDevice(s)}</strong>\n <span className=\"pollar-sessions-item-meta\">{formatRelative(s.lastUsedAt ?? s.createdAt)}</span>\n </div>\n );\n })}\n </div>\n </section>\n )}\n {revokeError && (\n <div className=\"pollar-sessions-action-error\" role=\"alert\">\n {revokeError}\n </div>\n )}\n </div>\n\n {state.step === 'loaded' && sessions.length > 0 && (\n <div className=\"pollar-sessions-actions\">\n <button\n className=\"pollar-sessions-logout-all\"\n onClick={onLogoutEverywhere}\n disabled={signingOutEverywhere || otherCount === 0}\n title={otherCount === 0 ? 'No other devices to sign out' : undefined}\n >\n {signingOutEverywhere ? (\n <>\n <span className=\"pollar-spinner pollar-spinner-sm pollar-spinner-current\" />\n Signing out…\n </>\n ) : (\n 'Sign out everywhere'\n )}\n </button>\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport './SessionsModal.css';\nimport { SessionsModalTemplate } from './SessionsModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface SessionsModalProps {\n onClose: () => void;\n}\n\nexport function SessionsModal({ onClose }: SessionsModalProps) {\n const { getClient, styles, sessions } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n // Only the per-action button spinners are local UI state. The list itself\n // (idle/loading/loaded/error) lives in the client's observable `sessions`\n // store, read straight from the provider - so this component is a pure\n // reader and there's no `await`-then-`setState` to guard against unmount.\n const [revokingFamilyId, setRevokingFamilyId] = useState<string | null>(null);\n const [signingOutEverywhere, setSigningOutEverywhere] = useState(false);\n const [revokeError, setRevokeError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n void getClient().fetchSessions();\n }, [getClient]);\n\n useEffect(() => {\n load();\n }, [load]);\n\n // Auto-close on logout (logoutEverywhere from this modal, or eventual\n // 401-on-current-family-revoke). The provider clears session state when\n // the user becomes unauthenticated; mirror that here so the modal\n // tears down instead of showing stale data.\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n useEffect(() => {\n return getClient().onAuthStateChange((authState) => {\n if (authState.step === 'idle') onCloseRef.current();\n });\n }, [getClient]);\n\n const handleRevoke = useCallback(\n async (familyId: string) => {\n setRevokingFamilyId(familyId);\n setRevokeError(null);\n try {\n await getClient().revokeSession(familyId);\n } catch {\n setRevokeError('Could not sign out that device. Please try again.');\n } finally {\n setRevokingFamilyId(null);\n // Refresh from the server so the row disappears from the list.\n load();\n }\n },\n [getClient, load],\n );\n\n const handleLogoutEverywhere = useCallback(async () => {\n setSigningOutEverywhere(true);\n try {\n await getClient().logoutEverywhere();\n // After logout-everywhere the auth state flips to 'idle' - the\n // provider closes the parent overlay automatically. Belt-and-braces:\n // call onClose so the modal also tears down even if the consumer\n // wired it up outside the provider.\n onClose();\n } catch {\n setSigningOutEverywhere(false);\n }\n }, [getClient, onClose]);\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <SessionsModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n state={sessions}\n revokingFamilyId={revokingFamilyId}\n signingOutEverywhere={signingOutEverywhere}\n revokeError={revokeError}\n onRefresh={() => load()}\n onRevoke={(familyId) => void handleRevoke(familyId)}\n onLogoutEverywhere={() => void handleLogoutEverywhere()}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport type { CosignDevicesContent, CosignQuorumReport, CosignRequest, CosignState, CosignVerification } from '@pollar/core';\nimport { useCallback, useEffect, useState } from 'react';\nimport { usePollar } from './context';\n\nexport interface UseCosignResult {\n /** Requests waiting for this device's vote, oldest first. */\n pending: CosignRequest[];\n /** The last request that reached a final state. */\n lastResolved?: CosignRequest;\n /** Whether the client's co-sign store has been read at least once. */\n loaded: boolean;\n /** Re-read the pending requests from the API. */\n refresh: () => Promise<void>;\n /** Verify the request against Turnkey and, when it checks out, vote yes. */\n approve: (request: CosignRequest) => Promise<CosignRequest>;\n /** Vote no. Final. */\n reject: (request: CosignRequest) => Promise<CosignRequest>;\n /** The verification a UI can show before the user decides. */\n verify: (request: CosignRequest) => Promise<CosignVerification>;\n /** Read the sub-organization from Turnkey with the device key and record whether it is the promised 2-of-2. */\n inspectQuorum: () => Promise<CosignQuorumReport>;\n /** The user's enrolled devices and the quorum state as sdk-api records it. */\n devices: () => Promise<CosignDevicesContent>;\n /** Revoke another enrolled device; `force` to revoke this one. */\n revokeDevice: (deviceId: string, options?: { force?: boolean }) => Promise<CosignDevicesContent>;\n}\n\n/**\n * The user's side of a Turnkey co-signed wallet, for an app that renders its\n * own confirmation UI instead of the provider's modal. Subscribes to the\n * client's co-sign store and loads the pending requests once on mount.\n */\nexport function useCosign(): UseCosignResult {\n const { getClient, isAuthenticated } = usePollar();\n const [state, setState] = useState<CosignState>({ pending: [] });\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => getClient().onCosignStateChange(setState), [getClient]);\n\n const refresh = useCallback(async () => {\n if (!isAuthenticated) return;\n try {\n await getClient().cosign.pending();\n } finally {\n setLoaded(true);\n }\n }, [getClient, isAuthenticated]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return {\n pending: state.pending,\n ...(state.lastResolved ? { lastResolved: state.lastResolved } : {}),\n loaded,\n refresh,\n approve: useCallback((request: CosignRequest) => getClient().cosign.approve(request), [getClient]),\n reject: useCallback((request: CosignRequest) => getClient().cosign.reject(request), [getClient]),\n verify: useCallback((request: CosignRequest) => getClient().cosign.verify(request), [getClient]),\n inspectQuorum: useCallback(() => getClient().cosign.inspectQuorum(), [getClient]),\n devices: useCallback(() => getClient().cosign.devices(), [getClient]),\n revokeDevice: useCallback(\n (deviceId: string, options?: { force?: boolean }) => getClient().cosign.revokeDevice(deviceId, options),\n [getClient],\n ),\n };\n}\n","'use client';\n\nimport { cosignGroupOf, cosignStepKeyOf, stepInGroup, type CosignRequest, type CosignVerification } from '@pollar/core';\nimport { cropAddress, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport interface CosignModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n /** Requests waiting for this device's vote, oldest first. */\n pending: CosignRequest[];\n /** The request shown in detail; the first pending one when not chosen. */\n current: CosignRequest | null;\n /** Verification of `current`, or null while it runs. */\n verification: CosignVerification | null;\n busy: 'approving' | 'rejecting' | null;\n error: string | null;\n /** Approve stays off for a request whose approval just failed. */\n approveBlocked?: boolean;\n /** The last request that reached a final state, shown once the list is empty. */\n lastResolved?: CosignRequest;\n /** Explorer page of {@link lastResolved}'s transaction, when it was sent. */\n explorerUrl?: string | null;\n onSelect: (request: CosignRequest) => void;\n onApprove: (request: CosignRequest) => void;\n onReject: (request: CosignRequest) => void;\n onClose: () => void;\n}\n\nconst OPERATION_LABELS: Record<string, string> = {\n payment: 'Send',\n path_payment_strict_send: 'Swap',\n change_trust: 'Add asset',\n create_account: 'Create account',\n invoke_contract: 'Contract call',\n manage_data: 'Manage data',\n};\n\nfunction labelOf(request: CosignRequest): string {\n const op = request.operation ?? '';\n return OPERATION_LABELS[op] ?? (op ? op.replace(/_/g, ' ') : 'Transaction');\n}\n\nfunction expiresIn(request: CosignRequest): string {\n const ms = new Date(request.expiresAt).getTime() - Date.now();\n if (!Number.isFinite(ms) || ms <= 0) return 'expired';\n const h = Math.floor(ms / 3_600_000);\n const m = Math.floor((ms % 3_600_000) / 60_000);\n return h > 0 ? `${h}h ${m}m` : `${m}m`;\n}\n\nfunction detailRows(request: CosignRequest): Array<[string, string]> {\n const details = (request.details ?? {}) as Record<string, unknown>;\n const rows: Array<[string, string]> = [];\n const push = (label: string, value: unknown) => {\n if (value === undefined || value === null || value === '') return;\n rows.push([\n label,\n typeof value === 'string' && value.length > 24 && /^[GC][A-Z2-7]{55}$/.test(value) ? cropAddress(value) : String(value),\n ]);\n };\n push('Destination', details.destination);\n push('Amount', details.amount);\n push('Asset', details.asset ?? details.assetCode);\n push('Network', request.network);\n return rows;\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path d=\"m3 3 8 8M11 3l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function CosignModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n pending,\n current,\n verification,\n busy,\n error,\n approveBlocked = false,\n lastResolved,\n explorerUrl,\n onSelect,\n onApprove,\n onReject,\n onClose,\n}: CosignModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n const verified = verification?.ok === true;\n const canVote = !!current && verified && !busy && !approveBlocked;\n\n return (\n <div\n className=\"pollar-modal-card pollar-cosign-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Confirm with your device</h2>\n <div className=\"pollar-modal-header-actions\">\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\" title=\"Close\">\n <CloseIcon />\n </button>\n </div>\n </div>\n\n {pending.length === 0 && (\n <div className=\"pollar-cosign-empty\">\n {lastResolved ? (\n <>\n {lastResolved.status === 'APPROVED' && (\n <svg className=\"pollar-cosign-approved-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <circle cx=\"7\" cy=\"7\" r=\"7\" fill=\"currentColor\" />\n <path\n d=\"M3.5 7l2.5 2.5 4.5-5\"\n stroke=\"white\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n <p className=\"pollar-cosign-empty-title\">\n {lastResolved.status === 'APPROVED'\n ? 'Approved'\n : lastResolved.status === 'REJECTED'\n ? 'Rejected'\n : lastResolved.status.toLowerCase()}\n </p>\n <p className=\"pollar-cosign-muted\">\n {lastResolved.submit?.hash ? (\n <>\n Sent. Transaction{' '}\n {explorerUrl ? (\n <a className=\"pollar-cosign-tx-link\" href={explorerUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {cropAddress(lastResolved.submit.hash)}\n </a>\n ) : (\n cropAddress(lastResolved.submit.hash)\n )}\n </>\n ) : lastResolved.signedXdr ? (\n 'Signed. The app will send it.'\n ) : (\n 'Nothing was signed.'\n )}\n </p>\n </>\n ) : (\n <p className=\"pollar-cosign-muted\">Nothing waits for your approval.</p>\n )}\n </div>\n )}\n\n {pending.length > 1 && (\n <ul className=\"pollar-cosign-list\">\n {pending.map((r) => (\n <li key={r.id}>\n <button\n type=\"button\"\n className={`pollar-cosign-item${current?.id === r.id ? ' pollar-cosign-item-active' : ''}`}\n onClick={() => onSelect(r)}\n >\n <span>{labelOf(r)}</span>\n <span className=\"pollar-cosign-muted\">{expiresIn(r)}</span>\n </button>\n </li>\n ))}\n </ul>\n )}\n\n {current && (\n <div className=\"pollar-cosign-detail\">\n <p className=\"pollar-cosign-detail-title\">{labelOf(current)}</p>\n {current.summary && <p className=\"pollar-cosign-muted\">{current.summary}</p>}\n <GroupSteps request={current} />\n <dl className=\"pollar-cosign-rows\">\n {detailRows(current).map(([k, v]) => (\n <div key={k} className=\"pollar-cosign-row\">\n <dt>{k}</dt>\n <dd>{v}</dd>\n </div>\n ))}\n <div className=\"pollar-cosign-row\">\n <dt>Expires in</dt>\n <dd>{expiresIn(current)}</dd>\n </div>\n </dl>\n\n <div\n className={`pollar-cosign-verify pollar-cosign-verify-${verification ? (verification.ok ? 'ok' : 'bad') : 'pending'}`}\n >\n {!verification && 'Checking the transaction against Turnkey...'}\n {verification?.ok && 'Verified: this is exactly what will be signed.'}\n {verification && !verification.ok && `Not verified: ${verification.reason}`}\n </div>\n\n {error && <div className=\"pollar-cosign-error\">{error}</div>}\n\n <div className=\"pollar-cosign-actions\">\n <button\n type=\"button\"\n className=\"pollar-cosign-btn pollar-cosign-btn-secondary\"\n disabled={!!busy}\n onClick={() => onReject(current)}\n >\n {busy === 'rejecting' ? 'Rejecting...' : 'Reject'}\n </button>\n <button\n type=\"button\"\n className=\"pollar-cosign-btn pollar-cosign-btn-primary\"\n disabled={!canVote}\n onClick={() => onApprove(current)}\n >\n {busy === 'approving' ? 'Approving...' : 'Approve'}\n </button>\n </div>\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n\n/**\n * The steps one approval covers, when the request opens a group: the user\n * approves the group once, and this device votes its later steps on its own,\n * each verified against its own transaction before the vote.\n */\nfunction GroupSteps({ request }: { request: CosignRequest }) {\n const group = cosignGroupOf(request);\n if (!group || group.steps.length < 2) return null;\n const stepKey = cosignStepKeyOf(request);\n return (\n <div className=\"pollar-cosign-group\">\n <p className=\"pollar-cosign-group-title\">{group.title}</p>\n <p className=\"pollar-cosign-muted\">Approving covers these steps; each one is checked before it is signed.</p>\n <ol className=\"pollar-cosign-group-steps\">\n {group.steps.map((step) => {\n const isThis = stepKey !== null && stepInGroup({ steps: [step] }, stepKey);\n return (\n <li key={step.key} className={isThis ? 'pollar-cosign-group-step-current' : undefined}>\n {step.label}\n {isThis && <span className=\"pollar-cosign-muted\"> (this one)</span>}\n </li>\n );\n })}\n </ol>\n </div>\n );\n}\n","'use client';\n\nimport { type CosignRequest, type CosignVerification, isPollarApiError, transactionErrorMessage } from '@pollar/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { explorerTxUrl } from '../commons';\nimport { useCosign } from '../../useCosign';\nimport '../shared.css';\nimport './CosignModal.css';\nimport { CosignModalTemplate } from './CosignModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface CosignModalProps {\n onClose: () => void;\n}\n\n/**\n * The approval prompt of a Turnkey co-signed wallet. Verifies each request\n * against Turnkey before enabling Approve, so the user only ever confirms a\n * transaction the device checked itself.\n */\nexport function CosignModal({ onClose }: CosignModalProps) {\n const { getClient, styles, network } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const { pending, lastResolved, approve, reject, verify, inspectQuorum } = useCosign();\n\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [verification, setVerification] = useState<CosignVerification | null>(null);\n const [busy, setBusy] = useState<'approving' | 'rejecting' | null>(null);\n const [error, setError] = useState<string | null>(null);\n // The request whose approval just failed. Approving it again cannot succeed\n // until something changes (a balance, a fresh request), so Approve stays off.\n const [approveFailedFor, setApproveFailedFor] = useState<string | null>(null);\n // The quorum as this device read it from Turnkey, once per open. Approving\n // anything on a sub-organization that is not the promised 2-of-2 would be a\n // vote on a wallet someone else can also control, so a bad reading fails\n // every verification below.\n const [quorumFailure, setQuorumFailure] = useState<string | null>(null);\n useEffect(() => {\n let cancelled = false;\n inspectQuorum()\n .then((q) => {\n if (!cancelled && !q.ok) setQuorumFailure(q.reason);\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [inspectQuorum]);\n\n const current = pending.find((r) => r.id === selectedId) ?? pending[0] ?? null;\n\n // Verify whenever the shown request changes; a stale result must never\n // enable Approve for a different request. Keyed by id: every refresh of the\n // pending list hands back new objects for the same requests, and re-running\n // on those would cancel the check in flight.\n const currentRef = useRef(current);\n currentRef.current = current;\n const currentId = current?.id ?? null;\n useEffect(() => {\n const request = currentRef.current;\n if (!request) return;\n setVerification(null);\n setError(null);\n setApproveFailedFor(null);\n let cancelled = false;\n verify(request)\n .then((v) => {\n if (!cancelled) setVerification(v);\n })\n .catch((err: unknown) => {\n if (!cancelled) setVerification({ ok: false, reason: err instanceof Error ? err.message : String(err) });\n });\n return () => {\n cancelled = true;\n };\n }, [currentId, verify]);\n\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n useEffect(() => {\n return getClient().onAuthStateChange((authState) => {\n if (authState.step === 'idle') onCloseRef.current();\n });\n }, [getClient]);\n\n const run = useCallback(\n async (kind: 'approving' | 'rejecting', request: CosignRequest, action: (r: CosignRequest) => Promise<CosignRequest>) => {\n setBusy(kind);\n setError(null);\n try {\n await action(request);\n } catch (err) {\n setError(transactionErrorMessage(isPollarApiError(err) ? err.code : null, err instanceof Error ? err.message : null));\n if (kind === 'approving') setApproveFailedFor(request.id);\n } finally {\n setBusy(null);\n }\n },\n [],\n );\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <CosignModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n pending={pending}\n current={current}\n verification={current ? (quorumFailure ? { ok: false, reason: quorumFailure } : verification) : null}\n busy={busy}\n error={error}\n approveBlocked={!!current && approveFailedFor === current.id}\n {...(lastResolved ? { lastResolved } : {})}\n explorerUrl={lastResolved?.submit?.hash ? explorerTxUrl(lastResolved.network, lastResolved.submit.hash, network) : null}\n onSelect={(r) => setSelectedId(r.id)}\n onApprove={(r) => void run('approving', r, approve)}\n onReject={(r) => void run('rejecting', r, reject)}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport type { PendingConfirmation } from '@pollar/core';\nimport { useEffect, useRef } from 'react';\nimport { usePollar } from '../../context';\nimport { cropAddress, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, modalChrome } from '../modal-theme';\nimport '../shared.css';\nimport '../cosign-modal/CosignModal.css';\n\ninterface ConfirmModalProps {\n confirmation: PendingConfirmation;\n}\n\nconst OPERATION_LABELS: Record<string, string> = {\n payment: 'Send',\n path_payment_strict_send: 'Swap',\n change_trust: 'Add asset',\n create_account: 'Create account',\n invoke_contract: 'Contract call',\n manage_data: 'Manage data',\n};\n\nfunction labelOf(confirmation: PendingConfirmation): string {\n const op = confirmation.operation ?? '';\n return OPERATION_LABELS[op] ?? (op ? op.replace(/_/g, ' ') : 'Transaction');\n}\n\nfunction detailRows(confirmation: PendingConfirmation): Array<[string, string]> {\n const details = confirmation.details ?? {};\n const rows: Array<[string, string]> = [];\n const push = (label: string, value: unknown) => {\n if (value === undefined || value === null || value === '') return;\n const text = typeof value === 'object' ? JSON.stringify(value) : String(value);\n rows.push([label, /^[GC][A-Z2-7]{55}$/.test(text) ? cropAddress(text) : text]);\n };\n push('Destination', details.destination);\n push('Amount', details.amount);\n push('Asset', details.asset ?? details.assetCode ?? details.mint);\n push('Network', confirmation.network);\n return rows;\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path d=\"m3 3 8 8M11 3l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/**\n * The prompt a signing call waits on under `confirmation: 'prompt'`, the same\n * for every custody: the wallet signs only after the user confirms here.\n * Closing it declines. The provider shows it while the client has a\n * confirmation pending, so it needs no open state of its own.\n */\nexport function ConfirmModal({ confirmation }: ConfirmModalProps) {\n const { getClient, styles } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n // A session that ends while the prompt is open declines it: the call must\n // not stay suspended on a user who is no longer there.\n const rejectRef = useRef(confirmation.reject);\n rejectRef.current = confirmation.reject;\n useEffect(() => {\n return getClient().onAuthStateChange((authState) => {\n if (authState.step === 'idle') rejectRef.current();\n });\n }, [getClient]);\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={confirmation.reject}>\n <div\n className=\"pollar-modal-card pollar-cosign-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Confirm transaction</h2>\n <div className=\"pollar-modal-header-actions\">\n <button type=\"button\" className=\"pollar-modal-close\" onClick={confirmation.reject} aria-label=\"Close\" title=\"Close\">\n <CloseIcon />\n </button>\n </div>\n </div>\n\n <div className=\"pollar-cosign-detail\">\n <p className=\"pollar-cosign-detail-title\">{labelOf(confirmation)}</p>\n <p className=\"pollar-cosign-muted\">The app asks you to sign this transaction with your wallet.</p>\n <dl className=\"pollar-cosign-rows\">\n {detailRows(confirmation).map(([k, v]) => (\n <div key={k} className=\"pollar-cosign-row\">\n <dt>{k}</dt>\n <dd>{v}</dd>\n </div>\n ))}\n </dl>\n\n <div className=\"pollar-cosign-actions\">\n <button type=\"button\" className=\"pollar-cosign-btn pollar-cosign-btn-secondary\" onClick={confirmation.reject}>\n Cancel\n </button>\n <button type=\"button\" className=\"pollar-cosign-btn pollar-cosign-btn-primary\" onClick={confirmation.confirm}>\n Confirm\n </button>\n </div>\n </div>\n\n <PollarModalFooter />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { TransactionState, WalletId } from '@pollar/core';\nimport React from 'react';\nimport { PollarModalFooter } from '../commons';\nimport { TxStatusView } from './TxStatusView';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nexport interface TransactionModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n transaction: TransactionState;\n showXdr: boolean;\n copied: boolean;\n explorerUrl: string | null;\n walletType?: WalletId | null;\n onClose: () => void;\n onSignAndSend: () => void;\n onToggleXdr: () => void;\n onCopyHash: () => void;\n onRetry?: () => void;\n}\n\nexport function TransactionModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n transaction,\n showXdr,\n copied,\n explorerUrl,\n walletType,\n onClose,\n onSignAndSend,\n onToggleXdr,\n onCopyHash,\n onRetry,\n}: TransactionModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n return (\n <div className=\"pollar-modal-card pollar-tx-modal\" data-theme={theme} style={cssVars} onClick={(e) => e.stopPropagation()}>\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Transaction</h2>\n </div>\n <button type=\"button\" className=\"pollar-close-btn\" onClick={onClose} aria-label=\"Close\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n\n <TxStatusView\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onSignAndSend={onSignAndSend}\n onToggleXdr={onToggleXdr}\n onCopyHash={onCopyHash}\n onRetry={onRetry}\n onDone={onClose}\n />\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport '../shared.css';\nimport './TransactionModal.css';\nimport { TransactionModalTemplate } from './TransactionModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface TransactionModalProps {\n onClose: () => void;\n}\n\nexport function TransactionModal({ onClose }: TransactionModalProps) {\n const { getClient, styles, tx: transaction, network, wallet } = usePollar();\n // External-wallet signing-adapter id (freighter/albedo) drives the wallet logo;\n // null for embedded/smart, which fall back to the Pollar logo.\n const walletType = wallet?.custody === 'external' ? wallet.provider : null;\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const [showXdr, setShowXdr] = useState(false);\n const [copied, setCopied] = useState(false);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n const hash = transaction.step === 'success' ? transaction.hash : null;\n const buildData = 'buildData' in transaction ? transaction.buildData : null;\n const explorerNetwork = buildData?.summary.network?.toLowerCase().includes('testnet')\n ? 'testnet'\n : buildData\n ? 'public'\n : network === 'testnet'\n ? 'testnet'\n : 'public';\n const explorerUrl = hash ? `https://stellar.expert/explorer/${explorerNetwork}/tx/${hash}` : null;\n\n function handleSignAndSend() {\n if (transaction.step === 'built') {\n void getClient().signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n function handleCopyHash() {\n if (!hash) return;\n navigator.clipboard.writeText(hash).then(() => {\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 2000);\n });\n }\n\n async function handleRetry() {\n if (transaction.step === 'error' && transaction.buildData) {\n await getClient().signAndSubmitTx(transaction.buildData.unsignedXdr);\n }\n }\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <TransactionModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n transaction={transaction}\n showXdr={showXdr}\n copied={copied}\n explorerUrl={explorerUrl}\n walletType={walletType}\n onClose={onClose}\n onSignAndSend={handleSignAndSend}\n onToggleXdr={() => setShowXdr((v) => !v)}\n onCopyHash={handleCopyHash}\n onRetry={handleRetry}\n />\n </div>\n );\n}\n","'use client';\n\nimport { TxHistoryRecord, TxHistoryState, WalletChain } from '@pollar/core';\nimport { type ReactNode } from 'react';\nimport { ChainSelect } from '../ChainSelect';\nimport { CopyButton, cropAddress, explorerTxUrl, PollarModalFooter } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\nconst PAGE_SIZE = 10;\n\ninterface TxHistoryModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n txHistory: TxHistoryState;\n offset: number;\n /** Networks the user holds a wallet on; the first one is the default. */\n chains: WalletChain[];\n selectedChain: WalletChain | null;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n onSelectChain: (chain: WalletChain) => void;\n onRefresh: () => void;\n onPrev: () => void;\n onNext: () => void;\n onClose: () => void;\n}\n\nfunction StatusBadge({ status }: { status: TxHistoryRecord['status'] }) {\n return (\n <span className=\"pollar-hist-item-badge\" data-status={status}>\n {status}\n </span>\n );\n}\n\nfunction formatDate(iso: string): string {\n return new Date(iso).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n}\n\n/** Shorten a long identifier (issuer, hash, address) to `head...tail`. */\nfunction truncateMiddle(value: string, head = 4, tail = 4): string {\n return value.length <= head + tail + 1 ? value : `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\n// Stellar account (G) and contract (C) strkeys are 56 base32 chars.\nconst STELLAR_ADDRESS = /\\b[GC][A-Z2-7]{55}\\b/g;\n\n/** Truncated address rendered as a copyable tag (issuer, wallet, contract...). */\nfunction AddressChip({ value, label }: { value: string; label: string }) {\n return (\n <span className=\"pollar-hist-item-issuer\">\n {truncateMiddle(value)}\n <CopyButton value={value} label={label} className=\"pollar-copy-btn-sm\" />\n </span>\n );\n}\n\n/**\n * Renders a summary string, swapping every full Stellar address (G... account or\n * C... contract) for an {@link AddressChip}. Plain-text runs are kept as-is.\n */\nfunction renderSummary(summary: string): ReactNode {\n const parts: ReactNode[] = [];\n let last = 0;\n let key = 0;\n STELLAR_ADDRESS.lastIndex = 0;\n for (let m = STELLAR_ADDRESS.exec(summary); m !== null; m = STELLAR_ADDRESS.exec(summary)) {\n if (m.index > last) parts.push(<span key={key++}>{summary.slice(last, m.index)}</span>);\n const address = m[0];\n parts.push(\n <AddressChip key={key++} value={address} label={address[0] === 'C' ? 'Copy contract address' : 'Copy wallet address'} />,\n );\n last = m.index + address.length;\n }\n if (parts.length === 0) return <span className=\"pollar-hist-item-title\">{summary}</span>;\n if (last < summary.length) parts.push(<span key={key}>{summary.slice(last)}</span>);\n return parts;\n}\n\nexport function TxHistoryModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n txHistory,\n offset,\n chains,\n selectedChain,\n walletAddress,\n onSelectChain,\n onRefresh,\n onPrev,\n onNext,\n onClose,\n}: TxHistoryModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = txHistory.step === 'loading';\n const records = txHistory.step === 'loaded' ? txHistory.data.records : [];\n const total = txHistory.step === 'loaded' ? txHistory.data.total : 0;\n const hasPrev = offset > 0;\n const hasNext = offset + PAGE_SIZE < total;\n const showPagination = txHistory.step === 'loaded' && total > PAGE_SIZE;\n\n return (\n <div\n className=\"pollar-modal-card pollar-hist-modal\"\n data-theme={theme}\n style={cssVars}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Transaction History</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <svg\n className={isLoading ? 'pollar-modal-refresh-icon pollar-spinning' : 'pollar-modal-refresh-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoading} />\n\n {walletAddress && (\n <div className=\"pollar-address-row\">\n <span className=\"pollar-address\">{cropAddress(walletAddress)}</span>\n <CopyButton value={walletAddress} label=\"Copy wallet address\" />\n </div>\n )}\n\n <div className=\"pollar-hist-list\">\n {txHistory.step === 'idle' && <div className=\"pollar-modal-empty\">Click Refresh to load transactions.</div>}\n {isLoading && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n {txHistory.step === 'error' && <div className=\"pollar-modal-empty\">{txHistory.message}</div>}\n {txHistory.step === 'loaded' && records.length === 0 && <div className=\"pollar-modal-empty\">No transactions yet.</div>}\n {records.map((record) => {\n const hash = typeof record.hash === 'string' && record.hash.length > 0 ? record.hash : undefined;\n // Each row carries its own chain (a filtered view is still per-chain),\n // so the explorer link follows the row, not the picker.\n const explorerUrl = hash ? explorerTxUrl(record.chain, hash, record.network) : undefined;\n const asset = typeof record.details?.asset === 'string' ? record.details.asset : undefined;\n // `change_trust` summaries embed the asset as `CODE:ISSUER` - split so\n // the issuer can be truncated and copied on its own.\n const colon = asset ? asset.indexOf(':') : -1;\n const trustline =\n record.operation === 'change_trust' && asset && colon > 0\n ? {\n prefix: record.summary.split(':')[0],\n code: asset.slice(0, colon),\n issuer: asset.slice(colon + 1),\n }\n : undefined;\n // `invoke_contract` summaries carry a server-truncated contract id, so\n // rebuild the chip from the full id in details instead.\n const contract =\n record.operation === 'invoke_contract' &&\n typeof record.details?.contractId === 'string' &&\n typeof record.details?.method === 'string'\n ? { method: record.details.method, contractId: record.details.contractId }\n : undefined;\n return (\n <div key={record.id} className=\"pollar-hist-item\">\n <div className=\"pollar-hist-item-top\">\n <span className=\"pollar-hist-item-summary\">\n {trustline ? (\n <>\n <span className=\"pollar-hist-item-title\">\n {trustline.prefix}: {trustline.code}\n </span>\n <AddressChip value={trustline.issuer} label=\"Copy issuer\" />\n </>\n ) : contract ? (\n <>\n <span className=\"pollar-hist-item-title\">Invoke {contract.method}() on</span>\n <AddressChip value={contract.contractId} label=\"Copy contract address\" />\n </>\n ) : (\n renderSummary(record.summary)\n )}\n </span>\n <StatusBadge status={record.status} />\n </div>\n\n <span className=\"pollar-hist-item-meta\">\n <span>{record.operation}</span>\n {typeof record.details?.sponsored === 'boolean' && (\n <span>· {record.details.sponsored ? 'Sponsored' : 'Self-paid'}</span>\n )}\n {record.fee && (\n <span>\n · {record.fee.amount} {record.fee.unit}\n </span>\n )}\n </span>\n\n <div className=\"pollar-hist-item-footer\">\n <span>{formatDate(record.createdAt)}</span>\n {hash && (\n <>\n <span className=\"pollar-hist-item-dot\">·</span>\n <span className=\"pollar-hist-item-hash\">{truncateMiddle(hash, 6, 6)}</span>\n <CopyButton value={hash} label=\"Copy transaction hash\" className=\"pollar-copy-btn-sm\" />\n <a\n className=\"pollar-hist-item-explorer\"\n href={explorerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"View on block explorer\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 13 13\" fill=\"none\" aria-hidden>\n <path\n d=\"M5 2H2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M8 1h4m0 0v4m0-4L6 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </a>\n </>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {showPagination && (\n <div className=\"pollar-hist-pagination\">\n <span className=\"pollar-hist-pagination-info\">\n {offset + 1}–{Math.min(offset + PAGE_SIZE, total)} of {total}\n </span>\n <div className=\"pollar-hist-pagination-btns\">\n <button className=\"pollar-hist-page-btn\" onClick={onPrev} disabled={!hasPrev}>\n ← Prev\n </button>\n <button className=\"pollar-hist-page-btn\" onClick={onNext} disabled={!hasNext}>\n Next →\n </button>\n </div>\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { useCallback, useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './TxHistoryModal.css';\nimport { TxHistoryModalTemplate } from './TxHistoryModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\nconst PAGE_SIZE = 10;\n\ninterface TxHistoryModalProps {\n onClose: () => void;\n}\n\nexport function TxHistoryModal({ onClose }: TxHistoryModalProps) {\n const { getClient, styles, txHistory, wallets } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n const [offset, setOffset] = useState(0);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network, like the other modals.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n\n // The chain filter is a server query param (pagination is server-side), so a\n // fetch always carries the selected chain. Null while chains resolve - the\n // effect below waits for it rather than fetching the whole unfiltered set.\n const load = useCallback(\n (nextOffset: number, chain: WalletChain) => {\n setOffset(nextOffset);\n void getClient().fetchTxHistory({ limit: PAGE_SIZE, offset: nextOffset, chain });\n },\n [getClient],\n );\n\n // (Re)load from page 1 whenever the selected chain changes. Switching networks\n // must reset the offset - page 3 of Stellar is not page 3 of Solana.\n useEffect(() => {\n if (selectedChain) load(0, selectedChain);\n }, [selectedChain, load]);\n\n const onSelectChain = (chain: WalletChain) => setSelectedChain(chain);\n const paged = (nextOffset: number) => {\n if (selectedChain) load(nextOffset, selectedChain);\n };\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <TxHistoryModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n txHistory={txHistory}\n offset={offset}\n chains={chains}\n selectedChain={selectedChain}\n walletAddress={walletAddress}\n onSelectChain={onSelectChain}\n onRefresh={() => paged(offset)}\n onPrev={() => paged(Math.max(0, offset - PAGE_SIZE))}\n onNext={() => paged(offset + PAGE_SIZE)}\n onClose={onClose}\n />\n </div>\n );\n}\n","'use client';\n\nimport { EnabledAssetRecord, StellarNetwork, WalletBalanceRecord, WalletBalanceState, WalletChain } from '@pollar/core';\nimport { ChainSelect, resolveChain } from '../ChainSelect';\nimport { BusyOverlay, CopyButton, cropAddress, PollarModalFooter, RefreshIcon, useStickyData } from '../commons';\nimport { buildModalCssVars, type ModalStyleOverrides } from '../modal-theme';\n\n// Stellar amounts are int64 scaled by 10^7, so 7 decimals is the ledger's exact\n// precision and the default. A Polygon/Solana token carries its own `decimals`\n// and is rendered at that precision, capped at 7 so an 18-decimal ERC-20 doesn't\n// blow the column apart. Digits are padded either way so amounts line up.\n//\n// A null balance means the chain could not be read. It renders as a dash, never\n// as 0.0000000 - a wallet that failed to load must not look empty.\nfunction formatBalance(balance: string | null, decimals = 7): string {\n if (balance === null) return '—';\n const digits = Math.min(decimals, 7);\n const n = parseFloat(balance);\n return isNaN(n) ? balance : n.toLocaleString(undefined, { minimumFractionDigits: digits, maximumFractionDigits: digits });\n}\n\n/** A testnet faucet for a given asset: where to top it up, and the link text. */\ninterface FaucetHint {\n url: string;\n label: string;\n}\n\n/**\n * The faucet for a balance row, or null when none applies. Testnet-only: the\n * caller passes `null` on mainnet, where these faucets don't fund. Solana's\n * native SOL points at the Solana faucet; USDC (an SPL token) at Circle's.\n */\nfunction faucetFor(record: WalletBalanceRecord): FaucetHint | null {\n if (record.type === 'native') return { url: 'https://faucet.solana.com/', label: 'Get test SOL' };\n if (record.code === 'USDC') return { url: 'https://faucet.circle.com/', label: 'Get test USDC' };\n return null;\n}\n\n// No per-row chain tag: the list is filtered to the internally selected\n// network, so every row would carry the same tag.\nfunction assetMetadataFor(record: WalletBalanceRecord, metadata: EnabledAssetRecord[]): EnabledAssetRecord | undefined {\n return metadata.find(\n (asset) =>\n resolveChain(asset.chain) === resolveChain(record.chain) &&\n asset.code === record.code &&\n (asset.issuer ?? '') === (record.issuer ?? ''),\n );\n}\n\nfunction AssetIcon({ code }: { code: string }) {\n return (\n <span className=\"pollar-bal-asset-icon\" aria-hidden>\n {code.slice(0, 2).toUpperCase()}\n </span>\n );\n}\n\nfunction BalanceItem({\n record,\n faucet,\n metadata,\n}: {\n record: WalletBalanceRecord;\n faucet: FaucetHint | null;\n metadata?: EnabledAssetRecord | undefined;\n}) {\n const balanceDiffers = record.balance !== record.available;\n const secondary = metadata?.name ?? (record.issuer ? cropAddress(record.issuer) : 'Native asset');\n return (\n <div className=\"pollar-bal-item\">\n <div className=\"pollar-bal-asset-info\">\n <span className=\"pollar-bal-asset-leading\">\n <AssetIcon code={record.code} />\n <span className=\"pollar-bal-asset-copy\">\n <span className=\"pollar-bal-asset\">{record.code}</span>\n <span className=\"pollar-bal-asset-secondary\">\n {secondary}\n {record.issuer && <CopyButton value={record.issuer} label=\"Copy issuer address\" className=\"pollar-copy-btn-sm\" />}\n </span>\n </span>\n </span>\n {faucet && (\n <span className=\"pollar-bal-faucet-hint\">\n Need more?{' '}\n <a href={faucet.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {faucet.label}\n </a>\n {/* Pollar's Solana testnet is the devnet cluster, and both faucets\n fund devnet - spell it out so nobody requests on the wrong one. */}\n <span className=\"pollar-bal-faucet-net\"> (devnet)</span>\n </span>\n )}\n </div>\n <div className=\"pollar-bal-amounts\">\n <span className=\"pollar-bal-amount\">{formatBalance(record.balance, record.decimals)}</span>\n {balanceDiffers && (\n <span className=\"pollar-bal-available\">{formatBalance(record.available, record.decimals)} available</span>\n )}\n </div>\n </div>\n );\n}\n\nexport interface WalletBalanceModalTemplateProps {\n theme: string;\n accentColor: string;\n /** Per-app modal chrome overrides (background, card + button radius). */\n styleOverrides?: ModalStyleOverrides;\n walletBalance: WalletBalanceState;\n /** Address of the wallet on {@link selectedChain}. */\n walletAddress: string;\n /** Asset catalog metadata, when already available in the provider. */\n assetMetadata?: EnabledAssetRecord[];\n /**\n * The networks the user holds a wallet on, in the app's configured order.\n * The picker renders only with two or more, so a single-chain app shows none.\n */\n chains?: WalletChain[];\n selectedChain: WalletChain | null;\n /** testnet vs mainnet - gates the Solana devnet faucet hint. */\n network: StellarNetwork;\n onSelectChain?: (chain: WalletChain) => void;\n onRefresh: () => void;\n onClose: () => void;\n}\n\nexport function WalletBalanceModalTemplate({\n theme,\n accentColor,\n styleOverrides,\n walletBalance,\n walletAddress,\n assetMetadata = [],\n chains,\n selectedChain,\n network,\n onSelectChain,\n onRefresh,\n onClose,\n}: WalletBalanceModalTemplateProps) {\n const cssVars = buildModalCssVars(theme, accentColor, styleOverrides);\n\n const isLoading = walletBalance.step === 'loading';\n // Keep the previous payload on screen while refreshing; the overlay below\n // blocks interaction so nothing is read against data that is changing.\n const data = useStickyData(walletBalance.step === 'loaded' ? walletBalance.data : null);\n // Only the picked network's balances. The backend returns every chain in one\n // payload, so this is a local filter - switching networks costs no request.\n const balances = (data?.balances ?? []).filter((b) => resolveChain(b.chain) === selectedChain);\n // These faucets fund devnet/testnet only, so mainnet gets no hint at all.\n const showFaucets = selectedChain === 'SOLANA' && network === 'testnet';\n\n return (\n <div className=\"pollar-modal-card pollar-bal-modal\" data-theme={theme} style={cssVars} onClick={(e) => e.stopPropagation()}>\n {isLoading && data && <BusyOverlay label=\"Refreshing balances…\" />}\n\n <div className=\"pollar-modal-header\">\n <h2 className=\"pollar-modal-title\">Wallet Balance</h2>\n <div className=\"pollar-modal-header-actions\">\n <button\n type=\"button\"\n className=\"pollar-modal-close\"\n onClick={onRefresh}\n disabled={isLoading}\n aria-label=\"Refresh\"\n title=\"Refresh\"\n >\n <RefreshIcon spinning={isLoading} />\n </button>\n <button type=\"button\" className=\"pollar-modal-close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {chains && onSelectChain && (\n <ChainSelect value={selectedChain} options={chains} onChange={onSelectChain} disabled={isLoading} />\n )}\n\n {walletAddress && (\n <div className=\"pollar-address-row\">\n <span className=\"pollar-address\">{cropAddress(walletAddress)}</span>\n <CopyButton value={walletAddress} label=\"Copy wallet address\" />\n </div>\n )}\n\n {/* First load only - a refresh keeps the old list under the overlay. */}\n {isLoading && !data && (\n <div className=\"pollar-loading-block\">\n <div className=\"pollar-spinner\" />\n <span>Loading…</span>\n </div>\n )}\n\n {walletBalance.step === 'error' && <div className=\"pollar-modal-error\">{walletBalance.message}</div>}\n\n {data && !data.exists && <div className=\"pollar-modal-empty\">Account not found on {data.network}.</div>}\n\n {data?.exists && balances.length === 0 && <div className=\"pollar-modal-empty\">No balances found on this network.</div>}\n\n {data?.exists && balances.length > 0 && (\n <div className=\"pollar-bal-list\">\n {balances.map((b) => (\n <BalanceItem\n key={(b.chain ?? '') + b.code + (b.issuer ?? '')}\n record={b}\n metadata={assetMetadataFor(b, assetMetadata)}\n faucet={showFaucets ? faucetFor(b) : null}\n />\n ))}\n </div>\n )}\n\n <PollarModalFooter />\n </div>\n );\n}\n","'use client';\n\nimport { WalletChain } from '@pollar/core';\nimport { useEffect, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { useChains } from '../../useChains';\nimport { addressForChain } from '../ChainSelect';\nimport '../shared.css';\nimport './WalletBalanceModal.css';\nimport { WalletBalanceModalTemplate } from './WalletBalanceModalTemplate';\nimport { modalChrome } from '../modal-theme';\n\ninterface WalletBalanceModalProps {\n onClose: () => void;\n}\n\nexport function WalletBalanceModal({ onClose }: WalletBalanceModalProps) {\n const { walletBalance, refreshWalletBalance, wallets, network, styles, enabledAssets } = usePollar();\n const { theme, accentColor, styleOverrides, overlayStyle } = modalChrome(styles);\n\n const { chains } = useChains();\n const [selectedChain, setSelectedChain] = useState<WalletChain | null>(null);\n // Default to the app's first configured network. Runs as an effect because\n // `wallets` is empty on the first render of a cold-start session.\n useEffect(() => {\n if (selectedChain === null && chains.length > 0) setSelectedChain(chains[0]!);\n }, [chains, selectedChain]);\n\n const walletAddress = addressForChain(wallets, selectedChain);\n\n useEffect(() => {\n void refreshWalletBalance();\n }, [refreshWalletBalance]);\n\n return (\n <div className=\"pollar-overlay\" style={overlayStyle} onClick={onClose}>\n <WalletBalanceModalTemplate\n theme={theme}\n accentColor={accentColor}\n styleOverrides={styleOverrides}\n walletBalance={walletBalance}\n walletAddress={walletAddress}\n assetMetadata={enabledAssets.step === 'loaded' ? enabledAssets.data.assets : []}\n chains={chains}\n selectedChain={selectedChain}\n network={network}\n onSelectChain={setSelectedChain}\n onRefresh={() => refreshWalletBalance()}\n onClose={onClose}\n />\n </div>\n );\n}\n","import type { PasskeyCeremony, PasskeySigner } from '@pollar/core';\nimport { startAuthentication, startRegistration } from '@simplewebauthn/browser';\n\n// hex -> base64url, for passing the raw auth digest as the WebAuthn challenge.\nfunction hexToBase64url(hex: string): string {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n// WebAuthn user.id must be a base64url string in the JSON options. It is a\n// per-credential opaque handle (the authenticator stores it for the account\n// picker); the server identifies users by credentialId, not this.\nfunction randomUserId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * Browser passkey ceremony for the smart-wallet flow.\n *\n * `mode` is set explicitly by the caller's button, so there's no ambiguous\n * autodetect:\n * - `'login'` -> `get()` only (returning user - the OS shows the account\n * picker for discoverable credentials on this domain). A\n * failure here is surfaced as-is; it never falls through to\n * registration, so cancelling the prompt can't accidentally\n * create a second wallet.\n * - `'register'` -> `create()` only (new user -> the server deploys the\n * C-address).\n *\n * rpId = the current page's hostname (the customer app's domain), which is what\n * the passkey is bound to - the anti-phishing guarantee.\n */\nexport const browserPasskeyCeremony: PasskeyCeremony = async ({ challenge, mode }) => {\n const rpId = window.location.hostname;\n\n if (mode === 'login') {\n const response = await startAuthentication({\n optionsJSON: { challenge, rpId, userVerification: 'required' },\n });\n return { kind: 'login', response };\n }\n\n const userId = randomUserId();\n const response = await startRegistration({\n optionsJSON: {\n challenge,\n rp: { id: rpId, name: rpId },\n user: { id: userId, name: 'Smart Wallet', displayName: 'Smart Wallet' },\n // ES256 (secp256r1) - the curve the on-chain WebAuthn verifier expects.\n pubKeyCredParams: [{ type: 'public-key', alg: -7 }],\n authenticatorSelection: { residentKey: 'required', userVerification: 'required' },\n attestation: 'none',\n timeout: 60_000,\n },\n });\n return { kind: 'register', response };\n};\n\n/**\n * Browser passkey signer for smart-wallet transactions. Runs a WebAuthn `get()`\n * whose challenge is the raw auth digest (the on-chain verifier checks\n * clientDataJSON.challenge === base64url(digest)), and returns the public\n * assertion fields (base64url) for the server to assemble into the Soroban auth\n * entry. The secp256r1 key never leaves the device.\n */\nexport const browserPasskeySigner: PasskeySigner = async ({ credentialId, challenge }) => {\n const rpId = window.location.hostname;\n const { response } = await startAuthentication({\n optionsJSON: {\n challenge: hexToBase64url(challenge),\n rpId,\n allowCredentials: [{ id: credentialId, type: 'public-key' }],\n userVerification: 'required',\n },\n });\n // @simplewebauthn/browser returns these as base64url strings.\n return {\n authenticatorData: response.authenticatorData,\n clientDataJSON: response.clientDataJSON,\n signature: response.signature,\n };\n};\n","'use client';\n\nimport {\n isPollarClient,\n BuildOutcome,\n EnabledAssetsState,\n isInteractiveAuthAdapter,\n NetworkState,\n OnStorageDegrade,\n PollarAdapters,\n PollarClient,\n PollarClientConfig,\n PollarLoginOptions,\n PollarPersistedSession,\n SendPaymentParams,\n SessionsState,\n SignOutcome,\n StellarNetwork,\n SubmitOutcome,\n SwapQuote,\n SwapQuoteParams,\n SwapToken,\n SwapVenue,\n EarnProviderId,\n EarnOpportunity,\n EarnPosition,\n EarnPositionParams,\n EarnTxParams,\n TrustlineOutcome,\n TransactionState,\n TxBuildBody,\n TxHistoryState,\n WalletBalanceState,\n WalletInfo,\n} from '@pollar/core';\nimport { createContext, ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { ModalErrorBoundary, setModalErrorLogger } from './components/commons';\nimport { DistributionRulesModal } from './components/distribution-rules-modal/DistributionRulesModal';\nimport { EnabledAssetsModal } from './components/enabled-assets-modal/EnabledAssetsModal';\nimport { KycModal } from './components/kyc-modal/KycModal';\nimport { AppKycFlow } from './components/kyc-modal/AppKycFlow';\nimport { LoginModal } from './components/login-modal/LoginModal';\nimport { RampWidget } from './components/ramp-widget/RampWidget';\nimport { ReceiveModal } from './components/receive-modal/ReceiveModal';\nimport { SendModal } from './components/send-modal/SendModal';\nimport { SwapModal } from './components/swap-modal/SwapModal';\nimport { EarnModal } from './components/earn-modal/EarnModal';\nimport { CardModal } from './components/card-modal/CardModal';\nimport { SessionsModal } from './components/sessions-modal/SessionsModal';\nimport { CosignModal } from './components/cosign-modal/CosignModal';\nimport { ConfirmModal } from './components/confirm-modal/ConfirmModal';\nimport type { CosignState, PendingConfirmation } from '@pollar/core';\nimport { TransactionModal } from './components/transaction-modal/TransactionModal';\nimport { TxHistoryModal } from './components/tx-history-modal/TxHistoryModal';\nimport { WalletBalanceModal } from './components/wallet-balance-modal/WalletBalanceModal';\nimport { browserPasskeyCeremony, browserPasskeySigner } from './lib/passkey-ceremony';\nimport type { PollarConfig, PollarStyles } from './types';\n\nconst DEFAULT_APP_CONFIG: PollarConfig = {\n application: { name: '', network: 'testnet', chains: [] },\n styles: {},\n};\n\n/**\n * Compares the fields of a persisted session that actually drive UI re-renders.\n * Replaces a per-listener `JSON.stringify(...) !== JSON.stringify(...)` call -\n * cheaper, allocation-free, and explicit about what counts as \"changed\".\n *\n * If a field is added to `PollarPersistedSession` that consumers read through\n * context, list it here too.\n */\nfunction sessionsEqual(a: PollarPersistedSession | null, b: PollarPersistedSession | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.clientSessionId === b.clientSessionId &&\n a.userId === b.userId &&\n a.status === b.status &&\n a.token?.accessToken === b.token?.accessToken &&\n a.token?.refreshToken === b.token?.refreshToken &&\n a.token?.expiresAt === b.token?.expiresAt &&\n a.wallet?.address === b.wallet?.address &&\n // The wallet's on-chain account can move from CREATING to READY without any\n // other field changing. Leaving it out of the comparison is what would make\n // the whole provisioning UI dead: the short-circuit below would swallow the\n // one emission that says the wait is over.\n a.wallet?.provisioning === b.wallet?.provisioning\n );\n}\n\ninterface PollarContextValue {\n /**\n * The authenticated user's wallet as a discriminated union over `custody`\n * (`internal` | `smart` | `external`), or `null` when unauthenticated. Every\n * field is meaningful for any login method - `custody` is always present and\n * strictly determines the shape of `provider`. Use `wallet.address` for the\n * on-chain address and `wallet.provider` for the wallet/login provider.\n */\n wallet: WalletInfo | null;\n /**\n * Every wallet the user holds, one per chain - a superset of {@link wallet},\n * with `chain` populated. `[]` when unauthenticated. Drives the network\n * selector in the Send / Wallet Balance / Assets modals: each entry is a\n * network the user can switch to, and the first one is the default.\n */\n wallets: WalletInfo[];\n getClient: () => PollarClient;\n openLoginModal: () => void;\n\n isAuthenticated: boolean;\n /**\n * Whether the signed-in user has a wallet. False for an app that creates\n * wallets on demand until {@link createWallet} runs, and always for one that\n * creates none.\n */\n hasWallet: boolean;\n /** Create the signed-in user's wallet; see `PollarClient.createWallet`. */\n createWallet: () => Promise<WalletInfo>;\n /**\n * `true` once the server has confirmed the session (login / refresh /\n * `/auth/session/resume`). `false` while a cold-start session is still\n * optimistic - gate sensitive actions (e.g. signing) on this.\n */\n verified: boolean;\n login: (options: PollarLoginOptions) => void;\n logout: () => void;\n // sessions\n sessions: SessionsState;\n /** Open the active-sessions modal. */\n openSessionsModal: () => void;\n // cosign (Turnkey co-signed wallets)\n /** Requests waiting for this device's vote. */\n cosign: CosignState;\n /** Open the approval prompt of a co-signed wallet. Opens by itself when a request arrives. */\n openCosignModal: () => void;\n /** Signing calls waiting for the user under `confirmation: 'prompt'`; the provider shows the first one. */\n confirmations: PendingConfirmation[];\n appConfig: PollarConfig;\n styles: PollarStyles;\n /** Remote app-config load state. 'loading' while the initial fetch is in\n * flight, 'error' if it failed (styles fall back to empty defaults), 'ready'\n * once resolved - or immediately 'ready' when `appConfig` is passed as a prop.\n * The login modal shows a spinner/retry instead of an empty shell until this\n * is 'ready'. */\n configStatus: 'loading' | 'ready' | 'error';\n /** Re-run the remote app-config fetch after an error. No-op when `appConfig`\n * was supplied as a prop. */\n retryConfig: () => void;\n // transactions\n openTxModal: () => void;\n tx: TransactionState;\n buildTx: (\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ) => Promise<BuildOutcome>;\n signAndSubmitTx: (unsignedXdr?: string) => Promise<SubmitOutcome>;\n /** Sign only. Embedded sessions sign server-side, external sessions through their adapter. Smart wallets use `signAndSubmitTx`. */\n signTx: (unsignedXdr: string) => Promise<SignOutcome>;\n submitTx: (signedXdr: string) => Promise<SubmitOutcome>;\n /** One-shot: build -> sign -> submit. Drives the same TransactionState flow as the split calls. */\n buildAndSignAndSubmitTx: (\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ) => Promise<SubmitOutcome>;\n /** Alias of `buildAndSignAndSubmitTx`. */\n runTx: (\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ) => Promise<SubmitOutcome>;\n /**\n * Send a payment on any chain the user holds a wallet on. Stellar keeps the\n * split flow (so external adapters and passkeys still work); a chain whose\n * signature expires goes through one server-side call and is embedded-only.\n */\n sendPayment: (params: SendPaymentParams) => Promise<SubmitOutcome>;\n // network\n network: StellarNetwork;\n setNetwork: (network: StellarNetwork) => void;\n // wallet balance\n walletBalance: WalletBalanceState;\n refreshWalletBalance: () => Promise<void>;\n // enabled assets\n /**\n * The application's dashboard-enabled assets paired with the authenticated\n * wallet's on-chain trustline state (`trustlineEstablished` per asset). Driven\n * by {@link refreshAssets}; mirrors {@link walletBalance}.\n */\n enabledAssets: EnabledAssetsState;\n refreshAssets: () => Promise<void>;\n /**\n * Establishes (omit `limit`) or removes (`limit: '0'`) a trustline for an\n * asset. Sponsorship is derived automatically from the app's dashboard config\n * (the app covers the reserve + fee when eligible); pass `skipSponsorship` to\n * force the user's own wallet to pay. Mirrors {@link PollarClient.setTrustline}.\n */\n setTrustline: (\n asset: { code: string; issuer: string },\n opts?: {\n limit?: string;\n /** Force self-pay even when the app would sponsor the trustline. */\n skipSponsorship?: boolean;\n },\n ) => Promise<TrustlineOutcome>;\n /** Open the enabled-assets / trustline-state modal. */\n openEnabledAssetsModal: () => void;\n // kyc\n openKycModal: (options?: {\n corridorId?: string;\n providerId?: string;\n country?: string;\n level?: 'basic' | 'intermediate' | 'enhanced';\n onApproved?: () => void;\n }) => void;\n // ramps\n openRampModal: () => void;\n // tx history\n txHistory: TxHistoryState;\n openTxHistoryModal: () => void;\n // wallet balance modal\n openWalletBalanceModal: () => void;\n // send / receive\n openSendModal: () => void;\n openReceiveModal: () => void;\n // swap (DEX/AMM)\n /**\n * The swap venues this app exposes to end-users (empty = swap disabled, hide\n * swap UI). Mirrors {@link PollarClient.getSwapConfig}.\n */\n getSwapConfig: () => Promise<SwapVenue[]>;\n /**\n * The curated \"buy\" tokens this app opted into (admin catalog). Mirrors\n * {@link PollarClient.getSwapTokens}.\n */\n getSwapTokens: () => Promise<SwapToken[]>;\n /**\n * Quote an asset-to-asset swap across the requested venue(s). Read-only;\n * returns quotes ranked best-first. Mirrors {@link PollarClient.getSwapQuote}.\n */\n getSwapQuote: (params: SwapQuoteParams) => Promise<SwapQuote[]>;\n /**\n * Execute a swap from a quote (establishes the buy-asset trustline first when\n * needed). Drives the transaction state machine. Mirrors {@link PollarClient.swap}.\n */\n swap: (quote: SwapQuote, opts?: { autoTrustline?: boolean }) => Promise<SubmitOutcome>;\n /** Open the swap modal. */\n openSwapModal: () => void;\n // earn (yield vaults / lending)\n /**\n * The yield providers this app exposes to end-users (empty = Earn disabled,\n * hide Earn UI). Mirrors {@link PollarClient.getEarnProviders}.\n */\n getEarnProviders: () => Promise<EarnProviderId[]>;\n /**\n * The vaults (DeFindex) or pools (Blend) a provider exposes, with live APY.\n * Mirrors {@link PollarClient.getEarnOpportunities}.\n */\n getEarnOpportunities: (provider: EarnProviderId) => Promise<EarnOpportunity[]>;\n /**\n * The connected wallet's position (balance + APY) in a vault/pool. Read-only.\n * Mirrors {@link PollarClient.getEarnPosition}.\n */\n getEarnPosition: (params: EarnPositionParams) => Promise<EarnPosition>;\n /**\n * Deposit into a vault/pool (asset amount). Drives the transaction state\n * machine. Mirrors {@link PollarClient.earnDeposit}.\n */\n earnDeposit: (params: EarnTxParams) => Promise<SubmitOutcome>;\n /**\n * Withdraw from a vault/pool (amount in the position `withdrawUnit`). Mirrors\n * {@link PollarClient.earnWithdraw}.\n */\n earnWithdraw: (params: EarnTxParams) => Promise<SubmitOutcome>;\n /** Open the Earn modal. */\n openEarnModal: () => void;\n // cards\n /**\n * Open the Cards modal: sign-up, identity verification, issuing, the card\n * itself and its activity. The card calls live on {@link PollarClient}\n * (`getCardProviders`, `issueCard`, `revealCardSecrets`, ...).\n */\n openCardModal: () => void;\n // distribution\n openDistributionRulesModal: () => void;\n // adapters\n adapters?: PollarAdapters;\n}\n\nconst PollarContext = createContext<PollarContextValue | null>(null);\n\ninterface PollarProviderProps {\n /**\n * Either a pre-built `PollarClient` instance (useful for testing or for\n * reusing the same client outside React) or a `PollarClientConfig` that the\n * provider will use to construct one on mount.\n *\n * The client is locked at first render: changing this prop afterwards is\n * ignored. To swap clients, unmount and remount the provider.\n *\n * Either form gets the web passkey ceremony installed (a pre-built instance\n * is filled in via `setPasskeyDefaults`), so the \"Smart Wallet\" login works\n * without the consumer wiring WebAuthn. A ceremony you configured yourself is\n * always kept.\n */\n client: PollarClient | PollarClientConfig;\n /**\n * Local REPLACEMENT for the `/applications/config` response, not a patch over\n * it. Passing anything at all skips the remote fetch entirely; what you pass\n * is used verbatim and is never merged with the server's answer, so there is\n * no \"fill in the fields I left out\".\n *\n * `styles` may be partial (every field in it is optional), but `application`\n * may not: `name`, `network` and `chains` are all required by the type. If you\n * bypass the type anyway (plain JS, or a cast), each missing field lands on a\n * default scattered across the components rather than on anything central:\n *\n * chains absent -> the chain order/filter falls back to the order the\n * session listed the user's wallets in (see useChains)\n * name absent -> 'Pollar'\n * theme absent -> 'light'\n * accentColor absent -> '#005DB4'\n * emailEnabled, providers, embeddedWallets, smartWallet\n * absent -> false. NOTE: that means EVERY login method is off\n * and the login modal renders with no way in.\n *\n * Leave this `undefined` to have the SDK fetch `/applications/config` on\n * mount, which is also what keeps branding, login methods and chains current:\n * that fetch re-runs on every mount, so dashboard changes land on the next\n * page load. Supplying this prop opts out of that too.\n */\n appConfig?: PollarConfig;\n adapters?: PollarAdapters;\n /**\n * Notified when persistent storage silently degrades to in-memory mode\n * (Safari private browsing quota errors, sandboxed iframes, etc.). Use this\n * to surface a UI hint that the session won't survive a reload, log to\n * telemetry, or fall back to a different storage strategy.\n *\n * Fires at most once per provider lifetime; late mounts get the latched\n * state replayed on subscribe.\n */\n onStorageDegrade?: OnStorageDegrade;\n children: ReactNode;\n}\n\n/**\n * Clients built from a `PollarClientConfig`, keyed by that exact config object.\n *\n * React StrictMode double-invokes the `useState` initializer below on mount and\n * discards the FIRST pass's hook state entirely - the value the component keeps\n * comes from the second pass, and `useRef` carries nothing between the two. So\n * a ref guard cannot see the first construction, and without this map the\n * provider built TWO clients and only ever tore down the one React kept. The\n * orphan outlived the provider, holding a cross-tab `storage` listener, a\n * refresh loop and a live-client registry entry for the life of the page - and\n * two live clients on one API key share a session row and a DPoP keypair, which\n * is exactly the configuration `@pollar/core`'s session teardown has to defend\n * against. (See `tests/smoke-react.cjs`, which renders through jsdom because\n * `react-test-renderer` does not reproduce the double render at all.)\n *\n * Both passes receive the same props object - React re-invokes a component's\n * render function in place and reconciles children from the last pass - so\n * keying on the config makes the second pass reuse the first pass's client\n * instead of building another. Weak, so an abandoned config never keeps a\n * client alive; and the entry is dropped as soon as the mount effect claims the\n * client, so a later provider rendered with the same (retained) config object\n * builds its own rather than receiving one this provider is about to destroy.\n *\n * Two providers sharing one config OBJECT still share the client. That is the\n * better outcome of the two - one client per config identity, rather than two\n * fighting over the same session row - and it matches what the SDK already\n * warns about for multiple clients on one API key.\n */\nconst clientByConfig = new WeakMap<PollarClientConfig, PollarClient>();\n\nexport function PollarProvider({\n client,\n appConfig: appConfigProp,\n adapters,\n onStorageDegrade,\n children,\n}: PollarProviderProps) {\n // Inject the browser passkey ceremony so `loginSmartWallet()` /\n // `createSmartWallet()` work out of the box on web, whichever way the client\n // arrives: built here from a config, or handed over ready-made (a consumer\n // singleton shared with non-React code). The consumer can override it (e.g. a\n // React Native native provider) via `client.passkey`; `??` keeps an explicit\n // ceremony winning while an absent/undefined one still gets the default.\n const [pollarClient] = useState<PollarClient>(() => {\n if (isPollarClient(client)) {\n client.setPasskeyDefaults({ passkey: browserPasskeyCeremony, passkeySign: browserPasskeySigner });\n return client;\n }\n // Reuse the instance a discarded render pass already built (see\n // `clientByConfig`) instead of constructing a second one that nothing\n // would ever tear down.\n const alreadyBuilt = clientByConfig.get(client);\n if (alreadyBuilt) return alreadyBuilt;\n const built = new PollarClient({\n ...client,\n passkey: client.passkey ?? browserPasskeyCeremony,\n passkeySign: client.passkeySign ?? browserPasskeySigner,\n });\n clientByConfig.set(client, built);\n return built;\n });\n // Only a client WE constructed is ours to tear down on unmount; a client the\n // consumer passed in is theirs to manage. Captured once (the useState\n // initializer above made the same decision).\n const ownsClientRef = useRef(!isPollarClient(client));\n const destroyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n /** The config this provider built from, until the mount effect claims it. */\n const builtFromConfigRef = useRef<PollarClientConfig | null>(isPollarClient(client) ? null : client);\n\n // Tear down the client on a real unmount so its cross-tab storage listener,\n // refresh timer, and live-client registry entry don't leak - matters when the\n // provider is keyed (e.g. `key={apiKey}`) and remounts on network change.\n useEffect(() => {\n if (!ownsClientRef.current) return;\n // Claim the client. Effects run after the double render, so the shared\n // entry has done its job; dropping it keeps a future provider from being\n // handed a client this one will destroy on unmount.\n if (builtFromConfigRef.current) {\n clientByConfig.delete(builtFromConfigRef.current);\n builtFromConfigRef.current = null;\n }\n // This mount is live again - cancel any teardown scheduled by a prior\n // (StrictMode dev) unmount before it can destroy the client we still use.\n if (destroyTimerRef.current) {\n clearTimeout(destroyTimerRef.current);\n destroyTimerRef.current = null;\n }\n return () => {\n // Defer to a macrotask: React StrictMode unmounts then synchronously\n // remounts in dev, and the remount's effect (above) cancels this before it\n // runs. On a real unmount nothing re-mounts to cancel it, so it fires.\n destroyTimerRef.current = setTimeout(() => pollarClient.destroy(), 0);\n };\n }, [pollarClient]);\n const [networkState, setNetworkState] = useState<NetworkState>(() => pollarClient.getNetworkState());\n const [sessionState, setSessionState] = useState<PollarPersistedSession | null>(null);\n // `true` once the server has confirmed the restored session (via login,\n // refresh, or `/auth/session/resume`). Use it to gate sensitive actions\n // while a cold-start session is still optimistic.\n const [verified, setVerified] = useState(false);\n const [transaction, setTransaction] = useState<TransactionState>({ step: 'idle' });\n const [txHistory, setTxHistory] = useState<TxHistoryState>({ step: 'idle' });\n const [sessions, setSessions] = useState<SessionsState>({ step: 'idle' });\n const [cosign, setCosign] = useState<CosignState>({ pending: [] });\n const [confirmations, setConfirmations] = useState<PendingConfirmation[]>([]);\n const firstConfirmation = confirmations[0] ?? null;\n const [walletBalance, setWalletBalance] = useState<WalletBalanceState>({ step: 'idle' });\n const [enabledAssets, setEnabledAssets] = useState<EnabledAssetsState>({ step: 'idle' });\n const [resolvedConfig, setResolvedConfig] = useState<PollarConfig>(() => appConfigProp ?? DEFAULT_APP_CONFIG);\n const [configStatus, setConfigStatus] = useState<'loading' | 'ready' | 'error'>(\n appConfigProp !== undefined ? 'ready' : 'loading',\n );\n const [configRetry, setConfigRetry] = useState(0);\n const retryConfig = useCallback(() => setConfigRetry((n) => n + 1), []);\n\n // A locally-passed `appConfig` is tracked by CONTENT, not by identity. A\n // consumer writing `appConfig={{ ... }}` inline hands us a new object on every\n // render, so keying the config effect on the object itself would re-run it,\n // set state with a fresh reference, re-render, and never settle. The\n // serialized form only changes when the config really changes, and\n // `PollarConfig` is a plain JSON response shape, so it serializes losslessly.\n const appConfigKey = appConfigProp === undefined ? '' : JSON.stringify(appConfigProp);\n // The effect reads the prop through this ref so it does not have to key on it.\n const appConfigPropRef = useRef(appConfigProp);\n appConfigPropRef.current = appConfigProp;\n\n useEffect(() => {\n return pollarClient.onTransactionStateChange(setTransaction);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onTxHistoryStateChange(setTxHistory);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onCosignStateChange(setCosign);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onConfirmationRequest(setConfirmations);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onSessionsStateChange(setSessions);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onWalletBalanceStateChange(setWalletBalance);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onEnabledAssetsStateChange(setEnabledAssets);\n }, [pollarClient]);\n\n useEffect(() => {\n return pollarClient.onNetworkStateChange((state) => {\n setNetworkState(state);\n });\n }, [pollarClient]);\n\n useEffect(() => {\n if (!onStorageDegrade) return;\n return pollarClient.onStorageDegrade(onStorageDegrade);\n }, [pollarClient, onStorageDegrade]);\n\n useEffect(() => {\n return pollarClient.onAuthStateChange((authState) => {\n if (authState.step === 'authenticated') {\n setSessionState((prev) => (sessionsEqual(prev, authState.session) ? prev : authState.session));\n // The session object is identical between the optimistic restore and\n // the post-resume confirmation, so `verified` is tracked separately -\n // otherwise the sessionsEqual short-circuit would swallow the flip.\n setVerified(authState.verified);\n } else if (authState.step === 'idle') {\n setSessionState(null);\n setVerified(false);\n }\n });\n }, [pollarClient]);\n\n // Auto-login for interactive adapters (e.g. Privy). When the adapter's\n // provider authenticates *outside* the sub-modal flow - after an OAuth redirect\n // (the page reloaded, so the sub-modal promise is gone) or a persisted provider\n // session on load - and Pollar has no session yet, trigger `login({ provider })`\n // so `connect()` + SEP-10 run. Read the session through a ref so the\n // subscription is set up once and never re-subscribes on session changes.\n const sessionRef = useRef(sessionState);\n sessionRef.current = sessionState;\n useEffect(() => {\n const unsubscribes: Array<() => void> = [];\n for (const { id } of pollarClient.listWalletAdapters()) {\n const adapter = pollarClient.getWalletAdapter(id);\n if (!isInteractiveAuthAdapter(adapter) || !adapter.onProviderAuthChange) continue;\n let triggered = false;\n unsubscribes.push(\n adapter.onProviderAuthChange((state) => {\n // Reset on sign-out so a later re-auth can trigger again (rising edge).\n if (!state.authenticated || !state.address) {\n triggered = false;\n return;\n }\n if (triggered || sessionRef.current) return;\n triggered = true;\n pollarClient.login({ provider: id } as PollarLoginOptions);\n }),\n );\n }\n return () => {\n for (const unsubscribe of unsubscribes) unsubscribe();\n };\n }, [pollarClient]);\n\n // Route the modal error boundary's logs through the client's level-gated\n // logger (it's a class component that can't read context directly).\n useEffect(() => {\n setModalErrorLogger(pollarClient.getLogger());\n }, [pollarClient]);\n\n useEffect(() => {\n // PRESENCE of `appConfig` is the opt-out, not its contents: any value at all\n // means the consumer owns the config, so the remote fetch never runs and\n // what they passed is used as-is. It is 'ready' immediately because there is\n // nothing to wait for. It is also re-applied here, not only seeded in the\n // initial state, so a consumer that swaps the config after mount is not left\n // with the value from the first render.\n //\n // Otherwise this runs on every mount, which is what keeps branding, login\n // methods and chains current: a change in the dashboard lands on the next\n // page load with no re-login.\n const localConfig = appConfigPropRef.current;\n if (localConfig !== undefined) {\n // Same fallback as the initial state above, so a JS consumer passing an\n // explicit null still lands on the default config instead of a null one.\n setResolvedConfig(localConfig ?? DEFAULT_APP_CONFIG);\n setConfigStatus('ready');\n return;\n }\n let cancelled = false;\n setConfigStatus('loading');\n pollarClient\n .getAppConfig()\n .then((fetched) => {\n if (cancelled) return;\n if (!fetched) {\n setConfigStatus('error');\n return;\n }\n setResolvedConfig(fetched as PollarConfig);\n setConfigStatus('ready');\n })\n .catch((err) => {\n if (cancelled) return;\n pollarClient.getLogger().error('[PollarProvider] getAppConfig failed', err);\n setConfigStatus('error');\n });\n return () => {\n cancelled = true;\n };\n }, [pollarClient, appConfigKey, configRetry]);\n\n const [loginModalOpen, setLoginModalOpen] = useState(false);\n const [transactionModalOpen, setTransactionModalOpen] = useState(false);\n const [kycModalOpen, setKycModalOpen] = useState(false);\n const [kycModalOptions, setKycModalOptions] = useState<{\n corridorId?: string;\n providerId?: string;\n country?: string;\n level?: 'basic' | 'intermediate' | 'enhanced';\n onApproved?: () => void;\n }>({});\n const [rampModalOpen, setRampModalOpen] = useState(false);\n const [txHistoryModalOpen, setTxHistoryModalOpen] = useState(false);\n const [walletBalanceModalOpen, setWalletBalanceModalOpen] = useState(false);\n const [enabledAssetsModalOpen, setEnabledAssetsModalOpen] = useState(false);\n const [sendModalOpen, setSendModalOpen] = useState(false);\n const [swapModalOpen, setSwapModalOpen] = useState(false);\n const [earnModalOpen, setEarnModalOpen] = useState(false);\n // Bumped every time a tx-driving modal opens, used as its `key` so a re-open\n // remounts it (local `step` back to the form) even when it was already open on\n // a terminal \"Done!\"/error screen. Paired with `resetTransactionState()`.\n const [sendModalKey, setSendModalKey] = useState(0);\n const [swapModalKey, setSwapModalKey] = useState(0);\n const [earnModalKey, setEarnModalKey] = useState(0);\n const [cardModalOpen, setCardModalOpen] = useState(false);\n const [cardModalKey, setCardModalKey] = useState(0);\n const [receiveModalOpen, setReceiveModalOpen] = useState(false);\n const [sessionsModalOpen, setSessionsModalOpen] = useState(false);\n const [cosignModalOpen, setCosignModalOpen] = useState(false);\n // A signing call that came back pending needs the user's vote now; open the\n // prompt the moment a new request appears, never when one merely resolves.\n const cosignPendingCount = useRef(0);\n useEffect(() => {\n if (cosign.pending.length > cosignPendingCount.current) setCosignModalOpen(true);\n cosignPendingCount.current = cosign.pending.length;\n }, [cosign.pending.length]);\n const [distributionRulesModalOpen, setDistributionRulesModalOpen] = useState(false);\n\n // When the session ends (logout, revoked, ended in another tab) every modal that\n // acts on it closes, so none keeps the previous user's data on screen; reopening\n // loads from scratch. Losing the network does not end the session (core keeps it\n // and retries), so this never fires offline. The login modal stays.\n useEffect(\n () =>\n pollarClient.onAuthStateChange((authState) => {\n if (authState.step !== 'idle') return;\n setTransactionModalOpen(false);\n setKycModalOpen(false);\n setRampModalOpen(false);\n setTxHistoryModalOpen(false);\n setWalletBalanceModalOpen(false);\n setEnabledAssetsModalOpen(false);\n setSendModalOpen(false);\n setSwapModalOpen(false);\n setEarnModalOpen(false);\n setCardModalOpen(false);\n setReceiveModalOpen(false);\n setSessionsModalOpen(false);\n setCosignModalOpen(false);\n setDistributionRulesModalOpen(false);\n }),\n [pollarClient],\n );\n\n // PII (incl. providers.wallet.address) lives on `client.getUserProfile()`, not on the\n // persisted session. For every wallet type, `wallet.address` holds the on-chain\n // address we care about.\n const walletAddress = sessionState?.wallet?.address || '';\n // A scalar dependency for the context memo below, for the same reason\n // `walletAddress` is one: the memo reads the wallet through\n // `pollarClient.getWallet()`, so it only recomputes when something in its\n // dependency list moves. Without this, a wallet going from CREATING to READY\n // updates the session and re-renders nothing.\n const walletProvisioning = sessionState?.wallet?.provisioning;\n // Signed in is having a session: a user of an app that creates wallets on\n // demand is authenticated before they have an address.\n const hasSession = sessionState !== null;\n const getClient = useCallback(() => pollarClient, [pollarClient]);\n // refreshBalance resolves the own wallet server-side from the session;\n // walletAddress stays in deps so the callback re-binds when the wallet changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- walletAddress is an intentional re-bind trigger, not read in the body\n const refreshWalletBalance = useCallback(() => pollarClient.refreshBalance(), [pollarClient, walletAddress]);\n // refreshAssets resolves the own wallet server-side from the session;\n // walletAddress stays in deps so the callback re-binds when the wallet changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- walletAddress is an intentional re-bind trigger, not read in the body\n const refreshAssets = useCallback(() => pollarClient.refreshAssets(), [pollarClient, walletAddress]);\n\n const contextValue: PollarContextValue = useMemo(() => {\n const styles: PollarStyles = resolvedConfig.styles ?? {};\n return {\n // session\n wallet: pollarClient.getWallet(),\n wallets: pollarClient.getWallets(),\n isAuthenticated: hasSession,\n hasWallet: pollarClient.hasWallet(),\n createWallet: () => pollarClient.createWallet(),\n verified,\n // client\n getClient,\n // auth\n login: (options: PollarLoginOptions) => pollarClient.login(options),\n logout: () => pollarClient.logout(),\n openLoginModal: () => setLoginModalOpen(true),\n // transactions\n tx: transaction,\n buildTx: (operation, params, options) => pollarClient.buildTx(operation, params, options),\n signAndSubmitTx: (unsignedXdr?: string) => pollarClient.signAndSubmitTx(unsignedXdr),\n signTx: (unsignedXdr: string) => pollarClient.signTx(unsignedXdr),\n submitTx: (signedXdr: string) => pollarClient.submitTx(signedXdr),\n buildAndSignAndSubmitTx: (operation, params, options) => pollarClient.buildAndSignAndSubmitTx(operation, params, options),\n runTx: (operation, params, options) => pollarClient.runTx(operation, params, options),\n sendPayment: (params) => pollarClient.sendPayment(params),\n openTxModal: () => setTransactionModalOpen(true),\n // tx history\n txHistory,\n openTxHistoryModal: () => setTxHistoryModalOpen(true),\n // wallet balance\n walletBalance,\n refreshWalletBalance,\n openWalletBalanceModal: () => setWalletBalanceModalOpen(true),\n // enabled assets\n enabledAssets,\n refreshAssets,\n setTrustline: (asset, opts) => pollarClient.setTrustline(asset, opts),\n openEnabledAssetsModal: () => setEnabledAssetsModalOpen(true),\n // send / receive\n openSendModal: () => {\n pollarClient.resetTransactionState();\n setSendModalKey((k) => k + 1);\n setSendModalOpen(true);\n },\n openReceiveModal: () => setReceiveModalOpen(true),\n // swap\n getSwapConfig: () => pollarClient.getSwapConfig(),\n getSwapTokens: () => pollarClient.getSwapTokens(),\n getSwapQuote: (params) => pollarClient.getSwapQuote(params),\n swap: (quote, opts) => pollarClient.swap(quote, opts),\n openSwapModal: () => {\n pollarClient.resetTransactionState();\n setSwapModalKey((k) => k + 1);\n setSwapModalOpen(true);\n },\n // earn\n getEarnProviders: () => pollarClient.getEarnProviders(),\n getEarnOpportunities: (provider) => pollarClient.getEarnOpportunities(provider),\n getEarnPosition: (params) => pollarClient.getEarnPosition(params),\n earnDeposit: (params) => pollarClient.earnDeposit(params),\n earnWithdraw: (params) => pollarClient.earnWithdraw(params),\n openEarnModal: () => {\n pollarClient.resetTransactionState();\n setEarnModalKey((k) => k + 1);\n setEarnModalOpen(true);\n },\n // cards\n openCardModal: () => {\n setCardModalKey((k) => k + 1);\n setCardModalOpen(true);\n },\n // sessions\n sessions,\n openSessionsModal: () => setSessionsModalOpen(true),\n // cosign\n cosign,\n openCosignModal: () => setCosignModalOpen(true),\n confirmations,\n // distribution\n openDistributionRulesModal: () => setDistributionRulesModalOpen(true),\n // network\n network: networkState.step === 'connected' ? networkState.network : 'testnet',\n setNetwork: (network: StellarNetwork) => pollarClient.setNetwork(network),\n // kyc\n openKycModal: (options = {}) => {\n setKycModalOptions(options);\n setKycModalOpen(true);\n },\n // ramp\n openRampModal: () => setRampModalOpen(true),\n // config\n appConfig: resolvedConfig,\n styles,\n configStatus,\n retryConfig,\n adapters,\n } as PollarContextValue;\n // eslint-disable-next-line react-hooks/exhaustive-deps -- walletProvisioning is an intentional recompute trigger, not read in the body\n }, [\n walletAddress,\n walletProvisioning,\n hasSession,\n verified,\n pollarClient,\n getClient,\n transaction,\n txHistory,\n sessions,\n cosign,\n confirmations,\n walletBalance,\n refreshWalletBalance,\n enabledAssets,\n refreshAssets,\n networkState,\n resolvedConfig,\n configStatus,\n retryConfig,\n adapters,\n ]);\n\n return (\n <PollarContext.Provider value={contextValue}>\n {children}\n {loginModalOpen && (\n <ModalErrorBoundary onClose={() => setLoginModalOpen(false)}>\n <LoginModal onClose={() => setLoginModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {transactionModalOpen && (\n <ModalErrorBoundary onClose={() => setTransactionModalOpen(false)}>\n <TransactionModal onClose={() => setTransactionModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {kycModalOpen && (\n <ModalErrorBoundary onClose={() => setKycModalOpen(false)}>\n {kycModalOptions.corridorId === undefined && kycModalOptions.providerId === undefined ? (\n // The app's own KYC: its configured steps, in order.\n <AppKycFlow\n onClose={() => setKycModalOpen(false)}\n {...(kycModalOptions.country !== undefined && { country: kycModalOptions.country })}\n {...(kycModalOptions.level !== undefined && { level: kycModalOptions.level })}\n {...(kycModalOptions.onApproved !== undefined && { onApproved: kycModalOptions.onApproved })}\n />\n ) : (\n <KycModal\n onClose={() => setKycModalOpen(false)}\n {...(kycModalOptions.country !== undefined && { country: kycModalOptions.country })}\n {...(kycModalOptions.corridorId !== undefined && { corridorId: kycModalOptions.corridorId })}\n {...(kycModalOptions.providerId !== undefined && { providerId: kycModalOptions.providerId })}\n {...(kycModalOptions.level !== undefined && { level: kycModalOptions.level })}\n {...(kycModalOptions.onApproved !== undefined && { onApproved: kycModalOptions.onApproved })}\n />\n )}\n </ModalErrorBoundary>\n )}\n {rampModalOpen && (\n <ModalErrorBoundary onClose={() => setRampModalOpen(false)}>\n <RampWidget onClose={() => setRampModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {txHistoryModalOpen && (\n <ModalErrorBoundary onClose={() => setTxHistoryModalOpen(false)}>\n <TxHistoryModal onClose={() => setTxHistoryModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {walletBalanceModalOpen && (\n <ModalErrorBoundary onClose={() => setWalletBalanceModalOpen(false)}>\n <WalletBalanceModal onClose={() => setWalletBalanceModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {enabledAssetsModalOpen && (\n <ModalErrorBoundary onClose={() => setEnabledAssetsModalOpen(false)}>\n <EnabledAssetsModal onClose={() => setEnabledAssetsModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {sendModalOpen && (\n <ModalErrorBoundary key={sendModalKey} onClose={() => setSendModalOpen(false)}>\n <SendModal onClose={() => setSendModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {swapModalOpen && (\n <ModalErrorBoundary key={swapModalKey} onClose={() => setSwapModalOpen(false)}>\n <SwapModal onClose={() => setSwapModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {earnModalOpen && (\n <ModalErrorBoundary key={earnModalKey} onClose={() => setEarnModalOpen(false)}>\n <EarnModal onClose={() => setEarnModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {cardModalOpen && (\n // Keyed by the wallet too: a different user, or signing in with it open, starts it from scratch.\n <ModalErrorBoundary key={`${cardModalKey}:${walletAddress}`} onClose={() => setCardModalOpen(false)}>\n <CardModal onClose={() => setCardModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {receiveModalOpen && (\n <ModalErrorBoundary onClose={() => setReceiveModalOpen(false)}>\n <ReceiveModal onClose={() => setReceiveModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {sessionsModalOpen && (\n <ModalErrorBoundary onClose={() => setSessionsModalOpen(false)}>\n <SessionsModal onClose={() => setSessionsModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {cosignModalOpen && (\n <ModalErrorBoundary onClose={() => setCosignModalOpen(false)}>\n <CosignModal onClose={() => setCosignModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n {firstConfirmation && (\n <ModalErrorBoundary onClose={firstConfirmation.reject}>\n <ConfirmModal key={firstConfirmation.id} confirmation={firstConfirmation} />\n </ModalErrorBoundary>\n )}\n {distributionRulesModalOpen && (\n <ModalErrorBoundary onClose={() => setDistributionRulesModalOpen(false)}>\n <DistributionRulesModal onClose={() => setDistributionRulesModalOpen(false)} />\n </ModalErrorBoundary>\n )}\n </PollarContext.Provider>\n );\n}\n\nexport function usePollar() {\n const ctx = useContext(PollarContext);\n if (!ctx) {\n throw new Error('usePollar must be used inside <PollarProvider>');\n }\n return ctx;\n}\n","'use client';\n\nimport type { PollarAdapter, SubmitOutcome } from '@pollar/core';\nimport { usePollar } from './context';\n\ntype WrappedAdapter<T extends PollarAdapter> = {\n [K in keyof T]: (params: Parameters<T[K]>[0]) => Promise<SubmitOutcome>;\n};\n\nexport function createPollarAdapterHook<T extends PollarAdapter>(key: string) {\n return function usePollarAdapter(): WrappedAdapter<T> {\n const { adapters, signAndSubmitTx } = usePollar();\n const adapter = adapters?.[key] as T | undefined;\n\n if (!adapter) {\n throw new Error(`No adapter \"${key}\" provided to PollarProvider`);\n }\n\n return Object.fromEntries(\n Object.entries(adapter).map(([name, fn]) => [\n name,\n async (params: Parameters<typeof fn>[0]) => {\n const { unsignedTransaction } = await fn(params);\n return signAndSubmitTx(unsignedTransaction);\n },\n ]),\n ) as WrappedAdapter<T>;\n };\n}\n","'use client';\n\nimport { LOGO_POLLAR } from '../../constants';\nimport './WalletButton.css';\n\nfunction ButtonLogo() {\n return <img src={LOGO_POLLAR} alt=\"Pollar\" width={22} height={22} className=\"pollar-wallet-btn-logo\" />;\n}\n\nexport interface WalletButtonTemplateProps {\n walletAddress: string | null;\n accentColor: string;\n open: boolean;\n copied: boolean;\n dropdownBg: string;\n dropdownBorder: string;\n itemColor: string;\n wrapperRef: React.RefObject<HTMLDivElement>;\n isInProgress: boolean;\n /** Show the \"Create account\" action (external wallet not yet on-chain, IMMEDIATE funding). */\n showCreateAccount: boolean;\n /**\n * Why the wallet cannot act on-chain yet (its account is being created, or\n * that failed), or null when it can. Shown as a banner in the dropdown, since\n * the address itself is valid and worth copying either way. Optional, so a\n * custom template written before this existed keeps compiling.\n */\n notReadyReason?: string | null;\n creatingAccount: boolean;\n /**\n * Signed in with no wallet yet (an app that creates wallets on demand, or\n * none). The button then shows the account menu instead of Login, with Create\n * wallet only when `onCreateWallet` is set. Optional, so a custom template\n * written before this existed keeps compiling.\n */\n signedIn?: boolean;\n creatingWallet?: boolean;\n createWalletError?: string | null;\n onCreateWallet?: () => void;\n onToggleOpen: () => void;\n onCreateAccount: () => void;\n onCopy: () => void;\n onWalletBalance: () => void;\n onTxHistory: () => void;\n onSend: () => void;\n onReceive: () => void;\n onSessions: () => void;\n onKyc: () => void;\n onRamp: () => void;\n onDistributionRules: () => void;\n onLogout: () => void;\n onLogin: () => void;\n}\n\nfunction cropWallet(address: string) {\n if (address.length <= 12) return address;\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function WalletButtonTemplate({\n walletAddress,\n accentColor,\n open,\n copied,\n dropdownBg,\n dropdownBorder,\n itemColor,\n wrapperRef,\n isInProgress,\n showCreateAccount,\n notReadyReason,\n creatingAccount,\n onToggleOpen,\n onCreateAccount,\n onCopy,\n onWalletBalance,\n onTxHistory,\n onSend,\n onReceive,\n onSessions,\n onKyc,\n onRamp,\n onDistributionRules,\n onLogout,\n onLogin,\n signedIn,\n creatingWallet,\n createWalletError,\n onCreateWallet,\n}: WalletButtonTemplateProps) {\n if (!walletAddress && signedIn) {\n return (\n <div className=\"pollar-wallet-wrapper\" ref={wrapperRef}>\n <button className=\"pollar-wallet-btn\" style={{ backgroundColor: accentColor }} onClick={onToggleOpen}>\n <span className=\"pollar-wallet-btn-label\">{onCreateWallet ? 'No wallet' : 'Signed in'}</span>\n <svg\n className={`pollar-wallet-chevron${open ? ' pollar-open' : ''}`}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"2,4 6,8 10,4\" />\n </svg>\n </button>\n\n {open && (\n <div className=\"pollar-wallet-dropdown\" style={{ backgroundColor: dropdownBg, borderColor: dropdownBorder }}>\n {createWalletError && (\n <>\n <div className=\"pollar-wallet-dropdown-notice\" style={{ color: itemColor }} role=\"status\">\n {createWalletError}\n </div>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n {onCreateWallet && (\n <>\n <button\n className=\"pollar-wallet-dropdown-item\"\n style={{ color: itemColor }}\n onClick={onCreateWallet}\n disabled={creatingWallet}\n >\n {creatingWallet ? 'Creating wallet…' : 'Create wallet'}\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onSessions}>\n Active sessions\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n <button className=\"pollar-wallet-dropdown-item pollar-danger\" onClick={onLogout}>\n Log out\n </button>\n </div>\n )}\n </div>\n );\n }\n\n if (!walletAddress) {\n return (\n <button type=\"button\" className=\"pollar-wallet-login-btn\" style={{ backgroundColor: accentColor }} onClick={onLogin}>\n <ButtonLogo />\n Login with Pollar\n </button>\n );\n }\n\n return (\n <div className=\"pollar-wallet-wrapper\" ref={wrapperRef}>\n <button\n className=\"pollar-wallet-btn\"\n style={{ backgroundColor: accentColor }}\n onClick={isInProgress ? undefined : onToggleOpen}\n disabled={isInProgress}\n aria-busy={isInProgress}\n >\n <span className=\"pollar-wallet-btn-label\">{cropWallet(walletAddress)}</span>\n {isInProgress ? (\n <svg className=\"pollar-wallet-btn-spinner\" viewBox=\"0 0 12 12\" width=\"12\" height=\"12\" fill=\"none\" aria-hidden>\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"rgba(255,255,255,0.35)\" strokeWidth=\"1.5\" />\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"4.5\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeDasharray=\"14 9\"\n transform=\"rotate(-90 6 6)\"\n />\n </svg>\n ) : (\n <svg\n className={`pollar-wallet-chevron${open ? ' pollar-open' : ''}`}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"2,4 6,8 10,4\" />\n </svg>\n )}\n </button>\n\n {open && (\n <div className=\"pollar-wallet-dropdown\" style={{ backgroundColor: dropdownBg, borderColor: dropdownBorder }}>\n {notReadyReason && (\n <>\n <div className=\"pollar-wallet-dropdown-notice\" style={{ color: itemColor }} role=\"status\">\n {notReadyReason}\n </div>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n {showCreateAccount && (\n <>\n <button\n className=\"pollar-wallet-dropdown-item\"\n style={{ color: itemColor }}\n onClick={onCreateAccount}\n disabled={creatingAccount}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <line x1=\"19\" y1=\"8\" x2=\"19\" y2=\"14\" />\n <line x1=\"22\" y1=\"11\" x2=\"16\" y2=\"11\" />\n </svg>\n {creatingAccount ? 'Creating account…' : 'Create account'}\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n </>\n )}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onSend}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n Send\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onReceive}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"8 17 12 21 16 17\" />\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\" />\n <path d=\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\" />\n </svg>\n Receive\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onCopy}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n {copied ? 'Copied!' : 'Copy address'}\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onWalletBalance}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\" />\n <circle cx=\"16\" cy=\"12\" r=\"2\" />\n <path d=\"M22 8H12\" />\n </svg>\n Wallet balance\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onTxHistory}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10,9 9,9 8,9\" />\n </svg>\n Transaction history\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n {/* Buy / Sell (ramp) */}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onRamp}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"17 1 21 5 17 9\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <polyline points=\"7 23 3 19 7 15\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </svg>\n Buy / Sell\n </button>\n {/* Identity verification */}\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onKyc}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z\" />\n <path d=\"M2 21v-1a6 6 0 0 1 6-6h2\" />\n <polyline points=\"16 11 18 13 22 9\" />\n </svg>\n Identity verification\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onDistributionRules}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\" />\n <line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\" />\n </svg>\n Distribution rules\n </button>\n <button className=\"pollar-wallet-dropdown-item\" style={{ color: itemColor }} onClick={onSessions}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n Active sessions\n </button>\n <div className=\"pollar-wallet-dropdown-divider\" />\n <button className=\"pollar-wallet-dropdown-item pollar-danger\" onClick={onLogout}>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <polyline points=\"16,17 21,12 16,7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n Log out\n </button>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { isPollarApiError } from '@pollar/core';\nimport { useEffect, useRef, useState } from 'react';\nimport { usePollar } from '../../context';\nimport { walletNotReadyReason } from '../../lib/wallet-provisioning';\nimport { useChains } from '../../useChains';\nimport { WalletButtonTemplate } from './WalletButtonTemplate';\nimport './WalletButton.css';\n\nexport function WalletButton() {\n const {\n getClient,\n wallet,\n styles,\n openLoginModal,\n openTxHistoryModal,\n openWalletBalanceModal,\n openSendModal,\n openReceiveModal,\n openSessionsModal,\n openKycModal,\n openRampModal,\n openDistributionRulesModal,\n tx: transaction,\n isAuthenticated,\n createWallet,\n appConfig,\n } = usePollar();\n // The address shown (and copied) is the one on the app's FIRST configured\n // chain, not `wallet.address` - that field is the Stellar wallet by definition\n // in core, so this button used to say \"Stellar\" to an app whose users live on\n // Polygon. Falls back to it while `/config` loads and for a legacy session that\n // enumerates no wallets.\n const { primaryChain, primaryAddress } = useChains();\n const walletAddress = primaryAddress || (wallet?.address ?? '');\n const [open, setOpen] = useState(false);\n const [copied, setCopied] = useState(false);\n const [creating, setCreating] = useState(false);\n const [created, setCreated] = useState(false);\n const [creatingWallet, setCreatingWallet] = useState(false);\n const [createWalletError, setCreateWalletError] = useState<string | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isInProgress = transaction.step === 'building' || transaction.step === 'signing';\n // Offer on-chain account creation only for an EXTERNAL wallet Stellar doesn't\n // have yet, under IMMEDIATE funding. `existsOnStellar === false` (not just\n // falsy) so an unknown/legacy session doesn't wrongly show it. `created` hides\n // it optimistically after a successful create (the session's existsOnStellar\n // only refreshes on the next login/resume).\n const canCreateAccount =\n !created && wallet?.custody === 'external' && wallet.existsOnStellar === false && wallet.fundingMode === 'IMMEDIATE';\n // A platform-managed wallet whose account is still being created. Surfaced in\n // the dropdown rather than on the button: the address is real and copyable,\n // what is missing is the account behind it. `null` for an external wallet,\n // which the app never provisions (that one gets Create account above).\n //\n // Keyed to `primaryChain` - the chain whose address this button SHOWS - so a\n // Solana-first app does not caption a working Solana address with the wait on\n // its user's separate Stellar wallet.\n const notReadyReason = walletNotReadyReason(wallet, primaryChain);\n\n const { theme = 'light', accentColor = '#005DB4' } = styles;\n const isDark = theme === 'dark';\n const dropdownBg = isDark ? '#18181b' : '#fff';\n const dropdownBorder = isDark ? '#3f3f46' : '#e4e4e7';\n const itemColor = isDark ? '#fafafa' : '#18181b';\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n useEffect(\n () => () => {\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n },\n [],\n );\n\n async function handleCopy() {\n if (!walletAddress) return;\n await navigator.clipboard.writeText(walletAddress);\n setCopied(true);\n if (copyTimerRef.current !== null) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n copyTimerRef.current = null;\n setCopied(false);\n }, 1500);\n }\n\n function handleLogout() {\n setOpen(false);\n getClient().logout();\n }\n\n async function handleCreateAccount() {\n if (creating) return;\n setCreating(true);\n try {\n const res = await getClient().createAccount();\n if (res.status === 'success' || res.status === 'pending') {\n setCreated(true);\n setOpen(false);\n await getClient().refreshBalance();\n }\n // On error, keep the item so the user can retry (createAccount surfaces the\n // reason in res.details; the send/receive modals also report failures).\n } finally {\n setCreating(false);\n }\n }\n\n async function handleCreateWallet() {\n if (creatingWallet) return;\n setCreatingWallet(true);\n setCreateWalletError(null);\n try {\n await createWallet();\n setOpen(false);\n } catch (err) {\n setCreateWalletError(\n isPollarApiError(err) && err.code === 'SDK_WALLET_PROVISIONING_DISABLED'\n ? 'This app does not create wallets.'\n : 'Could not create the wallet. Try again.',\n );\n } finally {\n setCreatingWallet(false);\n }\n }\n\n function handleWalletBalance() {\n setOpen(false);\n openWalletBalanceModal();\n }\n\n function handleTxHistory() {\n setOpen(false);\n openTxHistoryModal();\n }\n\n function handleSend() {\n setOpen(false);\n openSendModal();\n }\n\n function handleReceive() {\n setOpen(false);\n openReceiveModal();\n }\n\n function handleSessions() {\n setOpen(false);\n openSessionsModal();\n }\n\n function handleKyc() {\n setOpen(false);\n openKycModal();\n }\n\n function handleRamp() {\n setOpen(false);\n openRampModal();\n }\n\n function handleDistributionRules() {\n setOpen(false);\n openDistributionRulesModal();\n }\n\n return (\n <WalletButtonTemplate\n walletAddress={walletAddress ?? null}\n accentColor={accentColor}\n open={open}\n copied={copied}\n dropdownBg={dropdownBg}\n dropdownBorder={dropdownBorder}\n itemColor={itemColor}\n wrapperRef={wrapperRef}\n isInProgress={isInProgress}\n showCreateAccount={canCreateAccount}\n signedIn={isAuthenticated}\n creatingWallet={creatingWallet}\n createWalletError={createWalletError}\n {...(appConfig.application?.walletProvisioning === 'NONE' ? {} : { onCreateWallet: handleCreateWallet })}\n notReadyReason={notReadyReason}\n creatingAccount={creating}\n onToggleOpen={() => setOpen((v) => !v)}\n onCreateAccount={handleCreateAccount}\n onCopy={handleCopy}\n onWalletBalance={handleWalletBalance}\n onTxHistory={handleTxHistory}\n onSend={handleSend}\n onReceive={handleReceive}\n onSessions={handleSessions}\n onKyc={handleKyc}\n onRamp={handleRamp}\n onDistributionRules={handleDistributionRules}\n onLogout={handleLogout}\n onLogin={openLoginModal}\n />\n );\n}\n"]}
|