@zippypay/checkout 1.1.10 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.min.js +8 -8
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +8 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/config/environments.ts","../src/utils.ts","../src/api/client.ts","../src/theme/index.ts","../src/embed/host.ts","../src/session/poller.ts","../src/session/timing.ts","../src/config/device.ts","../src/config/checkout-policy.ts","../src/config/app-links.ts","../src/ui/app-store-icons.ts","../../../node_modules/qrcode-generator/dist/qrcode.mjs","../src/qr/zippy-logo.ts","../src/qr/render-qr.ts","../src/qr/deep-link.ts","../src/ui/app-store-modal.ts","../src/ui/checkout-ui.ts","../src/app/handoff.ts","../src/checkout-controller.ts","../src/element/zippy-pay-checkout.ts","../src/index.ts"],"names":["TERMINAL_STATUSES","POLLABLE_STATUSES","ZippyPayError","problem","detail","ZIPPY_API_BASE_URLS","ZIPPY_API_PATH_PREFIX","isZippyEnvironment","value","resolveApiBaseUrl","environment","parseZippyEnvironment","normalized","PAYMENT_ID_PATTERN","E164_PHONE_PATTERN","EMAIL_PATTERN","normalizePaymentId","normalizePayerQuery","trimmed","isValidPaymentId","isValidPayerQuery","query","paymentIdValidationMessage","payerQueryValidationMessage","isUuidV4","CURRENCY_LOCALES","formatAmount","amount","currency","parsed","locale","TERMINAL_EXIT_COUNTDOWN_SEC","terminalExitLeadText","exitMode","embedMode","outcome","outcomeTerminalCopy","phase","formatCountdown","ms","totalSec","min","sec","hr","remMin","formatCountdownAccessible","parts","formatDisplayInitials","displayName","resolveContainer","container","element","normalizeBaseUrl","baseUrl","appendRedirectQueryParams","url","params","isAbsolute","base","key","PaymentSessionClient","config","body","paymentId","method","surface","path","response","attachPayerWithRetry","client","error","session","DEFAULT_THEME","DARK_THEME_OVERRIDES","resolveTheme","theme","merged","prefersDark","effectiveMode","applyThemeToHost","host","resolved","DM_SANS_IMPORT","CHECKOUT_STYLES","MODAL_STYLES","createEmbedHost","createModalHost","overlay","style","panel","event","embedHost","showModal","embed","onClose","hideModal","SessionPoller","fetchSession","options","initialSession","hidden","isTerminalStatus","status","phaseFromSession","getCountdownTarget","PAY_PROGRESS_PHASES","NO_PROGRESS_PHASES","shouldShowPayProgress","msUntil","getPayWindowRemainingRatio","expiresAt","end","start","total","getSoftIdleHint","iso","isPhoneDevice","detectCheckoutSurface","detectMobileStorePlatform","ua","isAndroidDevice","narrow","coarse","subscribeCheckoutSurface","onChange","mediaQueries","notify","isCheckoutPolicyBound","isFullChooserPolicy","checkoutPolicy","allowsQrCheckoutPolicy","allowsManualCheckoutPolicy","phoneEnforceAutoApp","mobileAppPolicy","resolveMobileAppPolicy","mobileApp","buildBindPolicyRequest","request","resolveFallbackMethodAvailability","resolveMethodAvailability","autoAppOnly","resolveEntryRouting","isCheckoutStartAllowed","resolveAutoStartMethod","routing","resolveCheckoutUiOptionsFromBound","resolveCheckoutUiOptionsFromSession","resolveCheckoutUiOptions","bind","ANDROID_APP_PACKAGE","APP_STORE_LINKS","IOS_APP_STORE_NATIVE_URL","ANDROID_PLAY_STORE_NATIVE_URL","resolveAppStoreUrl","platform","resolveAppStoreOpenUrl","renderAppleLogoSvg","className","renderGooglePlayLogoSvg","renderAppleStoreIcon","renderGooglePlayIcon","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","getBestMaskPattern","minLostPoint","pattern","i","lostPoint","QRUtil","pos","j","bits","mod","data","inc","bitIndex","byteIndex","maskFunc","dark","createBytes","buffer","rsBlocks","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","modPoly","qrPolynomial","modIndex","totalCodeCount","index","dataList","QRRSBlock","qrBitBuffer","totalDataCount","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","cellSize","margin","qrHtml","alt","title","opts","size","mc","mr","qrSvg","rect","escapeXml","max","createDataURL","x","y","img","s","escaped","_createHalfASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","white","black","line","context","length","bytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","b2","b3","k","v","unknownChar","QRMode","QRMaskPattern","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","d","errorCorrectLength","a","QRMath","type","sameCount","darkCount","ratio","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","RS_BLOCK_TABLE","qrRSBlock","totalCount","dataCount","getRsBlockTable","rsBlock","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","stringToBytes","code","byteArrayOutputStream","off","len","base64EncodeOutputStream","_buflen","_base64","writeEncoded","encode","padlen","str","_str","_pos","decode","gifImage","width","height","_width","_height","pixel","out","lzwMinCodeSize","raster","getLZWRaster","bitOutputStream","_out","_bitLength","_bitBuffer","clearCode","endCode","bitLength","table","lzwTable","byteOut","bitOut","dataIndex","_map","_size","getPixel","gif","base64","qrcode_default","ZIPPY_BRAND_COLOR","Z_MARK_VIEW_BOX","Z_MARK_PATH","parseViewBoxSize","svg","match","buildLogoBadge","qrSize","badge","plate","plateOffset","markInset","embedLogoInQrSvg","renderSecureLockSvg","MERCHANT_PAYMENT_DEEP_LINK_PATH","buildPaymentQrPayload","sessionId","renderQrSvg","payload","errorCorrection","qr","renderPaymentQrSvg","renderBrandedPaymentQrSvg","renderPaymentQrMarkup","renderUrlQrMarkup","buildAndroidPaymentIntentUrl","buildPaymentDeepLinkOpenUrl","openAppStore","openPaymentDeepLink","openCustomSchemeWithoutNavigation","link","PLATFORM_COPY","isMobileLikeViewport","AppStoreDownloadModal","shadow","trigger","copy","mobile","escapeAttribute","cta","focusables","first","last","CheckoutUi","initialState","callbacks","uiOptions","extraStyles","partial","next","prev","state","active","focus","focusState","errorMessage","loading","verifiedPayer","verifyMatches","committedMethod","appHandoffStatus","mobileAppManualFallback","isTerminal","showPayProgress","isQrPayFlow","isMobileAppFlow","mount","inlinePaymentExpiryAt","subtitle","header","business","sub","footer","appLinks","appLabel","badges","inner","secure","divider","brand","ariaLabel","icon","button","wrap","spinner","methodAvailability","mobileAppCta","card","description","isAwaiting","qrWrap","frame","section","paymentExpiryAt","disabled","opening","action","label","hint","message","install","fallback","slot","remainingMs","timer","form","input","field","inputWrap","clearBtn","verifyBtn","syncActionState","isVerifying","hasValue","existingSpinner","lead","item","exampleWrap","example","note","matches","payer","proceeding","payBtn","identity","avatar","name","handle","onDismiss","initials","profileImage","text","bar","fill","tick","pct","countdownEl","timerEl","remaining","updateDisplay","footnote","kind","titleText","detailText","transactionId","resolvedExitMode","exit","countdown","suffix","watchAppHandoff","timeoutMs","settled","cleanupFns","cleanup","fn","settle","result","onVisibilityChange","_CheckoutController","shouldSync","bindRequest","uiMethodFromApi","terminalSessionError","failureUrl","redirectUrl","reason","normalizeError","autoMethod","attemptOpen","normalizedQuery","items","_paymentId","fallbackPhase","formatFlowErrorMessage","CheckoutController","createCheckout","ELEMENT_TAG","THEME_ATTRIBUTE_MAP","ZippyPayCheckoutElement","environmentAttr","clientToken","attr","parseCheckoutPolicyAttribute","parseMobileAppAttribute","defineZippyPayCheckoutElement","ZippyPay","instance","index_default"],"mappings":"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A;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","file":"index.min.js","sourcesContent":["export type PaymentSessionStatus =\n | 'CREATED'\n | 'AWAITING_PAYMENT'\n | 'COMPLETED'\n | 'EXPIRED'\n | 'CANCELLED'\n | 'FAILED';\n\nexport type PaymentSessionPhase = 'IDLE' | 'PAYING';\n\n/** Server checkout method — locks after checkout start. */\nexport type ApiCheckoutMethod = 'QR' | 'MANUAL' | 'MOBILE_APP';\n\n/** SDK init — omit to allow both QR and Manual. */\nexport type CheckoutPolicy = 'QR' | 'MANUAL';\n\n/** SDK init — phone-only app handoff preference. */\nexport type MobileAppPolicy = 'off' | 'option' | 'enforce';\n\n/** Explicit checkout restriction returned by the API. */\nexport type ApiCheckoutPolicy = 'QR' | 'MANUAL';\n\n/** Bound checkout policy — `null` means full chooser (QR + manual). */\nexport type BoundCheckoutPolicy = ApiCheckoutPolicy | null;\n\n/** Bound mobile app policy returned by the API. */\nexport type ApiMobileAppPolicy = 'OFF' | 'OPTION' | 'ENFORCE';\n\nexport type BindCheckoutPolicyRequest = {\n checkoutPolicy?: ApiCheckoutPolicy;\n mobileAppPolicy?: ApiMobileAppPolicy;\n};\n\nexport type CheckoutSurface = 'phone' | 'desktop';\n\nexport type StartCheckoutRequest = {\n method: ApiCheckoutMethod;\n surface: CheckoutSurface;\n};\n\nexport type ZippyMobileAppConfig = {\n policy?: MobileAppPolicy;\n};\n\nexport type PaymentSessionPayer = {\n paymentId: string;\n displayName: string;\n profileImage: string | null;\n};\n\n/** Payer preview returned from verify — same fields as session payer. */\nexport type PayerPreview = PaymentSessionPayer;\n\nexport type VerifyPayerResponse = {\n items: PayerPreview[];\n};\n\nexport type PaymentSession = {\n sessionId: string;\n amount: string;\n currency: 'USD';\n status: PaymentSessionStatus;\n successUrl: string | null;\n failureUrl: string | null;\n businessName: string;\n transactionId: string | null;\n transactionStatus: string | null;\n payer: PaymentSessionPayer | null;\n /** Idle shelf — customer must start checkout before this. */\n expiresAt: string;\n /** Hard max — session + client token expire here. */\n absoluteExpiresAt: string;\n phase: PaymentSessionPhase;\n checkoutMethod: ApiCheckoutMethod | null;\n /** Set after bind-policy — `null` = full chooser when `mobileAppPolicy` is set. */\n checkoutPolicy: BoundCheckoutPolicy;\n /** Set after bind-policy succeeds; null until then. */\n mobileAppPolicy: ApiMobileAppPolicy | null;\n paymentStartAt: string | null;\n /** Pay window countdown — only meaningful when phase is PAYING. */\n paymentExpiryAt: string | null;\n createdAt: string;\n};\n\nexport type ProblemJson = {\n type?: string;\n title?: string;\n status?: number;\n detail?: string;\n instance?: string;\n code?: string;\n correlationId?: string;\n errors?: Record<string, string[]>;\n};\n\nimport type { ZippyEnvironment } from './config/environments';\n\nexport type { ZippyEnvironment };\n\nexport type ZippyTheme = {\n primary?: string;\n primaryForeground?: string;\n background?: string;\n surface?: string;\n text?: string;\n textMuted?: string;\n border?: string;\n error?: string;\n success?: string;\n borderRadius?: string;\n fontFamily?: string;\n mode?: 'light' | 'dark' | 'auto';\n};\n\nexport type EmbedMode = 'inline' | 'modal';\n\nexport type ZippyPayConfig = {\n environment: ZippyEnvironment;\n sessionId: string;\n clientToken: string;\n mode?: EmbedMode;\n container?: HTMLElement | string;\n theme?: ZippyTheme;\n /** When omitted, customer can choose QR or Manual. */\n checkoutPolicy?: CheckoutPolicy;\n /** Phone-only app handoff. Ignored on non-phone devices. */\n mobileApp?: ZippyMobileAppConfig;\n locale?: 'en';\n redirectOnComplete?: boolean;\n redirectOnFailure?: boolean;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n onReady?: (session: PaymentSession) => void;\n onSessionUpdate?: (session: PaymentSession) => void;\n onComplete?: (session: PaymentSession) => void;\n onExpired?: (session: PaymentSession) => void;\n onError?: (error: ZippyPayError) => void;\n onClose?: () => void;\n};\n\nexport type CheckoutMethod = 'qr' | 'manual' | 'mobileApp';\n\nexport type CheckoutPhase =\n | 'loading'\n | 'choose-method'\n | 'qr-active'\n | 'mobile-app-active'\n | 'manual-entry'\n | 'manual-picker'\n | 'manual-confirm'\n | 'awaiting'\n | 'success'\n | 'expired'\n | 'cancelled'\n | 'declined'\n | 'failed'\n | 'error'\n | 'invalid-session';\n\n\nexport const TERMINAL_STATUSES: readonly PaymentSessionStatus[] = [\n 'COMPLETED',\n 'EXPIRED',\n 'CANCELLED',\n 'FAILED',\n] as const;\n\nexport const POLLABLE_STATUSES: readonly PaymentSessionStatus[] = [\n 'CREATED',\n 'AWAITING_PAYMENT',\n] as const;\n\nexport class ZippyPayError extends Error {\n readonly code: string;\n readonly status: number;\n readonly detail: string;\n readonly correlationId?: string;\n\n constructor(problem: ProblemJson) {\n const detail = problem.detail ?? problem.title ?? 'An unexpected error occurred';\n super(detail);\n this.name = 'ZippyPayError';\n this.code = problem.code ?? 'unknown';\n this.status = problem.status ?? 500;\n this.detail = detail;\n this.correlationId = problem.correlationId;\n }\n}\n\nexport type ZippyPayCheckoutInstance = {\n open(): void;\n close(): void;\n destroy(): void;\n};\n","export type ZippyEnvironment = 'production' | 'staging' | 'development';\n\n/** API origin per environment. Paths such as `/api/v1/...` are appended by the SDK client. */\nexport const ZIPPY_API_BASE_URLS: Record<ZippyEnvironment, string> = {\n production: 'https://api.zippypay.io',\n staging: 'https://staging.api.zippypay.io',\n /** Same-origin — local demo proxies `/api/*` to the backend (avoids CORS). */\n development: '',\n};\n\nexport const ZIPPY_API_PATH_PREFIX = '/api/v1';\n\nexport function isZippyEnvironment(value: string): value is ZippyEnvironment {\n return value in ZIPPY_API_BASE_URLS;\n}\n\nexport function resolveApiBaseUrl(environment: ZippyEnvironment): string {\n return ZIPPY_API_BASE_URLS[environment].replace(/\\/+$/, '');\n}\n\nexport function parseZippyEnvironment(value: string): ZippyEnvironment {\n const normalized = value.trim().toLowerCase();\n if (!isZippyEnvironment(normalized)) {\n throw new Error(\n `Zippy Pay: invalid environment \"${value}\". Expected one of: ${Object.keys(ZIPPY_API_BASE_URLS).join(', ')}.`,\n );\n }\n return normalized;\n}\n","import type { CheckoutPhase } from './types';\n\n/** Personal Zippy handles: 3–20 chars, optional single dot, no leading/trailing dot. */\nexport const PAYMENT_ID_PATTERN = /^(?=.{3,20}$)[a-z0-9]+(?:\\.[a-z0-9]+)?$/;\n\nexport const E164_PHONE_PATTERN = /^\\+[1-9]\\d{7,14}$/;\n\nexport const EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport function normalizePaymentId(value: string): string {\n return value.trim().toLowerCase();\n}\n\n/** Normalize a payer verify query before sending to the API. */\nexport function normalizePayerQuery(value: string): string {\n const trimmed = value.trim();\n if (trimmed.includes('@')) {\n return trimmed.toLowerCase();\n }\n if (trimmed.startsWith('+')) {\n return trimmed;\n }\n return trimmed.toLowerCase();\n}\n\nexport function isValidPaymentId(value: string): boolean {\n return PAYMENT_ID_PATTERN.test(normalizePaymentId(value));\n}\n\n/** Client-side pre-validation for payer verify `query` (server is authoritative). */\nexport function isValidPayerQuery(value: string): boolean {\n const query = value.trim();\n if (query.length < 3 || query.length > 100 || /\\s/.test(query)) {\n return false;\n }\n if (/[\\x00-\\x1f\\x7f]/.test(query)) {\n return false;\n }\n if (query.includes('@')) {\n return EMAIL_PATTERN.test(query);\n }\n if (query.startsWith('+')) {\n return E164_PHONE_PATTERN.test(query);\n }\n return PAYMENT_ID_PATTERN.test(query.toLowerCase());\n}\n\nexport function paymentIdValidationMessage(): string {\n return 'Enter 3–20 lowercase letters or digits, with at most one dot (e.g. john.doe12).';\n}\n\nexport function payerQueryValidationMessage(): string {\n return 'Enter a Zippy ID, email, or phone number in E.164 format (e.g. +15551234567).';\n}\n\nexport function isUuidV4(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n );\n}\n\n/** Locale per currency so amounts use the standard symbol (e.g. USD → $1.00, not US$1.00). */\nconst CURRENCY_LOCALES: Partial<Record<string, string>> = {\n USD: 'en-US',\n};\n\nexport function formatAmount(amount: string, currency: string): string {\n const parsed = Number.parseFloat(amount);\n if (Number.isNaN(parsed)) {\n return `${amount} ${currency}`;\n }\n const locale = CURRENCY_LOCALES[currency] ?? 'en-US';\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(parsed);\n}\n\nexport const TERMINAL_EXIT_COUNTDOWN_SEC = 7;\n\nexport type TerminalExitMode = 'redirect' | 'close';\n\nexport function terminalExitLeadText(\n exitMode: TerminalExitMode,\n embedMode: 'inline' | 'modal',\n outcome: 'success' | 'failure' = 'success',\n): string {\n if (exitMode === 'redirect') {\n return outcome === 'failure'\n ? 'You will be redirected shortly in'\n : 'You will be redirected in';\n }\n if (embedMode === 'modal') {\n return 'This window will close automatically in';\n }\n return 'This checkout will close automatically in';\n}\n\nexport function outcomeTerminalCopy(\n phase: CheckoutPhase,\n): { kind: 'success' | 'failure'; title: string; detail: string } {\n switch (phase) {\n case 'success':\n return {\n kind: 'success',\n title: 'Payment complete',\n detail: 'Your payment was successful.',\n };\n case 'expired':\n return {\n kind: 'failure',\n title: 'Payment timed out',\n detail:\n 'The time to complete this payment has ended. Return to the merchant and try again.',\n };\n case 'failed':\n return {\n kind: 'failure',\n title: 'Payment failed',\n detail: 'Your payment could not be completed. Please try again or contact the merchant.',\n };\n case 'cancelled':\n return {\n kind: 'failure',\n title: 'Payment cancelled',\n detail: 'This payment was cancelled.',\n };\n case 'declined':\n return {\n kind: 'failure',\n title: 'Payment declined',\n detail: 'Your payment was declined. Please try again or contact the merchant.',\n };\n case 'invalid-session':\n return {\n kind: 'failure',\n title: 'Checkout unavailable',\n detail:\n 'This checkout link is no longer valid. Please ask the merchant for a new one.',\n };\n default:\n return {\n kind: 'failure',\n title: 'Something went wrong',\n detail: 'Please try again or contact the merchant.',\n };\n }\n}\n\nexport function formatCountdown(ms: number): string {\n const totalSec = Math.max(0, Math.ceil(ms / 1000));\n const min = Math.floor(totalSec / 60);\n const sec = totalSec % 60;\n\n if (min >= 60) {\n const hr = Math.floor(min / 60);\n const remMin = min % 60;\n return remMin > 0 ? `${hr}h ${remMin}m` : `${hr}h`;\n }\n\n if (min > 0) {\n return `${min}m ${sec.toString().padStart(2, '0')}s`;\n }\n\n return `${sec}s`;\n}\n\nexport function formatCountdownAccessible(ms: number): string {\n const totalSec = Math.max(0, Math.ceil(ms / 1000));\n const min = Math.floor(totalSec / 60);\n const sec = totalSec % 60;\n\n if (min >= 60) {\n const hr = Math.floor(min / 60);\n const remMin = min % 60;\n const parts = [`${hr} hour${hr === 1 ? '' : 's'}`];\n if (remMin > 0) {\n parts.push(`${remMin} minute${remMin === 1 ? '' : 's'}`);\n }\n return parts.join(' ');\n }\n\n if (min > 0) {\n if (sec > 0) {\n return `${min} minute${min === 1 ? '' : 's'} ${sec} second${sec === 1 ? '' : 's'}`;\n }\n return `${min} minute${min === 1 ? '' : 's'}`;\n }\n\n return `${sec} second${sec === 1 ? '' : 's'}`;\n}\n\n/** Up to two initials from a display name for avatar fallbacks. */\nexport function formatDisplayInitials(displayName: string): string {\n const parts = displayName.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return '?';\n }\n if (parts.length === 1) {\n return parts[0].charAt(0).toUpperCase();\n }\n return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();\n}\n\nexport function formatIdleDeadline(iso: string): string {\n try {\n return new Intl.DateTimeFormat(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n }).format(new Date(iso));\n } catch {\n return iso;\n }\n}\n\nexport function resolveContainer(container: HTMLElement | string): HTMLElement {\n if (typeof container !== 'string') {\n return container;\n }\n const element = document.querySelector<HTMLElement>(container);\n if (!element) {\n throw new Error(`Zippy Pay: container not found: ${container}`);\n }\n return element;\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\n/** Appends checkout redirect query params, preserving any existing search string. */\nexport function appendRedirectQueryParams(\n url: string,\n params: Record<string, string | null | undefined>,\n): string {\n const isAbsolute = /^https?:\\/\\//i.test(url);\n const base = typeof window !== 'undefined' ? window.location.href : 'https://localhost/';\n const parsed = new URL(url, base);\n\n for (const [key, value] of Object.entries(params)) {\n if (value != null && value !== '') {\n parsed.searchParams.set(key, value);\n }\n }\n\n if (isAbsolute) {\n return parsed.toString();\n }\n\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n}\n","import type {\n BindCheckoutPolicyRequest,\n CheckoutSurface,\n PaymentSession,\n ProblemJson,\n StartCheckoutRequest,\n VerifyPayerResponse,\n ZippyPayError,\n} from '../types';\nimport { ZippyPayError as ZippyPayErrorClass } from '../types';\nimport { ZIPPY_API_PATH_PREFIX } from '../config/environments';\nimport { normalizeBaseUrl, normalizePaymentId, normalizePayerQuery } from '../utils';\n\nexport type ApiClientConfig = {\n baseUrl: string;\n sessionId: string;\n clientToken: string;\n};\n\nexport class PaymentSessionClient {\n private readonly baseUrl: string;\n private readonly sessionId: string;\n private readonly clientToken: string;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = normalizeBaseUrl(config.baseUrl);\n this.sessionId = config.sessionId;\n this.clientToken = config.clientToken;\n }\n\n async getSession(): Promise<PaymentSession> {\n return this.request<PaymentSession>('GET', this.sessionPath());\n }\n\n async bindCheckoutPolicy(body: BindCheckoutPolicyRequest): Promise<PaymentSession> {\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/checkout/bind-policy`, body);\n }\n\n async verifyPayer(query: string): Promise<VerifyPayerResponse> {\n return this.request<VerifyPayerResponse>('POST', `${this.sessionPath()}/payer/verify`, {\n query: normalizePayerQuery(query),\n });\n }\n\n async attachPayer(paymentId: string): Promise<PaymentSession> {\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/payer`, {\n paymentId: normalizePaymentId(paymentId),\n });\n }\n\n async startCheckout(\n method: StartCheckoutRequest['method'],\n surface: CheckoutSurface,\n ): Promise<PaymentSession> {\n const body: StartCheckoutRequest = { method, surface };\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/checkout/start`, body);\n }\n\n startQrCheckout(surface: CheckoutSurface): Promise<PaymentSession> {\n return this.startCheckout('QR', surface);\n }\n\n startMobileAppCheckout(surface: CheckoutSurface): Promise<PaymentSession> {\n return this.startCheckout('MOBILE_APP', surface);\n }\n\n startManualCheckout(surface: CheckoutSurface): Promise<PaymentSession> {\n return this.startCheckout('MANUAL', surface);\n }\n\n private sessionPath(): string {\n return `${ZIPPY_API_PATH_PREFIX}/payment-sessions/${this.sessionId}`;\n }\n\n private headers(): Record<string, string> {\n return {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Payment-Session-Token': this.clientToken,\n };\n }\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers: this.headers(),\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n\n if (response.ok) {\n return (await response.json()) as T;\n }\n\n throw await this.parseError(response);\n }\n\n private async parseError(response: Response): Promise<ZippyPayError> {\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/problem+json')) {\n const problem = (await response.json()) as ProblemJson;\n return new ZippyPayErrorClass({ ...problem, status: problem.status ?? response.status });\n }\n\n return new ZippyPayErrorClass({\n status: response.status,\n code: 'unknown',\n title: 'Request failed',\n detail: response.statusText || 'Request failed',\n });\n }\n}\n\nexport async function attachPayerWithRetry(\n client: PaymentSessionClient,\n paymentId: string,\n): Promise<PaymentSession> {\n try {\n return await client.attachPayer(paymentId);\n } catch (error) {\n if (!(error instanceof ZippyPayErrorClass) || error.code !== 'payment-session.payer-attached') {\n throw error;\n }\n const session = await client.getSession();\n if (session.payer?.paymentId === normalizePaymentId(paymentId)) {\n return session;\n }\n throw error;\n }\n}\n","import type { ZippyTheme } from '../types';\n\n/** Aligned with zippy-kyc-web-sdk `src/styles/tokens.css` */\nexport const DEFAULT_THEME: Required<Omit<ZippyTheme, 'mode'>> & {\n mode: ZippyTheme['mode'];\n primaryGradientEnd: string;\n primaryHover: string;\n primarySoft: string;\n surfaceMuted: string;\n radiusButton: string;\n radiusInput: string;\n radiusCard: string;\n} = {\n primary: '#3f63f3',\n primaryForeground: '#ffffff',\n primaryGradientEnd: '#6b84ff',\n primaryHover: '#2f4fd1',\n primarySoft: '#eef2ff',\n background: '#ffffff',\n surface: '#ffffff',\n surfaceMuted: '#f6f8fb',\n text: '#0f172a',\n textMuted: '#64748b',\n border: '#e2e8f0',\n error: '#dc2626',\n success: '#059669',\n borderRadius: '20px',\n radiusButton: '24px',\n radiusInput: '12px',\n radiusCard: '20px',\n fontFamily: \"'DM Sans', system-ui, -apple-system, sans-serif\",\n mode: 'light',\n};\n\nconst DARK_THEME_OVERRIDES: Partial<ZippyTheme> = {\n background: '#0f172a',\n surface: '#1e293b',\n text: '#f8fafc',\n textMuted: '#94a3b8',\n border: '#334155',\n};\n\nexport type ResolvedTheme = typeof DEFAULT_THEME;\n\nexport function resolveTheme(theme?: ZippyTheme): ResolvedTheme {\n const merged = { ...DEFAULT_THEME, ...theme };\n const prefersDark =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-color-scheme: dark)').matches;\n\n const effectiveMode =\n merged.mode === 'auto' ? (prefersDark ? 'dark' : 'light') : (merged.mode ?? 'light');\n\n if (effectiveMode === 'dark') {\n return { ...merged, ...DARK_THEME_OVERRIDES, mode: effectiveMode };\n }\n\n return { ...merged, mode: effectiveMode };\n}\n\nexport function applyThemeToHost(host: HTMLElement, theme?: ZippyTheme): void {\n const resolved = resolveTheme(theme);\n host.style.setProperty('--zippy-primary', resolved.primary);\n host.style.setProperty('--zippy-primary-foreground', resolved.primaryForeground);\n host.style.setProperty('--zippy-primary-gradient-end', resolved.primaryGradientEnd);\n host.style.setProperty('--zippy-primary-hover', resolved.primaryHover);\n host.style.setProperty('--zippy-primary-soft', resolved.primarySoft);\n host.style.setProperty('--zippy-background', resolved.background);\n host.style.setProperty('--zippy-surface', resolved.surface);\n host.style.setProperty('--zippy-surface-muted', resolved.surfaceMuted);\n host.style.setProperty('--zippy-text', resolved.text);\n host.style.setProperty('--zippy-text-muted', resolved.textMuted);\n host.style.setProperty('--zippy-border', resolved.border);\n host.style.setProperty('--zippy-error', resolved.error);\n host.style.setProperty('--zippy-success', resolved.success);\n host.style.setProperty('--zippy-radius', resolved.borderRadius);\n host.style.setProperty('--zippy-radius-button', resolved.radiusButton);\n host.style.setProperty('--zippy-radius-input', resolved.radiusInput);\n host.style.setProperty('--zippy-radius-card', resolved.radiusCard);\n host.style.setProperty('--zippy-font-family', resolved.fontFamily);\n}\n\nconst DM_SANS_IMPORT =\n \"@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&display=swap');\";\n\nexport const CHECKOUT_STYLES = `\n${DM_SANS_IMPORT}\n\n:host {\n display: block;\n font-family: var(--zippy-font-family);\n color: var(--zippy-text);\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\nbutton,\ninput {\n font-family: inherit;\n}\n\n.zippy-root {\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--zippy-background);\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-card);\n padding: 0;\n max-width: 420px;\n width: 100%;\n overflow: hidden;\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.04),\n 0 16px 48px -20px rgba(15, 23, 42, 0.18);\n}\n\n.zippy-root--terminal {\n display: block;\n padding: 32px 24px 28px;\n overflow: visible;\n}\n\n.zippy-root--paying {\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.zippy-root-body {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n min-height: 0;\n padding: 24px 24px 20px;\n}\n\n.zippy-payment-hero {\n margin-bottom: 22px;\n padding-bottom: 20px;\n text-align: center;\n border-bottom: 1px solid color-mix(in srgb, var(--zippy-border) 80%, transparent);\n}\n\n.zippy-payment-merchant {\n margin: 0 0 6px;\n font-size: 0.9375rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n line-height: 1.35;\n}\n\n.zippy-payment-amount {\n margin: 0;\n font-size: 2rem;\n font-weight: 700;\n letter-spacing: -0.04em;\n line-height: 1.05;\n color: var(--zippy-text);\n}\n\n.zippy-payment-subtitle {\n margin: 10px 0 0;\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--zippy-primary);\n letter-spacing: -0.01em;\n}\n\n.zippy-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n align-self: flex-start;\n margin: 0 0 2px;\n padding: 0.375rem 0.625rem 0.375rem 0.375rem;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n font: inherit;\n font-size: 0.8125rem;\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n transition:\n color 150ms ease,\n background-color 150ms ease;\n}\n\n.zippy-back-btn:hover:not(:disabled) {\n color: var(--zippy-text);\n background: color-mix(in srgb, var(--zippy-text-muted) 10%, transparent);\n}\n\n.zippy-back-btn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-back-btn:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.zippy-back-btn-icon {\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n}\n\n.zippy-choose {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin: 0;\n}\n\n.zippy-choose-mobile-app {\n display: flex;\n justify-content: center;\n width: 100%;\n padding-top: 2px;\n}\n\n.zippy-choose-mobile-app .zippy-mobile-app-pay-btn {\n max-width: none;\n}\n\n.zippy-choose-options {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n\n.zippy-method-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n min-height: 7.5rem;\n padding: 16px 10px;\n border: 1px solid var(--zippy-border);\n border-radius: 16px;\n background: var(--zippy-surface-muted);\n color: var(--zippy-text);\n cursor: pointer;\n text-align: center;\n transition:\n border-color 160ms ease,\n box-shadow 160ms ease,\n transform 160ms ease,\n background 160ms ease;\n}\n\n.zippy-method-card:hover {\n border-color: color-mix(in srgb, var(--zippy-primary) 40%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-primary-soft) 55%, white);\n box-shadow: 0 10px 28px -16px rgba(63, 99, 243, 0.45);\n transform: translateY(-1px);\n}\n\n.zippy-method-card:active {\n transform: translateY(0) scale(0.985);\n}\n\n.zippy-method-card:focus-visible {\n outline: 2px solid var(--zippy-primary);\n outline-offset: 2px;\n}\n\n.zippy-method-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n color: var(--zippy-primary);\n background: #ffffff;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--zippy-primary) 12%, var(--zippy-border));\n}\n\n.zippy-method-copy {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.zippy-method-title {\n font-size: 0.875rem;\n font-weight: 700;\n letter-spacing: -0.01em;\n}\n\n.zippy-method-hint {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n line-height: 1.35;\n}\n\n.zippy-flow {\n display: flex;\n flex-direction: column;\n gap: 18px;\n}\n\n.zippy-flow--centered {\n align-items: center;\n text-align: center;\n}\n\n.zippy-flow-awaiting {\n align-items: center;\n text-align: center;\n padding: 8px 0 4px;\n}\n\n.zippy-flow-awaiting .zippy-identity-card {\n width: 100%;\n text-align: left;\n}\n\n.zippy-pay-progress {\n flex-shrink: 0;\n width: 100%;\n height: 2px;\n margin: 0;\n border-radius: 0;\n background: color-mix(in srgb, var(--zippy-border) 55%, transparent);\n overflow: hidden;\n}\n\n.zippy-root--qr .zippy-pay-progress {\n height: 4px;\n}\n\n.zippy-pay-progress-fill {\n display: block;\n width: 100%;\n height: 100%;\n transform: scaleX(1);\n transform-origin: left center;\n background: var(--zippy-primary);\n transition: transform 1s linear;\n will-change: transform;\n}\n\n.zippy-flow-hint {\n width: 100%;\n max-width: 18rem;\n margin: 0 auto;\n padding: 0 0.5rem;\n font-size: 0.8125rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-qr-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 2px 0 4px;\n}\n\n.zippy-mobile-app-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n width: 100%;\n padding: 4px 0 8px;\n}\n\n.zippy-mobile-app-section .zippy-pay-timer-slot {\n margin: 0;\n}\n\n.zippy-mobile-app-pay-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 18rem;\n min-height: 3rem;\n padding: 0.75rem 1.25rem;\n border: 0;\n border-radius: 9999px;\n background: var(--zippy-primary);\n color: var(--zippy-primary-foreground);\n font-family: inherit;\n font-size: 1rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n cursor: pointer;\n transition:\n background-color 150ms ease,\n opacity 150ms ease,\n transform 150ms ease;\n}\n\n.zippy-mobile-app-pay-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-primary) 88%, #000);\n}\n\n.zippy-mobile-app-pay-btn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-mobile-app-pay-btn:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-mobile-app-pay-btn--opening {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.625rem;\n cursor: wait;\n}\n\n.zippy-mobile-app-pay-btn--opening:disabled {\n opacity: 1;\n}\n\n.zippy-mobile-app-pay-btn--opening .zippy-mobile-app-pay-btn-spinner {\n width: 1rem;\n height: 1rem;\n border-color: color-mix(in srgb, var(--zippy-primary-foreground) 35%, transparent);\n border-top-color: var(--zippy-primary-foreground);\n}\n\n.zippy-mobile-app-opened-hint {\n margin: 0;\n max-width: 18rem;\n font-size: 0.9375rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-mobile-app-method-switching {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 8px 0;\n}\n\n.zippy-mobile-app-method-switching-title {\n margin: 0;\n font-size: 0.9375rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-mobile-app-handoff-failed {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n width: 100%;\n padding: 4px 0;\n}\n\n.zippy-mobile-app-handoff-message {\n margin: 0;\n max-width: 20rem;\n font-size: 0.9375rem;\n line-height: 1.45;\n color: var(--zippy-text);\n text-align: center;\n}\n\n.zippy-mobile-app-handoff-failed .zippy-install-zippy-btn {\n margin-top: 6px;\n}\n\n.zippy-install-zippy-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 18rem;\n min-height: 3rem;\n padding: 0.75rem 1.25rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-button);\n background: var(--zippy-surface);\n color: var(--zippy-text);\n font-family: inherit;\n font-size: 1rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n cursor: pointer;\n transition:\n background-color 150ms ease,\n border-color 150ms ease;\n}\n\n.zippy-install-zippy-btn:hover {\n background: color-mix(in srgb, var(--zippy-surface) 92%, var(--zippy-text));\n}\n\n.zippy-install-zippy-btn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-mobile-app-fallback {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n width: 100%;\n margin-top: 4px;\n}\n\n.zippy-mobile-app-fallback-label {\n margin: 0;\n font-size: 0.8125rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-choose-options--compact {\n gap: 10px;\n}\n\n.zippy-mobile-app-retry {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--zippy-primary);\n font-family: inherit;\n font-size: 0.875rem;\n font-weight: 600;\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n}\n\n.zippy-mobile-app-retry:hover {\n color: color-mix(in srgb, var(--zippy-primary) 82%, #000);\n}\n\n.zippy-mobile-app-retry:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-pay-timer-slot {\n display: flex;\n justify-content: center;\n width: 100%;\n min-height: 3.5rem;\n margin: -6px 0 10px;\n}\n\n.zippy-qr-section .zippy-pay-timer-slot {\n margin: 0;\n}\n\n.zippy-pay-timer {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.25rem;\n min-width: 6.75rem;\n padding: 0.5625rem 1.25rem 0.5rem;\n border-radius: 16px;\n background: var(--zippy-primary-soft);\n border: 1px solid color-mix(in srgb, var(--zippy-primary) 14%, transparent);\n color: var(--zippy-primary);\n}\n\n.zippy-pay-timer-label {\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.2;\n letter-spacing: 0;\n white-space: nowrap;\n color: color-mix(in srgb, var(--zippy-primary) 72%, var(--zippy-text-muted));\n}\n\n.zippy-pay-timer-value {\n font-size: 1.25rem;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n letter-spacing: -0.01em;\n text-align: center;\n line-height: 1;\n white-space: nowrap;\n}\n\n.zippy-qr-frame {\n display: inline-block;\n padding: 16px;\n background: #ffffff;\n border: 1px solid var(--zippy-border);\n border-radius: 20px;\n line-height: 0;\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.04),\n 0 12px 32px -14px rgba(63, 99, 243, 0.22);\n}\n\n.zippy-qr-stack {\n position: relative;\n display: inline-block;\n line-height: 0;\n}\n\n.zippy-qr-stack > svg {\n display: block;\n width: 196px;\n height: 196px;\n}\n\n.zippy-qr-awaiting {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 4px;\n}\n\n.zippy-qr-awaiting-spinner {\n display: block;\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid var(--zippy-border);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.8s linear infinite;\n}\n\n.zippy-id-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 0;\n}\n\n.zippy-input-combo {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 3rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-button);\n background: var(--zippy-surface-muted);\n overflow: hidden;\n transition:\n border-color 150ms ease,\n box-shadow 150ms ease,\n background 150ms ease;\n}\n\n.zippy-input-combo:focus-within {\n border-color: var(--zippy-primary);\n background: var(--zippy-background);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-primary) 14%, transparent);\n}\n\n.zippy-input-combo--verified {\n border-color: color-mix(in srgb, var(--zippy-success) 35%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-success) 6%, var(--zippy-background));\n}\n\n.zippy-input-combo--verified:focus-within {\n border-color: color-mix(in srgb, var(--zippy-success) 45%, var(--zippy-primary));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-success) 12%, transparent);\n}\n\n.zippy-input-combo-input-wrap {\n position: relative;\n flex: 1;\n min-width: 0;\n align-self: stretch;\n display: flex;\n align-items: center;\n}\n\n.zippy-input-combo-field {\n flex: 1;\n min-width: 0;\n width: 100%;\n padding: 0.75rem 0.875rem;\n font-family: inherit;\n font-size: 1rem;\n line-height: 1.25;\n color: var(--zippy-text);\n border: none;\n background: transparent;\n outline: none;\n transition: padding-right 150ms ease;\n}\n\n.zippy-input-combo-input-wrap--has-value .zippy-input-combo-field {\n padding-right: 2.375rem;\n}\n\n.zippy-input-combo-field::placeholder {\n color: var(--zippy-text-muted);\n}\n\n.zippy-input-combo-field:focus,\n.zippy-input-combo-field:focus-visible {\n outline: none;\n}\n\n.zippy-input-combo-field:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.zippy-input-combo-clear {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0.375rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n margin-top: auto;\n margin-bottom: auto;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n cursor: pointer;\n appearance: none;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition:\n background-color 150ms ease,\n color 150ms ease,\n opacity 150ms ease,\n visibility 150ms ease;\n}\n\n.zippy-input-combo-input-wrap--has-value .zippy-input-combo-clear {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n}\n\n.zippy-input-combo-clear:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-text-muted) 16%, transparent);\n color: var(--zippy-text);\n}\n\n.zippy-input-combo-clear:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 1px;\n}\n\n.zippy-input-combo-clear:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.zippy-input-combo-clear-icon {\n display: block;\n width: 0.875rem;\n height: 0.875rem;\n flex-shrink: 0;\n}\n\n.zippy-input-combo-divider {\n flex-shrink: 0;\n align-self: center;\n width: 1px;\n height: 1.375rem;\n background: var(--zippy-border);\n}\n\n.zippy-input-combo--verified .zippy-input-combo-divider {\n background: color-mix(in srgb, var(--zippy-success) 25%, var(--zippy-border));\n}\n\n.zippy-input-combo-action {\n flex-shrink: 0;\n min-width: 5.25rem;\n padding: 0 1rem;\n font-family: inherit;\n font-size: 0.875rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--zippy-primary);\n background: transparent;\n border: none;\n cursor: pointer;\n transition:\n background 150ms ease,\n color 150ms ease,\n opacity 150ms ease;\n}\n\n.zippy-input-combo-action:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-primary) 8%, transparent);\n}\n\n.zippy-input-combo-action:disabled {\n color: var(--zippy-text-muted);\n cursor: default;\n}\n\n.zippy-input-combo--verified .zippy-input-combo-action:disabled {\n color: var(--zippy-success);\n}\n\n.zippy-input-combo-action--verified {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 3rem;\n padding: 0 0.875rem;\n color: var(--zippy-success);\n}\n\n.zippy-input-combo-action--verified:disabled {\n opacity: 1;\n}\n\n.zippy-input-combo-check {\n display: block;\n width: 1.125rem;\n height: 1.125rem;\n}\n\n.zippy-input-combo-action--loading {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.zippy-input-combo-action--loading:disabled {\n opacity: 1;\n color: var(--zippy-primary);\n}\n\n.zippy-spinner-inline {\n width: 1rem;\n height: 1rem;\n border: 2px solid color-mix(in srgb, var(--zippy-primary) 18%, transparent);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.7s linear infinite;\n}\n\n.zippy-input-combo--error {\n border-color: color-mix(in srgb, var(--zippy-error) 55%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-error) 5%, var(--zippy-background));\n}\n\n.zippy-input-combo--error:focus-within {\n border-color: var(--zippy-error);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-error) 14%, transparent);\n}\n\n.zippy-input-combo--error .zippy-input-combo-divider {\n background: color-mix(in srgb, var(--zippy-error) 25%, var(--zippy-border));\n}\n\n.zippy-field-error {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: -4px 0 0;\n padding: 0.5rem 0.875rem;\n font-size: 0.8125rem;\n line-height: 1.45;\n color: var(--zippy-error);\n background: color-mix(in srgb, var(--zippy-error) 8%, var(--zippy-background));\n border: 1px solid color-mix(in srgb, var(--zippy-error) 18%, var(--zippy-border));\n border-radius: 999px;\n}\n\n.zippy-field-error-icon {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n border-radius: 50%;\n font-size: 0.6875rem;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n background: var(--zippy-error);\n}\n\n.zippy-field-hint {\n margin: 0;\n font-size: 0.75rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n}\n\n.zippy-query-hint {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px 14px;\n border-radius: calc(var(--zippy-radius-input) + 2px);\n background: color-mix(in srgb, var(--zippy-text-muted) 5%, var(--zippy-surface-muted));\n border: 1px solid color-mix(in srgb, var(--zippy-border) 85%, transparent);\n}\n\n.zippy-query-hint-lead {\n margin: 0;\n font-size: 0.75rem;\n font-weight: 600;\n line-height: 1.4;\n color: var(--zippy-text-muted);\n}\n\n.zippy-query-hint-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.zippy-query-hint-item {\n display: grid;\n grid-template-columns: minmax(4.5rem, 5.25rem) minmax(0, 1fr);\n align-items: start;\n gap: 8px 10px;\n}\n\n.zippy-query-hint-label {\n padding-top: 0.1875rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n}\n\n.zippy-query-hint-example-wrap {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 3px;\n min-width: 0;\n}\n\n.zippy-query-hint-example {\n display: inline-block;\n max-width: 100%;\n padding: 0.1875rem 0.5rem;\n border-radius: 999px;\n background: var(--zippy-background);\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.35;\n color: var(--zippy-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.zippy-query-hint-note {\n font-size: 0.6875rem;\n line-height: 1.35;\n color: var(--zippy-text-muted);\n}\n\n.zippy-picker-lead {\n margin: 0;\n font-size: 0.8125rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n}\n\n.zippy-picker-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n}\n\n.zippy-picker-option {\n display: block;\n width: 100%;\n padding: 0;\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n border-radius: calc(var(--zippy-radius-input) + 2px);\n background: var(--zippy-surface);\n text-align: left;\n cursor: pointer;\n transition:\n border-color 150ms ease,\n background-color 150ms ease,\n box-shadow 150ms ease;\n}\n\n.zippy-picker-option:hover:not(:disabled) {\n border-color: color-mix(in srgb, var(--zippy-primary) 35%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-primary) 4%, var(--zippy-surface));\n}\n\n.zippy-picker-option:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-picker-option:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-picker-option .zippy-identity-card {\n margin: 0;\n border: 0;\n background: transparent;\n}\n\n.zippy-idle-hint {\n margin: -6px 0 0;\n font-size: 0.8125rem;\n color: var(--zippy-text-muted);\n text-align: center;\n line-height: 1.45;\n}\n\n.zippy-identity-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n border-radius: 16px;\n background: var(--zippy-surface-muted);\n border: 1px solid var(--zippy-border);\n}\n\n.zippy-identity-card--dismissible {\n position: relative;\n padding-right: 2.75rem;\n}\n\n.zippy-identity-card-dismiss {\n position: absolute;\n top: 50%;\n right: 10px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n cursor: pointer;\n appearance: none;\n transform: translateY(-50%);\n transition:\n background-color 0.15s ease,\n color 0.15s ease;\n}\n\n.zippy-identity-card-dismiss:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-text-muted) 16%, transparent);\n color: var(--zippy-text);\n}\n\n.zippy-identity-card-dismiss:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-identity-card-dismiss:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.zippy-identity-card-dismiss-icon {\n display: block;\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n}\n\n.zippy-identity-avatar {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.0625rem;\n font-weight: 700;\n color: var(--zippy-primary);\n background: #fff;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--zippy-primary) 14%, var(--zippy-border));\n}\n\n.zippy-identity-avatar--photo {\n padding: 0;\n overflow: hidden;\n color: transparent;\n background: var(--zippy-surface-muted);\n}\n\n.zippy-identity-avatar-image {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.zippy-identity-label {\n margin: 0 0 2px;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n}\n\n.zippy-identity-name {\n margin: 0 0 2px;\n font-size: 1rem;\n font-weight: 700;\n color: var(--zippy-text);\n letter-spacing: -0.01em;\n}\n\n.zippy-identity-handle {\n margin: 0;\n font-size: 0.8125rem;\n color: var(--zippy-text-muted);\n}\n\n.zippy-identity-chip {\n padding: 0.45rem 0.875rem;\n border-radius: 999px;\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--zippy-primary);\n background: var(--zippy-primary-soft);\n}\n\n.zippy-awaiting-status {\n padding: 4px 0 8px;\n}\n\n.zippy-awaiting-ring {\n position: relative;\n width: 56px;\n height: 56px;\n margin: 0 auto;\n}\n\n.zippy-awaiting-ring::before,\n.zippy-awaiting-ring span {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: 50%;\n}\n\n.zippy-awaiting-ring::before {\n border: 2px solid var(--zippy-primary-soft);\n}\n\n.zippy-awaiting-ring span {\n border: 2px solid transparent;\n border-top-color: var(--zippy-primary);\n animation: zippy-spin 0.9s linear infinite;\n}\n\n.zippy-awaiting-message {\n margin: 0;\n max-width: 18rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n}\n\n.zippy-footnote {\n width: 100%;\n max-width: 18rem;\n margin: 0 auto;\n padding: 0 0.5rem;\n font-size: 0.75rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-flow--centered .zippy-identity-card {\n width: 100%;\n text-align: left;\n}\n\n.zippy-brand-footer {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n margin-top: auto;\n padding-top: 14px;\n}\n\n.zippy-root--terminal .zippy-brand-footer {\n margin-top: 20px;\n padding-top: 18px;\n border-top: 1px solid color-mix(in srgb, var(--zippy-border) 80%, transparent);\n}\n\n.zippy-app-links {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n width: 100%;\n}\n\n.zippy-app-links-label {\n margin: 0;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n}\n\n.zippy-app-links-badges {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n}\n\n.zippy-app-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-width: 0;\n flex: 1 1 8.5rem;\n max-width: 11rem;\n min-height: 2rem;\n padding: 0.375rem 0.625rem;\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n border-radius: 999px;\n background: var(--zippy-surface);\n color: var(--zippy-text);\n font: inherit;\n font-size: 0.6875rem;\n font-weight: 600;\n line-height: 1;\n text-decoration: none;\n appearance: none;\n cursor: pointer;\n transition:\n border-color 0.15s ease,\n background-color 0.15s ease,\n color 0.15s ease;\n}\n\n.zippy-app-link--icon-only {\n flex: 0 0 auto;\n width: 2.375rem;\n min-width: 2.375rem;\n max-width: 2.375rem;\n height: 2.375rem;\n min-height: 2.375rem;\n padding: 0;\n border-radius: 999px;\n}\n\n.zippy-app-link--icon-only .zippy-app-link-icon {\n width: 1rem;\n height: 1rem;\n}\n\n.zippy-app-link--icon-only .zippy-app-link-icon--play {\n width: 0.9375rem;\n height: 1.0625rem;\n}\n\n.zippy-app-link:hover {\n border-color: color-mix(in srgb, var(--zippy-primary) 35%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-primary) 6%, var(--zippy-surface));\n color: var(--zippy-text);\n}\n\n.zippy-app-link:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-app-link-icon {\n flex-shrink: 0;\n width: 0.875rem;\n height: 0.875rem;\n}\n\n.zippy-app-link-icon--play {\n width: 0.8125rem;\n height: 0.9375rem;\n}\n\n.zippy-app-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 2147482000;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(15, 23, 42, 0.58);\n animation: zippy-app-modal-fade 0.18s ease-out;\n}\n\n.zippy-app-modal-panel {\n position: relative;\n width: min(100%, 22rem);\n max-height: calc(100vh - 32px);\n overflow: auto;\n padding: 22px 20px 20px;\n border: 1px solid var(--zippy-border);\n border-radius: calc(var(--zippy-radius-card) - 2px);\n background: var(--zippy-background);\n color: var(--zippy-text);\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.05),\n 0 24px 56px -24px rgba(15, 23, 42, 0.35);\n animation: zippy-app-modal-in 0.2s ease-out;\n}\n\n.zippy-app-modal-close {\n position: absolute;\n top: 10px;\n right: 10px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n cursor: pointer;\n appearance: none;\n transition:\n background-color 0.15s ease,\n color 0.15s ease;\n}\n\n.zippy-app-modal-close-icon {\n display: block;\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n}\n\n.zippy-app-modal-close:hover {\n background: color-mix(in srgb, var(--zippy-text-muted) 16%, transparent);\n color: var(--zippy-text);\n}\n\n.zippy-app-modal-close:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-app-modal-header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 16px;\n padding-right: 1.75rem;\n}\n\n.zippy-app-modal-platform-icon {\n flex-shrink: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 2px;\n color: var(--zippy-text);\n}\n\n.zippy-app-modal-platform-icon--play {\n width: 1.75rem;\n height: 1.9375rem;\n}\n\n.zippy-app-modal-heading {\n min-width: 0;\n}\n\n.zippy-app-modal-title {\n margin: 0 0 6px;\n font-size: 1.0625rem;\n font-weight: 700;\n letter-spacing: -0.02em;\n line-height: 1.25;\n}\n\n.zippy-app-modal-lead {\n margin: 0;\n font-size: 0.8125rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n}\n\n.zippy-app-modal-qr-wrap {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n margin-bottom: 16px;\n width: 100%;\n}\n\n.zippy-app-modal-qr-frame {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 12.5rem;\n aspect-ratio: 1;\n padding: 14px;\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n border-radius: 16px;\n background: #ffffff;\n}\n\n.zippy-app-modal-qr-frame .zippy-qr-stack {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n line-height: 0;\n}\n\n.zippy-app-modal-qr-frame .zippy-qr-stack > svg {\n display: block;\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n}\n\n.zippy-app-modal-qr-hint {\n margin: 0;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-app-modal-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.zippy-app-modal-cta {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.75rem;\n padding: 0.625rem 1rem;\n border-radius: 999px;\n background: var(--zippy-primary);\n color: var(--zippy-primary-foreground);\n font-size: 0.875rem;\n font-weight: 700;\n line-height: 1.2;\n text-decoration: none;\n transition: background-color 0.15s ease, transform 0.15s ease;\n}\n\n.zippy-app-modal-cta:hover {\n background: color-mix(in srgb, var(--zippy-primary) 88%, #000000);\n transform: translateY(-1px);\n}\n\n.zippy-app-modal-cta:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-app-modal-mobile-note {\n margin: 0;\n font-size: 0.75rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-app-modal-overlay--mobile .zippy-app-modal-qr-wrap {\n opacity: 0.92;\n}\n\n@keyframes zippy-app-modal-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes zippy-app-modal-in {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.zippy-brand-footer-inner {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-height: 1.375rem;\n padding: 0.1875rem 0.5rem;\n border-radius: 999px;\n color: var(--zippy-text-muted);\n background: color-mix(in srgb, var(--zippy-text-muted) 6%, transparent);\n opacity: 0.72;\n}\n\n.zippy-brand-secure {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.zippy-brand-divider {\n flex-shrink: 0;\n align-self: center;\n width: 1px;\n height: 0.625rem;\n background: color-mix(in srgb, var(--zippy-text-muted) 24%, transparent);\n}\n\n.zippy-brand-lock {\n flex-shrink: 0;\n display: block;\n width: 0.625rem;\n height: 0.625rem;\n}\n\n.zippy-brand-copy,\n.zippy-brand-name {\n font-size: 0.625rem;\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: 1;\n white-space: nowrap;\n}\n\n.zippy-brand-name {\n font-weight: 600;\n}\n\n.zippy-label {\n display: block;\n font-size: 0.8125rem;\n font-weight: 600;\n margin: 0;\n color: var(--zippy-text);\n}\n\n.zippy-input {\n width: 100%;\n min-height: 2.875rem;\n padding: 0.6875rem 0.875rem;\n font-size: 1rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-input);\n background: var(--zippy-background);\n color: var(--zippy-text);\n outline: none;\n transition: border-color 150ms ease, box-shadow 150ms ease;\n}\n\n.zippy-input:focus {\n border-color: var(--zippy-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-primary) 16%, transparent);\n}\n\n.zippy-input:focus-visible {\n outline: 2px solid var(--zippy-primary);\n outline-offset: 2px;\n}\n\n.zippy-input:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-error-text {\n font-size: 0.8125rem;\n color: var(--zippy-error);\n margin: 0;\n}\n\n.zippy-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.875rem;\n padding: 0.6875rem 1.25rem;\n font-size: 0.9375rem;\n font-weight: 600;\n border-radius: var(--zippy-radius-button);\n border: none;\n cursor: pointer;\n transition:\n background 150ms ease,\n transform 150ms ease,\n box-shadow 150ms ease;\n}\n\n.zippy-btn:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-btn:not(:disabled):active {\n transform: scale(0.985);\n}\n\n.zippy-btn-block {\n width: 100%;\n}\n\n.zippy-btn-primary {\n background: linear-gradient(\n 135deg,\n var(--zippy-primary) 0%,\n var(--zippy-primary-gradient-end) 100%\n );\n color: var(--zippy-primary-foreground);\n box-shadow: 0 4px 14px -4px color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n}\n\n.zippy-btn-primary:hover:not(:disabled) {\n background: linear-gradient(\n 135deg,\n var(--zippy-primary-hover) 0%,\n var(--zippy-primary) 100%\n );\n}\n\n.zippy-status {\n text-align: center;\n padding: 16px 0 8px;\n}\n\n.zippy-status-icon {\n width: 56px;\n height: 56px;\n margin: 0 auto 18px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zippy-status-icon.loading {\n background: transparent;\n width: auto;\n height: auto;\n margin: 0 auto 14px;\n}\n\n.zippy-status-icon.success {\n background: color-mix(in srgb, var(--zippy-success) 14%, transparent);\n color: var(--zippy-success);\n}\n\n.zippy-status-icon.failure,\n.zippy-status-icon.error {\n background: color-mix(in srgb, var(--zippy-error) 12%, transparent);\n color: var(--zippy-error);\n}\n\n.zippy-status-title {\n font-size: 1.125rem;\n font-weight: 700;\n margin: 0 0 8px;\n letter-spacing: -0.02em;\n}\n\n.zippy-status-detail {\n font-size: 0.875rem;\n color: var(--zippy-text-muted);\n margin: 0;\n line-height: 1.5;\n}\n\n.zippy-transaction-ref {\n margin: 18px auto 0;\n max-width: 100%;\n padding: 12px 14px;\n border-radius: calc(var(--zippy-radius) * 0.75);\n background: var(--zippy-surface-muted);\n text-align: center;\n}\n\n.zippy-transaction-ref-label {\n margin: 0 0 4px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.zippy-transaction-ref-value {\n margin: 0;\n font-size: 0.875rem;\n font-weight: 600;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: var(--zippy-text);\n word-break: break-all;\n}\n\n.zippy-status-exit {\n margin: 20px 0 0;\n font-size: 0.875rem;\n color: var(--zippy-text-muted);\n line-height: 1.5;\n}\n\n.zippy-status-exit-countdown {\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n color: var(--zippy-text);\n}\n\n.zippy-spinner {\n width: 24px;\n height: 24px;\n border: 3px solid var(--zippy-border);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.8s linear infinite;\n}\n\n@keyframes zippy-spin {\n to { transform: rotate(360deg); }\n}\n`;\n\nexport const MODAL_STYLES = `\n.zippy-overlay {\n position: fixed;\n inset: 0;\n background: rgba(15, 23, 42, 0.55);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n z-index: 2147483000;\n}\n\n.zippy-modal-panel {\n max-width: 460px;\n width: 100%;\n animation: zippy-modal-in 0.2s ease-out;\n}\n\n@keyframes zippy-modal-in {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n`;\n","import type { ZippyPayConfig } from '../types';\nimport { resolveContainer } from '../utils';\nimport { MODAL_STYLES } from '../theme';\n\nexport type EmbedHost = {\n host: HTMLElement;\n overlay: HTMLElement | null;\n escapeHandler: ((event: KeyboardEvent) => void) | null;\n destroy: () => void;\n};\n\nexport function createEmbedHost(config: ZippyPayConfig): EmbedHost {\n const mode = config.mode ?? 'inline';\n\n if (mode === 'modal') {\n return createModalHost(config);\n }\n\n if (!config.container) {\n throw new Error('Zippy Pay: `container` is required when mode is \"inline\".');\n }\n\n const container = resolveContainer(config.container);\n container.innerHTML = '';\n const host = document.createElement('div');\n host.className = 'zippy-inline-host';\n container.appendChild(host);\n\n return {\n host,\n overlay: null,\n escapeHandler: null,\n destroy: () => {\n host.remove();\n },\n };\n}\n\nfunction createModalHost(config: ZippyPayConfig): EmbedHost {\n const overlay = document.createElement('div');\n overlay.className = 'zippy-overlay';\n overlay.setAttribute('role', 'dialog');\n overlay.setAttribute('aria-modal', 'true');\n overlay.setAttribute('aria-label', 'Zippy Pay checkout');\n overlay.style.display = 'none';\n\n const style = document.createElement('style');\n style.textContent = MODAL_STYLES;\n overlay.appendChild(style);\n\n const panel = document.createElement('div');\n panel.className = 'zippy-modal-panel';\n const host = document.createElement('div');\n host.className = 'zippy-modal-host';\n panel.appendChild(host);\n overlay.appendChild(panel);\n document.body.appendChild(overlay);\n\n const closeOnBackdrop = config.closeOnBackdropClick ?? false;\n if (closeOnBackdrop) {\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) {\n config.onClose?.();\n }\n });\n }\n\n const embedHost: EmbedHost = {\n host,\n overlay,\n escapeHandler: null,\n destroy: () => {\n if (embedHost.escapeHandler) {\n document.removeEventListener('keydown', embedHost.escapeHandler);\n }\n overlay.remove();\n document.body.style.overflow = '';\n },\n };\n\n return embedHost;\n}\n\nexport function showModal(embed: EmbedHost, config: ZippyPayConfig, onClose: () => void): void {\n if (!embed.overlay) {\n return;\n }\n embed.overlay.style.display = 'flex';\n document.body.style.overflow = 'hidden';\n\n const closeOnEscape = config.closeOnEscape ?? false;\n if (closeOnEscape && !embed.escapeHandler) {\n embed.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onClose();\n }\n };\n document.addEventListener('keydown', embed.escapeHandler);\n }\n\n const focusable = embed.host.querySelector<HTMLElement>('input, button');\n focusable?.focus();\n}\n\nexport function hideModal(embed: EmbedHost): void {\n if (!embed.overlay) {\n return;\n }\n embed.overlay.style.display = 'none';\n document.body.style.overflow = '';\n if (embed.escapeHandler) {\n document.removeEventListener('keydown', embed.escapeHandler);\n embed.escapeHandler = null;\n }\n}\n","import type { PaymentSession, PaymentSessionStatus } from '../types';\nimport { POLLABLE_STATUSES, TERMINAL_STATUSES } from '../types';\n\nexport type PollerOptions = {\n intervalMs?: number;\n hiddenIntervalMs?: number;\n onUpdate: (session: PaymentSession) => void;\n onError?: (error: unknown) => void;\n shouldPoll?: (session: PaymentSession) => boolean;\n};\n\nexport class SessionPoller {\n private timer: ReturnType<typeof setTimeout> | null = null;\n private running = false;\n private stopped = false;\n\n constructor(\n private readonly fetchSession: () => Promise<PaymentSession>,\n private readonly options: PollerOptions,\n ) {}\n\n start(initialSession?: PaymentSession): void {\n if (this.running) {\n return;\n }\n this.running = true;\n this.stopped = false;\n if (initialSession) {\n this.options.onUpdate(initialSession);\n if (!this.shouldContinue(initialSession)) {\n this.stop();\n return;\n }\n }\n void this.tick();\n }\n\n stop(): void {\n this.stopped = true;\n this.running = false;\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n private shouldContinue(session: PaymentSession): boolean {\n if (this.options.shouldPoll) {\n return this.options.shouldPoll(session);\n }\n return POLLABLE_STATUSES.includes(session.status);\n }\n\n private intervalMs(): number {\n const base = this.options.intervalMs ?? 3000;\n const hidden = this.options.hiddenIntervalMs ?? 10000;\n return typeof document !== 'undefined' && document.hidden ? hidden : base;\n }\n\n private scheduleNext(): void {\n if (this.stopped) {\n return;\n }\n this.timer = setTimeout(() => {\n void this.tick();\n }, this.intervalMs());\n }\n\n private async tick(): Promise<void> {\n if (this.stopped) {\n return;\n }\n try {\n const session = await this.fetchSession();\n this.options.onUpdate(session);\n if (!this.shouldContinue(session)) {\n this.stop();\n return;\n }\n } catch (error) {\n this.options.onError?.(error);\n }\n this.scheduleNext();\n }\n}\n\nexport function isTerminalStatus(status: PaymentSessionStatus): boolean {\n return TERMINAL_STATUSES.includes(status);\n}\n\nexport function phaseFromSession(status: PaymentSessionStatus): import('../types').CheckoutPhase {\n switch (status) {\n case 'CREATED':\n return 'choose-method';\n case 'AWAITING_PAYMENT':\n return 'awaiting';\n case 'COMPLETED':\n return 'success';\n case 'EXPIRED':\n return 'expired';\n case 'CANCELLED':\n return 'cancelled';\n case 'FAILED':\n return 'failed';\n default:\n return 'error';\n }\n}\n\nexport function msUntilExpiry(expiresAt: string): number {\n return Math.max(0, new Date(expiresAt).getTime() - Date.now());\n}\n","import type { CheckoutPhase, PaymentSession } from '../types';\nimport { TERMINAL_STATUSES } from '../types';\n\n/** Pay countdown target — only after checkout has started. */\nexport function getCountdownTarget(session: PaymentSession): string | null {\n if (session.phase === 'PAYING' && session.paymentExpiryAt) {\n return session.paymentExpiryAt;\n }\n return null;\n}\n\nconst PAY_PROGRESS_PHASES: CheckoutPhase[] = [\n 'qr-active',\n 'mobile-app-active',\n 'awaiting',\n 'manual-confirm',\n];\n\nconst NO_PROGRESS_PHASES: CheckoutPhase[] = [\n 'loading',\n 'choose-method',\n 'manual-entry',\n 'manual-picker',\n 'success',\n 'expired',\n 'cancelled',\n 'declined',\n 'failed',\n 'invalid-session',\n 'error',\n];\n\n/** Whether the checkout UI should show the pay-window progress bar. */\nexport function shouldShowPayProgress(\n session: PaymentSession | null,\n phase: CheckoutPhase,\n): boolean {\n if (!session?.paymentExpiryAt || NO_PROGRESS_PHASES.includes(phase)) {\n return false;\n }\n\n if (TERMINAL_STATUSES.includes(session.status)) {\n return false;\n }\n\n if (msUntil(session.paymentExpiryAt) <= 0) {\n return false;\n }\n\n if (getCountdownTarget(session)) {\n return true;\n }\n\n return PAY_PROGRESS_PHASES.includes(phase);\n}\n\n/** Remaining pay-window ratio (1 = full time left, 0 = expired). */\nexport function getPayWindowRemainingRatio(session: PaymentSession): number | null {\n if (!session.paymentExpiryAt) {\n return null;\n }\n\n const expiresAt = session.paymentExpiryAt;\n const end = new Date(expiresAt).getTime();\n const start = session.paymentStartAt\n ? new Date(session.paymentStartAt).getTime()\n : end - 5 * 60 * 1000;\n const total = end - start;\n\n if (total <= 0) {\n return 0;\n }\n\n return Math.min(1, Math.max(0, msUntil(expiresAt) / total));\n}\n\n/** Idle shelf deadline — show soft hint only, not a pay countdown. */\nexport function getSoftIdleHint(session: PaymentSession): string | null {\n if (session.phase === 'IDLE' && session.expiresAt) {\n return session.expiresAt;\n }\n return null;\n}\n\nexport function msUntil(iso: string): number {\n return Math.max(0, new Date(iso).getTime() - Date.now());\n}\n","import type { CheckoutSurface } from '../types';\n\nexport type MobileStorePlatform = 'ios' | 'android';\n\n/** True when checkout runs on a phone-sized touch device. */\nexport function isPhoneDevice(): boolean {\n return detectCheckoutSurface() === 'phone';\n}\n\n/** Best-effort store platform for contextual install links on phone. */\nexport function detectMobileStorePlatform(): MobileStorePlatform {\n if (typeof navigator === 'undefined') {\n return 'android';\n }\n\n const ua = navigator.userAgent ?? '';\n const isIos =\n /iPad|iPhone|iPod/.test(ua) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n\n return isIos ? 'ios' : 'android';\n}\n\n/** True when the browser reports an Android user agent. */\nexport function isAndroidDevice(): boolean {\n if (typeof navigator === 'undefined') {\n return false;\n }\n\n return /Android/i.test(navigator.userAgent ?? '');\n}\n\nexport function detectCheckoutSurface(): CheckoutSurface {\n if (typeof window === 'undefined') {\n return 'desktop';\n }\n\n const narrow = window.matchMedia('(max-width: 520px)').matches;\n const coarse = window.matchMedia('(pointer: coarse)').matches;\n return narrow && coarse ? 'phone' : 'desktop';\n}\n\nexport function subscribeCheckoutSurface(\n onChange: (surface: CheckoutSurface) => void,\n): () => void {\n if (typeof window === 'undefined') {\n return () => {};\n }\n\n const mediaQueries = [\n window.matchMedia('(max-width: 520px)'),\n window.matchMedia('(pointer: coarse)'),\n ];\n\n const notify = (): void => {\n onChange(detectCheckoutSurface());\n };\n\n for (const query of mediaQueries) {\n query.addEventListener('change', notify);\n }\n window.addEventListener('orientationchange', notify);\n window.addEventListener('resize', notify);\n\n return () => {\n for (const query of mediaQueries) {\n query.removeEventListener('change', notify);\n }\n window.removeEventListener('orientationchange', notify);\n window.removeEventListener('resize', notify);\n };\n}\n","import type {\n ApiCheckoutMethod,\n ApiMobileAppPolicy,\n BindCheckoutPolicyRequest,\n BoundCheckoutPolicy,\n CheckoutPolicy,\n CheckoutSurface,\n PaymentSession,\n ZippyMobileAppConfig,\n} from '../types';\nimport { detectCheckoutSurface } from './device';\n\nexport type EntryRoutingAction = 'chooser' | 'auto-qr' | 'auto-manual' | 'enforce-mobile-app';\n\nexport type MethodAvailability = {\n qr: boolean;\n manual: boolean;\n mobileApp: boolean;\n};\n\nexport type ResolvedCheckoutUiOptions = {\n checkoutPolicy: BoundCheckoutPolicy;\n mobileAppPolicy: ApiMobileAppPolicy;\n surface: CheckoutSurface;\n methodAvailability: MethodAvailability;\n allowManualBack: boolean;\n};\n\nexport type AppClaimCheckoutMethod = Extract<ApiCheckoutMethod, 'QR' | 'MOBILE_APP'>;\n\nexport function isCheckoutPolicyBound(session: PaymentSession): boolean {\n return session.checkoutPolicy != null || session.mobileAppPolicy != null;\n}\n\nexport function isFullChooserPolicy(checkoutPolicy: BoundCheckoutPolicy): boolean {\n return checkoutPolicy == null;\n}\n\nexport function allowsQrCheckoutPolicy(checkoutPolicy: BoundCheckoutPolicy): boolean {\n return checkoutPolicy == null || checkoutPolicy === 'QR';\n}\n\nexport function allowsManualCheckoutPolicy(checkoutPolicy: BoundCheckoutPolicy): boolean {\n return checkoutPolicy == null || checkoutPolicy === 'MANUAL';\n}\n\n/** Phone + ENFORCE → app-only auto-start for full chooser, QR, or MANUAL bind. */\nfunction phoneEnforceAutoApp(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n): boolean {\n return (\n mobileAppPolicy === 'ENFORCE' &&\n (checkoutPolicy == null || checkoutPolicy === 'QR' || checkoutPolicy === 'MANUAL')\n );\n}\n\nexport function resolveMobileAppPolicy(mobileApp?: ZippyMobileAppConfig): ApiMobileAppPolicy {\n if (mobileApp?.policy === 'enforce') {\n return 'ENFORCE';\n }\n if (mobileApp?.policy === 'option') {\n return 'OPTION';\n }\n return 'OFF';\n}\n\nexport function buildBindPolicyRequest(config: {\n checkoutPolicy?: CheckoutPolicy;\n mobileApp?: ZippyMobileAppConfig;\n}): BindCheckoutPolicyRequest {\n const request: BindCheckoutPolicyRequest = {};\n\n if (config.checkoutPolicy === 'QR' || config.checkoutPolicy === 'MANUAL') {\n request.checkoutPolicy = config.checkoutPolicy;\n }\n\n const mobileAppPolicy = resolveMobileAppPolicy(config.mobileApp);\n if (mobileAppPolicy !== 'OFF') {\n request.mobileAppPolicy = mobileAppPolicy;\n }\n\n return request;\n}\n\n/** Web fallbacks shown after a failed app deep-link on phone. */\nexport function resolveFallbackMethodAvailability(\n checkoutPolicy: BoundCheckoutPolicy,\n): Pick<MethodAvailability, 'qr' | 'manual'> {\n return {\n qr: allowsQrCheckoutPolicy(checkoutPolicy),\n manual: allowsManualCheckoutPolicy(checkoutPolicy),\n };\n}\n\nexport function resolveMethodAvailability(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n): MethodAvailability {\n if (surface === 'desktop') {\n return {\n qr: allowsQrCheckoutPolicy(checkoutPolicy),\n manual: allowsManualCheckoutPolicy(checkoutPolicy),\n mobileApp: false,\n };\n }\n\n const autoAppOnly = phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy);\n\n return {\n qr: allowsQrCheckoutPolicy(checkoutPolicy) && !autoAppOnly,\n manual: allowsManualCheckoutPolicy(checkoutPolicy) && !autoAppOnly,\n mobileApp:\n autoAppOnly ||\n (mobileAppPolicy === 'OPTION' &&\n (checkoutPolicy == null ||\n checkoutPolicy === 'QR' ||\n checkoutPolicy === 'MANUAL')),\n };\n}\n\nexport function resolveEntryRouting(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n): EntryRoutingAction {\n if (surface === 'desktop') {\n if (checkoutPolicy === 'MANUAL') {\n return 'auto-manual';\n }\n if (checkoutPolicy === 'QR') {\n return 'auto-qr';\n }\n return 'chooser';\n }\n\n if (phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy)) {\n return 'enforce-mobile-app';\n }\n\n if (checkoutPolicy === 'MANUAL' && mobileAppPolicy === 'OFF') {\n return 'auto-manual';\n }\n\n if (checkoutPolicy === 'QR' && mobileAppPolicy === 'OFF') {\n return 'auto-qr';\n }\n\n return 'chooser';\n}\n\nexport function isCheckoutStartAllowed(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n method: AppClaimCheckoutMethod,\n): boolean {\n if (method === 'MOBILE_APP') {\n if (surface === 'desktop') {\n return false;\n }\n if (mobileAppPolicy === 'OFF') {\n return false;\n }\n if (phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy)) {\n return true;\n }\n if (mobileAppPolicy === 'OPTION') {\n return (\n checkoutPolicy == null || checkoutPolicy === 'QR' || checkoutPolicy === 'MANUAL'\n );\n }\n return false;\n }\n\n if (!allowsQrCheckoutPolicy(checkoutPolicy)) {\n return false;\n }\n\n if (surface === 'phone' && phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy)) {\n return false;\n }\n\n return true;\n}\n\nexport function resolveAutoStartMethod(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n): AppClaimCheckoutMethod | null {\n const routing = resolveEntryRouting(checkoutPolicy, mobileAppPolicy, surface);\n\n if (routing === 'enforce-mobile-app') {\n return isCheckoutStartAllowed(checkoutPolicy, mobileAppPolicy, surface, 'MOBILE_APP')\n ? 'MOBILE_APP'\n : null;\n }\n\n if (routing === 'auto-qr') {\n return isCheckoutStartAllowed(checkoutPolicy, mobileAppPolicy, surface, 'QR') ? 'QR' : null;\n }\n\n return null;\n}\n\nexport function resolveCheckoutUiOptionsFromBound(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface = detectCheckoutSurface(),\n): ResolvedCheckoutUiOptions {\n return {\n checkoutPolicy,\n mobileAppPolicy,\n surface,\n methodAvailability: resolveMethodAvailability(checkoutPolicy, mobileAppPolicy, surface),\n allowManualBack: checkoutPolicy == null,\n };\n}\n\nexport function resolveCheckoutUiOptionsFromSession(\n session: PaymentSession,\n surface: CheckoutSurface = detectCheckoutSurface(),\n): ResolvedCheckoutUiOptions {\n if (!isCheckoutPolicyBound(session)) {\n throw new Error('Checkout policy is not bound on the payment session.');\n }\n\n return resolveCheckoutUiOptionsFromBound(\n session.checkoutPolicy,\n session.mobileAppPolicy ?? 'OFF',\n surface,\n );\n}\n\nexport function resolveCheckoutUiOptions(\n checkoutPolicy?: CheckoutPolicy,\n mobileApp?: ZippyMobileAppConfig,\n surface: CheckoutSurface = detectCheckoutSurface(),\n): ResolvedCheckoutUiOptions {\n const bind = buildBindPolicyRequest({ checkoutPolicy, mobileApp });\n return resolveCheckoutUiOptionsFromBound(\n bind.checkoutPolicy ?? null,\n bind.mobileAppPolicy ?? 'OFF',\n surface,\n );\n}\n","import type { MobileStorePlatform } from './device';\n\n/** Fixed App Store / Google Play URLs for Zippy Pay (managed server-side; not merchant-configurable). */\nexport type AppStoreLinks = {\n ios: string;\n android: string;\n};\n\nexport const ANDROID_APP_PACKAGE = 'com.zippy.pay';\n\n/** HTTPS store URLs — used for QR codes and desktop fallback links. */\nexport const APP_STORE_LINKS: AppStoreLinks = {\n ios: 'https://apps.apple.com/',\n android: `https://play.google.com/store/apps/details?id=${ANDROID_APP_PACKAGE}`,\n};\n\n/** Opens the native App Store app on iOS (no specific listing until app id is available). */\nexport const IOS_APP_STORE_NATIVE_URL = 'itms-apps://apps.apple.com/';\n\n/** Opens the native Play Store app on Android. */\nexport const ANDROID_PLAY_STORE_NATIVE_URL = `market://details?id=${ANDROID_APP_PACKAGE}`;\n\nexport function resolveAppStoreUrl(platform: MobileStorePlatform): string {\n return APP_STORE_LINKS[platform];\n}\n\n/**\n * URL used when the customer taps Install Zippy.\n * iOS and Android both use native store schemes from a user gesture.\n */\nexport function resolveAppStoreOpenUrl(platform: MobileStorePlatform): string {\n if (platform === 'ios') {\n return IOS_APP_STORE_NATIVE_URL;\n }\n return ANDROID_PLAY_STORE_NATIVE_URL;\n}\n","/** Apple logo mark for compact UI slots. */\nexport function renderAppleLogoSvg(className = 'zippy-app-link-icon'): string {\n return `<svg class=\"${className}\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M16.823 12.345c-.027-2.702 2.208-3.997 2.307-4.059-1.255-1.836-3.211-2.088-3.905-2.118-1.663-.169-3.246.98-4.089.98-.844 0-2.147-.955-3.531-.929-1.818.027-3.493 1.056-4.429 2.683-1.888 3.276-.483 8.131 1.356 10.791.899 1.299 1.968 2.759 3.374 2.707 1.355-.054 1.866-.877 3.504-.877 1.637 0 2.099.877 3.527.85 1.457-.027 2.381-1.32 3.276-2.622.99-1.449 1.396-2.851 1.419-2.922-.031-.014-2.724-1.045-2.751-4.146zM14.303 4.772c.747-.907 1.249-2.164 1.111-3.422-1.075.043-2.375.717-3.147 1.623-.693.802-1.299 2.095-1.136 3.333 1.201.093 2.432-.61 3.172-1.534z\"/></svg>`;\n}\n\n/** Google Play prism — current official four-color mark. */\nexport function renderGooglePlayLogoSvg(className = 'zippy-app-link-icon'): string {\n return `<svg class=\"${className} zippy-app-link-icon--play\" viewBox=\"0 0 256 283\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path fill=\"#EA4335\" d=\"M119.553 134.916 1.06 259.061c2.696 9.556 9.658 17.33 18.861 21.059 9.202 3.73 19.612 2.996 28.201-1.987l133.327-75.935-61.896-67.282z\"/><path fill=\"#FBBC04\" d=\"M239.371 113.814 181.714 80.791 116.816 137.742l65.162 64.279 57.216-32.669c10.332-5.409 16.806-16.107 16.806-27.769 0-11.662-6.474-22.36-16.806-27.769h.177z\"/><path fill=\"#4285F4\" d=\"M1.06 23.487C.344 26.135-.013 28.867 0 31.61v219.327c.008 2.742.364 5.472 1.06 8.124L123.615 138.095 1.06 23.487z\"/><path fill=\"#34A853\" d=\"M120.436 141.274 181.714 80.791 48.563 4.503C43.554 1.569 37.857.016 32.052 0 17.644-.028 4.978 9.534 1.06 23.399l119.376 117.875z\"/></svg>`;\n}\n\nexport function renderAppleStoreIcon(): string {\n return renderAppleLogoSvg('zippy-app-link-icon');\n}\n\nexport function renderGooglePlayIcon(): string {\n return renderGooglePlayLogoSvg('zippy-app-link-icon');\n}\n","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\n//---------------------------------------------------------------------\n// qrcode\n//---------------------------------------------------------------------\n\n/**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\nexport const qrcode = function(typeNumber, errorCorrectionLevel) {\n\n const PAD0 = 0xEC;\n const PAD1 = 0x11;\n\n let _typeNumber = typeNumber;\n const _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n let _modules = null;\n let _moduleCount = 0;\n let _dataCache = null;\n const _dataList = [];\n\n const _this = {};\n\n const makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n const modules = new Array(moduleCount);\n for (let row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (let col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n const setupPositionProbePattern = function(row, col) {\n\n for (let r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (let c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n const getBestMaskPattern = function() {\n\n let minLostPoint = 0;\n let pattern = 0;\n\n for (let i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n const lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n const setupTimingPattern = function() {\n\n for (let r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (let c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n const setupPositionAdjustPattern = function() {\n\n const pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (let i = 0; i < pos.length; i += 1) {\n\n for (let j = 0; j < pos.length; j += 1) {\n\n const row = pos[i];\n const col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (let r = -2; r <= 2; r += 1) {\n\n for (let c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n const setupTypeNumber = function(test) {\n\n const bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n const setupTypeInfo = function(test, maskPattern) {\n\n const data = (_errorCorrectionLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n const mapData = function(data, maskPattern) {\n\n let inc = -1;\n let row = _moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (let col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (let c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n let dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n const mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n const createBytes = function(buffer, rsBlocks) {\n\n let offset = 0;\n\n let maxDcCount = 0;\n let maxEcCount = 0;\n\n const dcdata = new Array(rsBlocks.length);\n const ecdata = new Array(rsBlocks.length);\n\n for (let r = 0; r < rsBlocks.length; r += 1) {\n\n const dcCount = rsBlocks[r].dataCount;\n const ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n let totalCodeCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n const data = new Array(totalCodeCount);\n let index = 0;\n\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n const createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < dataList.length; i += 1) {\n const data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n let newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n let typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < _dataList.length; i++) {\n const data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n let qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (let r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (let c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n let opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n let c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n const c = Math.floor( (x - min) / cellSize);\n const r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n\n let img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n const escapeXml = function(s) {\n let escaped = '';\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n const _createHalfASCII = function(margin) {\n const cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r1, r2, p;\n\n const blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n const blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n let ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r, p;\n\n const white = Array(cellSize+1).join('██');\n const black = Array(cellSize+1).join(' ');\n\n let ascii = '';\n let line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n const length = _this.getModuleCount();\n for (let row = 0; row < length; row++) {\n for (let col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrcode.stringToBytes\n//---------------------------------------------------------------------\n\nqrcode.stringToBytes = function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n};\n\n//---------------------------------------------------------------------\n// qrcode.createStringToBytes\n//---------------------------------------------------------------------\n\n/**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\nqrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n const unicodeMap = function() {\n\n const bin = base64DecodeInputStream(unicodeData);\n const read = function() {\n const b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n let count = 0;\n const unicodeMap = {};\n while (true) {\n const b0 = bin.read();\n if (b0 == -1) break;\n const b1 = read();\n const b2 = read();\n const b3 = read();\n const k = String.fromCharCode( (b0 << 8) | b1);\n const v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n const unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n const b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n};\n\n//---------------------------------------------------------------------\n// QRMode\n//---------------------------------------------------------------------\n\nconst QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n};\n\n//---------------------------------------------------------------------\n// QRErrorCorrectionLevel\n//---------------------------------------------------------------------\n\nconst QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n};\n\n//---------------------------------------------------------------------\n// QRMaskPattern\n//---------------------------------------------------------------------\n\nconst QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n};\n\n//---------------------------------------------------------------------\n// QRUtil\n//---------------------------------------------------------------------\n\nconst QRUtil = function() {\n\n const PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n const _this = {};\n\n const getBCHDigit = function(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n let d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n let d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n let a = qrPolynomial([1], 0);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n const moduleCount = qrcode.getModuleCount();\n\n let lostPoint = 0;\n\n // LEVEL1\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n\n let sameCount = 0;\n const dark = qrcode.isDark(row, col);\n\n for (let r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (let c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n let darkCount = 0;\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n const ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// QRMath\n//---------------------------------------------------------------------\n\nconst QRMath = function() {\n\n const EXP_TABLE = new Array(256);\n const LOG_TABLE = new Array(256);\n\n // initialize tables\n for (let i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (let i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (let i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n const _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrPolynomial\n//---------------------------------------------------------------------\n\nconst qrPolynomial = function(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n const _num = function() {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n const _num = new Array(num.length - offset + shift);\n for (let i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n const _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n const num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (let i = 0; i < _this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n const ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n const num = new Array(_this.getLength() );\n for (let i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// QRRSBlock\n//---------------------------------------------------------------------\n\nconst QRRSBlock = function() {\n\n const RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n const qrRSBlock = function(totalCount, dataCount) {\n const _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n const _this = {};\n\n const getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n const rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n const length = rsBlock.length / 3;\n\n const list = [];\n\n for (let i = 0; i < length; i += 1) {\n\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n\n for (let j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrBitBuffer\n//---------------------------------------------------------------------\n\nconst qrBitBuffer = function() {\n\n const _buffer = [];\n let _length = 0;\n\n const _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n const bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (let i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n const bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrNumber\n//---------------------------------------------------------------------\n\nconst qrNumber = function(data) {\n\n const _mode = QRMode.MODE_NUMBER;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const data = _data;\n\n let i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n const strToNum = function(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n const chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrAlphaNum\n//---------------------------------------------------------------------\n\nconst qrAlphaNum = function(data) {\n\n const _mode = QRMode.MODE_ALPHA_NUM;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const s = _data;\n\n let i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n const getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case '\\u0020' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qr8BitByte\n//---------------------------------------------------------------------\n\nconst qr8BitByte = function(data) {\n\n const _mode = QRMode.MODE_8BIT_BYTE;\n const _data = data;\n const _bytes = qrcode.stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (let i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrKanji\n//---------------------------------------------------------------------\n\nconst qrKanji = function(data) {\n\n const _mode = QRMode.MODE_KANJI;\n const _data = data;\n\n const stringToBytes = qrcode.stringToBytes;\n !function(c, code) {\n // self test for sjis support.\n const test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n const _bytes = stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n const data = _bytes;\n\n let i = 0;\n\n while (i + 1 < data.length) {\n\n let c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n};\n\n//=====================================================================\n// GIF Support etc.\n//\n\n//---------------------------------------------------------------------\n// byteArrayOutputStream\n//---------------------------------------------------------------------\n\nconst byteArrayOutputStream = function() {\n\n const _bytes = [];\n\n const _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (let i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (let i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n let s = '';\n s += '[';\n for (let i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64EncodeOutputStream\n//---------------------------------------------------------------------\n\nconst base64EncodeOutputStream = function() {\n\n let _buffer = 0;\n let _buflen = 0;\n let _length = 0;\n let _base64 = '';\n\n const _this = {};\n\n const writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n const encode = function(n) {\n if (n < 0) {\n throw 'n:' + n;\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n } else {\n throw 'n:' + n;\n }\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n const padlen = 3 - _length % 3;\n for (let i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64DecodeInputStream\n//---------------------------------------------------------------------\n\nconst base64DecodeInputStream = function(str) {\n\n const _str = str;\n let _pos = 0;\n let _buffer = 0;\n let _buflen = 0;\n\n const _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n const c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n const n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n const decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// gifImage (B/W)\n//---------------------------------------------------------------------\n\nconst gifImage = function(width, height) {\n\n const _width = width;\n const _height = height;\n const _data = new Array(width * height);\n\n const _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n const lzwMinCodeSize = 2;\n const raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n let offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n const bitOutputStream = function(out) {\n\n const _out = out;\n let _bitLength = 0;\n let _bitBuffer = 0;\n\n const _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n const getLZWRaster = function(lzwMinCodeSize) {\n\n const clearCode = 1 << lzwMinCodeSize;\n const endCode = (1 << lzwMinCodeSize) + 1;\n let bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n const table = lzwTable();\n\n for (let i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n const byteOut = byteArrayOutputStream();\n const bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n let dataIndex = 0;\n\n let s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n const c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n const lzwTable = function() {\n\n const _map = {};\n let _size = 0;\n\n const _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n};\n\nconst createDataURL = function(width, height, getPixel) {\n const gif = gifImage(width, height);\n for (let y = 0; y < height; y += 1) {\n for (let x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n const b = byteArrayOutputStream();\n gif.write(b);\n\n const base64 = base64EncodeOutputStream();\n const bytes = b.toByteArray();\n for (let i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n};\n\nexport default qrcode;\n\nexport const stringToBytes = qrcode.stringToBytes;\n","export const ZIPPY_BRAND_COLOR = '#476CEB';\n\n/**\n * Z mark lifted from product logo assets, with a square viewBox centred on the\n * glyph so it can be dropped into any square slot. Matches merchant dashboard.\n */\nconst Z_MARK_VIEW_BOX = '-1 20.86 60 60';\nconst Z_MARK_PATH =\n 'M16.8831 21.5476C16.3856 21.5476 15.9085 21.7452 15.5567 22.097L0.549704 37.104C0.0132083 37.6405 -0.147283 38.4474 0.143066 39.1483C0.433416 39.8493 1.11743 40.3063 1.87615 40.3063H26.5982L2.74743 64.1571C0.0649471 66.8395 -0.737512 70.8738 0.714236 74.3786C2.16598 77.8834 5.58604 80.1686 9.37964 80.1686H41.7385C42.236 80.1686 42.7131 79.971 43.0649 79.6192L58.0719 64.6122C58.6084 64.0757 58.7689 63.2689 58.4785 62.5679C58.1882 61.867 57.5042 61.4099 56.7455 61.4099H32.0234L55.8742 37.5592C58.5567 34.8767 59.3591 30.8425 57.9074 27.3376C56.4556 23.8328 53.0356 21.5476 49.242 21.5476H16.8831ZM5.11632 64.1759L28.3783 40.3812H30.6653L5.11632 64.1759ZM30.1464 61.4059L53.4083 37.6111L27.8594 61.4059H30.1464Z';\n\n/** Share of the QR width taken by the logo badge. Safe at error level H. */\nconst BADGE_RATIO = 0.24;\n\nfunction parseViewBoxSize(svg: string): number | null {\n const match = /viewBox=\"0 0 ([\\d.]+) [\\d.]+\"/.exec(svg);\n return match ? Number(match[1]) : null;\n}\n\n/** White plate + centred Z mark, sized relative to the QR viewBox. */\nexport function buildLogoBadge(qrSize: number): string {\n const badge = qrSize * BADGE_RATIO;\n const offset = (qrSize - badge) / 2;\n const plate = badge * 1.18;\n const plateOffset = (qrSize - plate) / 2;\n const markInset = badge * 0.16;\n\n return [\n '<g shape-rendering=\"geometricPrecision\">',\n `<rect x=\"${plateOffset}\" y=\"${plateOffset}\" width=\"${plate}\" height=\"${plate}\" rx=\"${plate * 0.22}\" fill=\"#ffffff\"/>`,\n `<svg x=\"${offset + markInset}\" y=\"${offset + markInset}\" width=\"${badge - markInset * 2}\" height=\"${badge - markInset * 2}\" viewBox=\"${Z_MARK_VIEW_BOX}\">`,\n `<path d=\"${Z_MARK_PATH}\" fill=\"${ZIPPY_BRAND_COLOR}\"/>`,\n '</svg>',\n '</g>',\n ].join('');\n}\n\n/** Injects the branded logo badge into a QR SVG string before the closing tag. */\nexport function embedLogoInQrSvg(svg: string): string {\n const size = parseViewBoxSize(svg);\n if (!size) {\n return svg;\n }\n return svg.replace('</svg>', `${buildLogoBadge(size)}</svg>`);\n}\n\n/** Muted footer lock icon — uses currentColor. */\nexport function renderSecureLockSvg(): string {\n return `<svg class=\"zippy-brand-lock\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 10V8a5 5 0 0 1 10 0v2\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><rect x=\"5\" y=\"10\" width=\"14\" height=\"11\" rx=\"2.5\" stroke=\"currentColor\" stroke-width=\"1.75\"/><circle cx=\"12\" cy=\"15.5\" r=\"1.25\" fill=\"currentColor\"/></svg>`;\n}\n","import qrcode from 'qrcode-generator';\nimport { embedLogoInQrSvg } from './zippy-logo';\n\n/** Deep link path scanned by the Zippy app — sessionId only, never clientToken. */\nexport const MERCHANT_PAYMENT_DEEP_LINK_PATH = 'merchant-payment';\n\n/** Deep link scanned by the Zippy app — sessionId only, never clientToken. */\nexport function buildPaymentQrPayload(sessionId: string): string {\n return `zippy://${MERCHANT_PAYMENT_DEEP_LINK_PATH}/${sessionId}`;\n}\n\ntype QrErrorCorrection = 'L' | 'M' | 'Q' | 'H';\n\n/** Renders a QR code as an SVG string for embedding in the checkout UI. */\nexport function renderQrSvg(\n payload: string,\n cellSize = 4,\n errorCorrection: QrErrorCorrection = 'H',\n margin = 2,\n): string {\n const qr = qrcode(0, errorCorrection);\n qr.addData(payload);\n qr.make();\n return qr.createSvgTag(cellSize, margin);\n}\n\nexport function renderPaymentQrSvg(\n sessionId: string,\n cellSize = 4,\n errorCorrection: QrErrorCorrection = 'H',\n): string {\n return renderQrSvg(buildPaymentQrPayload(sessionId), cellSize, errorCorrection);\n}\n\n/** Branded QR SVG with centred Zippy mark — matches merchant dashboard rendering. */\nexport function renderBrandedPaymentQrSvg(sessionId: string, cellSize = 4): string {\n return embedLogoInQrSvg(renderPaymentQrSvg(sessionId, cellSize, 'H'));\n}\n\n/** QR markup wrapper for the checkout UI. */\nexport function renderPaymentQrMarkup(sessionId: string, cellSize = 4): string {\n const svg = renderBrandedPaymentQrSvg(sessionId, cellSize);\n return `<div class=\"zippy-qr-stack\">${svg}</div>`;\n}\n\n/** Plain QR markup for arbitrary URLs (e.g. app store links). */\nexport function renderUrlQrMarkup(url: string, cellSize = 4): string {\n const svg = renderQrSvg(url, cellSize, 'M');\n return `<div class=\"zippy-qr-stack zippy-qr-stack--plain\">${svg}</div>`;\n}\n","import {\n ANDROID_APP_PACKAGE,\n resolveAppStoreOpenUrl,\n} from '../config/app-links';\nimport {\n detectMobileStorePlatform,\n isAndroidDevice,\n type MobileStorePlatform,\n} from '../config/device';\nimport { buildPaymentQrPayload, MERCHANT_PAYMENT_DEEP_LINK_PATH } from './render-qr';\n\n/** Android intent URL — more reliable than raw `zippy://` in Chrome. */\nexport function buildAndroidPaymentIntentUrl(sessionId: string): string {\n return `intent://${MERCHANT_PAYMENT_DEEP_LINK_PATH}/${sessionId}#Intent;scheme=zippy;package=${ANDROID_APP_PACKAGE};end`;\n}\n\n/** Platform-aware deep link used when the customer taps Pay with Zippy / Try again. */\nexport function buildPaymentDeepLinkOpenUrl(\n sessionId: string,\n platform?: MobileStorePlatform,\n): string {\n if (platform === 'android' || (platform == null && isAndroidDevice())) {\n return buildAndroidPaymentIntentUrl(sessionId);\n }\n\n return buildPaymentQrPayload(sessionId);\n}\n\n/** Sends the current tab to the App Store or Google Play for this device. */\nexport function openAppStore(platform?: MobileStorePlatform): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const resolved = platform ?? detectMobileStorePlatform();\n window.location.assign(resolveAppStoreOpenUrl(resolved));\n}\n\n/**\n * Opens the Zippy app from a user gesture (Pay with Zippy / Try again).\n * Keeps the checkout page visible so failed-handoff UI can appear afterward.\n */\nexport function openPaymentDeepLink(sessionId: string): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n openCustomSchemeWithoutNavigation(buildPaymentDeepLinkOpenUrl(sessionId));\n}\n\nfunction openCustomSchemeWithoutNavigation(url: string): void {\n const link = document.createElement('a');\n link.href = url;\n link.style.display = 'none';\n link.setAttribute('aria-hidden', 'true');\n document.body.appendChild(link);\n link.click();\n link.remove();\n}\n","import { renderUrlQrMarkup } from '../qr/render-qr';\nimport { openAppStore } from '../qr/deep-link';\nimport { renderAppleLogoSvg, renderGooglePlayLogoSvg } from './app-store-icons';\n\nexport type AppStorePlatform = 'ios' | 'android';\n\ntype PlatformCopy = {\n title: string;\n lead: string;\n qrHint: string;\n ctaLabel: string;\n dialogLabel: string;\n icon: string;\n};\n\nconst PLATFORM_COPY: Record<AppStorePlatform, PlatformCopy> = {\n ios: {\n title: 'Download Zippy for iPhone',\n lead: 'Scan the code with your iPhone camera, or open the App Store directly on this device.',\n qrHint: 'Scan to open the App Store',\n ctaLabel: 'Open App Store',\n dialogLabel: 'Download Zippy on the App Store',\n icon: renderAppleLogoSvg('zippy-app-modal-platform-icon'),\n },\n android: {\n title: 'Download Zippy for Android',\n lead: 'Scan the code with your Android phone, or open Google Play directly on this device.',\n qrHint: 'Scan to open Google Play',\n ctaLabel: 'Open Google Play',\n dialogLabel: 'Get Zippy on Google Play',\n icon: renderGooglePlayLogoSvg('zippy-app-modal-platform-icon zippy-app-modal-platform-icon--play'),\n },\n};\n\nfunction isMobileLikeViewport(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.matchMedia('(max-width: 520px), (pointer: coarse)').matches;\n}\n\nexport class AppStoreDownloadModal {\n private overlay: HTMLElement | null = null;\n private escapeHandler: ((event: KeyboardEvent) => void) | null = null;\n private focusTrapHandler: ((event: KeyboardEvent) => void) | null = null;\n private trigger: HTMLElement | null = null;\n\n constructor(private readonly shadow: ShadowRoot) {}\n\n open(platform: AppStorePlatform, url: string, trigger: HTMLElement): void {\n this.close();\n this.trigger = trigger;\n\n const copy = PLATFORM_COPY[platform];\n const mobile = isMobileLikeViewport();\n\n const overlay = document.createElement('div');\n overlay.className = `zippy-app-modal-overlay${mobile ? ' zippy-app-modal-overlay--mobile' : ''}`;\n overlay.setAttribute('role', 'dialog');\n overlay.setAttribute('aria-modal', 'true');\n overlay.setAttribute('aria-label', copy.dialogLabel);\n\n overlay.innerHTML = `\n <div class=\"zippy-app-modal-panel\">\n <button type=\"button\" class=\"zippy-app-modal-close\" aria-label=\"Close download dialog\"><svg class=\"zippy-app-modal-close-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 7l10 10M17 7 7 17\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg></button>\n <div class=\"zippy-app-modal-header\">\n ${copy.icon}\n <div class=\"zippy-app-modal-heading\">\n <h2 class=\"zippy-app-modal-title\">${copy.title}</h2>\n <p class=\"zippy-app-modal-lead\">${copy.lead}</p>\n </div>\n </div>\n <div class=\"zippy-app-modal-qr-wrap\">\n <div class=\"zippy-app-modal-qr-frame\" aria-label=\"${copy.qrHint}\">${renderUrlQrMarkup(url, 5)}</div>\n <p class=\"zippy-app-modal-qr-hint\">${copy.qrHint}</p>\n </div>\n <div class=\"zippy-app-modal-actions\">\n <a class=\"zippy-app-modal-cta zippy-app-modal-cta--${platform}\" href=\"${escapeAttribute(url)}\" target=\"_blank\" rel=\"noopener noreferrer\">${copy.ctaLabel}</a>\n ${mobile ? `<p class=\"zippy-app-modal-mobile-note\">On this device, use the button above to install the app.</p>` : ''}\n </div>\n </div>\n `;\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) {\n this.close();\n }\n });\n\n overlay.querySelector('.zippy-app-modal-panel')?.addEventListener('click', (event) => {\n event.stopPropagation();\n });\n\n overlay.querySelector('.zippy-app-modal-close')?.addEventListener('click', () => {\n this.close();\n });\n\n const cta = overlay.querySelector<HTMLAnchorElement>('.zippy-app-modal-cta');\n if (mobile && cta) {\n cta.addEventListener('click', (event) => {\n event.preventDefault();\n openAppStore(platform);\n });\n }\n\n this.shadow.appendChild(overlay);\n this.overlay = overlay;\n\n this.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n };\n document.addEventListener('keydown', this.escapeHandler);\n\n this.focusTrapHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || !this.overlay) {\n return;\n }\n const focusables = Array.from(\n this.overlay.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), a[href], [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((element) => element.offsetParent !== null);\n if (focusables.length === 0) {\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', this.focusTrapHandler);\n\n overlay.querySelector<HTMLElement>('.zippy-app-modal-close')?.focus();\n }\n\n close(): void {\n if (this.escapeHandler) {\n document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = null;\n }\n if (this.focusTrapHandler) {\n document.removeEventListener('keydown', this.focusTrapHandler);\n this.focusTrapHandler = null;\n }\n this.overlay?.remove();\n this.overlay = null;\n\n if (this.trigger?.isConnected) {\n this.trigger.focus();\n }\n this.trigger = null;\n }\n\n destroy(): void {\n this.close();\n }\n}\n\nfunction escapeAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n","import type { CheckoutMethod, CheckoutPhase, PayerPreview, PaymentSession, PaymentSessionPayer } from '../types';\nimport type { ResolvedCheckoutUiOptions } from '../config/checkout-policy';\nimport { resolveFallbackMethodAvailability } from '../config/checkout-policy';\nimport type { AppHandoffStatus } from '../app/handoff';\nimport { APP_STORE_LINKS } from '../config/app-links';\nimport { renderAppleStoreIcon, renderGooglePlayIcon } from './app-store-icons';\nimport { AppStoreDownloadModal, type AppStorePlatform } from './app-store-modal';\nimport { renderPaymentQrMarkup } from '../qr/render-qr';\nimport { renderSecureLockSvg } from '../qr/zippy-logo';\nimport { getPayWindowRemainingRatio, msUntil, shouldShowPayProgress } from '../session/timing';\nimport {\n formatAmount,\n formatCountdown,\n formatCountdownAccessible,\n formatDisplayInitials,\n outcomeTerminalCopy,\n TERMINAL_EXIT_COUNTDOWN_SEC,\n terminalExitLeadText,\n type TerminalExitMode,\n} from '../utils';\nimport { CHECKOUT_STYLES } from '../theme';\n\nexport type UiCallbacks = {\n onChooseMethod: (method: CheckoutMethod) => void;\n onVerify: (query: string) => Promise<void>;\n onPay: (paymentId: string) => Promise<void>;\n onSelectPayer?: (payer: PayerPreview) => void;\n onBackToChooseMethod?: () => void;\n onBackToManualEntry?: () => void;\n onBackToMobileAppFallback?: () => void;\n onOpenMobileApp?: () => void;\n onInstallZippy?: () => void;\n onRetryMobileApp?: () => void;\n onPaymentIdChange?: (query: string) => void;\n onTerminalExit?: () => void;\n};\n\nexport type UiState = {\n phase: CheckoutPhase;\n session: PaymentSession | null;\n sessionId: string;\n committedMethod: CheckoutMethod | null;\n paymentId: string;\n verifiedPayer: PayerPreview | null;\n verifyMatches: PayerPreview[] | null;\n errorMessage: string | null;\n loading: boolean;\n mode: 'inline' | 'modal';\n exitMode?: TerminalExitMode | null;\n appHandoffStatus?: AppHandoffStatus;\n mobileAppManualFallback?: boolean;\n};\n\nexport class CheckoutUi {\n private readonly shadow: ShadowRoot;\n private readonly root: HTMLElement;\n private state: UiState;\n private readonly callbacks: UiCallbacks;\n private expiryTimer: ReturnType<typeof setInterval> | null = null;\n private terminalExitTimer: ReturnType<typeof setInterval> | null = null;\n private readonly appStoreModal: AppStoreDownloadModal;\n private uiOptions: ResolvedCheckoutUiOptions;\n\n constructor(\n host: HTMLElement,\n initialState: UiState,\n callbacks: UiCallbacks,\n uiOptions: ResolvedCheckoutUiOptions,\n extraStyles = '',\n ) {\n this.callbacks = callbacks;\n this.uiOptions = uiOptions;\n this.state = initialState;\n this.shadow = host.attachShadow({ mode: 'open' });\n this.appStoreModal = new AppStoreDownloadModal(this.shadow);\n const style = document.createElement('style');\n style.textContent = CHECKOUT_STYLES + extraStyles;\n this.shadow.appendChild(style);\n this.root = document.createElement('div');\n this.root.className = 'zippy-root';\n this.root.setAttribute('role', 'region');\n this.root.setAttribute('aria-label', 'Zippy Pay checkout');\n this.shadow.appendChild(this.root);\n this.render();\n }\n\n update(partial: Partial<UiState>): void {\n const next = { ...this.state, ...partial };\n if (this.shouldSkipRender(this.state, next)) {\n this.state = next;\n return;\n }\n this.state = next;\n this.render();\n }\n\n updateUiOptions(uiOptions: ResolvedCheckoutUiOptions): void {\n this.uiOptions = uiOptions;\n this.render();\n }\n\n private shouldSkipRender(prev: UiState, next: UiState): boolean {\n return this.renderSnapshot(prev) === this.renderSnapshot(next);\n }\n\n private renderSnapshot(state: UiState): string {\n const session = state.session;\n return JSON.stringify({\n phase: state.phase,\n sessionId: state.sessionId,\n committedMethod: state.committedMethod,\n paymentId: state.paymentId,\n errorMessage: state.errorMessage,\n loading: state.loading,\n mode: state.mode,\n exitMode: state.exitMode ?? null,\n appHandoffStatus: state.appHandoffStatus ?? 'idle',\n mobileAppManualFallback: state.mobileAppManualFallback ?? false,\n verifiedPayer: state.verifiedPayer,\n verifyMatches: state.verifyMatches,\n session: session\n ? {\n status: session.status,\n phase: session.phase,\n amount: session.amount,\n currency: session.currency,\n businessName: session.businessName,\n paymentExpiryAt: session.paymentExpiryAt,\n paymentStartAt: session.paymentStartAt,\n payer: session.payer,\n transactionStatus: session.transactionStatus,\n checkoutMethod: session.checkoutMethod,\n expiresAt: session.expiresAt,\n transactionId: session.transactionId,\n }\n : null,\n });\n }\n\n private restoreFocusState(): { id: string | null; selection: number | null } {\n const active = this.shadow.activeElement;\n if (active instanceof HTMLInputElement && active.id) {\n return { id: active.id, selection: active.selectionStart };\n }\n return { id: null, selection: null };\n }\n\n private applyFocusState(focus: { id: string | null; selection: number | null }): void {\n if (!focus.id) {\n return;\n }\n const element = this.shadow.getElementById(focus.id);\n if (!(element instanceof HTMLInputElement)) {\n return;\n }\n element.focus();\n if (focus.selection !== null) {\n element.setSelectionRange(focus.selection, focus.selection);\n }\n }\n\n destroy(): void {\n this.clearExpiryTimer();\n this.clearTerminalExitTimer();\n this.appStoreModal.destroy();\n }\n\n getShadowRoot(): ShadowRoot {\n return this.shadow;\n }\n\n private render(): void {\n const focusState = this.restoreFocusState();\n this.clearExpiryTimer();\n this.clearTerminalExitTimer();\n\n const {\n phase,\n session,\n errorMessage,\n loading,\n verifiedPayer,\n verifyMatches,\n paymentId,\n sessionId,\n committedMethod,\n exitMode,\n mode,\n appHandoffStatus = 'idle',\n mobileAppManualFallback = false,\n } = this.state;\n const isTerminal =\n phase === 'success' ||\n phase === 'expired' ||\n phase === 'cancelled' ||\n phase === 'declined' ||\n phase === 'failed' ||\n phase === 'invalid-session' ||\n phase === 'error';\n const showPayProgress =\n !isTerminal && shouldShowPayProgress(session, phase);\n const isQrPayFlow =\n phase === 'qr-active' ||\n (phase === 'awaiting' && committedMethod === 'qr');\n const isMobileAppFlow =\n phase === 'mobile-app-active' ||\n (phase === 'awaiting' && committedMethod === 'mobileApp');\n\n this.root.className =\n showPayProgress\n ? isQrPayFlow\n ? 'zippy-root zippy-root--paying zippy-root--qr'\n : isMobileAppFlow\n ? 'zippy-root zippy-root--paying zippy-root--mobile-app'\n : 'zippy-root zippy-root--paying'\n : isTerminal\n ? 'zippy-root zippy-root--terminal'\n : 'zippy-root';\n\n this.root.innerHTML = '';\n\n const mount = isTerminal ? this.root : document.createElement('div');\n if (!isTerminal) {\n mount.className = 'zippy-root-body';\n this.root.appendChild(mount);\n }\n\n if (phase === 'loading') {\n mount.appendChild(this.renderLoading());\n mount.appendChild(this.renderBrandFooter());\n if (showPayProgress) {\n const ratio = session ? getPayWindowRemainingRatio(session) : null;\n if (ratio !== null && ratio > 0) {\n this.root.appendChild(this.renderPayProgress());\n }\n }\n this.applyFocusState(focusState);\n return;\n }\n\n if (session && !isTerminal) {\n mount.appendChild(this.renderPaymentHero(session, this.heroSubtitle(phase, session)));\n }\n\n const inlinePaymentExpiryAt = session?.paymentExpiryAt;\n const showInlinePayTimer =\n showPayProgress &&\n phase !== 'qr-active' &&\n phase !== 'mobile-app-active' &&\n inlinePaymentExpiryAt != null &&\n msUntil(inlinePaymentExpiryAt) > 0;\n\n if (showInlinePayTimer) {\n mount.appendChild(this.renderPayTimer(inlinePaymentExpiryAt));\n }\n\n switch (phase) {\n case 'choose-method':\n mount.appendChild(this.renderChooseMethod());\n break;\n case 'qr-active':\n mount.appendChild(this.renderQrActive(sessionId, session));\n break;\n case 'mobile-app-active':\n mount.appendChild(this.renderMobileAppActive(session, appHandoffStatus, loading));\n break;\n case 'manual-entry':\n mount.appendChild(\n this.renderManualEntry(paymentId, errorMessage, loading, mobileAppManualFallback),\n );\n break;\n case 'manual-picker':\n mount.appendChild(\n this.renderPayerPicker(verifyMatches ?? [], loading),\n );\n break;\n case 'manual-confirm':\n mount.appendChild(\n this.renderManualConfirm(verifiedPayer, errorMessage, loading),\n );\n break;\n case 'awaiting':\n mount.appendChild(\n this.renderAwaiting(session, committedMethod ?? 'qr', verifiedPayer),\n );\n break;\n case 'success':\n case 'expired':\n case 'cancelled':\n case 'declined':\n case 'failed':\n case 'invalid-session':\n mount.appendChild(this.renderOutcomeScreen(phase, session, exitMode, mode));\n this.mountTerminalExitTimer();\n break;\n case 'error':\n mount.appendChild(\n this.renderTerminal(\n 'error',\n 'Something went wrong',\n errorMessage ?? 'Please try again or contact the merchant.',\n ),\n );\n break;\n default:\n break;\n }\n\n if (!isTerminal) {\n mount.appendChild(this.renderBrandFooter());\n } else {\n this.root.appendChild(this.renderBrandFooter());\n }\n\n if (showPayProgress) {\n const ratio = session ? getPayWindowRemainingRatio(session) : null;\n if (ratio !== null && ratio > 0) {\n this.root.appendChild(this.renderPayProgress());\n }\n }\n\n this.applyFocusState(focusState);\n }\n\n private heroSubtitle(phase: CheckoutPhase, session: PaymentSession | null): string {\n switch (phase) {\n case 'choose-method':\n return 'Choose how to pay';\n case 'qr-active':\n return session?.status === 'AWAITING_PAYMENT'\n ? 'Waiting for confirmation'\n : 'Scan with the Zippy app';\n case 'mobile-app-active':\n if (this.state.appHandoffStatus === 'failed') {\n return 'Install or choose another way';\n }\n return session?.status === 'AWAITING_PAYMENT'\n ? 'Waiting for confirmation'\n : 'Pay in the Zippy app';\n case 'manual-entry':\n return 'Find your Zippy account';\n case 'manual-picker':\n return 'Select your account';\n case 'manual-confirm':\n return 'Review and confirm';\n case 'awaiting':\n return 'Waiting for confirmation';\n default:\n return '';\n }\n }\n\n private renderPaymentHero(session: PaymentSession, subtitle: string): HTMLElement {\n const header = document.createElement('div');\n header.className = 'zippy-payment-hero';\n\n const business = document.createElement('p');\n business.className = 'zippy-payment-merchant';\n business.textContent = session.businessName;\n\n const amount = document.createElement('p');\n amount.className = 'zippy-payment-amount';\n amount.textContent = formatAmount(session.amount, session.currency);\n\n header.appendChild(business);\n header.appendChild(amount);\n\n if (subtitle) {\n const sub = document.createElement('p');\n sub.className = 'zippy-payment-subtitle';\n sub.textContent = subtitle;\n header.appendChild(sub);\n }\n\n return header;\n }\n\n private renderBrandFooter(): HTMLElement {\n const footer = document.createElement('div');\n footer.className = 'zippy-brand-footer';\n footer.setAttribute('aria-label', 'Zippy checkout footer');\n\n if (this.uiOptions.surface !== 'phone') {\n const appLinks = document.createElement('div');\n appLinks.className = 'zippy-app-links';\n\n const appLabel = document.createElement('p');\n appLabel.className = 'zippy-app-links-label';\n appLabel.textContent = 'Get the Zippy Pay app';\n\n const badges = document.createElement('div');\n badges.className = 'zippy-app-links-badges';\n\n badges.appendChild(\n this.renderStoreBadgeButton(\n 'ios',\n APP_STORE_LINKS.ios,\n 'Show App Store download options',\n renderAppleStoreIcon(),\n ),\n );\n badges.appendChild(\n this.renderStoreBadgeButton(\n 'android',\n APP_STORE_LINKS.android,\n 'Show Google Play download options',\n renderGooglePlayIcon(),\n ),\n );\n\n appLinks.appendChild(appLabel);\n appLinks.appendChild(badges);\n footer.appendChild(appLinks);\n }\n\n const inner = document.createElement('div');\n inner.className = 'zippy-brand-footer-inner';\n\n const secure = document.createElement('span');\n secure.className = 'zippy-brand-secure';\n secure.innerHTML = `${renderSecureLockSvg()}<span class=\"zippy-brand-copy\">Secured by</span>`;\n\n const divider = document.createElement('span');\n divider.className = 'zippy-brand-divider';\n divider.setAttribute('aria-hidden', 'true');\n\n const brand = document.createElement('span');\n brand.className = 'zippy-brand-name';\n brand.textContent = 'Zippy';\n\n inner.appendChild(secure);\n inner.appendChild(divider);\n inner.appendChild(brand);\n\n footer.appendChild(inner);\n return footer;\n }\n\n private renderStoreBadgeButton(\n platform: AppStorePlatform,\n url: string,\n ariaLabel: string,\n icon: string,\n ): HTMLButtonElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = `zippy-app-link zippy-app-link--icon-only zippy-app-link--${platform}`;\n button.setAttribute('aria-label', ariaLabel);\n button.setAttribute('aria-haspopup', 'dialog');\n button.innerHTML = icon;\n button.addEventListener('click', () => {\n this.appStoreModal.open(platform, url, button);\n });\n return button;\n }\n\n private renderLoading(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-status';\n const icon = document.createElement('div');\n icon.className = 'zippy-status-icon loading';\n const spinner = document.createElement('div');\n spinner.className = 'zippy-spinner';\n icon.appendChild(spinner);\n const title = document.createElement('p');\n title.className = 'zippy-status-title';\n title.textContent = 'Loading checkout…';\n wrap.appendChild(icon);\n wrap.appendChild(title);\n return wrap;\n }\n\n private renderChooseMethod(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-choose';\n const { appHandoffStatus = 'idle' } = this.state;\n\n const options = document.createElement('div');\n options.className = 'zippy-choose-options';\n const { methodAvailability } = this.uiOptions;\n\n if (methodAvailability.qr) {\n options.appendChild(\n this.renderMethodCard({\n method: 'qr',\n title: 'QR code',\n description: 'Open Zippy and scan',\n icon: this.qrIconSvg(),\n }),\n );\n }\n\n if (methodAvailability.manual) {\n options.appendChild(\n this.renderMethodCard({\n method: 'manual',\n title: 'Zippy account',\n description: 'ID, email, or phone',\n icon: this.idIconSvg(),\n }),\n );\n }\n\n if (methodAvailability.qr || methodAvailability.manual) {\n wrap.appendChild(options);\n }\n\n if (methodAvailability.mobileApp) {\n const mobileAppCta = document.createElement('div');\n mobileAppCta.className = 'zippy-choose-mobile-app';\n mobileAppCta.appendChild(\n this.renderPayWithZippyButton({\n opening: appHandoffStatus === 'opening',\n action: 'choose',\n }),\n );\n wrap.appendChild(mobileAppCta);\n }\n\n return wrap;\n }\n\n private renderMethodCard(params: {\n method: CheckoutMethod;\n title: string;\n description: string;\n icon: string;\n }): HTMLElement {\n const card = document.createElement('button');\n card.type = 'button';\n card.className = `zippy-method-card zippy-method-card--${params.method}`;\n card.setAttribute(\n 'aria-label',\n params.method === 'qr'\n ? 'Pay by scanning a QR code in the Zippy app'\n : params.method === 'mobileApp'\n ? 'Pay with the Zippy app on this phone'\n : 'Pay with your Zippy ID, email, or phone',\n );\n\n const icon = document.createElement('span');\n icon.className = 'zippy-method-icon';\n icon.innerHTML = params.icon;\n\n const copy = document.createElement('span');\n copy.className = 'zippy-method-copy';\n\n const title = document.createElement('span');\n title.className = 'zippy-method-title';\n title.textContent = params.title;\n\n const description = document.createElement('span');\n description.className = 'zippy-method-hint';\n description.textContent = params.description;\n\n copy.appendChild(title);\n copy.appendChild(description);\n card.appendChild(icon);\n card.appendChild(copy);\n card.addEventListener('click', () => this.callbacks.onChooseMethod(params.method));\n\n return card;\n }\n\n private renderQrActive(sessionId: string, session: PaymentSession | null): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow zippy-flow--centered';\n const isAwaiting = session?.status === 'AWAITING_PAYMENT';\n\n const qrWrap = document.createElement('div');\n qrWrap.className = 'zippy-qr-section';\n const frame = document.createElement('div');\n frame.className = 'zippy-qr-frame';\n frame.innerHTML = renderPaymentQrMarkup(sessionId);\n qrWrap.appendChild(frame);\n\n if (session?.paymentExpiryAt && msUntil(session.paymentExpiryAt) > 0) {\n qrWrap.appendChild(this.renderPayTimer(session.paymentExpiryAt));\n }\n\n if (isAwaiting) {\n qrWrap.appendChild(this.renderQrAwaitingLoader());\n }\n\n wrap.appendChild(qrWrap);\n\n if (isAwaiting) {\n if (session?.payer) {\n wrap.appendChild(this.renderIdentityCard(session.payer));\n }\n wrap.appendChild(\n this.renderFootnote('Complete the payment in the Zippy app to finish checkout.'),\n );\n } else {\n wrap.appendChild(\n this.renderFlowHint('Open Zippy Pay, scan the code, and complete your payment.'),\n );\n wrap.appendChild(this.renderFootnote('Keep this page open until payment completes.'));\n }\n\n return wrap;\n }\n\n private renderMobileAppActive(\n session: PaymentSession | null,\n appHandoffStatus: AppHandoffStatus,\n loading: boolean,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow zippy-flow--centered';\n const isAwaiting = session?.status === 'AWAITING_PAYMENT';\n\n const section = document.createElement('div');\n section.className = 'zippy-mobile-app-section';\n\n const paymentExpiryAt = session?.paymentExpiryAt;\n const showInlineTimer =\n paymentExpiryAt != null &&\n msUntil(paymentExpiryAt) > 0 &&\n appHandoffStatus !== 'idle' &&\n appHandoffStatus !== 'opening';\n\n if (showInlineTimer) {\n section.appendChild(this.renderPayTimer(paymentExpiryAt));\n }\n\n if (appHandoffStatus === 'opening') {\n section.appendChild(this.renderPayWithZippyButton({ opening: true }));\n } else if (appHandoffStatus === 'failed') {\n if (loading) {\n section.appendChild(this.renderMobileAppMethodSwitching());\n } else {\n section.appendChild(this.renderMobileAppHandoffFailed());\n }\n } else if (appHandoffStatus === 'opened' || isAwaiting) {\n if (isAwaiting) {\n section.appendChild(this.renderQrAwaitingLoader());\n } else {\n section.appendChild(this.renderMobileAppOpenedHint());\n }\n } else {\n section.appendChild(this.renderPayWithZippyButton({ disabled: isAwaiting }));\n }\n\n wrap.appendChild(section);\n\n if (isAwaiting) {\n if (session?.payer) {\n wrap.appendChild(this.renderIdentityCard(session.payer));\n }\n wrap.appendChild(\n this.renderFootnote('Complete the payment in the Zippy app to finish checkout.'),\n );\n } else if (appHandoffStatus === 'failed') {\n wrap.appendChild(\n this.renderFootnote(\n loading\n ? 'Switching payment method…'\n : 'Install Zippy or choose another payment method below.',\n ),\n );\n } else {\n wrap.appendChild(\n this.renderFootnote('Keep this page open until payment completes.'),\n );\n }\n\n return wrap;\n }\n\n private renderMobileAppMethodSwitching(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-mobile-app-method-switching';\n wrap.setAttribute('aria-live', 'polite');\n wrap.setAttribute('aria-busy', 'true');\n\n const spinner = document.createElement('span');\n spinner.className = 'zippy-qr-awaiting-spinner';\n spinner.setAttribute('aria-hidden', 'true');\n\n const title = document.createElement('p');\n title.className = 'zippy-mobile-app-method-switching-title';\n title.textContent = 'Switching payment method…';\n\n wrap.appendChild(spinner);\n wrap.appendChild(title);\n return wrap;\n }\n\n private renderPayWithZippyButton(\n options: {\n disabled?: boolean;\n opening?: boolean;\n action?: 'choose' | 'open';\n } = {},\n ): HTMLButtonElement {\n const { disabled = false, opening = false, action = 'open' } = options;\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-mobile-app-pay-btn';\n button.disabled = disabled || opening;\n\n if (opening) {\n button.classList.add('zippy-mobile-app-pay-btn--opening');\n button.setAttribute('aria-busy', 'true');\n button.setAttribute('aria-live', 'polite');\n button.setAttribute('aria-label', 'Opening Zippy Pay');\n\n const spinner = document.createElement('span');\n spinner.className =\n 'zippy-qr-awaiting-spinner zippy-mobile-app-pay-btn-spinner';\n spinner.setAttribute('aria-hidden', 'true');\n\n const label = document.createElement('span');\n label.textContent = 'Opening Zippy…';\n\n button.appendChild(spinner);\n button.appendChild(label);\n } else {\n button.textContent = 'Pay with Zippy';\n button.setAttribute('aria-label', 'Open Zippy Pay to complete this payment');\n }\n\n button.addEventListener('click', () => {\n if (button.disabled) {\n return;\n }\n if (action === 'choose') {\n this.callbacks.onChooseMethod('mobileApp');\n } else {\n this.callbacks.onOpenMobileApp?.();\n }\n });\n return button;\n }\n\n private renderMobileAppOpenedHint(): HTMLElement {\n const hint = document.createElement('p');\n hint.className = 'zippy-mobile-app-opened-hint';\n hint.textContent = 'Complete your payment in the Zippy app.';\n return hint;\n }\n\n private renderMobileAppHandoffFailed(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-mobile-app-handoff-failed';\n\n const message = document.createElement('p');\n message.className = 'zippy-mobile-app-handoff-message';\n message.textContent = \"We couldn't open the Zippy app on this device.\";\n\n const install = document.createElement('button');\n install.type = 'button';\n install.className = 'zippy-install-zippy-btn';\n install.textContent = 'Install Zippy';\n install.setAttribute('aria-label', 'Install Zippy Pay from your app store');\n install.addEventListener('click', () => {\n this.callbacks.onInstallZippy?.();\n });\n\n wrap.appendChild(message);\n wrap.appendChild(this.renderRetryMobileAppLink());\n wrap.appendChild(this.renderMobileAppFallbackOptions());\n wrap.appendChild(install);\n\n return wrap;\n }\n\n private renderMobileAppFallbackOptions(): HTMLElement | DocumentFragment {\n const { checkoutPolicy } = this.uiOptions;\n const fallback = resolveFallbackMethodAvailability(checkoutPolicy);\n\n if (!fallback.qr && !fallback.manual) {\n return document.createDocumentFragment();\n }\n\n const wrap = document.createElement('div');\n wrap.className = 'zippy-mobile-app-fallback';\n\n const label = document.createElement('p');\n label.className = 'zippy-mobile-app-fallback-label';\n label.textContent = 'Or pay another way';\n\n const options = document.createElement('div');\n options.className = 'zippy-choose-options zippy-choose-options--compact';\n\n if (fallback.qr) {\n options.appendChild(\n this.renderMethodCard({\n method: 'qr',\n title: 'QR code',\n description: 'Open Zippy and scan',\n icon: this.qrIconSvg(),\n }),\n );\n }\n\n if (fallback.manual) {\n options.appendChild(\n this.renderMethodCard({\n method: 'manual',\n title: 'Zippy account',\n description: 'ID, email, or phone',\n icon: this.idIconSvg(),\n }),\n );\n }\n\n wrap.appendChild(label);\n wrap.appendChild(options);\n return wrap;\n }\n\n private renderRetryMobileAppLink(): HTMLElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-mobile-app-retry';\n button.textContent = 'Try again';\n button.setAttribute('aria-label', 'Try opening the Zippy app again');\n button.addEventListener('click', () => {\n this.callbacks.onRetryMobileApp?.();\n });\n return button;\n }\n\n private renderQrAwaitingLoader(): HTMLElement {\n const slot = document.createElement('div');\n slot.className = 'zippy-qr-awaiting';\n slot.setAttribute('aria-live', 'polite');\n slot.setAttribute('aria-label', 'Waiting for payment confirmation');\n\n const spinner = document.createElement('span');\n spinner.className = 'zippy-qr-awaiting-spinner';\n spinner.setAttribute('aria-hidden', 'true');\n\n slot.appendChild(spinner);\n return slot;\n }\n\n private renderPayTimer(expiresAt: string): HTMLElement {\n const slot = document.createElement('div');\n slot.className = 'zippy-pay-timer-slot';\n\n const remainingMs = msUntil(expiresAt);\n const timer = document.createElement('div');\n timer.className = 'zippy-pay-timer';\n timer.setAttribute('role', 'timer');\n timer.setAttribute('aria-live', 'polite');\n timer.setAttribute(\n 'aria-label',\n `${formatCountdownAccessible(remainingMs)} remaining to complete payment`,\n );\n\n const label = document.createElement('span');\n label.className = 'zippy-pay-timer-label';\n label.textContent = 'Time remaining';\n\n const value = document.createElement('span');\n value.className = 'zippy-pay-timer-value';\n value.setAttribute('aria-hidden', 'true');\n value.textContent = formatCountdown(remainingMs);\n\n timer.appendChild(label);\n timer.appendChild(value);\n slot.appendChild(timer);\n return slot;\n }\n\n private renderManualEntry(\n query: string,\n errorMessage: string | null,\n loading: boolean,\n mobileAppManualFallback: boolean,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n\n if (mobileAppManualFallback && this.callbacks.onBackToMobileAppFallback) {\n wrap.appendChild(\n this.renderBackButton(loading, {\n label: 'Back',\n onClick: () => this.callbacks.onBackToMobileAppFallback?.(),\n }),\n );\n } else if (this.uiOptions.allowManualBack && this.callbacks.onBackToChooseMethod) {\n wrap.appendChild(this.renderBackButton(loading, { label: 'Back' }));\n }\n\n const form = document.createElement('form');\n form.className = 'zippy-id-form';\n form.addEventListener('submit', (event) => {\n event.preventDefault();\n if (!loading && input.value.trim()) {\n void this.callbacks.onVerify(input.value);\n }\n });\n\n const field = document.createElement('div');\n field.className = 'zippy-input-combo';\n\n const inputWrap = document.createElement('div');\n inputWrap.className = 'zippy-input-combo-input-wrap';\n\n const input = document.createElement('input');\n input.id = 'zippy-payer-query';\n input.className = 'zippy-input-combo-field';\n input.type = 'text';\n input.placeholder = 'Zippy ID, email, or +15551234567';\n input.autocomplete = 'off';\n input.spellcheck = false;\n input.inputMode = 'text';\n input.value = query;\n input.disabled = loading;\n input.setAttribute('aria-label', 'Zippy ID, email, or phone number');\n\n const clearBtn = document.createElement('button');\n clearBtn.type = 'button';\n clearBtn.className = 'zippy-input-combo-clear';\n clearBtn.setAttribute('aria-label', 'Clear input');\n clearBtn.innerHTML =\n '<svg class=\"zippy-input-combo-clear-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 7l10 10M17 7 7 17\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>';\n\n const divider = document.createElement('span');\n divider.className = 'zippy-input-combo-divider';\n divider.setAttribute('aria-hidden', 'true');\n\n const verifyBtn = document.createElement('button');\n verifyBtn.type = 'button';\n verifyBtn.className = 'zippy-input-combo-action';\n verifyBtn.textContent = 'Find';\n verifyBtn.setAttribute('aria-label', 'Find Zippy account');\n\n const syncActionState = (): void => {\n const trimmed = input.value.trim();\n const isVerifying = loading;\n const hasValue = input.value.length > 0 && !loading;\n inputWrap.classList.toggle('zippy-input-combo-input-wrap--has-value', hasValue);\n clearBtn.disabled = !hasValue;\n clearBtn.tabIndex = hasValue ? 0 : -1;\n clearBtn.setAttribute('aria-hidden', hasValue ? 'false' : 'true');\n verifyBtn.disabled = loading || trimmed.length === 0;\n verifyBtn.classList.toggle('zippy-input-combo-action--loading', isVerifying);\n\n const existingSpinner = verifyBtn.querySelector('.zippy-spinner-inline');\n if (isVerifying) {\n verifyBtn.textContent = '';\n if (!existingSpinner) {\n const spinner = document.createElement('span');\n spinner.className = 'zippy-spinner-inline';\n spinner.setAttribute('aria-hidden', 'true');\n verifyBtn.appendChild(spinner);\n }\n verifyBtn.setAttribute('aria-label', 'Finding account');\n } else {\n existingSpinner?.remove();\n verifyBtn.textContent = 'Find';\n verifyBtn.setAttribute('aria-label', 'Find Zippy account');\n }\n };\n\n verifyBtn.addEventListener('click', () => {\n void this.callbacks.onVerify(input.value);\n });\n\n clearBtn.addEventListener('click', () => {\n input.value = '';\n this.state.paymentId = '';\n this.callbacks.onPaymentIdChange?.('');\n input.focus();\n syncActionState();\n });\n\n input.addEventListener('input', () => {\n this.state.paymentId = input.value;\n this.callbacks.onPaymentIdChange?.(input.value);\n syncActionState();\n });\n\n syncActionState();\n\n if (errorMessage) {\n field.classList.add('zippy-input-combo--error');\n }\n\n field.appendChild(inputWrap);\n inputWrap.appendChild(input);\n inputWrap.appendChild(clearBtn);\n field.appendChild(divider);\n field.appendChild(verifyBtn);\n form.appendChild(field);\n\n if (errorMessage) {\n form.appendChild(this.renderFieldError(errorMessage));\n }\n\n form.appendChild(this.renderPayerQueryHint());\n\n wrap.appendChild(form);\n return wrap;\n }\n\n private renderPayerQueryHint(): HTMLElement {\n const hint = document.createElement('div');\n hint.className = 'zippy-query-hint';\n\n const lead = document.createElement('p');\n lead.className = 'zippy-query-hint-lead';\n lead.textContent = 'Find your account using any of:';\n\n const list = document.createElement('ul');\n list.className = 'zippy-query-hint-list';\n\n for (const item of [\n { label: 'Zippy ID', example: 'john.doe12' },\n { label: 'Email', example: 'you@example.com' },\n { label: 'Phone', example: '+15551234567', note: 'E.164 — include + and country code' },\n ]) {\n list.appendChild(this.renderPayerQueryHintItem(item));\n }\n\n hint.appendChild(lead);\n hint.appendChild(list);\n return hint;\n }\n\n private renderPayerQueryHintItem(item: {\n label: string;\n example: string;\n note?: string;\n }): HTMLLIElement {\n const row = document.createElement('li');\n row.className = 'zippy-query-hint-item';\n\n const label = document.createElement('span');\n label.className = 'zippy-query-hint-label';\n label.textContent = item.label;\n\n const exampleWrap = document.createElement('span');\n exampleWrap.className = 'zippy-query-hint-example-wrap';\n\n const example = document.createElement('code');\n example.className = 'zippy-query-hint-example';\n example.textContent = item.example;\n exampleWrap.appendChild(example);\n\n if (item.note) {\n const note = document.createElement('span');\n note.className = 'zippy-query-hint-note';\n note.textContent = item.note;\n exampleWrap.appendChild(note);\n }\n\n row.appendChild(label);\n row.appendChild(exampleWrap);\n return row;\n }\n\n private renderPayerPicker(matches: PayerPreview[], loading: boolean): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n\n if (this.callbacks.onBackToManualEntry) {\n wrap.appendChild(\n this.renderBackButton(loading, {\n label: 'Back',\n onClick: () => this.callbacks.onBackToManualEntry?.(),\n }),\n );\n }\n\n const lead = document.createElement('p');\n lead.className = 'zippy-picker-lead';\n lead.textContent = 'Multiple accounts match. Select the one paying for this checkout.';\n wrap.appendChild(lead);\n\n const list = document.createElement('div');\n list.className = 'zippy-picker-list';\n list.setAttribute('role', 'listbox');\n list.setAttribute('aria-label', 'Matching Zippy accounts');\n\n for (const payer of matches) {\n list.appendChild(this.renderPayerPickerOption(payer, loading));\n }\n\n wrap.appendChild(list);\n return wrap;\n }\n\n private renderPayerPickerOption(payer: PayerPreview, loading: boolean): HTMLElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-picker-option';\n button.disabled = loading;\n button.setAttribute('role', 'option');\n button.setAttribute('aria-label', `Pay as ${payer.displayName}`);\n\n button.appendChild(this.renderIdentityCard(payer));\n button.addEventListener('click', () => {\n this.callbacks.onSelectPayer?.(payer);\n });\n\n return button;\n }\n\n private renderManualConfirm(\n verifiedPayer: PayerPreview | null,\n errorMessage: string | null,\n loading: boolean,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n\n const proceeding = loading && Boolean(verifiedPayer);\n\n if (verifiedPayer) {\n wrap.appendChild(\n this.renderIdentityCard(verifiedPayer, {\n dismissible: true,\n dismissDisabled: proceeding,\n onDismiss: () => this.callbacks.onBackToManualEntry?.(),\n }),\n );\n }\n\n if (errorMessage) {\n wrap.appendChild(this.renderFieldError(errorMessage));\n }\n\n const payBtn = document.createElement('button');\n payBtn.type = 'button';\n payBtn.className = 'zippy-btn zippy-btn-primary zippy-btn-block';\n payBtn.textContent = proceeding ? 'Processing…' : 'Proceed';\n payBtn.disabled = loading || !verifiedPayer;\n payBtn.addEventListener('click', () => {\n if (verifiedPayer) {\n void this.callbacks.onPay(verifiedPayer.paymentId);\n }\n });\n\n wrap.appendChild(payBtn);\n return wrap;\n }\n\n private renderBackButton(\n disabled: boolean,\n options?: { label?: string; onClick?: () => void },\n ): HTMLElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-back-btn';\n button.disabled = disabled;\n button.setAttribute('aria-label', options?.label ?? 'Back to payment options');\n button.innerHTML = `<svg class=\"zippy-back-btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M14.5 6.5 9 12l5.5 5.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg><span>${options?.label ?? 'Back'}</span>`;\n button.addEventListener('click', () => {\n if (options?.onClick) {\n options.onClick();\n } else {\n this.callbacks.onBackToChooseMethod?.();\n }\n });\n return button;\n }\n\n private renderFieldError(message: string): HTMLElement {\n const error = document.createElement('p');\n error.className = 'zippy-field-error';\n error.setAttribute('role', 'alert');\n\n const icon = document.createElement('span');\n icon.className = 'zippy-field-error-icon';\n icon.setAttribute('aria-hidden', 'true');\n icon.textContent = '!';\n\n const copy = document.createElement('span');\n copy.textContent = message;\n\n error.appendChild(icon);\n error.appendChild(copy);\n return error;\n }\n\n private renderIdentityCard(\n payer: PaymentSessionPayer,\n options?: {\n dismissible?: boolean;\n dismissDisabled?: boolean;\n onDismiss?: () => void;\n },\n ): HTMLElement {\n const identity = document.createElement('div');\n identity.className = `zippy-identity-card${\n options?.dismissible ? ' zippy-identity-card--dismissible' : ''\n }`;\n\n const avatar = this.renderIdentityAvatar(payer);\n\n const copy = document.createElement('div');\n copy.className = 'zippy-identity-copy';\n\n const label = document.createElement('p');\n label.className = 'zippy-identity-label';\n label.textContent = 'Paying as';\n\n const name = document.createElement('p');\n name.className = 'zippy-identity-name';\n name.textContent = payer.displayName;\n\n const handle = document.createElement('p');\n handle.className = 'zippy-identity-handle';\n handle.textContent = payer.paymentId;\n\n copy.appendChild(label);\n copy.appendChild(name);\n copy.appendChild(handle);\n identity.appendChild(avatar);\n identity.appendChild(copy);\n\n if (options?.dismissible) {\n identity.appendChild(\n this.renderCardDismissButton(options.dismissDisabled ?? false, options.onDismiss),\n );\n }\n\n return identity;\n }\n\n private renderCardDismissButton(disabled: boolean, onDismiss?: () => void): HTMLButtonElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-identity-card-dismiss';\n button.disabled = disabled;\n button.setAttribute('aria-label', 'Change account');\n button.innerHTML =\n '<svg class=\"zippy-identity-card-dismiss-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 7l10 10M17 7 7 17\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>';\n button.addEventListener('click', () => {\n onDismiss?.();\n });\n return button;\n }\n\n private renderIdentityAvatar(payer: PaymentSessionPayer): HTMLElement {\n const avatar = document.createElement('div');\n avatar.className = 'zippy-identity-avatar';\n const initials = formatDisplayInitials(payer.displayName);\n const profileImage = payer.profileImage?.trim();\n\n if (profileImage) {\n avatar.classList.add('zippy-identity-avatar--photo');\n const img = document.createElement('img');\n img.className = 'zippy-identity-avatar-image';\n img.src = profileImage;\n img.alt = '';\n img.addEventListener('error', () => {\n avatar.classList.remove('zippy-identity-avatar--photo');\n img.remove();\n avatar.textContent = initials;\n });\n avatar.appendChild(img);\n } else {\n avatar.textContent = initials;\n }\n\n return avatar;\n }\n\n private renderAwaiting(\n session: PaymentSession | null,\n method: CheckoutMethod,\n verifiedPayer: PayerPreview | null,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow zippy-flow-awaiting';\n\n const status = document.createElement('div');\n status.className = 'zippy-awaiting-status';\n status.innerHTML = `<div class=\"zippy-awaiting-ring\" aria-hidden=\"true\"><span></span></div>`;\n wrap.appendChild(status);\n\n const payer = session?.payer ?? verifiedPayer ?? null;\n if (payer) {\n wrap.appendChild(this.renderIdentityCard(payer));\n }\n\n const message = document.createElement('p');\n message.className = 'zippy-awaiting-message';\n message.textContent =\n method === 'qr'\n ? 'Complete the payment in the Zippy app to finish checkout.'\n : method === 'mobileApp'\n ? 'Complete the payment in the Zippy app to finish checkout.'\n : 'Tap the notification in Zippy Pay to approve this payment.';\n wrap.appendChild(message);\n\n wrap.appendChild(this.renderFootnote('Do not close or refresh this page.'));\n return wrap;\n }\n\n private renderFlowHint(text: string): HTMLElement {\n const hint = document.createElement('p');\n hint.className = 'zippy-flow-hint';\n hint.textContent = text;\n return hint;\n }\n\n private renderPayProgress(): HTMLElement {\n const bar = document.createElement('div');\n bar.className = 'zippy-pay-progress';\n bar.setAttribute('role', 'progressbar');\n bar.setAttribute('aria-label', 'Payment time remaining');\n bar.setAttribute('aria-valuemin', '0');\n bar.setAttribute('aria-valuemax', '100');\n\n const fill = document.createElement('div');\n fill.className = 'zippy-pay-progress-fill';\n bar.appendChild(fill);\n this.mountPayProgress(fill, bar);\n return bar;\n }\n\n private mountPayProgress(fill: HTMLElement, bar: HTMLElement): void {\n const tick = (): void => {\n const session = this.state.session;\n if (!session) {\n return;\n }\n\n const ratio = getPayWindowRemainingRatio(session);\n if (ratio === null || ratio <= 0) {\n bar.style.display = 'none';\n bar.setAttribute('aria-valuenow', '0');\n this.clearExpiryTimer();\n return;\n }\n\n bar.style.display = '';\n const pct = Math.round(ratio * 100);\n fill.style.transform = `scaleX(${ratio})`;\n bar.setAttribute('aria-valuenow', String(pct));\n\n const countdownEl = this.shadow.querySelector('.zippy-pay-timer-value');\n const timerEl = this.shadow.querySelector('.zippy-pay-timer');\n if (countdownEl instanceof HTMLElement && session.paymentExpiryAt) {\n const remainingMs = msUntil(session.paymentExpiryAt);\n countdownEl.textContent = formatCountdown(remainingMs);\n if (timerEl instanceof HTMLElement) {\n timerEl.setAttribute(\n 'aria-label',\n `${formatCountdownAccessible(remainingMs)} remaining to complete payment`,\n );\n }\n }\n };\n\n tick();\n this.expiryTimer = setInterval(tick, 1000);\n }\n\n private clearExpiryTimer(): void {\n if (this.expiryTimer !== null) {\n clearInterval(this.expiryTimer);\n this.expiryTimer = null;\n }\n }\n\n private mountTerminalExitTimer(): void {\n this.clearTerminalExitTimer();\n let remaining = TERMINAL_EXIT_COUNTDOWN_SEC;\n\n const updateDisplay = (): void => {\n const countdownEl = this.shadow.querySelector('.zippy-status-exit-countdown');\n if (countdownEl instanceof HTMLElement) {\n countdownEl.textContent = String(remaining);\n }\n };\n\n updateDisplay();\n this.terminalExitTimer = setInterval(() => {\n remaining -= 1;\n if (remaining <= 0) {\n this.clearTerminalExitTimer();\n this.callbacks.onTerminalExit?.();\n return;\n }\n updateDisplay();\n }, 1000);\n }\n\n private clearTerminalExitTimer(): void {\n if (this.terminalExitTimer !== null) {\n clearInterval(this.terminalExitTimer);\n this.terminalExitTimer = null;\n }\n }\n\n private renderFootnote(text: string): HTMLElement {\n const footnote = document.createElement('p');\n footnote.className = 'zippy-footnote';\n footnote.textContent = text;\n return footnote;\n }\n\n private renderOutcomeScreen(\n phase: CheckoutPhase,\n session: PaymentSession | null,\n exitMode: TerminalExitMode | null | undefined,\n embedMode: 'inline' | 'modal',\n ): HTMLElement {\n const copy = outcomeTerminalCopy(phase);\n return this.renderOutcomeStatus(\n copy.kind,\n copy.title,\n copy.detail,\n copy.kind,\n exitMode,\n embedMode,\n session?.transactionId ?? null,\n );\n }\n\n private renderOutcomeStatus(\n kind: 'success' | 'failure',\n titleText: string,\n detailText: string,\n outcome: 'success' | 'failure',\n exitMode: TerminalExitMode | null | undefined,\n embedMode: 'inline' | 'modal',\n transactionId: string | null,\n ): HTMLElement {\n const wrap = this.renderTerminal(kind, titleText, detailText);\n\n if (transactionId) {\n wrap.appendChild(this.renderTransactionReference(transactionId));\n }\n\n const resolvedExitMode = exitMode ?? 'close';\n const exit = document.createElement('p');\n exit.className = 'zippy-status-exit';\n\n const lead = document.createElement('span');\n lead.className = 'zippy-status-exit-lead';\n lead.textContent = terminalExitLeadText(resolvedExitMode, embedMode, outcome);\n\n const countdown = document.createElement('span');\n countdown.className = 'zippy-status-exit-countdown';\n countdown.textContent = String(TERMINAL_EXIT_COUNTDOWN_SEC);\n\n const suffix = document.createElement('span');\n suffix.className = 'zippy-status-exit-suffix';\n suffix.textContent = ' seconds…';\n\n exit.appendChild(lead);\n exit.appendChild(document.createTextNode(' '));\n exit.appendChild(countdown);\n exit.appendChild(suffix);\n wrap.appendChild(exit);\n\n return wrap;\n }\n\n private renderTransactionReference(transactionId: string): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-transaction-ref';\n\n const label = document.createElement('p');\n label.className = 'zippy-transaction-ref-label';\n label.textContent = 'Transaction ID';\n\n const value = document.createElement('p');\n value.className = 'zippy-transaction-ref-value';\n value.textContent = transactionId;\n\n wrap.appendChild(label);\n wrap.appendChild(value);\n return wrap;\n }\n\n private renderTerminal(\n kind: 'success' | 'failure' | 'error',\n titleText: string,\n detailText: string,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-status';\n\n const icon = document.createElement('div');\n icon.className = `zippy-status-icon ${kind}`;\n icon.innerHTML =\n kind === 'success'\n ? `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M7 14.5l4.5 4.5L21 9.5\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n : kind === 'failure'\n ? `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M10 10l8 8M18 10l-8 8\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\"/></svg>`\n : `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M10 10l8 8M18 10l-8 8\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\"/></svg>`;\n\n const title = document.createElement('p');\n title.className = 'zippy-status-title';\n title.textContent = titleText;\n\n const detail = document.createElement('p');\n detail.className = 'zippy-status-detail';\n detail.textContent = detailText;\n\n wrap.appendChild(icon);\n wrap.appendChild(title);\n wrap.appendChild(detail);\n return wrap;\n }\n\n private qrIconSvg(): string {\n return `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"14\" y=\"14\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"18\" y=\"14\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"14\" y=\"18\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"18\" y=\"18\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n </svg>`;\n }\n\n private idIconSvg(): string {\n return `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"9\" r=\"3.5\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <path d=\"M5 20c0-3.87 3.13-7 7-7s7 3.13 7 7\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>\n </svg>`;\n }\n}\n","export const DEFAULT_APP_HANDOFF_TIMEOUT_MS = 8000;\n\nexport type AppHandoffStatus = 'idle' | 'opening' | 'opened' | 'failed';\n\nexport type AppHandoffWatchOptions = {\n timeoutMs?: number;\n onOpened: () => void;\n onFailed: () => void;\n};\n\n/** Detects likely app open via visibility; otherwise fails after timeout. */\nexport function watchAppHandoff(options: AppHandoffWatchOptions): () => void {\n const timeoutMs = options.timeoutMs ?? DEFAULT_APP_HANDOFF_TIMEOUT_MS;\n let settled = false;\n\n const cleanupFns: Array<() => void> = [];\n\n const cleanup = (): void => {\n for (const fn of cleanupFns) {\n fn();\n }\n cleanupFns.length = 0;\n };\n\n const settle = (result: 'opened' | 'failed'): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n if (result === 'opened') {\n options.onOpened();\n } else {\n options.onFailed();\n }\n };\n\n const onVisibilityChange = (): void => {\n if (document.hidden) {\n settle('opened');\n }\n };\n\n document.addEventListener('visibilitychange', onVisibilityChange);\n cleanupFns.push(() => {\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n\n const timer = setTimeout(() => {\n if (document.hidden) {\n settle('opened');\n } else {\n settle('failed');\n }\n }, timeoutMs);\n cleanupFns.push(() => {\n clearTimeout(timer);\n });\n\n return cleanup;\n}\n","import { attachPayerWithRetry, PaymentSessionClient } from './api/client';\nimport { createEmbedHost, hideModal, showModal, type EmbedHost } from './embed/host';\nimport { isTerminalStatus, SessionPoller } from './session/poller';\nimport { msUntil } from './session/timing';\nimport { applyThemeToHost } from './theme';\nimport { CheckoutUi } from './ui/checkout-ui';\nimport type {\n ApiCheckoutMethod,\n CheckoutMethod,\n CheckoutPhase,\n CheckoutSurface,\n PayerPreview,\n PaymentSession,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyPayError,\n} from './types';\nimport { ZippyPayError as ZippyPayErrorClass } from './types';\nimport { parseZippyEnvironment, resolveApiBaseUrl } from './config/environments';\nimport { openAppStore, openPaymentDeepLink } from './qr/deep-link';\nimport {\n buildBindPolicyRequest,\n isCheckoutPolicyBound,\n isCheckoutStartAllowed,\n resolveAutoStartMethod,\n resolveCheckoutUiOptions,\n resolveCheckoutUiOptionsFromBound,\n resolveCheckoutUiOptionsFromSession,\n resolveEntryRouting,\n type ResolvedCheckoutUiOptions,\n} from './config/checkout-policy';\nimport {\n detectCheckoutSurface,\n subscribeCheckoutSurface,\n} from './config/device';\nimport {\n type AppHandoffStatus,\n watchAppHandoff,\n} from './app/handoff';\nimport {\n isUuidV4,\n isValidPayerQuery,\n normalizePayerQuery,\n payerQueryValidationMessage,\n appendRedirectQueryParams,\n type TerminalExitMode,\n} from './utils';\n\nexport class CheckoutController implements ZippyPayCheckoutInstance {\n private readonly config: ZippyPayConfig;\n private readonly client: PaymentSessionClient;\n private readonly embed: EmbedHost;\n private readonly poller: SessionPoller;\n private ui: CheckoutUi | null = null;\n private session: PaymentSession | null = null;\n private paymentId = '';\n private verifiedPayer: PayerPreview | null = null;\n private verifyMatches: PayerPreview[] | null = null;\n private lastVerifiedQuery: string | null = null;\n private committedMethod: CheckoutMethod | null = null;\n private phase: CheckoutPhase = 'loading';\n private errorMessage: string | null = null;\n private loading = true;\n private destroyed = false;\n private modalOpen = false;\n private exitMode: TerminalExitMode | null = null;\n private terminalFailureReason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined' | null = null;\n private uiOptions: ResolvedCheckoutUiOptions;\n private appHandoffStatus: AppHandoffStatus = 'idle';\n private clearAppHandoffWatch: (() => void) | null = null;\n private methodSwitchInProgress = false;\n private entryRoutingDone = false;\n private payWindowExpiryTimer: ReturnType<typeof setTimeout> | null = null;\n private unsubscribeSurface: (() => void) | null = null;\n\n private static readonly PAY_WINDOW_PHASES: readonly CheckoutPhase[] = [\n 'qr-active',\n 'mobile-app-active',\n 'awaiting',\n 'manual-confirm',\n ];\n\n constructor(config: ZippyPayConfig) {\n this.config = {\n mode: 'inline',\n closeOnBackdropClick: false,\n closeOnEscape: false,\n ...config,\n };\n\n if (!isUuidV4(this.config.sessionId)) {\n throw new Error('Zippy Pay: sessionId must be a UUID v4.');\n }\n\n parseZippyEnvironment(this.config.environment);\n\n this.uiOptions = resolveCheckoutUiOptions(\n this.config.checkoutPolicy,\n this.config.mobileApp,\n detectCheckoutSurface(),\n );\n\n this.client = new PaymentSessionClient({\n baseUrl: resolveApiBaseUrl(this.config.environment),\n sessionId: this.config.sessionId,\n clientToken: this.config.clientToken,\n });\n\n this.embed = createEmbedHost(this.config);\n applyThemeToHost(this.embed.host, this.config.theme);\n\n this.poller = new SessionPoller(() => this.client.getSession(), {\n onUpdate: (session) => this.handleSessionUpdate(session),\n onError: (error) => this.handlePollError(error),\n });\n\n this.ui = new CheckoutUi(\n this.embed.host,\n this.snapshotUiState(),\n {\n onChooseMethod: (method) => {\n void this.chooseMethod(method);\n },\n onVerify: (query) => this.verify(query),\n onPay: (paymentId) => this.attach(paymentId),\n onSelectPayer: (payer) => this.selectPayer(payer),\n onBackToChooseMethod: () => this.backToChooseMethod(),\n onBackToManualEntry: () => this.backToManualEntry(),\n onBackToMobileAppFallback: () => this.backToMobileAppFallback(),\n onOpenMobileApp: () => this.beginMobileAppHandoff(),\n onInstallZippy: () => this.installZippy(),\n onRetryMobileApp: () => this.beginMobileAppHandoff(),\n onPaymentIdChange: (query) => {\n const trimmed = normalizePayerQuery(query);\n let shouldSync = false;\n\n if (\n (this.verifiedPayer || this.verifyMatches) &&\n this.lastVerifiedQuery !== null &&\n trimmed !== this.lastVerifiedQuery\n ) {\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n if (\n this.phase === 'manual-confirm' ||\n this.phase === 'manual-picker'\n ) {\n this.phase = 'manual-entry';\n }\n shouldSync = true;\n }\n\n if (this.errorMessage) {\n this.errorMessage = null;\n shouldSync = true;\n }\n\n this.paymentId = query;\n\n if (shouldSync) {\n this.syncUi();\n }\n },\n onTerminalExit: () => this.executeTerminalExit(),\n },\n this.uiOptions,\n );\n\n void this.bootstrap();\n\n this.unsubscribeSurface = subscribeCheckoutSurface((surface) => {\n this.handleSurfaceChange(surface);\n });\n\n if (this.config.mode === 'inline') {\n this.modalOpen = true;\n }\n }\n\n open(): void {\n if (this.config.mode !== 'modal' || this.modalOpen) {\n return;\n }\n this.modalOpen = true;\n showModal(this.embed, this.config, () => this.close());\n }\n\n close(): void {\n if (this.config.mode !== 'modal') {\n return;\n }\n this.modalOpen = false;\n hideModal(this.embed);\n this.config.onClose?.();\n }\n\n destroy(): void {\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.unsubscribeSurface?.();\n this.unsubscribeSurface = null;\n this.poller.stop();\n this.clearAppHandoffWatch?.();\n this.clearAppHandoffWatch = null;\n this.clearPayWindowExpiryWatch();\n this.ui?.destroy();\n this.embed.destroy();\n this.ui = null;\n }\n\n private snapshotUiState() {\n return {\n phase: this.phase,\n session: this.session,\n sessionId: this.config.sessionId,\n committedMethod: this.committedMethod,\n paymentId: this.paymentId,\n verifiedPayer: this.verifiedPayer,\n verifyMatches: this.verifyMatches,\n errorMessage: this.errorMessage,\n loading: this.loading,\n mode: this.config.mode ?? 'inline',\n exitMode: this.exitMode,\n appHandoffStatus: this.appHandoffStatus,\n mobileAppManualFallback: this.isMobileAppManualFallbackActive(),\n };\n }\n\n private syncUi(partial?: {\n errorMessage?: string | null;\n loading?: boolean;\n exitMode?: TerminalExitMode | null;\n }): void {\n if (this.destroyed) {\n return;\n }\n\n if (partial && 'errorMessage' in partial) {\n this.errorMessage = partial.errorMessage ?? null;\n }\n if (partial && 'loading' in partial) {\n this.loading = partial.loading ?? false;\n }\n if (partial && 'exitMode' in partial) {\n this.exitMode = partial.exitMode ?? null;\n }\n\n this.ui?.update(this.snapshotUiState());\n }\n\n private async bootstrap(): Promise<void> {\n try {\n const session = await this.bindPolicy();\n if (this.destroyed) {\n return;\n }\n\n this.applyBoundUiOptions(session);\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n\n this.config.onReady?.(session);\n\n if (!isTerminalStatus(session.status)) {\n await this.routeIdleEntry();\n if (!this.destroyed) {\n this.syncUi({ loading: false });\n this.poller.start(session);\n }\n } else if (!this.destroyed) {\n this.syncUi({ loading: false });\n }\n } catch (error) {\n this.handleBootstrapError(error);\n }\n }\n\n private async bindPolicy(): Promise<PaymentSession> {\n const bindRequest = buildBindPolicyRequest({\n checkoutPolicy: this.config.checkoutPolicy,\n mobileApp: this.config.mobileApp,\n });\n\n try {\n return await this.client.bindCheckoutPolicy(bindRequest);\n } catch (error) {\n if (\n error instanceof ZippyPayErrorClass &&\n error.code === 'payment-session.checkout-policy-conflict'\n ) {\n const session = await this.client.getSession();\n if (isCheckoutPolicyBound(session)) {\n return session;\n }\n }\n throw error;\n }\n }\n\n private applyBoundUiOptions(session: PaymentSession, surface = detectCheckoutSurface()): void {\n this.uiOptions = resolveCheckoutUiOptionsFromSession(session, surface);\n this.ui?.updateUiOptions(this.uiOptions);\n }\n\n private handleSurfaceChange(surface: CheckoutSurface): void {\n if (this.destroyed || this.committedMethod) {\n return;\n }\n\n const session = this.session;\n if (!session || !isCheckoutPolicyBound(session)) {\n return;\n }\n\n if (this.uiOptions.surface === surface) {\n return;\n }\n\n this.uiOptions = resolveCheckoutUiOptionsFromBound(\n session.checkoutPolicy,\n session.mobileAppPolicy ?? 'OFF',\n surface,\n );\n this.ui?.updateUiOptions(this.uiOptions);\n\n if (this.phase === 'choose-method' || this.phase === 'loading') {\n this.syncUi();\n }\n }\n\n private applySession(\n session: PaymentSession,\n options?: { fromMethodSwitch?: boolean },\n ): void {\n this.session = session;\n this.config.onSessionUpdate?.(session);\n\n if (session.transactionStatus === 'DECLINED' && session.status !== 'COMPLETED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'declined', session });\n return;\n }\n\n if (session.status === 'COMPLETED') {\n this.methodSwitchInProgress = false;\n this.handleSuccess(session);\n return;\n }\n\n if (session.status === 'EXPIRED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'expired', session });\n return;\n }\n\n if (session.status === 'FAILED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'failed', session });\n return;\n }\n\n if (session.status === 'CANCELLED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'cancelled', session });\n return;\n }\n\n if (this.isMobileAppManualFallbackActive() && !options?.fromMethodSwitch) {\n this.schedulePayWindowExpiryWatch();\n this.syncUi();\n return;\n }\n\n this.committedMethod = uiMethodFromApi(session.checkoutMethod) ?? this.committedMethod;\n\n this.phase = this.resolveActivePhase(session);\n this.schedulePayWindowExpiryWatch();\n this.syncUi();\n }\n\n private schedulePayWindowExpiryWatch(): void {\n this.clearPayWindowExpiryWatch();\n\n const session = this.session;\n if (!session?.paymentExpiryAt || !CheckoutController.PAY_WINDOW_PHASES.includes(this.phase)) {\n return;\n }\n\n const remainingMs = msUntil(session.paymentExpiryAt);\n if (remainingMs <= 0) {\n void this.handlePayWindowExpired();\n return;\n }\n\n this.payWindowExpiryTimer = setTimeout(() => {\n void this.handlePayWindowExpired();\n }, remainingMs + 250);\n }\n\n private clearPayWindowExpiryWatch(): void {\n if (this.payWindowExpiryTimer !== null) {\n clearTimeout(this.payWindowExpiryTimer);\n this.payWindowExpiryTimer = null;\n }\n }\n\n private async handlePayWindowExpired(): Promise<void> {\n if (this.destroyed || !this.session?.paymentExpiryAt) {\n return;\n }\n\n if (msUntil(this.session.paymentExpiryAt) > 0) {\n this.schedulePayWindowExpiryWatch();\n return;\n }\n\n if (!CheckoutController.PAY_WINDOW_PHASES.includes(this.phase)) {\n return;\n }\n\n try {\n const session = await this.client.getSession();\n if (this.destroyed) {\n return;\n }\n this.applySession(session);\n } catch {\n if (!this.destroyed) {\n this.handleFailure({ reason: 'expired', session: this.session });\n }\n }\n }\n\n private resolveActivePhase(session: PaymentSession): CheckoutPhase {\n if (session.status === 'AWAITING_PAYMENT') {\n if (\n session.checkoutMethod === 'MOBILE_APP' ||\n this.committedMethod === 'mobileApp'\n ) {\n return 'mobile-app-active';\n }\n if (session.checkoutMethod === 'QR' || this.committedMethod === 'qr') {\n return 'qr-active';\n }\n return 'awaiting';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'MOBILE_APP') {\n return 'mobile-app-active';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'QR') {\n return 'qr-active';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'MANUAL') {\n if (this.phase === 'manual-confirm' && this.verifiedPayer) {\n return 'manual-confirm';\n }\n return 'manual-entry';\n }\n\n if (session.phase === 'IDLE') {\n if (this.phase === 'manual-confirm' && this.verifiedPayer) {\n return 'manual-confirm';\n }\n if (this.phase === 'manual-picker' && this.verifyMatches) {\n return 'manual-picker';\n }\n if (this.phase === 'manual-entry') {\n return 'manual-entry';\n }\n if (this.phase === 'choose-method') {\n return 'choose-method';\n }\n if (this.phase === 'qr-active' && this.committedMethod === 'qr') {\n return 'qr-active';\n }\n if (this.phase === 'mobile-app-active' && this.committedMethod === 'mobileApp') {\n return 'mobile-app-active';\n }\n if (!session.checkoutMethod) {\n const routing = resolveEntryRouting(\n this.uiOptions.checkoutPolicy,\n this.uiOptions.mobileAppPolicy,\n this.uiOptions.surface,\n );\n if (routing !== 'chooser') {\n return 'loading';\n }\n }\n return 'choose-method';\n }\n\n return this.phase;\n }\n\n private handleSessionUpdate(session: PaymentSession): void {\n if (this.destroyed) {\n return;\n }\n\n this.applySession(session);\n }\n\n private handleFailure(params: {\n reason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined';\n session?: PaymentSession | null;\n error?: ZippyPayError;\n }): void {\n if (this.destroyed) {\n return;\n }\n\n this.poller.stop();\n this.clearPayWindowExpiryWatch();\n this.loading = false;\n\n const session = params.session ?? this.session;\n\n if (params.reason === 'expired') {\n if (session) {\n this.config.onExpired?.(session);\n }\n } else {\n const error =\n params.error ??\n (params.reason === 'failed' ||\n params.reason === 'cancelled' ||\n params.reason === 'declined'\n ? terminalSessionError(params.reason)\n : undefined);\n if (error) {\n this.config.onError?.(error);\n }\n }\n\n this.terminalFailureReason = params.reason;\n this.phase = this.failurePhaseFromReason(params.reason);\n this.exitMode = this.resolveExitMode('failure', session);\n this.syncUi();\n }\n\n private handleSuccess(session: PaymentSession): void {\n if (this.destroyed) {\n return;\n }\n\n this.poller.stop();\n this.clearPayWindowExpiryWatch();\n this.loading = false;\n this.config.onComplete?.(session);\n\n this.terminalFailureReason = null;\n this.phase = 'success';\n this.exitMode = this.resolveExitMode('success', session);\n this.syncUi();\n }\n\n private executeTerminalExit(): void {\n if (this.destroyed) {\n return;\n }\n\n const session = this.session;\n\n if (this.phase === 'success' && session) {\n if (this.config.redirectOnComplete && session.successUrl) {\n window.location.assign(\n appendRedirectQueryParams(session.successUrl, {\n sessionId: session.sessionId,\n status: session.status,\n transactionId: session.transactionId,\n }),\n );\n return;\n }\n } else if (\n this.phase === 'expired' ||\n this.phase === 'failed' ||\n this.phase === 'cancelled' ||\n this.phase === 'declined' ||\n this.phase === 'invalid-session'\n ) {\n const failureUrl = session?.failureUrl ?? null;\n if (this.config.redirectOnFailure && failureUrl) {\n const redirectUrl =\n this.terminalFailureReason === 'expired'\n ? appendRedirectQueryParams(failureUrl, {\n sessionId: session?.sessionId ?? this.config.sessionId,\n status: session?.status ?? 'EXPIRED',\n })\n : failureUrl;\n window.location.assign(redirectUrl);\n return;\n }\n }\n\n this.teardownView();\n }\n\n private resolveExitMode(\n kind: 'success' | 'failure',\n session: PaymentSession | null | undefined,\n ): TerminalExitMode {\n if (kind === 'success') {\n return this.config.redirectOnComplete && session?.successUrl ? 'redirect' : 'close';\n }\n return this.config.redirectOnFailure && session?.failureUrl ? 'redirect' : 'close';\n }\n\n private failurePhaseFromReason(\n reason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined',\n ): CheckoutPhase {\n switch (reason) {\n case 'expired':\n return 'expired';\n case 'failed':\n return 'failed';\n case 'cancelled':\n return 'cancelled';\n case 'declined':\n return 'declined';\n case 'invalid-session':\n return 'invalid-session';\n }\n }\n\n private teardownView(): void {\n if (this.config.mode === 'modal' && this.modalOpen) {\n this.close();\n }\n this.destroy();\n }\n\n private handleBootstrapError(error: unknown): void {\n if (error instanceof ZippyPayErrorClass && error.status === 401) {\n this.handleFailure({\n reason: 'invalid-session',\n error,\n session: this.session,\n });\n return;\n }\n this.handleError(error);\n }\n\n private handlePollError(error: unknown): void {\n const normalized = normalizeError(error);\n if (normalized.status === 401) {\n this.poller.stop();\n this.handleFailure({\n reason: 'invalid-session',\n error: normalized,\n session: this.session,\n });\n return;\n }\n if (normalized.code === 'payment-session.not-attachable') {\n this.poller.stop();\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n }\n }\n\n private handleError(error: unknown): void {\n const normalized = normalizeError(error);\n if (normalized.status === 401) {\n this.handleFailure({\n reason: 'invalid-session',\n error: normalized,\n session: this.session,\n });\n return;\n }\n if (normalized.code === 'payment-session.not-attachable') {\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n }\n if (normalized.code === 'payment-session.checkout-policy-not-bound') {\n if (this.phase === 'loading' || this.phase === 'choose-method') {\n this.phase = 'error';\n }\n this.syncUi({\n errorMessage:\n normalized.detail || 'Checkout is not ready yet. Please refresh and try again.',\n loading: false,\n });\n this.config.onError?.(normalized);\n this.poller.stop();\n return;\n }\n if (this.phase === 'loading' || this.phase === 'choose-method') {\n this.phase = 'error';\n }\n this.syncUi({ errorMessage: normalized.detail, loading: false });\n this.config.onError?.(normalized);\n this.poller.stop();\n }\n\n private async routeIdleEntry(): Promise<void> {\n if (this.destroyed || this.entryRoutingDone) {\n return;\n }\n\n const session = this.session;\n if (!session || isTerminalStatus(session.status)) {\n return;\n }\n\n if (session.checkoutMethod) {\n this.entryRoutingDone = true;\n return;\n }\n\n if (session.phase !== 'IDLE') {\n return;\n }\n\n const surface = detectCheckoutSurface();\n const { checkoutPolicy, mobileAppPolicy } = this.uiOptions;\n const autoMethod = resolveAutoStartMethod(checkoutPolicy, mobileAppPolicy, surface);\n\n if (autoMethod === 'MOBILE_APP') {\n await this.startMobileAppFlow(false);\n } else if (autoMethod === 'QR') {\n await this.chooseMethod('qr');\n } else {\n const routing = resolveEntryRouting(checkoutPolicy, mobileAppPolicy, surface);\n if (routing === 'auto-manual') {\n this.phase = 'manual-entry';\n this.syncUi({ loading: false });\n } else {\n this.phase = 'choose-method';\n this.syncUi({ loading: false });\n }\n }\n\n this.entryRoutingDone = true;\n }\n\n private openMobileApp(): void {\n openPaymentDeepLink(this.config.sessionId);\n }\n\n private beginMobileAppHandoff(): void {\n if (this.destroyed) {\n return;\n }\n\n this.clearAppHandoffWatch?.();\n this.clearAppHandoffWatch = null;\n this.appHandoffStatus = 'opening';\n this.syncUi();\n\n this.openMobileApp();\n\n this.clearAppHandoffWatch = watchAppHandoff({\n onOpened: () => {\n if (this.destroyed) {\n return;\n }\n this.appHandoffStatus = 'opened';\n this.syncUi();\n },\n onFailed: () => {\n if (this.destroyed) {\n return;\n }\n this.appHandoffStatus = 'failed';\n this.syncUi();\n },\n });\n }\n\n private installZippy(): void {\n openAppStore();\n }\n\n private async startMobileAppFlow(attemptOpen: boolean): Promise<void> {\n if (this.session?.checkoutMethod === 'MOBILE_APP') {\n this.committedMethod = 'mobileApp';\n this.phase = 'mobile-app-active';\n if (attemptOpen) {\n this.beginMobileAppHandoff();\n }\n this.syncUi({ loading: false });\n return;\n }\n\n if (this.committedMethod && this.committedMethod !== 'mobileApp') {\n return;\n }\n\n const surface = detectCheckoutSurface();\n if (!this.canStartAppClaim('MOBILE_APP', surface)) {\n return;\n }\n\n if (attemptOpen) {\n this.committedMethod = 'mobileApp';\n this.phase = 'mobile-app-active';\n this.beginMobileAppHandoff();\n } else {\n this.syncUi({ errorMessage: null, loading: true });\n }\n\n try {\n const session = await this.client.startMobileAppCheckout(surface);\n this.committedMethod = 'mobileApp';\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n\n this.phase = 'mobile-app-active';\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'choose-method');\n }\n }\n\n private canStartAppClaim(\n method: Extract<ApiCheckoutMethod, 'QR' | 'MOBILE_APP'>,\n surface: CheckoutSurface,\n ): boolean {\n if (!this.session || !isCheckoutPolicyBound(this.session)) {\n this.syncUi({\n errorMessage: 'Checkout is not ready yet. Please refresh and try again.',\n loading: false,\n });\n return false;\n }\n\n const checkoutPolicy = this.session.checkoutPolicy;\n const mobileAppPolicy = this.session.mobileAppPolicy ?? 'OFF';\n\n if (!isCheckoutStartAllowed(checkoutPolicy, mobileAppPolicy, surface, method)) {\n this.syncUi({\n errorMessage: 'This payment option is not available on your device.',\n loading: false,\n });\n return false;\n }\n\n return true;\n }\n\n private async chooseMethod(method: CheckoutMethod): Promise<void> {\n if (this.methodSwitchInProgress) {\n return;\n }\n\n if (\n this.committedMethod &&\n !(\n this.appHandoffStatus === 'failed' &&\n this.committedMethod === 'mobileApp' &&\n method !== 'mobileApp'\n )\n ) {\n return;\n }\n\n if (\n this.appHandoffStatus === 'failed' &&\n this.committedMethod === 'mobileApp' &&\n (method === 'qr' || method === 'manual')\n ) {\n await this.chooseFallbackMethod(method);\n return;\n }\n\n if (method === 'mobileApp') {\n await this.startMobileAppFlow(true);\n return;\n }\n\n this.verifiedPayer = null;\n this.syncUi({ errorMessage: null, loading: method === 'qr' });\n\n try {\n if (method === 'qr') {\n const surface = detectCheckoutSurface();\n if (!this.canStartAppClaim('QR', surface)) {\n return;\n }\n\n const session = await this.client.startQrCheckout(surface);\n this.committedMethod = 'qr';\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n this.syncUi({ loading: false });\n } else {\n this.phase = 'manual-entry';\n this.syncUi({ loading: false });\n }\n } catch (error) {\n this.handleFlowError(error, 'choose-method');\n }\n }\n\n private async chooseFallbackMethod(method: 'qr' | 'manual'): Promise<void> {\n if (\n this.appHandoffStatus !== 'failed' ||\n this.committedMethod !== 'mobileApp' ||\n this.methodSwitchInProgress\n ) {\n return;\n }\n\n this.clearAppHandoffWatch?.();\n this.clearAppHandoffWatch = null;\n\n if (method === 'manual') {\n // MOBILE_APP → MANUAL: attach auto-switches on the backend; no checkout/start.\n this.methodSwitchInProgress = true;\n this.appHandoffStatus = 'idle';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.paymentId = '';\n this.phase = 'manual-entry';\n this.syncUi({ errorMessage: null, loading: false });\n return;\n }\n\n this.methodSwitchInProgress = true;\n this.verifiedPayer = null;\n this.syncUi({ errorMessage: null, loading: true });\n\n try {\n const surface = detectCheckoutSurface();\n const session = await this.client.startQrCheckout(surface);\n if (this.destroyed) {\n return;\n }\n\n this.methodSwitchInProgress = false;\n this.appHandoffStatus = 'idle';\n this.loading = false;\n this.applySession(session, { fromMethodSwitch: true });\n } catch (error) {\n this.methodSwitchInProgress = false;\n this.handleFlowError(error, 'mobile-app-active');\n }\n }\n\n private backToChooseMethod(): void {\n if (!this.uiOptions.allowManualBack) {\n return;\n }\n\n if (this.committedMethod || (this.loading && this.verifiedPayer)) {\n return;\n }\n\n this.phase = 'choose-method';\n this.paymentId = '';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.errorMessage = null;\n this.loading = false;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private backToManualEntry(): void {\n if (this.loading && this.verifiedPayer) {\n return;\n }\n\n this.phase = 'manual-entry';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.errorMessage = null;\n this.loading = false;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private backToMobileAppFallback(): void {\n if (this.loading && this.verifiedPayer) {\n return;\n }\n\n if (!this.isMobileAppManualFallbackActive()) {\n return;\n }\n\n this.methodSwitchInProgress = false;\n this.appHandoffStatus = 'failed';\n this.phase = 'mobile-app-active';\n this.paymentId = '';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.errorMessage = null;\n this.loading = false;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private isMobileAppManualFallbackActive(): boolean {\n if (this.committedMethod !== 'mobileApp') {\n return false;\n }\n\n if (this.methodSwitchInProgress) {\n return true;\n }\n\n return (\n this.session?.checkoutMethod === 'MOBILE_APP' &&\n (this.phase === 'manual-entry' ||\n this.phase === 'manual-picker' ||\n this.phase === 'manual-confirm')\n );\n }\n\n private selectPayer(payer: PayerPreview): void {\n if (this.loading || this.phase !== 'manual-picker') {\n return;\n }\n\n this.verifiedPayer = payer;\n this.phase = 'manual-confirm';\n this.errorMessage = null;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private async verify(query: string): Promise<void> {\n this.paymentId = query;\n if (!isValidPayerQuery(query)) {\n this.syncUi({ errorMessage: payerQueryValidationMessage(), loading: false });\n return;\n }\n\n const normalizedQuery = normalizePayerQuery(query);\n this.syncUi({ errorMessage: null, loading: true });\n try {\n const { items } = await this.client.verifyPayer(query);\n if (this.phase !== 'manual-entry') {\n return;\n }\n\n this.lastVerifiedQuery = normalizedQuery;\n this.verifyMatches = null;\n\n if (items.length === 1) {\n this.verifiedPayer = items[0]!;\n this.phase = 'manual-confirm';\n } else {\n this.verifiedPayer = null;\n this.verifyMatches = items;\n this.phase = 'manual-picker';\n }\n\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'manual-entry');\n }\n }\n\n private async attach(_paymentId: string): Promise<void> {\n if (!this.verifiedPayer) {\n this.syncUi({\n errorMessage: 'Find your account before proceeding to pay.',\n loading: false,\n });\n return;\n }\n\n this.syncUi({ errorMessage: null, loading: true });\n try {\n const session = await attachPayerWithRetry(this.client, this.verifiedPayer.paymentId);\n this.methodSwitchInProgress = false;\n this.committedMethod = 'manual';\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n if (session.status === 'AWAITING_PAYMENT') {\n this.poller.start(session);\n }\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'manual-confirm');\n }\n }\n\n private handleFlowError(error: unknown, fallbackPhase: CheckoutPhase): void {\n const normalized = normalizeError(error);\n const message = formatFlowErrorMessage(normalized, fallbackPhase);\n\n if (normalized.code === 'payment-session.not-attachable') {\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n } else if (normalized.code === 'payment-session.checkout-method-conflict') {\n void this.refreshAfterConflict();\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n return;\n } else if (normalized.code === 'payment-session.checkout-policy-not-bound') {\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n return;\n } else if (\n normalized.code === 'payment-session.checkout-policy-denied' ||\n normalized.code === 'payment-session.checkout-policy-conflict'\n ) {\n void this.refreshAfterConflict();\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n return;\n } else {\n this.phase = fallbackPhase;\n }\n\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n }\n\n private async refreshAfterConflict(): Promise<void> {\n try {\n const session = await this.client.getSession();\n if (isCheckoutPolicyBound(session)) {\n this.applyBoundUiOptions(session);\n }\n this.applySession(session);\n } catch {\n // keep current error state\n }\n }\n}\n\nfunction terminalSessionError(reason: 'failed' | 'cancelled' | 'declined'): ZippyPayError {\n if (reason === 'failed') {\n return new ZippyPayErrorClass({\n code: 'payment-session.failed',\n status: 400,\n title: 'Payment failed',\n detail: 'Something went wrong with this payment.',\n });\n }\n\n if (reason === 'declined') {\n return new ZippyPayErrorClass({\n code: 'payment-session.declined',\n status: 400,\n title: 'Payment declined',\n detail: 'Your payment was declined.',\n });\n }\n\n return new ZippyPayErrorClass({\n code: 'payment-session.cancelled',\n status: 400,\n title: 'Payment cancelled',\n detail: 'This payment was cancelled.',\n });\n}\n\nfunction uiMethodFromApi(method: ApiCheckoutMethod | null): CheckoutMethod | null {\n if (method === 'QR') {\n return 'qr';\n }\n if (method === 'MANUAL') {\n return 'manual';\n }\n if (method === 'MOBILE_APP') {\n return 'mobileApp';\n }\n return null;\n}\n\nfunction formatFlowErrorMessage(error: ZippyPayError, phase: CheckoutPhase): string {\n const isVerifyFailure =\n phase === 'manual-entry' &&\n (error.status === 404 ||\n error.code.includes('not-found') ||\n error.code.includes('payer-not-found') ||\n error.code === 'payer.not-found');\n\n if (isVerifyFailure) {\n return 'No Zippy account found';\n }\n\n return error.detail?.trim() || 'Something went wrong. Please try again.';\n}\n\nfunction normalizeError(error: unknown): ZippyPayError {\n if (error instanceof ZippyPayErrorClass) {\n return error;\n }\n return new ZippyPayErrorClass({\n code: 'unknown',\n status: 500,\n title: 'Unexpected error',\n detail: error instanceof Error ? error.message : 'An unexpected error occurred',\n });\n}\n\nexport function createCheckout(config: ZippyPayConfig): ZippyPayCheckoutInstance {\n return new CheckoutController(config);\n}\n","import { createCheckout } from '../checkout-controller';\nimport { parseZippyEnvironment } from '../config/environments';\nimport type {\n CheckoutPolicy,\n PaymentSession,\n ZippyEnvironment,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyPayError,\n ZippyTheme,\n} from '../types';\n\nconst ELEMENT_TAG = 'zippy-pay-checkout';\n\nconst THEME_ATTRIBUTE_MAP: Record<string, keyof ZippyTheme> = {\n 'theme-primary': 'primary',\n 'theme-primary-foreground': 'primaryForeground',\n 'theme-background': 'background',\n 'theme-surface': 'surface',\n 'theme-text': 'text',\n 'theme-text-muted': 'textMuted',\n 'theme-border': 'border',\n 'theme-error': 'error',\n 'theme-success': 'success',\n 'theme-border-radius': 'borderRadius',\n 'theme-font-family': 'fontFamily',\n 'theme-mode': 'mode',\n};\n\nexport class ZippyPayCheckoutElement extends HTMLElement {\n private instance: ZippyPayCheckoutInstance | null = null;\n\n static get observedAttributes(): string[] {\n return [\n 'mode',\n 'session-id',\n 'environment',\n 'checkout-policy',\n 'mobile-app-policy',\n ...Object.keys(THEME_ATTRIBUTE_MAP),\n ];\n }\n\n connectedCallback(): void {\n this.mount();\n }\n\n disconnectedCallback(): void {\n this.unmount();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.unmount();\n this.mount();\n }\n }\n\n set clientToken(value: string) {\n this.dataset.clientToken = value;\n if (this.isConnected) {\n this.unmount();\n this.mount();\n }\n }\n\n get clientToken(): string {\n return this.dataset.clientToken ?? this.getAttribute('client-token') ?? '';\n }\n\n private mount(): void {\n const config = this.readConfig();\n if (!config) {\n return;\n }\n\n this.innerHTML = '';\n const mode = config.mode ?? 'inline';\n let container: HTMLElement | undefined;\n\n if (mode === 'inline') {\n const host = document.createElement('div');\n this.appendChild(host);\n container = host;\n }\n\n this.instance = createCheckout({\n ...config,\n container,\n mode,\n onReady: (session: PaymentSession) => this.dispatch('zippy-ready', session),\n onSessionUpdate: (session: PaymentSession) =>\n this.dispatch('zippy-session-update', session),\n onComplete: (session: PaymentSession) => this.dispatch('zippy-complete', session),\n onExpired: (session: PaymentSession) => this.dispatch('zippy-expired', session),\n onError: (error: ZippyPayError) => this.dispatch('zippy-error', error),\n onClose: () => this.dispatch('zippy-close', null),\n });\n\n if (config.mode === 'modal') {\n this.instance.open();\n }\n }\n\n private unmount(): void {\n this.instance?.destroy();\n this.instance = null;\n this.innerHTML = '';\n }\n\n private readConfig(): ZippyPayConfig | null {\n const environmentAttr = this.getAttribute('environment') ?? 'production';\n const sessionId = this.getAttribute('session-id') ?? '';\n const clientToken = this.clientToken;\n const mode = (this.getAttribute('mode') as ZippyPayConfig['mode']) ?? 'inline';\n\n if (!sessionId || !clientToken) {\n return null;\n }\n\n let environment: ZippyEnvironment;\n try {\n environment = parseZippyEnvironment(environmentAttr);\n } catch {\n return null;\n }\n\n const theme: ZippyTheme = {};\n for (const [attr, key] of Object.entries(THEME_ATTRIBUTE_MAP)) {\n const value = this.getAttribute(attr);\n if (value) {\n if (key === 'mode') {\n theme.mode = value as ZippyTheme['mode'];\n } else {\n theme[key] = value;\n }\n }\n }\n\n return {\n environment,\n sessionId,\n clientToken,\n mode,\n theme,\n checkoutPolicy: parseCheckoutPolicyAttribute(this.getAttribute('checkout-policy')),\n mobileApp: parseMobileAppAttribute(this.getAttribute('mobile-app-policy')),\n };\n }\n\n private dispatch<T>(name: string, detail: T): void {\n this.dispatchEvent(\n new CustomEvent(name, {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n open(): void {\n this.instance?.open();\n }\n\n close(): void {\n this.instance?.close();\n }\n\n destroy(): void {\n this.instance?.destroy();\n this.instance = null;\n }\n}\n\nfunction parseCheckoutPolicyAttribute(value: string | null): CheckoutPolicy | undefined {\n if (value === 'QR' || value === 'MANUAL') {\n return value;\n }\n return undefined;\n}\n\nfunction parseMobileAppAttribute(value: string | null): ZippyPayConfig['mobileApp'] {\n if (value === 'option' || value === 'enforce') {\n return { policy: value };\n }\n return undefined;\n}\n\nexport function defineZippyPayCheckoutElement(): void {\n if (typeof customElements === 'undefined') {\n return;\n }\n if (!customElements.get(ELEMENT_TAG)) {\n customElements.define(ELEMENT_TAG, ZippyPayCheckoutElement);\n }\n}\n\nexport { ELEMENT_TAG };\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'zippy-pay-checkout': ZippyPayCheckoutElement;\n }\n}\n","import { createCheckout } from './checkout-controller';\nimport { defineZippyPayCheckoutElement } from './element/zippy-pay-checkout';\n\nexport { PaymentSessionClient, attachPayerWithRetry } from './api/client';\nexport { SessionPoller, isTerminalStatus, phaseFromSession } from './session/poller';\nexport {\n getCountdownTarget,\n getPayWindowRemainingRatio,\n getSoftIdleHint,\n msUntil,\n shouldShowPayProgress,\n} from './session/timing';\nexport { CheckoutController, createCheckout } from './checkout-controller';\nexport {\n defineZippyPayCheckoutElement,\n ZippyPayCheckoutElement,\n ELEMENT_TAG,\n} from './element/zippy-pay-checkout';\nexport {\n PAYMENT_ID_PATTERN,\n E164_PHONE_PATTERN,\n EMAIL_PATTERN,\n normalizePaymentId,\n normalizePayerQuery,\n isValidPaymentId,\n isValidPayerQuery,\n paymentIdValidationMessage,\n payerQueryValidationMessage,\n formatAmount,\n} from './utils';\nexport {\n ZIPPY_API_BASE_URLS,\n ZIPPY_API_PATH_PREFIX,\n isZippyEnvironment,\n parseZippyEnvironment,\n resolveApiBaseUrl,\n} from './config/environments';\nexport {\n ANDROID_APP_PACKAGE,\n ANDROID_PLAY_STORE_NATIVE_URL,\n APP_STORE_LINKS,\n IOS_APP_STORE_NATIVE_URL,\n resolveAppStoreOpenUrl,\n resolveAppStoreUrl,\n} from './config/app-links';\nexport type { AppStoreLinks } from './config/app-links';\nexport {\n buildBindPolicyRequest,\n isCheckoutPolicyBound,\n isCheckoutStartAllowed,\n isFullChooserPolicy,\n resolveAutoStartMethod,\n resolveCheckoutUiOptions,\n resolveCheckoutUiOptionsFromBound,\n resolveCheckoutUiOptionsFromSession,\n resolveEntryRouting,\n resolveMethodAvailability,\n resolveMobileAppPolicy,\n} from './config/checkout-policy';\nexport {\n detectCheckoutSurface,\n isAndroidDevice,\n isPhoneDevice,\n subscribeCheckoutSurface,\n} from './config/device';\n\nexport { buildPaymentQrPayload,\n renderPaymentQrSvg,\n renderBrandedPaymentQrSvg,\n renderPaymentQrMarkup,\n renderUrlQrMarkup,\n renderQrSvg,\n} from './qr/render-qr';\nexport { openAppStore, openPaymentDeepLink, buildAndroidPaymentIntentUrl, buildPaymentDeepLinkOpenUrl } from './qr/deep-link';\nexport { resolveTheme, DEFAULT_THEME, applyThemeToHost } from './theme';\n\nexport type {\n PaymentSession,\n PaymentSessionPayer,\n PaymentSessionStatus,\n PaymentSessionPhase,\n ApiCheckoutMethod,\n ApiCheckoutPolicy,\n ApiMobileAppPolicy,\n BoundCheckoutPolicy,\n BindCheckoutPolicyRequest,\n StartCheckoutRequest,\n CheckoutSurface,\n VerifyPayerResponse,\n PayerPreview,\n CheckoutPolicy,\n MobileAppPolicy,\n ZippyMobileAppConfig,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyEnvironment,\n ZippyTheme,\n CheckoutPhase,\n CheckoutMethod,\n EmbedMode,\n ProblemJson,\n} from './types';\n\nexport { ZippyPayError, TERMINAL_STATUSES, POLLABLE_STATUSES } from './types';\n\nimport type { ZippyPayConfig, ZippyPayCheckoutInstance } from './types';\n\nexport const ZippyPay = {\n create(config: ZippyPayConfig): ZippyPayCheckoutInstance {\n const instance = createCheckout(config);\n if ((config.mode ?? 'inline') === 'modal') {\n instance.open();\n }\n return instance;\n },\n};\n\ndefineZippyPayCheckoutElement();\n\nexport default ZippyPay;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/config/environments.ts","../src/utils.ts","../src/api/client.ts","../src/theme/index.ts","../src/embed/host.ts","../src/session/poller.ts","../src/session/timing.ts","../src/config/device.ts","../src/config/checkout-policy.ts","../src/config/app-links.ts","../src/ui/app-store-icons.ts","../../../node_modules/qrcode-generator/dist/qrcode.mjs","../src/qr/zippy-logo.ts","../src/qr/render-qr.ts","../src/qr/deep-link.ts","../src/ui/app-store-modal.ts","../src/ui/checkout-ui.ts","../src/app/handoff.ts","../src/checkout-controller.ts","../src/element/zippy-pay-checkout.ts","../src/index.ts"],"names":["TERMINAL_STATUSES","POLLABLE_STATUSES","ZippyPayError","problem","detail","ZIPPY_API_BASE_URLS","ZIPPY_API_PATH_PREFIX","isZippyEnvironment","value","resolveApiBaseUrl","environment","parseZippyEnvironment","normalized","PAYMENT_ID_PATTERN","E164_PHONE_PATTERN","EMAIL_PATTERN","normalizePaymentId","normalizePayerQuery","trimmed","isValidPaymentId","isValidPayerQuery","query","paymentIdValidationMessage","payerQueryValidationMessage","isUuidV4","CURRENCY_LOCALES","formatAmount","amount","currency","parsed","locale","TERMINAL_EXIT_COUNTDOWN_SEC","terminalExitLeadText","exitMode","embedMode","outcome","outcomeTerminalCopy","phase","formatCountdown","ms","totalSec","min","sec","hr","remMin","formatCountdownAccessible","parts","formatDisplayInitials","displayName","resolveContainer","container","element","normalizeBaseUrl","baseUrl","appendRedirectQueryParams","url","params","isAbsolute","base","key","PaymentSessionClient","config","body","paymentId","method","surface","path","response","attachPayerWithRetry","client","error","session","DEFAULT_THEME","DARK_THEME_OVERRIDES","resolveTheme","theme","merged","prefersDark","effectiveMode","applyThemeToHost","host","resolved","DM_SANS_IMPORT","CHECKOUT_STYLES","MODAL_STYLES","createEmbedHost","createModalHost","overlay","style","panel","event","embedHost","showModal","embed","onClose","hideModal","SessionPoller","fetchSession","options","initialSession","hidden","isTerminalStatus","status","phaseFromSession","getCountdownTarget","PAY_PROGRESS_PHASES","NO_PROGRESS_PHASES","shouldShowPayProgress","msUntil","getPayWindowRemainingRatio","expiresAt","end","start","total","getSoftIdleHint","iso","isPhoneDevice","detectCheckoutSurface","detectMobileStorePlatform","ua","isAndroidDevice","narrow","coarse","subscribeCheckoutSurface","onChange","mediaQueries","notify","isCheckoutPolicyBound","isFullChooserPolicy","checkoutPolicy","allowsQrCheckoutPolicy","allowsManualCheckoutPolicy","phoneEnforceAutoApp","mobileAppPolicy","resolveMobileAppPolicy","mobileApp","buildBindPolicyRequest","request","resolveFallbackMethodAvailability","resolveMethodAvailability","autoAppOnly","resolveEntryRouting","isCheckoutStartAllowed","resolveAutoStartMethod","routing","resolveCheckoutUiOptionsFromBound","resolveCheckoutUiOptionsFromSession","resolveCheckoutUiOptions","bind","ANDROID_APP_PACKAGE","IOS_APP_STORE_URL","APP_STORE_LINKS","IOS_APP_STORE_NATIVE_URL","ANDROID_PLAY_STORE_NATIVE_URL","resolveAppStoreUrl","platform","resolveAppStoreOpenUrl","renderAppleLogoSvg","className","renderGooglePlayLogoSvg","renderAppleStoreIcon","renderGooglePlayIcon","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","getBestMaskPattern","minLostPoint","pattern","i","lostPoint","QRUtil","pos","j","bits","mod","data","inc","bitIndex","byteIndex","maskFunc","dark","createBytes","buffer","rsBlocks","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","modPoly","qrPolynomial","modIndex","totalCodeCount","index","dataList","QRRSBlock","qrBitBuffer","totalDataCount","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","cellSize","margin","qrHtml","alt","title","opts","size","mc","mr","qrSvg","rect","escapeXml","max","createDataURL","x","y","img","s","escaped","_createHalfASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","white","black","line","context","length","bytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","b2","b3","k","v","unknownChar","QRMode","QRMaskPattern","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","d","errorCorrectLength","a","QRMath","type","sameCount","darkCount","ratio","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","RS_BLOCK_TABLE","qrRSBlock","totalCount","dataCount","getRsBlockTable","rsBlock","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","stringToBytes","code","byteArrayOutputStream","off","len","base64EncodeOutputStream","_buflen","_base64","writeEncoded","encode","padlen","str","_str","_pos","decode","gifImage","width","height","_width","_height","pixel","out","lzwMinCodeSize","raster","getLZWRaster","bitOutputStream","_out","_bitLength","_bitBuffer","clearCode","endCode","bitLength","table","lzwTable","byteOut","bitOut","dataIndex","_map","_size","getPixel","gif","base64","qrcode_default","ZIPPY_BRAND_COLOR","Z_MARK_VIEW_BOX","Z_MARK_PATH","parseViewBoxSize","svg","match","buildLogoBadge","qrSize","badge","plate","plateOffset","markInset","embedLogoInQrSvg","renderSecureLockSvg","MERCHANT_PAYMENT_DEEP_LINK_PATH","buildPaymentQrPayload","sessionId","renderQrSvg","payload","errorCorrection","qr","renderPaymentQrSvg","renderBrandedPaymentQrSvg","renderPaymentQrMarkup","renderUrlQrMarkup","buildAndroidPaymentIntentUrl","buildPaymentDeepLinkOpenUrl","openAppStore","openPaymentDeepLink","openCustomSchemeWithoutNavigation","link","PLATFORM_COPY","isMobileLikeViewport","AppStoreDownloadModal","shadow","trigger","copy","mobile","escapeAttribute","cta","focusables","first","last","CheckoutUi","initialState","callbacks","uiOptions","extraStyles","partial","next","prev","state","active","focus","focusState","errorMessage","loading","verifiedPayer","verifyMatches","committedMethod","appHandoffStatus","mobileAppManualFallback","isTerminal","showPayProgress","isQrPayFlow","isMobileAppFlow","mount","inlinePaymentExpiryAt","subtitle","header","business","sub","footer","appLinks","appLabel","badges","inner","secure","divider","brand","ariaLabel","icon","button","wrap","spinner","methodAvailability","mobileAppCta","card","description","isAwaiting","qrWrap","frame","section","paymentExpiryAt","disabled","opening","action","label","hint","message","install","fallback","slot","remainingMs","timer","form","input","field","inputWrap","clearBtn","verifyBtn","syncActionState","isVerifying","hasValue","existingSpinner","lead","item","exampleWrap","example","note","matches","payer","proceeding","payBtn","identity","avatar","name","handle","onDismiss","initials","profileImage","text","bar","fill","tick","pct","countdownEl","timerEl","remaining","updateDisplay","footnote","kind","titleText","detailText","transactionId","resolvedExitMode","exit","countdown","suffix","watchAppHandoff","timeoutMs","settled","cleanupFns","cleanup","fn","settle","result","onVisibilityChange","_CheckoutController","shouldSync","bindRequest","uiMethodFromApi","terminalSessionError","failureUrl","redirectUrl","reason","normalizeError","autoMethod","attemptOpen","normalizedQuery","items","_paymentId","fallbackPhase","formatFlowErrorMessage","CheckoutController","createCheckout","ELEMENT_TAG","THEME_ATTRIBUTE_MAP","ZippyPayCheckoutElement","environmentAttr","clientToken","attr","parseCheckoutPolicyAttribute","parseMobileAppAttribute","defineZippyPayCheckoutElement","ZippyPay","instance","index_default"],"mappings":"6CAgKO,IAAMA,EAAqD,CAChE,WAAA,CACA,SAAA,CACA,WAAA,CACA,QACF,CAAA,CAEaC,EAAAA,CAAqD,CAChE,SAAA,CACA,kBACF,CAAA,CAEaC,CAAAA,CAAN,cAA4B,KAAM,CAMvC,WAAA,CAAYC,CAAAA,CAAsB,CAChC,IAAMC,EAASD,CAAAA,CAAQ,MAAA,EAAUA,CAAAA,CAAQ,KAAA,EAAS,+BAClD,KAAA,CAAMC,CAAM,CAAA,CACZ,IAAA,CAAK,KAAO,eAAA,CACZ,IAAA,CAAK,IAAA,CAAOD,CAAAA,CAAQ,MAAQ,SAAA,CAC5B,IAAA,CAAK,MAAA,CAASA,CAAAA,CAAQ,QAAU,GAAA,CAChC,IAAA,CAAK,MAAA,CAASC,CAAAA,CACd,KAAK,aAAA,CAAgBD,CAAAA,CAAQ,cAC/B,CACF,ECxLO,IAAME,EAAAA,CAAwD,CACnE,UAAA,CAAY,0BACZ,OAAA,CAAS,iCAAA,CAET,WAAA,CAAa,EACf,EAEaC,EAAAA,CAAwB,UAE9B,SAASC,EAAAA,CAAmBC,EAA0C,CAC3E,OAAOA,CAAAA,IAASH,EAClB,CAEO,SAASI,EAAAA,CAAkBC,CAAAA,CAAuC,CACvE,OAAOL,EAAAA,CAAoBK,CAAW,CAAA,CAAE,OAAA,CAAQ,OAAQ,EAAE,CAC5D,CAEO,SAASC,EAAsBH,CAAAA,CAAiC,CACrE,IAAMI,CAAAA,CAAaJ,EAAM,IAAA,EAAK,CAAE,WAAA,EAAY,CAC5C,GAAI,CAACD,EAAAA,CAAmBK,CAAU,CAAA,CAChC,MAAM,IAAI,KAAA,CACR,CAAA,gCAAA,EAAmCJ,CAAK,uBAAuB,MAAA,CAAO,IAAA,CAAKH,EAAmB,CAAA,CAAE,KAAK,IAAI,CAAC,CAAA,CAAA,CAC5G,CAAA,CAEF,OAAOO,CACT,CCzBO,IAAMC,EAAAA,CAAqB,0CAErBC,EAAAA,CAAqB,mBAAA,CAErBC,EAAAA,CAAgB,6BAEtB,SAASC,CAAAA,CAAmBR,CAAAA,CAAuB,CACxD,OAAOA,EAAM,IAAA,EAAK,CAAE,WAAA,EACtB,CAGO,SAASS,CAAAA,CAAoBT,CAAAA,CAAuB,CACzD,IAAMU,CAAAA,CAAUV,CAAAA,CAAM,IAAA,EAAK,CAC3B,OAAIU,CAAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,CACfA,EAAQ,WAAA,EAAY,CAEzBA,EAAQ,UAAA,CAAW,GAAG,EACjBA,CAAAA,CAEFA,CAAAA,CAAQ,WAAA,EACjB,CAEO,SAASC,EAAAA,CAAiBX,CAAAA,CAAwB,CACvD,OAAOK,EAAAA,CAAmB,IAAA,CAAKG,CAAAA,CAAmBR,CAAK,CAAC,CAC1D,CAGO,SAASY,EAAAA,CAAkBZ,EAAwB,CACxD,IAAMa,CAAAA,CAAQb,CAAAA,CAAM,MAAK,CAIzB,OAHIa,CAAAA,CAAM,MAAA,CAAS,GAAKA,CAAAA,CAAM,MAAA,CAAS,GAAA,EAAO,IAAA,CAAK,KAAKA,CAAK,CAAA,EAGzD,iBAAA,CAAkB,IAAA,CAAKA,CAAK,CAAA,CACvB,KAAA,CAELA,CAAAA,CAAM,QAAA,CAAS,GAAG,CAAA,CACbN,EAAAA,CAAc,IAAA,CAAKM,CAAK,EAE7BA,CAAAA,CAAM,UAAA,CAAW,GAAG,CAAA,CACfP,GAAmB,IAAA,CAAKO,CAAK,CAAA,CAE/BR,EAAAA,CAAmB,KAAKQ,CAAAA,CAAM,WAAA,EAAa,CACpD,CAEO,SAASC,EAAAA,EAAqC,CACnD,OAAO,sFACT,CAEO,SAASC,EAAAA,EAAsC,CACpD,OAAO,+EACT,CAEO,SAASC,EAAAA,CAAShB,CAAAA,CAAwB,CAC/C,OAAO,wEAAA,CAAyE,IAAA,CAC9EA,CACF,CACF,CAGA,IAAMiB,EAAAA,CAAoD,CACxD,IAAK,OACP,CAAA,CAEO,SAASC,EAAAA,CAAaC,EAAgBC,CAAAA,CAA0B,CACrE,IAAMC,CAAAA,CAAS,OAAO,UAAA,CAAWF,CAAM,CAAA,CACvC,GAAI,OAAO,KAAA,CAAME,CAAM,CAAA,CACrB,OAAO,GAAGF,CAAM,CAAA,CAAA,EAAIC,CAAQ,CAAA,CAAA,CAE9B,IAAME,CAAAA,CAASL,EAAAA,CAAiBG,CAAQ,CAAA,EAAK,QAC7C,OAAO,IAAI,IAAA,CAAK,YAAA,CAAaE,EAAQ,CACnC,KAAA,CAAO,UAAA,CACP,QAAA,CAAAF,EACA,qBAAA,CAAuB,CAAA,CACvB,qBAAA,CAAuB,CACzB,CAAC,CAAA,CAAE,MAAA,CAAOC,CAAM,CAClB,CAEO,IAAME,EAAAA,CAA8B,CAAA,CAIpC,SAASC,GACdC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAAiC,SAAA,CACzB,CACR,OAAIF,CAAAA,GAAa,UAAA,CACRE,CAAAA,GAAY,UACf,mCAAA,CACA,2BAAA,CAEFD,IAAc,OAAA,CACT,yCAAA,CAEF,2CACT,CAEO,SAASE,EAAAA,CACdC,CAAAA,CACgE,CAChE,OAAQA,CAAAA,EACN,KAAK,UACH,OAAO,CACL,IAAA,CAAM,SAAA,CACN,MAAO,kBAAA,CACP,MAAA,CAAQ,8BACV,CAAA,CACF,KAAK,SAAA,CACH,OAAO,CACL,IAAA,CAAM,UACN,KAAA,CAAO,mBAAA,CACP,MAAA,CACE,oFACJ,EACF,KAAK,QAAA,CACH,OAAO,CACL,KAAM,SAAA,CACN,KAAA,CAAO,gBAAA,CACP,MAAA,CAAQ,gFACV,CAAA,CACF,KAAK,WAAA,CACH,OAAO,CACL,IAAA,CAAM,SAAA,CACN,KAAA,CAAO,mBAAA,CACP,OAAQ,6BACV,CAAA,CACF,KAAK,UAAA,CACH,OAAO,CACL,IAAA,CAAM,SAAA,CACN,KAAA,CAAO,mBACP,MAAA,CAAQ,sEACV,CAAA,CACF,KAAK,kBACH,OAAO,CACL,IAAA,CAAM,SAAA,CACN,MAAO,sBAAA,CACP,MAAA,CACE,+EACJ,CAAA,CACF,QACE,OAAO,CACL,IAAA,CAAM,SAAA,CACN,MAAO,sBAAA,CACP,MAAA,CAAQ,2CACV,CACJ,CACF,CAEO,SAASC,EAAAA,CAAgBC,CAAAA,CAAoB,CAClD,IAAMC,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAI,EAAG,IAAA,CAAK,IAAA,CAAKD,CAAAA,CAAK,GAAI,CAAC,CAAA,CAC3CE,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMD,EAAW,EAAE,CAAA,CAC9BE,CAAAA,CAAMF,CAAAA,CAAW,GAEvB,GAAIC,CAAAA,EAAO,EAAA,CAAI,CACb,IAAME,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAMF,CAAAA,CAAM,EAAE,CAAA,CACxBG,CAAAA,CAASH,CAAAA,CAAM,EAAA,CACrB,OAAOG,CAAAA,CAAS,CAAA,CAAI,CAAA,EAAGD,CAAE,KAAKC,CAAM,CAAA,CAAA,CAAA,CAAM,CAAA,EAAGD,CAAE,GACjD,CAEA,OAAIF,CAAAA,CAAM,CAAA,CACD,GAAGA,CAAG,CAAA,EAAA,EAAKC,CAAAA,CAAI,QAAA,GAAW,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,IAG5C,CAAA,EAAGA,CAAG,CAAA,CAAA,CACf,CAEO,SAASG,EAAAA,CAA0BN,CAAAA,CAAoB,CAC5D,IAAMC,CAAAA,CAAW,KAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKD,EAAK,GAAI,CAAC,CAAA,CAC3CE,CAAAA,CAAM,KAAK,KAAA,CAAMD,CAAAA,CAAW,EAAE,CAAA,CAC9BE,EAAMF,CAAAA,CAAW,EAAA,CAEvB,GAAIC,CAAAA,EAAO,GAAI,CACb,IAAME,CAAAA,CAAK,IAAA,CAAK,MAAMF,CAAAA,CAAM,EAAE,CAAA,CACxBG,CAAAA,CAASH,EAAM,EAAA,CACfK,CAAAA,CAAQ,CAAC,CAAA,EAAGH,CAAE,CAAA,KAAA,EAAQA,CAAAA,GAAO,CAAA,CAAI,EAAA,CAAK,GAAG,CAAA,CAAE,CAAA,CACjD,OAAIC,CAAAA,CAAS,GACXE,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAGF,CAAM,UAAUA,CAAAA,GAAW,CAAA,CAAI,EAAA,CAAK,GAAG,EAAE,CAAA,CAElDE,CAAAA,CAAM,IAAA,CAAK,GAAG,CACvB,CAEA,OAAIL,CAAAA,CAAM,CAAA,CACJC,EAAM,CAAA,CACD,CAAA,EAAGD,CAAG,CAAA,OAAA,EAAUA,IAAQ,CAAA,CAAI,EAAA,CAAK,GAAG,CAAA,CAAA,EAAIC,CAAG,CAAA,OAAA,EAAUA,CAAAA,GAAQ,EAAI,EAAA,CAAK,GAAG,GAE3E,CAAA,EAAGD,CAAG,CAAA,OAAA,EAAUA,CAAAA,GAAQ,EAAI,EAAA,CAAK,GAAG,CAAA,CAAA,CAGtC,CAAA,EAAGC,CAAG,CAAA,OAAA,EAAUA,CAAAA,GAAQ,CAAA,CAAI,EAAA,CAAK,GAAG,CAAA,CAC7C,CAGO,SAASK,EAAAA,CAAsBC,EAA6B,CACjE,IAAMF,CAAAA,CAAQE,CAAAA,CAAY,MAAK,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA,CAC5D,OAAIF,CAAAA,CAAM,SAAW,CAAA,CACZ,GAAA,CAELA,CAAAA,CAAM,MAAA,GAAW,EACZA,CAAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAEjC,CAAA,EAAGA,EAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAA,EAAGA,CAAAA,CAAMA,CAAAA,CAAM,MAAA,CAAS,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,GAAG,WAAA,EACrE,CAaO,SAASG,GAAiBC,CAAAA,CAA8C,CAC7E,GAAI,OAAOA,GAAc,QAAA,CACvB,OAAOA,EAET,IAAMC,CAAAA,CAAU,SAAS,aAAA,CAA2BD,CAAS,CAAA,CAC7D,GAAI,CAACC,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,mCAAmCD,CAAS,CAAA,CAAE,CAAA,CAEhE,OAAOC,CACT,CAEO,SAASC,EAAAA,CAAiBC,CAAAA,CAAyB,CACxD,OAAOA,CAAAA,CAAQ,OAAA,CAAQ,MAAA,CAAQ,EAAE,CACnC,CAGO,SAASC,EAAAA,CACdC,EACAC,CAAAA,CACQ,CACR,IAAMC,CAAAA,CAAa,gBAAgB,IAAA,CAAKF,CAAG,CAAA,CACrCG,CAAAA,CAAO,OAAO,MAAA,CAAW,GAAA,CAAc,MAAA,CAAO,QAAA,CAAS,KAAO,oBAAA,CAC9D7B,CAAAA,CAAS,IAAI,GAAA,CAAI0B,EAAKG,CAAI,CAAA,CAEhC,IAAA,GAAW,CAACC,EAAKnD,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQgD,CAAM,CAAA,CAC1ChD,CAAAA,EAAS,IAAA,EAAQA,CAAAA,GAAU,IAC7BqB,CAAAA,CAAO,YAAA,CAAa,GAAA,CAAI8B,CAAAA,CAAKnD,CAAK,CAAA,CAItC,OAAIiD,CAAAA,CACK5B,CAAAA,CAAO,UAAS,CAGlB,CAAA,EAAGA,CAAAA,CAAO,QAAQ,GAAGA,CAAAA,CAAO,MAAM,CAAA,EAAGA,CAAAA,CAAO,IAAI,CAAA,CACzD,CCzOO,IAAM+B,CAAAA,CAAN,KAA2B,CAKhC,WAAA,CAAYC,CAAAA,CAAyB,CACnC,KAAK,OAAA,CAAUT,EAAAA,CAAiBS,CAAAA,CAAO,OAAO,EAC9C,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,SAAA,CACxB,KAAK,WAAA,CAAcA,CAAAA,CAAO,YAC5B,CAEA,MAAM,UAAA,EAAsC,CAC1C,OAAO,IAAA,CAAK,QAAwB,KAAA,CAAO,IAAA,CAAK,WAAA,EAAa,CAC/D,CAEA,MAAM,kBAAA,CAAmBC,CAAAA,CAA0D,CACjF,OAAO,IAAA,CAAK,OAAA,CAAwB,MAAA,CAAQ,GAAG,IAAA,CAAK,WAAA,EAAa,CAAA,qBAAA,CAAA,CAAyBA,CAAI,CAChG,CAEA,MAAM,WAAA,CAAYzC,EAA6C,CAC7D,OAAO,IAAA,CAAK,OAAA,CAA6B,OAAQ,CAAA,EAAG,IAAA,CAAK,WAAA,EAAa,gBAAiB,CACrF,KAAA,CAAOJ,CAAAA,CAAoBI,CAAK,CAClC,CAAC,CACH,CAEA,MAAM,WAAA,CAAY0C,EAA4C,CAC5D,OAAO,IAAA,CAAK,OAAA,CAAwB,OAAQ,CAAA,EAAG,IAAA,CAAK,WAAA,EAAa,SAAU,CACzE,SAAA,CAAW/C,CAAAA,CAAmB+C,CAAS,CACzC,CAAC,CACH,CAEA,MAAM,cACJC,CAAAA,CACAC,CAAAA,CACyB,CACzB,IAAMH,EAA6B,CAAE,MAAA,CAAAE,CAAAA,CAAQ,OAAA,CAAAC,CAAQ,CAAA,CACrD,OAAO,IAAA,CAAK,OAAA,CAAwB,OAAQ,CAAA,EAAG,IAAA,CAAK,WAAA,EAAa,kBAAmBH,CAAI,CAC1F,CAEA,eAAA,CAAgBG,EAAmD,CACjE,OAAO,IAAA,CAAK,aAAA,CAAc,KAAMA,CAAO,CACzC,CAEA,sBAAA,CAAuBA,EAAmD,CACxE,OAAO,IAAA,CAAK,aAAA,CAAc,aAAcA,CAAO,CACjD,CAEA,mBAAA,CAAoBA,EAAmD,CACrE,OAAO,IAAA,CAAK,aAAA,CAAc,SAAUA,CAAO,CAC7C,CAEQ,WAAA,EAAsB,CAC5B,OAAO,CAAA,EAAG3D,EAAqB,CAAA,kBAAA,EAAqB,IAAA,CAAK,SAAS,CAAA,CACpE,CAEQ,OAAA,EAAkC,CACxC,OAAO,CACL,MAAA,CAAQ,kBAAA,CACR,cAAA,CAAgB,mBAChB,yBAAA,CAA2B,IAAA,CAAK,WAClC,CACF,CAEA,MAAc,OAAA,CAAW0D,CAAAA,CAAgBE,CAAAA,CAAcJ,EAA4B,CACjF,IAAMK,CAAAA,CAAW,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAGD,CAAI,CAAA,CAAA,CAAI,CACrD,MAAA,CAAAF,CAAAA,CACA,QAAS,IAAA,CAAK,OAAA,EAAQ,CACtB,IAAA,CAAMF,IAAS,MAAA,CAAY,MAAA,CAAY,IAAA,CAAK,SAAA,CAAUA,CAAI,CAC5D,CAAC,CAAA,CAED,GAAIK,EAAS,EAAA,CACX,OAAQ,MAAMA,CAAAA,CAAS,MAAK,CAG9B,MAAM,MAAM,IAAA,CAAK,WAAWA,CAAQ,CACtC,CAEA,MAAc,WAAWA,CAAAA,CAA4C,CAEnE,GAAA,CADoBA,CAAAA,CAAS,QAAQ,GAAA,CAAI,cAAc,CAAA,EAAK,EAAA,EAC5C,SAAS,0BAA0B,CAAA,CAAG,CACpD,IAAMhE,CAAAA,CAAW,MAAMgE,CAAAA,CAAS,IAAA,EAAK,CACrC,OAAO,IAAIjE,CAAAA,CAAmB,CAAE,GAAGC,CAAAA,CAAS,OAAQA,CAAAA,CAAQ,MAAA,EAAUgE,CAAAA,CAAS,MAAO,CAAC,CACzF,CAEA,OAAO,IAAIjE,EAAmB,CAC5B,MAAA,CAAQiE,CAAAA,CAAS,MAAA,CACjB,KAAM,SAAA,CACN,KAAA,CAAO,gBAAA,CACP,MAAA,CAAQA,EAAS,UAAA,EAAc,gBACjC,CAAC,CACH,CACF,EAEA,eAAsBC,EAAAA,CACpBC,CAAAA,CACAN,EACyB,CACzB,GAAI,CACF,OAAO,MAAMM,CAAAA,CAAO,WAAA,CAAYN,CAAS,CAC3C,OAASO,CAAAA,CAAO,CACd,GAAI,EAAEA,aAAiBpE,CAAAA,CAAAA,EAAuBoE,CAAAA,CAAM,IAAA,GAAS,gCAAA,CAC3D,MAAMA,CAAAA,CAER,IAAMC,CAAAA,CAAU,MAAMF,EAAO,UAAA,EAAW,CACxC,GAAIE,CAAAA,CAAQ,OAAO,SAAA,GAAcvD,CAAAA,CAAmB+C,CAAS,CAAA,CAC3D,OAAOQ,CAAAA,CAET,MAAMD,CACR,CACF,KC7HaE,EAAAA,CAST,CACF,OAAA,CAAS,SAAA,CACT,kBAAmB,SAAA,CACnB,kBAAA,CAAoB,SAAA,CACpB,YAAA,CAAc,UACd,WAAA,CAAa,SAAA,CACb,UAAA,CAAY,SAAA,CACZ,QAAS,SAAA,CACT,YAAA,CAAc,SAAA,CACd,IAAA,CAAM,UACN,SAAA,CAAW,SAAA,CACX,MAAA,CAAQ,SAAA,CACR,MAAO,SAAA,CACP,OAAA,CAAS,SAAA,CACT,YAAA,CAAc,OACd,YAAA,CAAc,MAAA,CACd,WAAA,CAAa,MAAA,CACb,WAAY,MAAA,CACZ,UAAA,CAAY,iDAAA,CACZ,IAAA,CAAM,OACR,CAAA,CAEMC,EAAAA,CAA4C,CAChD,UAAA,CAAY,UACZ,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,SAAA,CACN,UAAW,SAAA,CACX,MAAA,CAAQ,SACV,EAIO,SAASC,EAAAA,CAAaC,CAAAA,CAAmC,CAC9D,IAAMC,EAAS,CAAE,GAAGJ,EAAAA,CAAe,GAAGG,CAAM,CAAA,CACtCE,CAAAA,CACJ,OAAO,MAAA,CAAW,KAClB,MAAA,CAAO,UAAA,GAAa,8BAA8B,CAAA,CAAE,QAEhDC,CAAAA,CACJF,CAAAA,CAAO,OAAS,MAAA,CAAUC,CAAAA,CAAc,OAAS,OAAA,CAAYD,CAAAA,CAAO,IAAA,EAAQ,OAAA,CAE9E,OAAIE,CAAAA,GAAkB,MAAA,CACb,CAAE,GAAGF,EAAQ,GAAGH,EAAAA,CAAsB,IAAA,CAAMK,CAAc,EAG5D,CAAE,GAAGF,CAAAA,CAAQ,IAAA,CAAME,CAAc,CAC1C,CAEO,SAASC,EAAAA,CAAiBC,EAAmBL,CAAAA,CAA0B,CAC5E,IAAMM,CAAAA,CAAWP,GAAaC,CAAK,CAAA,CACnCK,CAAAA,CAAK,KAAA,CAAM,YAAY,iBAAA,CAAmBC,CAAAA,CAAS,OAAO,CAAA,CAC1DD,EAAK,KAAA,CAAM,WAAA,CAAY,4BAAA,CAA8BC,CAAAA,CAAS,iBAAiB,CAAA,CAC/ED,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAY,+BAAgCC,CAAAA,CAAS,kBAAkB,CAAA,CAClFD,CAAAA,CAAK,MAAM,WAAA,CAAY,uBAAA,CAAyBC,CAAAA,CAAS,YAAY,EACrED,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAY,sBAAA,CAAwBC,EAAS,WAAW,CAAA,CACnED,CAAAA,CAAK,KAAA,CAAM,YAAY,oBAAA,CAAsBC,CAAAA,CAAS,UAAU,CAAA,CAChED,EAAK,KAAA,CAAM,WAAA,CAAY,kBAAmBC,CAAAA,CAAS,OAAO,EAC1DD,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAY,uBAAA,CAAyBC,EAAS,YAAY,CAAA,CACrED,CAAAA,CAAK,KAAA,CAAM,YAAY,cAAA,CAAgBC,CAAAA,CAAS,IAAI,CAAA,CACpDD,EAAK,KAAA,CAAM,WAAA,CAAY,oBAAA,CAAsBC,CAAAA,CAAS,SAAS,CAAA,CAC/DD,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAY,iBAAkBC,CAAAA,CAAS,MAAM,CAAA,CACxDD,CAAAA,CAAK,MAAM,WAAA,CAAY,eAAA,CAAiBC,CAAAA,CAAS,KAAK,EACtDD,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAY,iBAAA,CAAmBC,EAAS,OAAO,CAAA,CAC1DD,CAAAA,CAAK,KAAA,CAAM,YAAY,gBAAA,CAAkBC,CAAAA,CAAS,YAAY,CAAA,CAC9DD,EAAK,KAAA,CAAM,WAAA,CAAY,uBAAA,CAAyBC,CAAAA,CAAS,YAAY,CAAA,CACrED,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAY,uBAAwBC,CAAAA,CAAS,WAAW,CAAA,CACnED,CAAAA,CAAK,MAAM,WAAA,CAAY,qBAAA,CAAuBC,CAAAA,CAAS,UAAU,EACjED,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAY,qBAAA,CAAuBC,EAAS,UAAU,EACnE,CAEA,IAAMC,EAAAA,CACJ,+IAEWC,EAAAA,CAAkB;AAAA,EAC7BD,EAAc;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","file":"index.min.js","sourcesContent":["export type PaymentSessionStatus =\n | 'CREATED'\n | 'AWAITING_PAYMENT'\n | 'COMPLETED'\n | 'EXPIRED'\n | 'CANCELLED'\n | 'FAILED';\n\nexport type PaymentSessionPhase = 'IDLE' | 'PAYING';\n\n/** Server checkout method — locks after checkout start. */\nexport type ApiCheckoutMethod = 'QR' | 'MANUAL' | 'MOBILE_APP';\n\n/** SDK init — omit to allow both QR and Manual. */\nexport type CheckoutPolicy = 'QR' | 'MANUAL';\n\n/** SDK init — phone-only app handoff preference. */\nexport type MobileAppPolicy = 'off' | 'option' | 'enforce';\n\n/** Explicit checkout restriction returned by the API. */\nexport type ApiCheckoutPolicy = 'QR' | 'MANUAL';\n\n/** Bound checkout policy — `null` means full chooser (QR + manual). */\nexport type BoundCheckoutPolicy = ApiCheckoutPolicy | null;\n\n/** Bound mobile app policy returned by the API. */\nexport type ApiMobileAppPolicy = 'OFF' | 'OPTION' | 'ENFORCE';\n\nexport type BindCheckoutPolicyRequest = {\n checkoutPolicy?: ApiCheckoutPolicy;\n mobileAppPolicy?: ApiMobileAppPolicy;\n};\n\nexport type CheckoutSurface = 'phone' | 'desktop';\n\nexport type StartCheckoutRequest = {\n method: ApiCheckoutMethod;\n surface: CheckoutSurface;\n};\n\nexport type ZippyMobileAppConfig = {\n policy?: MobileAppPolicy;\n};\n\nexport type PaymentSessionPayer = {\n paymentId: string;\n displayName: string;\n profileImage: string | null;\n};\n\n/** Payer preview returned from verify — same fields as session payer. */\nexport type PayerPreview = PaymentSessionPayer;\n\nexport type VerifyPayerResponse = {\n items: PayerPreview[];\n};\n\nexport type PaymentSession = {\n sessionId: string;\n amount: string;\n currency: 'USD';\n status: PaymentSessionStatus;\n successUrl: string | null;\n failureUrl: string | null;\n businessName: string;\n transactionId: string | null;\n transactionStatus: string | null;\n payer: PaymentSessionPayer | null;\n /** Idle shelf — customer must start checkout before this. */\n expiresAt: string;\n /** Hard max — session + client token expire here. */\n absoluteExpiresAt: string;\n phase: PaymentSessionPhase;\n checkoutMethod: ApiCheckoutMethod | null;\n /** Set after bind-policy — `null` = full chooser when `mobileAppPolicy` is set. */\n checkoutPolicy: BoundCheckoutPolicy;\n /** Set after bind-policy succeeds; null until then. */\n mobileAppPolicy: ApiMobileAppPolicy | null;\n paymentStartAt: string | null;\n /** Pay window countdown — only meaningful when phase is PAYING. */\n paymentExpiryAt: string | null;\n createdAt: string;\n};\n\nexport type ProblemJson = {\n type?: string;\n title?: string;\n status?: number;\n detail?: string;\n instance?: string;\n code?: string;\n correlationId?: string;\n errors?: Record<string, string[]>;\n};\n\nimport type { ZippyEnvironment } from './config/environments';\n\nexport type { ZippyEnvironment };\n\nexport type ZippyTheme = {\n primary?: string;\n primaryForeground?: string;\n background?: string;\n surface?: string;\n text?: string;\n textMuted?: string;\n border?: string;\n error?: string;\n success?: string;\n borderRadius?: string;\n fontFamily?: string;\n mode?: 'light' | 'dark' | 'auto';\n};\n\nexport type EmbedMode = 'inline' | 'modal';\n\nexport type ZippyPayConfig = {\n environment: ZippyEnvironment;\n sessionId: string;\n clientToken: string;\n mode?: EmbedMode;\n container?: HTMLElement | string;\n theme?: ZippyTheme;\n /** When omitted, customer can choose QR or Manual. */\n checkoutPolicy?: CheckoutPolicy;\n /** Phone-only app handoff. Ignored on non-phone devices. */\n mobileApp?: ZippyMobileAppConfig;\n locale?: 'en';\n redirectOnComplete?: boolean;\n redirectOnFailure?: boolean;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n onReady?: (session: PaymentSession) => void;\n onSessionUpdate?: (session: PaymentSession) => void;\n onComplete?: (session: PaymentSession) => void;\n onExpired?: (session: PaymentSession) => void;\n onError?: (error: ZippyPayError) => void;\n onClose?: () => void;\n};\n\nexport type CheckoutMethod = 'qr' | 'manual' | 'mobileApp';\n\nexport type CheckoutPhase =\n | 'loading'\n | 'choose-method'\n | 'qr-active'\n | 'mobile-app-active'\n | 'manual-entry'\n | 'manual-picker'\n | 'manual-confirm'\n | 'awaiting'\n | 'success'\n | 'expired'\n | 'cancelled'\n | 'declined'\n | 'failed'\n | 'error'\n | 'invalid-session';\n\n\nexport const TERMINAL_STATUSES: readonly PaymentSessionStatus[] = [\n 'COMPLETED',\n 'EXPIRED',\n 'CANCELLED',\n 'FAILED',\n] as const;\n\nexport const POLLABLE_STATUSES: readonly PaymentSessionStatus[] = [\n 'CREATED',\n 'AWAITING_PAYMENT',\n] as const;\n\nexport class ZippyPayError extends Error {\n readonly code: string;\n readonly status: number;\n readonly detail: string;\n readonly correlationId?: string;\n\n constructor(problem: ProblemJson) {\n const detail = problem.detail ?? problem.title ?? 'An unexpected error occurred';\n super(detail);\n this.name = 'ZippyPayError';\n this.code = problem.code ?? 'unknown';\n this.status = problem.status ?? 500;\n this.detail = detail;\n this.correlationId = problem.correlationId;\n }\n}\n\nexport type ZippyPayCheckoutInstance = {\n open(): void;\n close(): void;\n destroy(): void;\n};\n","export type ZippyEnvironment = 'production' | 'staging' | 'development';\n\n/** API origin per environment. Paths such as `/api/v1/...` are appended by the SDK client. */\nexport const ZIPPY_API_BASE_URLS: Record<ZippyEnvironment, string> = {\n production: 'https://api.zippypay.io',\n staging: 'https://staging.api.zippypay.io',\n /** Same-origin — local demo proxies `/api/*` to the backend (avoids CORS). */\n development: '',\n};\n\nexport const ZIPPY_API_PATH_PREFIX = '/api/v1';\n\nexport function isZippyEnvironment(value: string): value is ZippyEnvironment {\n return value in ZIPPY_API_BASE_URLS;\n}\n\nexport function resolveApiBaseUrl(environment: ZippyEnvironment): string {\n return ZIPPY_API_BASE_URLS[environment].replace(/\\/+$/, '');\n}\n\nexport function parseZippyEnvironment(value: string): ZippyEnvironment {\n const normalized = value.trim().toLowerCase();\n if (!isZippyEnvironment(normalized)) {\n throw new Error(\n `Zippy Pay: invalid environment \"${value}\". Expected one of: ${Object.keys(ZIPPY_API_BASE_URLS).join(', ')}.`,\n );\n }\n return normalized;\n}\n","import type { CheckoutPhase } from './types';\n\n/** Personal Zippy handles: 3–20 chars, optional single dot, no leading/trailing dot. */\nexport const PAYMENT_ID_PATTERN = /^(?=.{3,20}$)[a-z0-9]+(?:\\.[a-z0-9]+)?$/;\n\nexport const E164_PHONE_PATTERN = /^\\+[1-9]\\d{7,14}$/;\n\nexport const EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport function normalizePaymentId(value: string): string {\n return value.trim().toLowerCase();\n}\n\n/** Normalize a payer verify query before sending to the API. */\nexport function normalizePayerQuery(value: string): string {\n const trimmed = value.trim();\n if (trimmed.includes('@')) {\n return trimmed.toLowerCase();\n }\n if (trimmed.startsWith('+')) {\n return trimmed;\n }\n return trimmed.toLowerCase();\n}\n\nexport function isValidPaymentId(value: string): boolean {\n return PAYMENT_ID_PATTERN.test(normalizePaymentId(value));\n}\n\n/** Client-side pre-validation for payer verify `query` (server is authoritative). */\nexport function isValidPayerQuery(value: string): boolean {\n const query = value.trim();\n if (query.length < 3 || query.length > 100 || /\\s/.test(query)) {\n return false;\n }\n if (/[\\x00-\\x1f\\x7f]/.test(query)) {\n return false;\n }\n if (query.includes('@')) {\n return EMAIL_PATTERN.test(query);\n }\n if (query.startsWith('+')) {\n return E164_PHONE_PATTERN.test(query);\n }\n return PAYMENT_ID_PATTERN.test(query.toLowerCase());\n}\n\nexport function paymentIdValidationMessage(): string {\n return 'Enter 3–20 lowercase letters or digits, with at most one dot (e.g. john.doe12).';\n}\n\nexport function payerQueryValidationMessage(): string {\n return 'Enter a Zippy ID, email, or phone number in E.164 format (e.g. +15551234567).';\n}\n\nexport function isUuidV4(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n );\n}\n\n/** Locale per currency so amounts use the standard symbol (e.g. USD → $1.00, not US$1.00). */\nconst CURRENCY_LOCALES: Partial<Record<string, string>> = {\n USD: 'en-US',\n};\n\nexport function formatAmount(amount: string, currency: string): string {\n const parsed = Number.parseFloat(amount);\n if (Number.isNaN(parsed)) {\n return `${amount} ${currency}`;\n }\n const locale = CURRENCY_LOCALES[currency] ?? 'en-US';\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(parsed);\n}\n\nexport const TERMINAL_EXIT_COUNTDOWN_SEC = 7;\n\nexport type TerminalExitMode = 'redirect' | 'close';\n\nexport function terminalExitLeadText(\n exitMode: TerminalExitMode,\n embedMode: 'inline' | 'modal',\n outcome: 'success' | 'failure' = 'success',\n): string {\n if (exitMode === 'redirect') {\n return outcome === 'failure'\n ? 'You will be redirected shortly in'\n : 'You will be redirected in';\n }\n if (embedMode === 'modal') {\n return 'This window will close automatically in';\n }\n return 'This checkout will close automatically in';\n}\n\nexport function outcomeTerminalCopy(\n phase: CheckoutPhase,\n): { kind: 'success' | 'failure'; title: string; detail: string } {\n switch (phase) {\n case 'success':\n return {\n kind: 'success',\n title: 'Payment complete',\n detail: 'Your payment was successful.',\n };\n case 'expired':\n return {\n kind: 'failure',\n title: 'Payment timed out',\n detail:\n 'The time to complete this payment has ended. Return to the merchant and try again.',\n };\n case 'failed':\n return {\n kind: 'failure',\n title: 'Payment failed',\n detail: 'Your payment could not be completed. Please try again or contact the merchant.',\n };\n case 'cancelled':\n return {\n kind: 'failure',\n title: 'Payment cancelled',\n detail: 'This payment was cancelled.',\n };\n case 'declined':\n return {\n kind: 'failure',\n title: 'Payment declined',\n detail: 'Your payment was declined. Please try again or contact the merchant.',\n };\n case 'invalid-session':\n return {\n kind: 'failure',\n title: 'Checkout unavailable',\n detail:\n 'This checkout link is no longer valid. Please ask the merchant for a new one.',\n };\n default:\n return {\n kind: 'failure',\n title: 'Something went wrong',\n detail: 'Please try again or contact the merchant.',\n };\n }\n}\n\nexport function formatCountdown(ms: number): string {\n const totalSec = Math.max(0, Math.ceil(ms / 1000));\n const min = Math.floor(totalSec / 60);\n const sec = totalSec % 60;\n\n if (min >= 60) {\n const hr = Math.floor(min / 60);\n const remMin = min % 60;\n return remMin > 0 ? `${hr}h ${remMin}m` : `${hr}h`;\n }\n\n if (min > 0) {\n return `${min}m ${sec.toString().padStart(2, '0')}s`;\n }\n\n return `${sec}s`;\n}\n\nexport function formatCountdownAccessible(ms: number): string {\n const totalSec = Math.max(0, Math.ceil(ms / 1000));\n const min = Math.floor(totalSec / 60);\n const sec = totalSec % 60;\n\n if (min >= 60) {\n const hr = Math.floor(min / 60);\n const remMin = min % 60;\n const parts = [`${hr} hour${hr === 1 ? '' : 's'}`];\n if (remMin > 0) {\n parts.push(`${remMin} minute${remMin === 1 ? '' : 's'}`);\n }\n return parts.join(' ');\n }\n\n if (min > 0) {\n if (sec > 0) {\n return `${min} minute${min === 1 ? '' : 's'} ${sec} second${sec === 1 ? '' : 's'}`;\n }\n return `${min} minute${min === 1 ? '' : 's'}`;\n }\n\n return `${sec} second${sec === 1 ? '' : 's'}`;\n}\n\n/** Up to two initials from a display name for avatar fallbacks. */\nexport function formatDisplayInitials(displayName: string): string {\n const parts = displayName.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return '?';\n }\n if (parts.length === 1) {\n return parts[0].charAt(0).toUpperCase();\n }\n return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();\n}\n\nexport function formatIdleDeadline(iso: string): string {\n try {\n return new Intl.DateTimeFormat(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n }).format(new Date(iso));\n } catch {\n return iso;\n }\n}\n\nexport function resolveContainer(container: HTMLElement | string): HTMLElement {\n if (typeof container !== 'string') {\n return container;\n }\n const element = document.querySelector<HTMLElement>(container);\n if (!element) {\n throw new Error(`Zippy Pay: container not found: ${container}`);\n }\n return element;\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\n/** Appends checkout redirect query params, preserving any existing search string. */\nexport function appendRedirectQueryParams(\n url: string,\n params: Record<string, string | null | undefined>,\n): string {\n const isAbsolute = /^https?:\\/\\//i.test(url);\n const base = typeof window !== 'undefined' ? window.location.href : 'https://localhost/';\n const parsed = new URL(url, base);\n\n for (const [key, value] of Object.entries(params)) {\n if (value != null && value !== '') {\n parsed.searchParams.set(key, value);\n }\n }\n\n if (isAbsolute) {\n return parsed.toString();\n }\n\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n}\n","import type {\n BindCheckoutPolicyRequest,\n CheckoutSurface,\n PaymentSession,\n ProblemJson,\n StartCheckoutRequest,\n VerifyPayerResponse,\n ZippyPayError,\n} from '../types';\nimport { ZippyPayError as ZippyPayErrorClass } from '../types';\nimport { ZIPPY_API_PATH_PREFIX } from '../config/environments';\nimport { normalizeBaseUrl, normalizePaymentId, normalizePayerQuery } from '../utils';\n\nexport type ApiClientConfig = {\n baseUrl: string;\n sessionId: string;\n clientToken: string;\n};\n\nexport class PaymentSessionClient {\n private readonly baseUrl: string;\n private readonly sessionId: string;\n private readonly clientToken: string;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = normalizeBaseUrl(config.baseUrl);\n this.sessionId = config.sessionId;\n this.clientToken = config.clientToken;\n }\n\n async getSession(): Promise<PaymentSession> {\n return this.request<PaymentSession>('GET', this.sessionPath());\n }\n\n async bindCheckoutPolicy(body: BindCheckoutPolicyRequest): Promise<PaymentSession> {\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/checkout/bind-policy`, body);\n }\n\n async verifyPayer(query: string): Promise<VerifyPayerResponse> {\n return this.request<VerifyPayerResponse>('POST', `${this.sessionPath()}/payer/verify`, {\n query: normalizePayerQuery(query),\n });\n }\n\n async attachPayer(paymentId: string): Promise<PaymentSession> {\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/payer`, {\n paymentId: normalizePaymentId(paymentId),\n });\n }\n\n async startCheckout(\n method: StartCheckoutRequest['method'],\n surface: CheckoutSurface,\n ): Promise<PaymentSession> {\n const body: StartCheckoutRequest = { method, surface };\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/checkout/start`, body);\n }\n\n startQrCheckout(surface: CheckoutSurface): Promise<PaymentSession> {\n return this.startCheckout('QR', surface);\n }\n\n startMobileAppCheckout(surface: CheckoutSurface): Promise<PaymentSession> {\n return this.startCheckout('MOBILE_APP', surface);\n }\n\n startManualCheckout(surface: CheckoutSurface): Promise<PaymentSession> {\n return this.startCheckout('MANUAL', surface);\n }\n\n private sessionPath(): string {\n return `${ZIPPY_API_PATH_PREFIX}/payment-sessions/${this.sessionId}`;\n }\n\n private headers(): Record<string, string> {\n return {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Payment-Session-Token': this.clientToken,\n };\n }\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers: this.headers(),\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n\n if (response.ok) {\n return (await response.json()) as T;\n }\n\n throw await this.parseError(response);\n }\n\n private async parseError(response: Response): Promise<ZippyPayError> {\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/problem+json')) {\n const problem = (await response.json()) as ProblemJson;\n return new ZippyPayErrorClass({ ...problem, status: problem.status ?? response.status });\n }\n\n return new ZippyPayErrorClass({\n status: response.status,\n code: 'unknown',\n title: 'Request failed',\n detail: response.statusText || 'Request failed',\n });\n }\n}\n\nexport async function attachPayerWithRetry(\n client: PaymentSessionClient,\n paymentId: string,\n): Promise<PaymentSession> {\n try {\n return await client.attachPayer(paymentId);\n } catch (error) {\n if (!(error instanceof ZippyPayErrorClass) || error.code !== 'payment-session.payer-attached') {\n throw error;\n }\n const session = await client.getSession();\n if (session.payer?.paymentId === normalizePaymentId(paymentId)) {\n return session;\n }\n throw error;\n }\n}\n","import type { ZippyTheme } from '../types';\n\n/** Aligned with zippy-kyc-web-sdk `src/styles/tokens.css` */\nexport const DEFAULT_THEME: Required<Omit<ZippyTheme, 'mode'>> & {\n mode: ZippyTheme['mode'];\n primaryGradientEnd: string;\n primaryHover: string;\n primarySoft: string;\n surfaceMuted: string;\n radiusButton: string;\n radiusInput: string;\n radiusCard: string;\n} = {\n primary: '#3f63f3',\n primaryForeground: '#ffffff',\n primaryGradientEnd: '#6b84ff',\n primaryHover: '#2f4fd1',\n primarySoft: '#eef2ff',\n background: '#ffffff',\n surface: '#ffffff',\n surfaceMuted: '#f6f8fb',\n text: '#0f172a',\n textMuted: '#64748b',\n border: '#e2e8f0',\n error: '#dc2626',\n success: '#059669',\n borderRadius: '20px',\n radiusButton: '24px',\n radiusInput: '12px',\n radiusCard: '20px',\n fontFamily: \"'DM Sans', system-ui, -apple-system, sans-serif\",\n mode: 'light',\n};\n\nconst DARK_THEME_OVERRIDES: Partial<ZippyTheme> = {\n background: '#0f172a',\n surface: '#1e293b',\n text: '#f8fafc',\n textMuted: '#94a3b8',\n border: '#334155',\n};\n\nexport type ResolvedTheme = typeof DEFAULT_THEME;\n\nexport function resolveTheme(theme?: ZippyTheme): ResolvedTheme {\n const merged = { ...DEFAULT_THEME, ...theme };\n const prefersDark =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-color-scheme: dark)').matches;\n\n const effectiveMode =\n merged.mode === 'auto' ? (prefersDark ? 'dark' : 'light') : (merged.mode ?? 'light');\n\n if (effectiveMode === 'dark') {\n return { ...merged, ...DARK_THEME_OVERRIDES, mode: effectiveMode };\n }\n\n return { ...merged, mode: effectiveMode };\n}\n\nexport function applyThemeToHost(host: HTMLElement, theme?: ZippyTheme): void {\n const resolved = resolveTheme(theme);\n host.style.setProperty('--zippy-primary', resolved.primary);\n host.style.setProperty('--zippy-primary-foreground', resolved.primaryForeground);\n host.style.setProperty('--zippy-primary-gradient-end', resolved.primaryGradientEnd);\n host.style.setProperty('--zippy-primary-hover', resolved.primaryHover);\n host.style.setProperty('--zippy-primary-soft', resolved.primarySoft);\n host.style.setProperty('--zippy-background', resolved.background);\n host.style.setProperty('--zippy-surface', resolved.surface);\n host.style.setProperty('--zippy-surface-muted', resolved.surfaceMuted);\n host.style.setProperty('--zippy-text', resolved.text);\n host.style.setProperty('--zippy-text-muted', resolved.textMuted);\n host.style.setProperty('--zippy-border', resolved.border);\n host.style.setProperty('--zippy-error', resolved.error);\n host.style.setProperty('--zippy-success', resolved.success);\n host.style.setProperty('--zippy-radius', resolved.borderRadius);\n host.style.setProperty('--zippy-radius-button', resolved.radiusButton);\n host.style.setProperty('--zippy-radius-input', resolved.radiusInput);\n host.style.setProperty('--zippy-radius-card', resolved.radiusCard);\n host.style.setProperty('--zippy-font-family', resolved.fontFamily);\n}\n\nconst DM_SANS_IMPORT =\n \"@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&display=swap');\";\n\nexport const CHECKOUT_STYLES = `\n${DM_SANS_IMPORT}\n\n:host {\n display: block;\n font-family: var(--zippy-font-family);\n color: var(--zippy-text);\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\nbutton,\ninput {\n font-family: inherit;\n}\n\n.zippy-root {\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--zippy-background);\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-card);\n padding: 0;\n max-width: 420px;\n width: 100%;\n overflow: hidden;\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.04),\n 0 16px 48px -20px rgba(15, 23, 42, 0.18);\n}\n\n.zippy-root--terminal {\n display: block;\n padding: 32px 24px 28px;\n overflow: visible;\n}\n\n.zippy-root--paying {\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.zippy-root-body {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n min-height: 0;\n padding: 24px 24px 20px;\n}\n\n.zippy-payment-hero {\n margin-bottom: 22px;\n padding-bottom: 20px;\n text-align: center;\n border-bottom: 1px solid color-mix(in srgb, var(--zippy-border) 80%, transparent);\n}\n\n.zippy-payment-merchant {\n margin: 0 0 6px;\n font-size: 0.9375rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n line-height: 1.35;\n}\n\n.zippy-payment-amount {\n margin: 0;\n font-size: 2rem;\n font-weight: 700;\n letter-spacing: -0.04em;\n line-height: 1.05;\n color: var(--zippy-text);\n}\n\n.zippy-payment-subtitle {\n margin: 10px 0 0;\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--zippy-primary);\n letter-spacing: -0.01em;\n}\n\n.zippy-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n align-self: flex-start;\n margin: 0 0 2px;\n padding: 0.375rem 0.625rem 0.375rem 0.375rem;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n font: inherit;\n font-size: 0.8125rem;\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n transition:\n color 150ms ease,\n background-color 150ms ease;\n}\n\n.zippy-back-btn:hover:not(:disabled) {\n color: var(--zippy-text);\n background: color-mix(in srgb, var(--zippy-text-muted) 10%, transparent);\n}\n\n.zippy-back-btn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-back-btn:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.zippy-back-btn-icon {\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n}\n\n.zippy-choose {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin: 0;\n}\n\n.zippy-choose-mobile-app {\n display: flex;\n justify-content: center;\n width: 100%;\n padding-top: 2px;\n}\n\n.zippy-choose-mobile-app .zippy-mobile-app-pay-btn {\n max-width: none;\n}\n\n.zippy-choose-options {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n\n.zippy-method-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n min-height: 7.5rem;\n padding: 16px 10px;\n border: 1px solid var(--zippy-border);\n border-radius: 16px;\n background: var(--zippy-surface-muted);\n color: var(--zippy-text);\n cursor: pointer;\n text-align: center;\n transition:\n border-color 160ms ease,\n box-shadow 160ms ease,\n transform 160ms ease,\n background 160ms ease;\n}\n\n.zippy-method-card:hover {\n border-color: color-mix(in srgb, var(--zippy-primary) 40%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-primary-soft) 55%, white);\n box-shadow: 0 10px 28px -16px rgba(63, 99, 243, 0.45);\n transform: translateY(-1px);\n}\n\n.zippy-method-card:active {\n transform: translateY(0) scale(0.985);\n}\n\n.zippy-method-card:focus-visible {\n outline: 2px solid var(--zippy-primary);\n outline-offset: 2px;\n}\n\n.zippy-method-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n color: var(--zippy-primary);\n background: #ffffff;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--zippy-primary) 12%, var(--zippy-border));\n}\n\n.zippy-method-copy {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.zippy-method-title {\n font-size: 0.875rem;\n font-weight: 700;\n letter-spacing: -0.01em;\n}\n\n.zippy-method-hint {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n line-height: 1.35;\n}\n\n.zippy-flow {\n display: flex;\n flex-direction: column;\n gap: 18px;\n}\n\n.zippy-flow--centered {\n align-items: center;\n text-align: center;\n}\n\n.zippy-flow-awaiting {\n align-items: center;\n text-align: center;\n padding: 8px 0 4px;\n}\n\n.zippy-flow-awaiting .zippy-identity-card {\n width: 100%;\n text-align: left;\n}\n\n.zippy-pay-progress {\n flex-shrink: 0;\n width: 100%;\n height: 2px;\n margin: 0;\n border-radius: 0;\n background: color-mix(in srgb, var(--zippy-border) 55%, transparent);\n overflow: hidden;\n}\n\n.zippy-root--qr .zippy-pay-progress {\n height: 4px;\n}\n\n.zippy-pay-progress-fill {\n display: block;\n width: 100%;\n height: 100%;\n transform: scaleX(1);\n transform-origin: left center;\n background: var(--zippy-primary);\n transition: transform 1s linear;\n will-change: transform;\n}\n\n.zippy-flow-hint {\n width: 100%;\n max-width: 18rem;\n margin: 0 auto;\n padding: 0 0.5rem;\n font-size: 0.8125rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-qr-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 2px 0 4px;\n}\n\n.zippy-mobile-app-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n width: 100%;\n padding: 4px 0 8px;\n}\n\n.zippy-mobile-app-section .zippy-pay-timer-slot {\n margin: 0;\n}\n\n.zippy-mobile-app-pay-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 18rem;\n min-height: 3rem;\n padding: 0.75rem 1.25rem;\n border: 0;\n border-radius: 9999px;\n background: var(--zippy-primary);\n color: var(--zippy-primary-foreground);\n font-family: inherit;\n font-size: 1rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n cursor: pointer;\n transition:\n background-color 150ms ease,\n opacity 150ms ease,\n transform 150ms ease;\n}\n\n.zippy-mobile-app-pay-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-primary) 88%, #000);\n}\n\n.zippy-mobile-app-pay-btn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-mobile-app-pay-btn:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-mobile-app-pay-btn--opening {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.625rem;\n cursor: wait;\n}\n\n.zippy-mobile-app-pay-btn--opening:disabled {\n opacity: 1;\n}\n\n.zippy-mobile-app-pay-btn--opening .zippy-mobile-app-pay-btn-spinner {\n width: 1rem;\n height: 1rem;\n border-color: color-mix(in srgb, var(--zippy-primary-foreground) 35%, transparent);\n border-top-color: var(--zippy-primary-foreground);\n}\n\n.zippy-mobile-app-opened-hint {\n margin: 0;\n max-width: 18rem;\n font-size: 0.9375rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-mobile-app-method-switching {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 8px 0;\n}\n\n.zippy-mobile-app-method-switching-title {\n margin: 0;\n font-size: 0.9375rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-mobile-app-handoff-failed {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n width: 100%;\n padding: 4px 0;\n}\n\n.zippy-mobile-app-handoff-message {\n margin: 0;\n max-width: 20rem;\n font-size: 0.9375rem;\n line-height: 1.45;\n color: var(--zippy-text);\n text-align: center;\n}\n\n.zippy-mobile-app-handoff-failed .zippy-install-zippy-btn {\n margin-top: 6px;\n}\n\n.zippy-install-zippy-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 18rem;\n min-height: 3rem;\n padding: 0.75rem 1.25rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-button);\n background: var(--zippy-surface);\n color: var(--zippy-text);\n font-family: inherit;\n font-size: 1rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n cursor: pointer;\n transition:\n background-color 150ms ease,\n border-color 150ms ease;\n}\n\n.zippy-install-zippy-btn:hover {\n background: color-mix(in srgb, var(--zippy-surface) 92%, var(--zippy-text));\n}\n\n.zippy-install-zippy-btn:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-mobile-app-fallback {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n width: 100%;\n margin-top: 4px;\n}\n\n.zippy-mobile-app-fallback-label {\n margin: 0;\n font-size: 0.8125rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-choose-options--compact {\n gap: 10px;\n}\n\n.zippy-mobile-app-retry {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--zippy-primary);\n font-family: inherit;\n font-size: 0.875rem;\n font-weight: 600;\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n}\n\n.zippy-mobile-app-retry:hover {\n color: color-mix(in srgb, var(--zippy-primary) 82%, #000);\n}\n\n.zippy-mobile-app-retry:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-pay-timer-slot {\n display: flex;\n justify-content: center;\n width: 100%;\n min-height: 3.5rem;\n margin: -6px 0 10px;\n}\n\n.zippy-qr-section .zippy-pay-timer-slot {\n margin: 0;\n}\n\n.zippy-pay-timer {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.25rem;\n min-width: 6.75rem;\n padding: 0.5625rem 1.25rem 0.5rem;\n border-radius: 16px;\n background: var(--zippy-primary-soft);\n border: 1px solid color-mix(in srgb, var(--zippy-primary) 14%, transparent);\n color: var(--zippy-primary);\n}\n\n.zippy-pay-timer-label {\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.2;\n letter-spacing: 0;\n white-space: nowrap;\n color: color-mix(in srgb, var(--zippy-primary) 72%, var(--zippy-text-muted));\n}\n\n.zippy-pay-timer-value {\n font-size: 1.25rem;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n letter-spacing: -0.01em;\n text-align: center;\n line-height: 1;\n white-space: nowrap;\n}\n\n.zippy-qr-frame {\n display: inline-block;\n padding: 16px;\n background: #ffffff;\n border: 1px solid var(--zippy-border);\n border-radius: 20px;\n line-height: 0;\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.04),\n 0 12px 32px -14px rgba(63, 99, 243, 0.22);\n}\n\n.zippy-qr-stack {\n position: relative;\n display: inline-block;\n line-height: 0;\n}\n\n.zippy-qr-stack > svg {\n display: block;\n width: 196px;\n height: 196px;\n}\n\n.zippy-qr-awaiting {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 4px;\n}\n\n.zippy-qr-awaiting-spinner {\n display: block;\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid var(--zippy-border);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.8s linear infinite;\n}\n\n.zippy-id-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 0;\n}\n\n.zippy-input-combo {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 3rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-button);\n background: var(--zippy-surface-muted);\n overflow: hidden;\n transition:\n border-color 150ms ease,\n box-shadow 150ms ease,\n background 150ms ease;\n}\n\n.zippy-input-combo:focus-within {\n border-color: var(--zippy-primary);\n background: var(--zippy-background);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-primary) 14%, transparent);\n}\n\n.zippy-input-combo--verified {\n border-color: color-mix(in srgb, var(--zippy-success) 35%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-success) 6%, var(--zippy-background));\n}\n\n.zippy-input-combo--verified:focus-within {\n border-color: color-mix(in srgb, var(--zippy-success) 45%, var(--zippy-primary));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-success) 12%, transparent);\n}\n\n.zippy-input-combo-input-wrap {\n position: relative;\n flex: 1;\n min-width: 0;\n align-self: stretch;\n display: flex;\n align-items: center;\n}\n\n.zippy-input-combo-field {\n flex: 1;\n min-width: 0;\n width: 100%;\n padding: 0.75rem 0.875rem;\n font-family: inherit;\n font-size: 1rem;\n line-height: 1.25;\n color: var(--zippy-text);\n border: none;\n background: transparent;\n outline: none;\n transition: padding-right 150ms ease;\n}\n\n.zippy-input-combo-input-wrap--has-value .zippy-input-combo-field {\n padding-right: 2.375rem;\n}\n\n.zippy-input-combo-field::placeholder {\n color: var(--zippy-text-muted);\n}\n\n.zippy-input-combo-field:focus,\n.zippy-input-combo-field:focus-visible {\n outline: none;\n}\n\n.zippy-input-combo-field:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.zippy-input-combo-clear {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0.375rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n margin-top: auto;\n margin-bottom: auto;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n cursor: pointer;\n appearance: none;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition:\n background-color 150ms ease,\n color 150ms ease,\n opacity 150ms ease,\n visibility 150ms ease;\n}\n\n.zippy-input-combo-input-wrap--has-value .zippy-input-combo-clear {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n}\n\n.zippy-input-combo-clear:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-text-muted) 16%, transparent);\n color: var(--zippy-text);\n}\n\n.zippy-input-combo-clear:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 1px;\n}\n\n.zippy-input-combo-clear:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.zippy-input-combo-clear-icon {\n display: block;\n width: 0.875rem;\n height: 0.875rem;\n flex-shrink: 0;\n}\n\n.zippy-input-combo-divider {\n flex-shrink: 0;\n align-self: center;\n width: 1px;\n height: 1.375rem;\n background: var(--zippy-border);\n}\n\n.zippy-input-combo--verified .zippy-input-combo-divider {\n background: color-mix(in srgb, var(--zippy-success) 25%, var(--zippy-border));\n}\n\n.zippy-input-combo-action {\n flex-shrink: 0;\n min-width: 5.25rem;\n padding: 0 1rem;\n font-family: inherit;\n font-size: 0.875rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--zippy-primary);\n background: transparent;\n border: none;\n cursor: pointer;\n transition:\n background 150ms ease,\n color 150ms ease,\n opacity 150ms ease;\n}\n\n.zippy-input-combo-action:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-primary) 8%, transparent);\n}\n\n.zippy-input-combo-action:disabled {\n color: var(--zippy-text-muted);\n cursor: default;\n}\n\n.zippy-input-combo--verified .zippy-input-combo-action:disabled {\n color: var(--zippy-success);\n}\n\n.zippy-input-combo-action--verified {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 3rem;\n padding: 0 0.875rem;\n color: var(--zippy-success);\n}\n\n.zippy-input-combo-action--verified:disabled {\n opacity: 1;\n}\n\n.zippy-input-combo-check {\n display: block;\n width: 1.125rem;\n height: 1.125rem;\n}\n\n.zippy-input-combo-action--loading {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.zippy-input-combo-action--loading:disabled {\n opacity: 1;\n color: var(--zippy-primary);\n}\n\n.zippy-spinner-inline {\n width: 1rem;\n height: 1rem;\n border: 2px solid color-mix(in srgb, var(--zippy-primary) 18%, transparent);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.7s linear infinite;\n}\n\n.zippy-input-combo--error {\n border-color: color-mix(in srgb, var(--zippy-error) 55%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-error) 5%, var(--zippy-background));\n}\n\n.zippy-input-combo--error:focus-within {\n border-color: var(--zippy-error);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-error) 14%, transparent);\n}\n\n.zippy-input-combo--error .zippy-input-combo-divider {\n background: color-mix(in srgb, var(--zippy-error) 25%, var(--zippy-border));\n}\n\n.zippy-field-error {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: -4px 0 0;\n padding: 0.5rem 0.875rem;\n font-size: 0.8125rem;\n line-height: 1.45;\n color: var(--zippy-error);\n background: color-mix(in srgb, var(--zippy-error) 8%, var(--zippy-background));\n border: 1px solid color-mix(in srgb, var(--zippy-error) 18%, var(--zippy-border));\n border-radius: 999px;\n}\n\n.zippy-field-error-icon {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n border-radius: 50%;\n font-size: 0.6875rem;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n background: var(--zippy-error);\n}\n\n.zippy-field-hint {\n margin: 0;\n font-size: 0.75rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n}\n\n.zippy-query-hint {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px 14px;\n border-radius: calc(var(--zippy-radius-input) + 2px);\n background: color-mix(in srgb, var(--zippy-text-muted) 5%, var(--zippy-surface-muted));\n border: 1px solid color-mix(in srgb, var(--zippy-border) 85%, transparent);\n}\n\n.zippy-query-hint-lead {\n margin: 0;\n font-size: 0.75rem;\n font-weight: 600;\n line-height: 1.4;\n color: var(--zippy-text-muted);\n}\n\n.zippy-query-hint-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.zippy-query-hint-item {\n display: grid;\n grid-template-columns: minmax(4.5rem, 5.25rem) minmax(0, 1fr);\n align-items: start;\n gap: 8px 10px;\n}\n\n.zippy-query-hint-label {\n padding-top: 0.1875rem;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n}\n\n.zippy-query-hint-example-wrap {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 3px;\n min-width: 0;\n}\n\n.zippy-query-hint-example {\n display: inline-block;\n max-width: 100%;\n padding: 0.1875rem 0.5rem;\n border-radius: 999px;\n background: var(--zippy-background);\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.35;\n color: var(--zippy-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.zippy-query-hint-note {\n font-size: 0.6875rem;\n line-height: 1.35;\n color: var(--zippy-text-muted);\n}\n\n.zippy-picker-lead {\n margin: 0;\n font-size: 0.8125rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n}\n\n.zippy-picker-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n}\n\n.zippy-picker-option {\n display: block;\n width: 100%;\n padding: 0;\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n border-radius: calc(var(--zippy-radius-input) + 2px);\n background: var(--zippy-surface);\n text-align: left;\n cursor: pointer;\n transition:\n border-color 150ms ease,\n background-color 150ms ease,\n box-shadow 150ms ease;\n}\n\n.zippy-picker-option:hover:not(:disabled) {\n border-color: color-mix(in srgb, var(--zippy-primary) 35%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-primary) 4%, var(--zippy-surface));\n}\n\n.zippy-picker-option:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-picker-option:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-picker-option .zippy-identity-card {\n margin: 0;\n border: 0;\n background: transparent;\n}\n\n.zippy-idle-hint {\n margin: -6px 0 0;\n font-size: 0.8125rem;\n color: var(--zippy-text-muted);\n text-align: center;\n line-height: 1.45;\n}\n\n.zippy-identity-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n border-radius: 16px;\n background: var(--zippy-surface-muted);\n border: 1px solid var(--zippy-border);\n}\n\n.zippy-identity-card--dismissible {\n position: relative;\n padding-right: 2.75rem;\n}\n\n.zippy-identity-card-dismiss {\n position: absolute;\n top: 50%;\n right: 10px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n cursor: pointer;\n appearance: none;\n transform: translateY(-50%);\n transition:\n background-color 0.15s ease,\n color 0.15s ease;\n}\n\n.zippy-identity-card-dismiss:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-text-muted) 16%, transparent);\n color: var(--zippy-text);\n}\n\n.zippy-identity-card-dismiss:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-identity-card-dismiss:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.zippy-identity-card-dismiss-icon {\n display: block;\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n}\n\n.zippy-identity-avatar {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.0625rem;\n font-weight: 700;\n color: var(--zippy-primary);\n background: #fff;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--zippy-primary) 14%, var(--zippy-border));\n}\n\n.zippy-identity-avatar--photo {\n padding: 0;\n overflow: hidden;\n color: transparent;\n background: var(--zippy-surface-muted);\n}\n\n.zippy-identity-avatar-image {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.zippy-identity-label {\n margin: 0 0 2px;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n}\n\n.zippy-identity-name {\n margin: 0 0 2px;\n font-size: 1rem;\n font-weight: 700;\n color: var(--zippy-text);\n letter-spacing: -0.01em;\n}\n\n.zippy-identity-handle {\n margin: 0;\n font-size: 0.8125rem;\n color: var(--zippy-text-muted);\n}\n\n.zippy-identity-chip {\n padding: 0.45rem 0.875rem;\n border-radius: 999px;\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--zippy-primary);\n background: var(--zippy-primary-soft);\n}\n\n.zippy-awaiting-status {\n padding: 4px 0 8px;\n}\n\n.zippy-awaiting-ring {\n position: relative;\n width: 56px;\n height: 56px;\n margin: 0 auto;\n}\n\n.zippy-awaiting-ring::before,\n.zippy-awaiting-ring span {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: 50%;\n}\n\n.zippy-awaiting-ring::before {\n border: 2px solid var(--zippy-primary-soft);\n}\n\n.zippy-awaiting-ring span {\n border: 2px solid transparent;\n border-top-color: var(--zippy-primary);\n animation: zippy-spin 0.9s linear infinite;\n}\n\n.zippy-awaiting-message {\n margin: 0;\n max-width: 18rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n}\n\n.zippy-footnote {\n width: 100%;\n max-width: 18rem;\n margin: 0 auto;\n padding: 0 0.5rem;\n font-size: 0.75rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-flow--centered .zippy-identity-card {\n width: 100%;\n text-align: left;\n}\n\n.zippy-brand-footer {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n margin-top: auto;\n padding-top: 14px;\n}\n\n.zippy-root--terminal .zippy-brand-footer {\n margin-top: 20px;\n padding-top: 18px;\n border-top: 1px solid color-mix(in srgb, var(--zippy-border) 80%, transparent);\n}\n\n.zippy-app-links {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n width: 100%;\n}\n\n.zippy-app-links-label {\n margin: 0;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n}\n\n.zippy-app-links-badges {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n}\n\n.zippy-app-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-width: 0;\n flex: 1 1 8.5rem;\n max-width: 11rem;\n min-height: 2rem;\n padding: 0.375rem 0.625rem;\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n border-radius: 999px;\n background: var(--zippy-surface);\n color: var(--zippy-text);\n font: inherit;\n font-size: 0.6875rem;\n font-weight: 600;\n line-height: 1;\n text-decoration: none;\n appearance: none;\n cursor: pointer;\n transition:\n border-color 0.15s ease,\n background-color 0.15s ease,\n color 0.15s ease;\n}\n\n.zippy-app-link--icon-only {\n flex: 0 0 auto;\n width: 2.375rem;\n min-width: 2.375rem;\n max-width: 2.375rem;\n height: 2.375rem;\n min-height: 2.375rem;\n padding: 0;\n border-radius: 999px;\n}\n\n.zippy-app-link--icon-only .zippy-app-link-icon {\n width: 1rem;\n height: 1rem;\n}\n\n.zippy-app-link--icon-only .zippy-app-link-icon--play {\n width: 0.9375rem;\n height: 1.0625rem;\n}\n\n.zippy-app-link:hover {\n border-color: color-mix(in srgb, var(--zippy-primary) 35%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-primary) 6%, var(--zippy-surface));\n color: var(--zippy-text);\n}\n\n.zippy-app-link:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-app-link-icon {\n flex-shrink: 0;\n width: 0.875rem;\n height: 0.875rem;\n}\n\n.zippy-app-link-icon--play {\n width: 0.8125rem;\n height: 0.9375rem;\n}\n\n.zippy-app-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 2147482000;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(15, 23, 42, 0.58);\n animation: zippy-app-modal-fade 0.18s ease-out;\n}\n\n.zippy-app-modal-panel {\n position: relative;\n width: min(100%, 22rem);\n max-height: calc(100vh - 32px);\n overflow: auto;\n padding: 22px 20px 20px;\n border: 1px solid var(--zippy-border);\n border-radius: calc(var(--zippy-radius-card) - 2px);\n background: var(--zippy-background);\n color: var(--zippy-text);\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.05),\n 0 24px 56px -24px rgba(15, 23, 42, 0.35);\n animation: zippy-app-modal-in 0.2s ease-out;\n}\n\n.zippy-app-modal-close {\n position: absolute;\n top: 10px;\n right: 10px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--zippy-text-muted);\n cursor: pointer;\n appearance: none;\n transition:\n background-color 0.15s ease,\n color 0.15s ease;\n}\n\n.zippy-app-modal-close-icon {\n display: block;\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n}\n\n.zippy-app-modal-close:hover {\n background: color-mix(in srgb, var(--zippy-text-muted) 16%, transparent);\n color: var(--zippy-text);\n}\n\n.zippy-app-modal-close:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-app-modal-header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 16px;\n padding-right: 1.75rem;\n}\n\n.zippy-app-modal-platform-icon {\n flex-shrink: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 2px;\n color: var(--zippy-text);\n}\n\n.zippy-app-modal-platform-icon--play {\n width: 1.75rem;\n height: 1.9375rem;\n}\n\n.zippy-app-modal-heading {\n min-width: 0;\n}\n\n.zippy-app-modal-title {\n margin: 0 0 6px;\n font-size: 1.0625rem;\n font-weight: 700;\n letter-spacing: -0.02em;\n line-height: 1.25;\n}\n\n.zippy-app-modal-lead {\n margin: 0;\n font-size: 0.8125rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n}\n\n.zippy-app-modal-qr-wrap {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n margin-bottom: 16px;\n width: 100%;\n}\n\n.zippy-app-modal-qr-frame {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 12.5rem;\n aspect-ratio: 1;\n padding: 14px;\n border: 1px solid color-mix(in srgb, var(--zippy-border) 90%, transparent);\n border-radius: 16px;\n background: #ffffff;\n}\n\n.zippy-app-modal-qr-frame .zippy-qr-stack {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n line-height: 0;\n}\n\n.zippy-app-modal-qr-frame .zippy-qr-stack > svg {\n display: block;\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n}\n\n.zippy-app-modal-qr-hint {\n margin: 0;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-app-modal-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.zippy-app-modal-cta {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.75rem;\n padding: 0.625rem 1rem;\n border-radius: 999px;\n background: var(--zippy-primary);\n color: var(--zippy-primary-foreground);\n font-size: 0.875rem;\n font-weight: 700;\n line-height: 1.2;\n text-decoration: none;\n transition: background-color 0.15s ease, transform 0.15s ease;\n}\n\n.zippy-app-modal-cta:hover {\n background: color-mix(in srgb, var(--zippy-primary) 88%, #000000);\n transform: translateY(-1px);\n}\n\n.zippy-app-modal-cta:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n outline-offset: 2px;\n}\n\n.zippy-app-modal-mobile-note {\n margin: 0;\n font-size: 0.75rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-app-modal-overlay--mobile .zippy-app-modal-qr-wrap {\n opacity: 0.92;\n}\n\n@keyframes zippy-app-modal-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes zippy-app-modal-in {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n.zippy-brand-footer-inner {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-height: 1.375rem;\n padding: 0.1875rem 0.5rem;\n border-radius: 999px;\n color: var(--zippy-text-muted);\n background: color-mix(in srgb, var(--zippy-text-muted) 6%, transparent);\n opacity: 0.72;\n}\n\n.zippy-brand-secure {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.zippy-brand-divider {\n flex-shrink: 0;\n align-self: center;\n width: 1px;\n height: 0.625rem;\n background: color-mix(in srgb, var(--zippy-text-muted) 24%, transparent);\n}\n\n.zippy-brand-lock {\n flex-shrink: 0;\n display: block;\n width: 0.625rem;\n height: 0.625rem;\n}\n\n.zippy-brand-copy,\n.zippy-brand-name {\n font-size: 0.625rem;\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: 1;\n white-space: nowrap;\n}\n\n.zippy-brand-name {\n font-weight: 600;\n}\n\n.zippy-label {\n display: block;\n font-size: 0.8125rem;\n font-weight: 600;\n margin: 0;\n color: var(--zippy-text);\n}\n\n.zippy-input {\n width: 100%;\n min-height: 2.875rem;\n padding: 0.6875rem 0.875rem;\n font-size: 1rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-input);\n background: var(--zippy-background);\n color: var(--zippy-text);\n outline: none;\n transition: border-color 150ms ease, box-shadow 150ms ease;\n}\n\n.zippy-input:focus {\n border-color: var(--zippy-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-primary) 16%, transparent);\n}\n\n.zippy-input:focus-visible {\n outline: 2px solid var(--zippy-primary);\n outline-offset: 2px;\n}\n\n.zippy-input:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-error-text {\n font-size: 0.8125rem;\n color: var(--zippy-error);\n margin: 0;\n}\n\n.zippy-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.875rem;\n padding: 0.6875rem 1.25rem;\n font-size: 0.9375rem;\n font-weight: 600;\n border-radius: var(--zippy-radius-button);\n border: none;\n cursor: pointer;\n transition:\n background 150ms ease,\n transform 150ms ease,\n box-shadow 150ms ease;\n}\n\n.zippy-btn:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-btn:not(:disabled):active {\n transform: scale(0.985);\n}\n\n.zippy-btn-block {\n width: 100%;\n}\n\n.zippy-btn-primary {\n background: linear-gradient(\n 135deg,\n var(--zippy-primary) 0%,\n var(--zippy-primary-gradient-end) 100%\n );\n color: var(--zippy-primary-foreground);\n box-shadow: 0 4px 14px -4px color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n}\n\n.zippy-btn-primary:hover:not(:disabled) {\n background: linear-gradient(\n 135deg,\n var(--zippy-primary-hover) 0%,\n var(--zippy-primary) 100%\n );\n}\n\n.zippy-status {\n text-align: center;\n padding: 16px 0 8px;\n}\n\n.zippy-status-icon {\n width: 56px;\n height: 56px;\n margin: 0 auto 18px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zippy-status-icon.loading {\n background: transparent;\n width: auto;\n height: auto;\n margin: 0 auto 14px;\n}\n\n.zippy-status-icon.success {\n background: color-mix(in srgb, var(--zippy-success) 14%, transparent);\n color: var(--zippy-success);\n}\n\n.zippy-status-icon.failure,\n.zippy-status-icon.error {\n background: color-mix(in srgb, var(--zippy-error) 12%, transparent);\n color: var(--zippy-error);\n}\n\n.zippy-status-title {\n font-size: 1.125rem;\n font-weight: 700;\n margin: 0 0 8px;\n letter-spacing: -0.02em;\n}\n\n.zippy-status-detail {\n font-size: 0.875rem;\n color: var(--zippy-text-muted);\n margin: 0;\n line-height: 1.5;\n}\n\n.zippy-transaction-ref {\n margin: 18px auto 0;\n max-width: 100%;\n padding: 12px 14px;\n border-radius: calc(var(--zippy-radius) * 0.75);\n background: var(--zippy-surface-muted);\n text-align: center;\n}\n\n.zippy-transaction-ref-label {\n margin: 0 0 4px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.zippy-transaction-ref-value {\n margin: 0;\n font-size: 0.875rem;\n font-weight: 600;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: var(--zippy-text);\n word-break: break-all;\n}\n\n.zippy-status-exit {\n margin: 20px 0 0;\n font-size: 0.875rem;\n color: var(--zippy-text-muted);\n line-height: 1.5;\n}\n\n.zippy-status-exit-countdown {\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n color: var(--zippy-text);\n}\n\n.zippy-spinner {\n width: 24px;\n height: 24px;\n border: 3px solid var(--zippy-border);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.8s linear infinite;\n}\n\n@keyframes zippy-spin {\n to { transform: rotate(360deg); }\n}\n`;\n\nexport const MODAL_STYLES = `\n.zippy-overlay {\n position: fixed;\n inset: 0;\n background: rgba(15, 23, 42, 0.55);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n z-index: 2147483000;\n}\n\n.zippy-modal-panel {\n max-width: 460px;\n width: 100%;\n animation: zippy-modal-in 0.2s ease-out;\n}\n\n@keyframes zippy-modal-in {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n`;\n","import type { ZippyPayConfig } from '../types';\nimport { resolveContainer } from '../utils';\nimport { MODAL_STYLES } from '../theme';\n\nexport type EmbedHost = {\n host: HTMLElement;\n overlay: HTMLElement | null;\n escapeHandler: ((event: KeyboardEvent) => void) | null;\n destroy: () => void;\n};\n\nexport function createEmbedHost(config: ZippyPayConfig): EmbedHost {\n const mode = config.mode ?? 'inline';\n\n if (mode === 'modal') {\n return createModalHost(config);\n }\n\n if (!config.container) {\n throw new Error('Zippy Pay: `container` is required when mode is \"inline\".');\n }\n\n const container = resolveContainer(config.container);\n container.innerHTML = '';\n const host = document.createElement('div');\n host.className = 'zippy-inline-host';\n container.appendChild(host);\n\n return {\n host,\n overlay: null,\n escapeHandler: null,\n destroy: () => {\n host.remove();\n },\n };\n}\n\nfunction createModalHost(config: ZippyPayConfig): EmbedHost {\n const overlay = document.createElement('div');\n overlay.className = 'zippy-overlay';\n overlay.setAttribute('role', 'dialog');\n overlay.setAttribute('aria-modal', 'true');\n overlay.setAttribute('aria-label', 'Zippy Pay checkout');\n overlay.style.display = 'none';\n\n const style = document.createElement('style');\n style.textContent = MODAL_STYLES;\n overlay.appendChild(style);\n\n const panel = document.createElement('div');\n panel.className = 'zippy-modal-panel';\n const host = document.createElement('div');\n host.className = 'zippy-modal-host';\n panel.appendChild(host);\n overlay.appendChild(panel);\n document.body.appendChild(overlay);\n\n const closeOnBackdrop = config.closeOnBackdropClick ?? false;\n if (closeOnBackdrop) {\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) {\n config.onClose?.();\n }\n });\n }\n\n const embedHost: EmbedHost = {\n host,\n overlay,\n escapeHandler: null,\n destroy: () => {\n if (embedHost.escapeHandler) {\n document.removeEventListener('keydown', embedHost.escapeHandler);\n }\n overlay.remove();\n document.body.style.overflow = '';\n },\n };\n\n return embedHost;\n}\n\nexport function showModal(embed: EmbedHost, config: ZippyPayConfig, onClose: () => void): void {\n if (!embed.overlay) {\n return;\n }\n embed.overlay.style.display = 'flex';\n document.body.style.overflow = 'hidden';\n\n const closeOnEscape = config.closeOnEscape ?? false;\n if (closeOnEscape && !embed.escapeHandler) {\n embed.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onClose();\n }\n };\n document.addEventListener('keydown', embed.escapeHandler);\n }\n\n const focusable = embed.host.querySelector<HTMLElement>('input, button');\n focusable?.focus();\n}\n\nexport function hideModal(embed: EmbedHost): void {\n if (!embed.overlay) {\n return;\n }\n embed.overlay.style.display = 'none';\n document.body.style.overflow = '';\n if (embed.escapeHandler) {\n document.removeEventListener('keydown', embed.escapeHandler);\n embed.escapeHandler = null;\n }\n}\n","import type { PaymentSession, PaymentSessionStatus } from '../types';\nimport { POLLABLE_STATUSES, TERMINAL_STATUSES } from '../types';\n\nexport type PollerOptions = {\n intervalMs?: number;\n hiddenIntervalMs?: number;\n onUpdate: (session: PaymentSession) => void;\n onError?: (error: unknown) => void;\n shouldPoll?: (session: PaymentSession) => boolean;\n};\n\nexport class SessionPoller {\n private timer: ReturnType<typeof setTimeout> | null = null;\n private running = false;\n private stopped = false;\n\n constructor(\n private readonly fetchSession: () => Promise<PaymentSession>,\n private readonly options: PollerOptions,\n ) {}\n\n start(initialSession?: PaymentSession): void {\n if (this.running) {\n return;\n }\n this.running = true;\n this.stopped = false;\n if (initialSession) {\n this.options.onUpdate(initialSession);\n if (!this.shouldContinue(initialSession)) {\n this.stop();\n return;\n }\n }\n void this.tick();\n }\n\n stop(): void {\n this.stopped = true;\n this.running = false;\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n private shouldContinue(session: PaymentSession): boolean {\n if (this.options.shouldPoll) {\n return this.options.shouldPoll(session);\n }\n return POLLABLE_STATUSES.includes(session.status);\n }\n\n private intervalMs(): number {\n const base = this.options.intervalMs ?? 3000;\n const hidden = this.options.hiddenIntervalMs ?? 10000;\n return typeof document !== 'undefined' && document.hidden ? hidden : base;\n }\n\n private scheduleNext(): void {\n if (this.stopped) {\n return;\n }\n this.timer = setTimeout(() => {\n void this.tick();\n }, this.intervalMs());\n }\n\n private async tick(): Promise<void> {\n if (this.stopped) {\n return;\n }\n try {\n const session = await this.fetchSession();\n this.options.onUpdate(session);\n if (!this.shouldContinue(session)) {\n this.stop();\n return;\n }\n } catch (error) {\n this.options.onError?.(error);\n }\n this.scheduleNext();\n }\n}\n\nexport function isTerminalStatus(status: PaymentSessionStatus): boolean {\n return TERMINAL_STATUSES.includes(status);\n}\n\nexport function phaseFromSession(status: PaymentSessionStatus): import('../types').CheckoutPhase {\n switch (status) {\n case 'CREATED':\n return 'choose-method';\n case 'AWAITING_PAYMENT':\n return 'awaiting';\n case 'COMPLETED':\n return 'success';\n case 'EXPIRED':\n return 'expired';\n case 'CANCELLED':\n return 'cancelled';\n case 'FAILED':\n return 'failed';\n default:\n return 'error';\n }\n}\n\nexport function msUntilExpiry(expiresAt: string): number {\n return Math.max(0, new Date(expiresAt).getTime() - Date.now());\n}\n","import type { CheckoutPhase, PaymentSession } from '../types';\nimport { TERMINAL_STATUSES } from '../types';\n\n/** Pay countdown target — only after checkout has started. */\nexport function getCountdownTarget(session: PaymentSession): string | null {\n if (session.phase === 'PAYING' && session.paymentExpiryAt) {\n return session.paymentExpiryAt;\n }\n return null;\n}\n\nconst PAY_PROGRESS_PHASES: CheckoutPhase[] = [\n 'qr-active',\n 'mobile-app-active',\n 'awaiting',\n 'manual-confirm',\n];\n\nconst NO_PROGRESS_PHASES: CheckoutPhase[] = [\n 'loading',\n 'choose-method',\n 'manual-entry',\n 'manual-picker',\n 'success',\n 'expired',\n 'cancelled',\n 'declined',\n 'failed',\n 'invalid-session',\n 'error',\n];\n\n/** Whether the checkout UI should show the pay-window progress bar. */\nexport function shouldShowPayProgress(\n session: PaymentSession | null,\n phase: CheckoutPhase,\n): boolean {\n if (!session?.paymentExpiryAt || NO_PROGRESS_PHASES.includes(phase)) {\n return false;\n }\n\n if (TERMINAL_STATUSES.includes(session.status)) {\n return false;\n }\n\n if (msUntil(session.paymentExpiryAt) <= 0) {\n return false;\n }\n\n if (getCountdownTarget(session)) {\n return true;\n }\n\n return PAY_PROGRESS_PHASES.includes(phase);\n}\n\n/** Remaining pay-window ratio (1 = full time left, 0 = expired). */\nexport function getPayWindowRemainingRatio(session: PaymentSession): number | null {\n if (!session.paymentExpiryAt) {\n return null;\n }\n\n const expiresAt = session.paymentExpiryAt;\n const end = new Date(expiresAt).getTime();\n const start = session.paymentStartAt\n ? new Date(session.paymentStartAt).getTime()\n : end - 5 * 60 * 1000;\n const total = end - start;\n\n if (total <= 0) {\n return 0;\n }\n\n return Math.min(1, Math.max(0, msUntil(expiresAt) / total));\n}\n\n/** Idle shelf deadline — show soft hint only, not a pay countdown. */\nexport function getSoftIdleHint(session: PaymentSession): string | null {\n if (session.phase === 'IDLE' && session.expiresAt) {\n return session.expiresAt;\n }\n return null;\n}\n\nexport function msUntil(iso: string): number {\n return Math.max(0, new Date(iso).getTime() - Date.now());\n}\n","import type { CheckoutSurface } from '../types';\n\nexport type MobileStorePlatform = 'ios' | 'android';\n\n/** True when checkout runs on a phone-sized touch device. */\nexport function isPhoneDevice(): boolean {\n return detectCheckoutSurface() === 'phone';\n}\n\n/** Best-effort store platform for contextual install links on phone. */\nexport function detectMobileStorePlatform(): MobileStorePlatform {\n if (typeof navigator === 'undefined') {\n return 'android';\n }\n\n const ua = navigator.userAgent ?? '';\n const isIos =\n /iPad|iPhone|iPod/.test(ua) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n\n return isIos ? 'ios' : 'android';\n}\n\n/** True when the browser reports an Android user agent. */\nexport function isAndroidDevice(): boolean {\n if (typeof navigator === 'undefined') {\n return false;\n }\n\n return /Android/i.test(navigator.userAgent ?? '');\n}\n\nexport function detectCheckoutSurface(): CheckoutSurface {\n if (typeof window === 'undefined') {\n return 'desktop';\n }\n\n const narrow = window.matchMedia('(max-width: 520px)').matches;\n const coarse = window.matchMedia('(pointer: coarse)').matches;\n return narrow && coarse ? 'phone' : 'desktop';\n}\n\nexport function subscribeCheckoutSurface(\n onChange: (surface: CheckoutSurface) => void,\n): () => void {\n if (typeof window === 'undefined') {\n return () => {};\n }\n\n const mediaQueries = [\n window.matchMedia('(max-width: 520px)'),\n window.matchMedia('(pointer: coarse)'),\n ];\n\n const notify = (): void => {\n onChange(detectCheckoutSurface());\n };\n\n for (const query of mediaQueries) {\n query.addEventListener('change', notify);\n }\n window.addEventListener('orientationchange', notify);\n window.addEventListener('resize', notify);\n\n return () => {\n for (const query of mediaQueries) {\n query.removeEventListener('change', notify);\n }\n window.removeEventListener('orientationchange', notify);\n window.removeEventListener('resize', notify);\n };\n}\n","import type {\n ApiCheckoutMethod,\n ApiMobileAppPolicy,\n BindCheckoutPolicyRequest,\n BoundCheckoutPolicy,\n CheckoutPolicy,\n CheckoutSurface,\n PaymentSession,\n ZippyMobileAppConfig,\n} from '../types';\nimport { detectCheckoutSurface } from './device';\n\nexport type EntryRoutingAction = 'chooser' | 'auto-qr' | 'auto-manual' | 'enforce-mobile-app';\n\nexport type MethodAvailability = {\n qr: boolean;\n manual: boolean;\n mobileApp: boolean;\n};\n\nexport type ResolvedCheckoutUiOptions = {\n checkoutPolicy: BoundCheckoutPolicy;\n mobileAppPolicy: ApiMobileAppPolicy;\n surface: CheckoutSurface;\n methodAvailability: MethodAvailability;\n allowManualBack: boolean;\n};\n\nexport type AppClaimCheckoutMethod = Extract<ApiCheckoutMethod, 'QR' | 'MOBILE_APP'>;\n\nexport function isCheckoutPolicyBound(session: PaymentSession): boolean {\n return session.checkoutPolicy != null || session.mobileAppPolicy != null;\n}\n\nexport function isFullChooserPolicy(checkoutPolicy: BoundCheckoutPolicy): boolean {\n return checkoutPolicy == null;\n}\n\nexport function allowsQrCheckoutPolicy(checkoutPolicy: BoundCheckoutPolicy): boolean {\n return checkoutPolicy == null || checkoutPolicy === 'QR';\n}\n\nexport function allowsManualCheckoutPolicy(checkoutPolicy: BoundCheckoutPolicy): boolean {\n return checkoutPolicy == null || checkoutPolicy === 'MANUAL';\n}\n\n/** Phone + ENFORCE → app-only auto-start for full chooser, QR, or MANUAL bind. */\nfunction phoneEnforceAutoApp(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n): boolean {\n return (\n mobileAppPolicy === 'ENFORCE' &&\n (checkoutPolicy == null || checkoutPolicy === 'QR' || checkoutPolicy === 'MANUAL')\n );\n}\n\nexport function resolveMobileAppPolicy(mobileApp?: ZippyMobileAppConfig): ApiMobileAppPolicy {\n if (mobileApp?.policy === 'off') {\n return 'OFF';\n }\n if (mobileApp?.policy === 'option') {\n return 'OPTION';\n }\n if (mobileApp?.policy === 'enforce') {\n return 'ENFORCE';\n }\n return 'ENFORCE';\n}\n\nexport function buildBindPolicyRequest(config: {\n checkoutPolicy?: CheckoutPolicy;\n mobileApp?: ZippyMobileAppConfig;\n}): BindCheckoutPolicyRequest {\n const request: BindCheckoutPolicyRequest = {};\n\n if (config.checkoutPolicy === 'QR' || config.checkoutPolicy === 'MANUAL') {\n request.checkoutPolicy = config.checkoutPolicy;\n }\n\n const mobileAppPolicy = resolveMobileAppPolicy(config.mobileApp);\n if (mobileAppPolicy !== 'OFF') {\n request.mobileAppPolicy = mobileAppPolicy;\n }\n\n return request;\n}\n\n/** Web fallbacks shown after a failed app deep-link on phone. */\nexport function resolveFallbackMethodAvailability(\n checkoutPolicy: BoundCheckoutPolicy,\n): Pick<MethodAvailability, 'qr' | 'manual'> {\n return {\n qr: allowsQrCheckoutPolicy(checkoutPolicy),\n manual: allowsManualCheckoutPolicy(checkoutPolicy),\n };\n}\n\nexport function resolveMethodAvailability(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n): MethodAvailability {\n if (surface === 'desktop') {\n return {\n qr: allowsQrCheckoutPolicy(checkoutPolicy),\n manual: allowsManualCheckoutPolicy(checkoutPolicy),\n mobileApp: false,\n };\n }\n\n const autoAppOnly = phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy);\n\n return {\n qr: allowsQrCheckoutPolicy(checkoutPolicy) && !autoAppOnly,\n manual: allowsManualCheckoutPolicy(checkoutPolicy) && !autoAppOnly,\n mobileApp:\n autoAppOnly ||\n (mobileAppPolicy === 'OPTION' &&\n (checkoutPolicy == null ||\n checkoutPolicy === 'QR' ||\n checkoutPolicy === 'MANUAL')),\n };\n}\n\nexport function resolveEntryRouting(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n): EntryRoutingAction {\n if (surface === 'desktop') {\n if (checkoutPolicy === 'MANUAL') {\n return 'auto-manual';\n }\n if (checkoutPolicy === 'QR') {\n return 'auto-qr';\n }\n return 'chooser';\n }\n\n if (phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy)) {\n return 'enforce-mobile-app';\n }\n\n if (checkoutPolicy === 'MANUAL' && mobileAppPolicy === 'OFF') {\n return 'auto-manual';\n }\n\n if (checkoutPolicy === 'QR' && mobileAppPolicy === 'OFF') {\n return 'auto-qr';\n }\n\n return 'chooser';\n}\n\nexport function isCheckoutStartAllowed(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n method: AppClaimCheckoutMethod,\n): boolean {\n if (method === 'MOBILE_APP') {\n if (surface === 'desktop') {\n return false;\n }\n if (mobileAppPolicy === 'OFF') {\n return false;\n }\n if (phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy)) {\n return true;\n }\n if (mobileAppPolicy === 'OPTION') {\n return (\n checkoutPolicy == null || checkoutPolicy === 'QR' || checkoutPolicy === 'MANUAL'\n );\n }\n return false;\n }\n\n if (!allowsQrCheckoutPolicy(checkoutPolicy)) {\n return false;\n }\n\n if (surface === 'phone' && phoneEnforceAutoApp(checkoutPolicy, mobileAppPolicy)) {\n return false;\n }\n\n return true;\n}\n\nexport function resolveAutoStartMethod(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface,\n): AppClaimCheckoutMethod | null {\n const routing = resolveEntryRouting(checkoutPolicy, mobileAppPolicy, surface);\n\n if (routing === 'enforce-mobile-app') {\n return isCheckoutStartAllowed(checkoutPolicy, mobileAppPolicy, surface, 'MOBILE_APP')\n ? 'MOBILE_APP'\n : null;\n }\n\n if (routing === 'auto-qr') {\n return isCheckoutStartAllowed(checkoutPolicy, mobileAppPolicy, surface, 'QR') ? 'QR' : null;\n }\n\n return null;\n}\n\nexport function resolveCheckoutUiOptionsFromBound(\n checkoutPolicy: BoundCheckoutPolicy,\n mobileAppPolicy: ApiMobileAppPolicy,\n surface: CheckoutSurface = detectCheckoutSurface(),\n): ResolvedCheckoutUiOptions {\n return {\n checkoutPolicy,\n mobileAppPolicy,\n surface,\n methodAvailability: resolveMethodAvailability(checkoutPolicy, mobileAppPolicy, surface),\n allowManualBack: checkoutPolicy == null,\n };\n}\n\nexport function resolveCheckoutUiOptionsFromSession(\n session: PaymentSession,\n surface: CheckoutSurface = detectCheckoutSurface(),\n): ResolvedCheckoutUiOptions {\n if (!isCheckoutPolicyBound(session)) {\n throw new Error('Checkout policy is not bound on the payment session.');\n }\n\n return resolveCheckoutUiOptionsFromBound(\n session.checkoutPolicy,\n session.mobileAppPolicy ?? 'OFF',\n surface,\n );\n}\n\nexport function resolveCheckoutUiOptions(\n checkoutPolicy?: CheckoutPolicy,\n mobileApp?: ZippyMobileAppConfig,\n surface: CheckoutSurface = detectCheckoutSurface(),\n): ResolvedCheckoutUiOptions {\n const bind = buildBindPolicyRequest({ checkoutPolicy, mobileApp });\n return resolveCheckoutUiOptionsFromBound(\n bind.checkoutPolicy ?? null,\n bind.mobileAppPolicy ?? 'OFF',\n surface,\n );\n}\n","import type { MobileStorePlatform } from './device';\n\n/** Fixed App Store / Google Play URLs for Zippy Pay (managed server-side; not merchant-configurable). */\nexport type AppStoreLinks = {\n ios: string;\n android: string;\n};\n\nexport const ANDROID_APP_PACKAGE = 'com.zippy.pay';\nexport const IOS_APP_STORE_URL =\n 'https://apps.apple.com/in/app/zippypay/id6806799311';\n\n/** HTTPS store URLs — used for QR codes and desktop fallback links. */\nexport const APP_STORE_LINKS: AppStoreLinks = {\n ios: IOS_APP_STORE_URL,\n android: `https://play.google.com/store/apps/details?id=${ANDROID_APP_PACKAGE}`,\n};\n\n/** Opens the native App Store app on iOS to the Zippy Pay listing. */\nexport const IOS_APP_STORE_NATIVE_URL = `itms-apps://${IOS_APP_STORE_URL.replace(/^https:\\/\\//, '')}`;\n\n/** Opens the native Play Store app on Android. */\nexport const ANDROID_PLAY_STORE_NATIVE_URL = `market://details?id=${ANDROID_APP_PACKAGE}`;\n\nexport function resolveAppStoreUrl(platform: MobileStorePlatform): string {\n return APP_STORE_LINKS[platform];\n}\n\n/**\n * URL used when the customer taps Install Zippy.\n * iOS and Android both use native store schemes from a user gesture.\n */\nexport function resolveAppStoreOpenUrl(platform: MobileStorePlatform): string {\n if (platform === 'ios') {\n return IOS_APP_STORE_NATIVE_URL;\n }\n return ANDROID_PLAY_STORE_NATIVE_URL;\n}\n","/** Apple logo mark for compact UI slots. */\nexport function renderAppleLogoSvg(className = 'zippy-app-link-icon'): string {\n return `<svg class=\"${className}\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M16.823 12.345c-.027-2.702 2.208-3.997 2.307-4.059-1.255-1.836-3.211-2.088-3.905-2.118-1.663-.169-3.246.98-4.089.98-.844 0-2.147-.955-3.531-.929-1.818.027-3.493 1.056-4.429 2.683-1.888 3.276-.483 8.131 1.356 10.791.899 1.299 1.968 2.759 3.374 2.707 1.355-.054 1.866-.877 3.504-.877 1.637 0 2.099.877 3.527.85 1.457-.027 2.381-1.32 3.276-2.622.99-1.449 1.396-2.851 1.419-2.922-.031-.014-2.724-1.045-2.751-4.146zM14.303 4.772c.747-.907 1.249-2.164 1.111-3.422-1.075.043-2.375.717-3.147 1.623-.693.802-1.299 2.095-1.136 3.333 1.201.093 2.432-.61 3.172-1.534z\"/></svg>`;\n}\n\n/** Google Play prism — current official four-color mark. */\nexport function renderGooglePlayLogoSvg(className = 'zippy-app-link-icon'): string {\n return `<svg class=\"${className} zippy-app-link-icon--play\" viewBox=\"0 0 256 283\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path fill=\"#EA4335\" d=\"M119.553 134.916 1.06 259.061c2.696 9.556 9.658 17.33 18.861 21.059 9.202 3.73 19.612 2.996 28.201-1.987l133.327-75.935-61.896-67.282z\"/><path fill=\"#FBBC04\" d=\"M239.371 113.814 181.714 80.791 116.816 137.742l65.162 64.279 57.216-32.669c10.332-5.409 16.806-16.107 16.806-27.769 0-11.662-6.474-22.36-16.806-27.769h.177z\"/><path fill=\"#4285F4\" d=\"M1.06 23.487C.344 26.135-.013 28.867 0 31.61v219.327c.008 2.742.364 5.472 1.06 8.124L123.615 138.095 1.06 23.487z\"/><path fill=\"#34A853\" d=\"M120.436 141.274 181.714 80.791 48.563 4.503C43.554 1.569 37.857.016 32.052 0 17.644-.028 4.978 9.534 1.06 23.399l119.376 117.875z\"/></svg>`;\n}\n\nexport function renderAppleStoreIcon(): string {\n return renderAppleLogoSvg('zippy-app-link-icon');\n}\n\nexport function renderGooglePlayIcon(): string {\n return renderGooglePlayLogoSvg('zippy-app-link-icon');\n}\n","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\n//---------------------------------------------------------------------\n// qrcode\n//---------------------------------------------------------------------\n\n/**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\nexport const qrcode = function(typeNumber, errorCorrectionLevel) {\n\n const PAD0 = 0xEC;\n const PAD1 = 0x11;\n\n let _typeNumber = typeNumber;\n const _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n let _modules = null;\n let _moduleCount = 0;\n let _dataCache = null;\n const _dataList = [];\n\n const _this = {};\n\n const makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n const modules = new Array(moduleCount);\n for (let row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (let col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n const setupPositionProbePattern = function(row, col) {\n\n for (let r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (let c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n const getBestMaskPattern = function() {\n\n let minLostPoint = 0;\n let pattern = 0;\n\n for (let i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n const lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n const setupTimingPattern = function() {\n\n for (let r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (let c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n const setupPositionAdjustPattern = function() {\n\n const pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (let i = 0; i < pos.length; i += 1) {\n\n for (let j = 0; j < pos.length; j += 1) {\n\n const row = pos[i];\n const col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (let r = -2; r <= 2; r += 1) {\n\n for (let c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n const setupTypeNumber = function(test) {\n\n const bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n const setupTypeInfo = function(test, maskPattern) {\n\n const data = (_errorCorrectionLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n const mapData = function(data, maskPattern) {\n\n let inc = -1;\n let row = _moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (let col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (let c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n let dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n const mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n const createBytes = function(buffer, rsBlocks) {\n\n let offset = 0;\n\n let maxDcCount = 0;\n let maxEcCount = 0;\n\n const dcdata = new Array(rsBlocks.length);\n const ecdata = new Array(rsBlocks.length);\n\n for (let r = 0; r < rsBlocks.length; r += 1) {\n\n const dcCount = rsBlocks[r].dataCount;\n const ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n let totalCodeCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n const data = new Array(totalCodeCount);\n let index = 0;\n\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n const createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < dataList.length; i += 1) {\n const data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n let newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n let typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < _dataList.length; i++) {\n const data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n let qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (let r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (let c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n let opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n let c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n const c = Math.floor( (x - min) / cellSize);\n const r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n\n let img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n const escapeXml = function(s) {\n let escaped = '';\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n const _createHalfASCII = function(margin) {\n const cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r1, r2, p;\n\n const blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n const blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n let ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r, p;\n\n const white = Array(cellSize+1).join('██');\n const black = Array(cellSize+1).join(' ');\n\n let ascii = '';\n let line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n const length = _this.getModuleCount();\n for (let row = 0; row < length; row++) {\n for (let col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrcode.stringToBytes\n//---------------------------------------------------------------------\n\nqrcode.stringToBytes = function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n};\n\n//---------------------------------------------------------------------\n// qrcode.createStringToBytes\n//---------------------------------------------------------------------\n\n/**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\nqrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n const unicodeMap = function() {\n\n const bin = base64DecodeInputStream(unicodeData);\n const read = function() {\n const b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n let count = 0;\n const unicodeMap = {};\n while (true) {\n const b0 = bin.read();\n if (b0 == -1) break;\n const b1 = read();\n const b2 = read();\n const b3 = read();\n const k = String.fromCharCode( (b0 << 8) | b1);\n const v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n const unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n const b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n};\n\n//---------------------------------------------------------------------\n// QRMode\n//---------------------------------------------------------------------\n\nconst QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n};\n\n//---------------------------------------------------------------------\n// QRErrorCorrectionLevel\n//---------------------------------------------------------------------\n\nconst QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n};\n\n//---------------------------------------------------------------------\n// QRMaskPattern\n//---------------------------------------------------------------------\n\nconst QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n};\n\n//---------------------------------------------------------------------\n// QRUtil\n//---------------------------------------------------------------------\n\nconst QRUtil = function() {\n\n const PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n const _this = {};\n\n const getBCHDigit = function(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n let d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n let d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n let a = qrPolynomial([1], 0);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n const moduleCount = qrcode.getModuleCount();\n\n let lostPoint = 0;\n\n // LEVEL1\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n\n let sameCount = 0;\n const dark = qrcode.isDark(row, col);\n\n for (let r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (let c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n let darkCount = 0;\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n const ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// QRMath\n//---------------------------------------------------------------------\n\nconst QRMath = function() {\n\n const EXP_TABLE = new Array(256);\n const LOG_TABLE = new Array(256);\n\n // initialize tables\n for (let i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (let i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (let i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n const _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrPolynomial\n//---------------------------------------------------------------------\n\nconst qrPolynomial = function(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n const _num = function() {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n const _num = new Array(num.length - offset + shift);\n for (let i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n const _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n const num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (let i = 0; i < _this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n const ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n const num = new Array(_this.getLength() );\n for (let i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// QRRSBlock\n//---------------------------------------------------------------------\n\nconst QRRSBlock = function() {\n\n const RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n const qrRSBlock = function(totalCount, dataCount) {\n const _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n const _this = {};\n\n const getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n const rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n const length = rsBlock.length / 3;\n\n const list = [];\n\n for (let i = 0; i < length; i += 1) {\n\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n\n for (let j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrBitBuffer\n//---------------------------------------------------------------------\n\nconst qrBitBuffer = function() {\n\n const _buffer = [];\n let _length = 0;\n\n const _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n const bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (let i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n const bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrNumber\n//---------------------------------------------------------------------\n\nconst qrNumber = function(data) {\n\n const _mode = QRMode.MODE_NUMBER;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const data = _data;\n\n let i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n const strToNum = function(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n const chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrAlphaNum\n//---------------------------------------------------------------------\n\nconst qrAlphaNum = function(data) {\n\n const _mode = QRMode.MODE_ALPHA_NUM;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const s = _data;\n\n let i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n const getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case '\\u0020' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qr8BitByte\n//---------------------------------------------------------------------\n\nconst qr8BitByte = function(data) {\n\n const _mode = QRMode.MODE_8BIT_BYTE;\n const _data = data;\n const _bytes = qrcode.stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (let i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrKanji\n//---------------------------------------------------------------------\n\nconst qrKanji = function(data) {\n\n const _mode = QRMode.MODE_KANJI;\n const _data = data;\n\n const stringToBytes = qrcode.stringToBytes;\n !function(c, code) {\n // self test for sjis support.\n const test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n const _bytes = stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n const data = _bytes;\n\n let i = 0;\n\n while (i + 1 < data.length) {\n\n let c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n};\n\n//=====================================================================\n// GIF Support etc.\n//\n\n//---------------------------------------------------------------------\n// byteArrayOutputStream\n//---------------------------------------------------------------------\n\nconst byteArrayOutputStream = function() {\n\n const _bytes = [];\n\n const _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (let i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (let i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n let s = '';\n s += '[';\n for (let i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64EncodeOutputStream\n//---------------------------------------------------------------------\n\nconst base64EncodeOutputStream = function() {\n\n let _buffer = 0;\n let _buflen = 0;\n let _length = 0;\n let _base64 = '';\n\n const _this = {};\n\n const writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n const encode = function(n) {\n if (n < 0) {\n throw 'n:' + n;\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n } else {\n throw 'n:' + n;\n }\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n const padlen = 3 - _length % 3;\n for (let i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64DecodeInputStream\n//---------------------------------------------------------------------\n\nconst base64DecodeInputStream = function(str) {\n\n const _str = str;\n let _pos = 0;\n let _buffer = 0;\n let _buflen = 0;\n\n const _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n const c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n const n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n const decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// gifImage (B/W)\n//---------------------------------------------------------------------\n\nconst gifImage = function(width, height) {\n\n const _width = width;\n const _height = height;\n const _data = new Array(width * height);\n\n const _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n const lzwMinCodeSize = 2;\n const raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n let offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n const bitOutputStream = function(out) {\n\n const _out = out;\n let _bitLength = 0;\n let _bitBuffer = 0;\n\n const _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n const getLZWRaster = function(lzwMinCodeSize) {\n\n const clearCode = 1 << lzwMinCodeSize;\n const endCode = (1 << lzwMinCodeSize) + 1;\n let bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n const table = lzwTable();\n\n for (let i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n const byteOut = byteArrayOutputStream();\n const bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n let dataIndex = 0;\n\n let s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n const c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n const lzwTable = function() {\n\n const _map = {};\n let _size = 0;\n\n const _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n};\n\nconst createDataURL = function(width, height, getPixel) {\n const gif = gifImage(width, height);\n for (let y = 0; y < height; y += 1) {\n for (let x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n const b = byteArrayOutputStream();\n gif.write(b);\n\n const base64 = base64EncodeOutputStream();\n const bytes = b.toByteArray();\n for (let i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n};\n\nexport default qrcode;\n\nexport const stringToBytes = qrcode.stringToBytes;\n","export const ZIPPY_BRAND_COLOR = '#476CEB';\n\n/**\n * Z mark lifted from product logo assets, with a square viewBox centred on the\n * glyph so it can be dropped into any square slot. Matches merchant dashboard.\n */\nconst Z_MARK_VIEW_BOX = '-1 20.86 60 60';\nconst Z_MARK_PATH =\n 'M16.8831 21.5476C16.3856 21.5476 15.9085 21.7452 15.5567 22.097L0.549704 37.104C0.0132083 37.6405 -0.147283 38.4474 0.143066 39.1483C0.433416 39.8493 1.11743 40.3063 1.87615 40.3063H26.5982L2.74743 64.1571C0.0649471 66.8395 -0.737512 70.8738 0.714236 74.3786C2.16598 77.8834 5.58604 80.1686 9.37964 80.1686H41.7385C42.236 80.1686 42.7131 79.971 43.0649 79.6192L58.0719 64.6122C58.6084 64.0757 58.7689 63.2689 58.4785 62.5679C58.1882 61.867 57.5042 61.4099 56.7455 61.4099H32.0234L55.8742 37.5592C58.5567 34.8767 59.3591 30.8425 57.9074 27.3376C56.4556 23.8328 53.0356 21.5476 49.242 21.5476H16.8831ZM5.11632 64.1759L28.3783 40.3812H30.6653L5.11632 64.1759ZM30.1464 61.4059L53.4083 37.6111L27.8594 61.4059H30.1464Z';\n\n/** Share of the QR width taken by the logo badge. Safe at error level H. */\nconst BADGE_RATIO = 0.24;\n\nfunction parseViewBoxSize(svg: string): number | null {\n const match = /viewBox=\"0 0 ([\\d.]+) [\\d.]+\"/.exec(svg);\n return match ? Number(match[1]) : null;\n}\n\n/** White plate + centred Z mark, sized relative to the QR viewBox. */\nexport function buildLogoBadge(qrSize: number): string {\n const badge = qrSize * BADGE_RATIO;\n const offset = (qrSize - badge) / 2;\n const plate = badge * 1.18;\n const plateOffset = (qrSize - plate) / 2;\n const markInset = badge * 0.16;\n\n return [\n '<g shape-rendering=\"geometricPrecision\">',\n `<rect x=\"${plateOffset}\" y=\"${plateOffset}\" width=\"${plate}\" height=\"${plate}\" rx=\"${plate * 0.22}\" fill=\"#ffffff\"/>`,\n `<svg x=\"${offset + markInset}\" y=\"${offset + markInset}\" width=\"${badge - markInset * 2}\" height=\"${badge - markInset * 2}\" viewBox=\"${Z_MARK_VIEW_BOX}\">`,\n `<path d=\"${Z_MARK_PATH}\" fill=\"${ZIPPY_BRAND_COLOR}\"/>`,\n '</svg>',\n '</g>',\n ].join('');\n}\n\n/** Injects the branded logo badge into a QR SVG string before the closing tag. */\nexport function embedLogoInQrSvg(svg: string): string {\n const size = parseViewBoxSize(svg);\n if (!size) {\n return svg;\n }\n return svg.replace('</svg>', `${buildLogoBadge(size)}</svg>`);\n}\n\n/** Muted footer lock icon — uses currentColor. */\nexport function renderSecureLockSvg(): string {\n return `<svg class=\"zippy-brand-lock\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 10V8a5 5 0 0 1 10 0v2\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><rect x=\"5\" y=\"10\" width=\"14\" height=\"11\" rx=\"2.5\" stroke=\"currentColor\" stroke-width=\"1.75\"/><circle cx=\"12\" cy=\"15.5\" r=\"1.25\" fill=\"currentColor\"/></svg>`;\n}\n","import qrcode from 'qrcode-generator';\nimport { embedLogoInQrSvg } from './zippy-logo';\n\n/** Deep link path scanned by the Zippy app — sessionId only, never clientToken. */\nexport const MERCHANT_PAYMENT_DEEP_LINK_PATH = 'merchant-payment';\n\n/** Deep link scanned by the Zippy app — sessionId only, never clientToken. */\nexport function buildPaymentQrPayload(sessionId: string): string {\n return `zippy://${MERCHANT_PAYMENT_DEEP_LINK_PATH}/${sessionId}`;\n}\n\ntype QrErrorCorrection = 'L' | 'M' | 'Q' | 'H';\n\n/** Renders a QR code as an SVG string for embedding in the checkout UI. */\nexport function renderQrSvg(\n payload: string,\n cellSize = 4,\n errorCorrection: QrErrorCorrection = 'H',\n margin = 2,\n): string {\n const qr = qrcode(0, errorCorrection);\n qr.addData(payload);\n qr.make();\n return qr.createSvgTag(cellSize, margin);\n}\n\nexport function renderPaymentQrSvg(\n sessionId: string,\n cellSize = 4,\n errorCorrection: QrErrorCorrection = 'H',\n): string {\n return renderQrSvg(buildPaymentQrPayload(sessionId), cellSize, errorCorrection);\n}\n\n/** Branded QR SVG with centred Zippy mark — matches merchant dashboard rendering. */\nexport function renderBrandedPaymentQrSvg(sessionId: string, cellSize = 4): string {\n return embedLogoInQrSvg(renderPaymentQrSvg(sessionId, cellSize, 'H'));\n}\n\n/** QR markup wrapper for the checkout UI. */\nexport function renderPaymentQrMarkup(sessionId: string, cellSize = 4): string {\n const svg = renderBrandedPaymentQrSvg(sessionId, cellSize);\n return `<div class=\"zippy-qr-stack\">${svg}</div>`;\n}\n\n/** Plain QR markup for arbitrary URLs (e.g. app store links). */\nexport function renderUrlQrMarkup(url: string, cellSize = 4): string {\n const svg = renderQrSvg(url, cellSize, 'M');\n return `<div class=\"zippy-qr-stack zippy-qr-stack--plain\">${svg}</div>`;\n}\n","import {\n ANDROID_APP_PACKAGE,\n resolveAppStoreOpenUrl,\n} from '../config/app-links';\nimport {\n detectMobileStorePlatform,\n isAndroidDevice,\n type MobileStorePlatform,\n} from '../config/device';\nimport { buildPaymentQrPayload, MERCHANT_PAYMENT_DEEP_LINK_PATH } from './render-qr';\n\n/** Android intent URL — more reliable than raw `zippy://` in Chrome. */\nexport function buildAndroidPaymentIntentUrl(sessionId: string): string {\n return `intent://${MERCHANT_PAYMENT_DEEP_LINK_PATH}/${sessionId}#Intent;scheme=zippy;package=${ANDROID_APP_PACKAGE};end`;\n}\n\n/** Platform-aware deep link used when the customer taps Pay with Zippy / Try again. */\nexport function buildPaymentDeepLinkOpenUrl(\n sessionId: string,\n platform?: MobileStorePlatform,\n): string {\n if (platform === 'android' || (platform == null && isAndroidDevice())) {\n return buildAndroidPaymentIntentUrl(sessionId);\n }\n\n return buildPaymentQrPayload(sessionId);\n}\n\n/** Sends the current tab to the App Store or Google Play for this device. */\nexport function openAppStore(platform?: MobileStorePlatform): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const resolved = platform ?? detectMobileStorePlatform();\n window.location.assign(resolveAppStoreOpenUrl(resolved));\n}\n\n/**\n * Opens the Zippy app from a user gesture (Pay with Zippy / Try again).\n * Keeps the checkout page visible so failed-handoff UI can appear afterward.\n */\nexport function openPaymentDeepLink(sessionId: string): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n openCustomSchemeWithoutNavigation(buildPaymentDeepLinkOpenUrl(sessionId));\n}\n\nfunction openCustomSchemeWithoutNavigation(url: string): void {\n const link = document.createElement('a');\n link.href = url;\n link.style.display = 'none';\n link.setAttribute('aria-hidden', 'true');\n document.body.appendChild(link);\n link.click();\n link.remove();\n}\n","import { renderUrlQrMarkup } from '../qr/render-qr';\nimport { openAppStore } from '../qr/deep-link';\nimport { renderAppleLogoSvg, renderGooglePlayLogoSvg } from './app-store-icons';\n\nexport type AppStorePlatform = 'ios' | 'android';\n\ntype PlatformCopy = {\n title: string;\n lead: string;\n qrHint: string;\n ctaLabel: string;\n dialogLabel: string;\n icon: string;\n};\n\nconst PLATFORM_COPY: Record<AppStorePlatform, PlatformCopy> = {\n ios: {\n title: 'Download Zippy for iPhone',\n lead: 'Scan the code with your iPhone camera, or open the App Store directly on this device.',\n qrHint: 'Scan to open the App Store',\n ctaLabel: 'Open App Store',\n dialogLabel: 'Download Zippy on the App Store',\n icon: renderAppleLogoSvg('zippy-app-modal-platform-icon'),\n },\n android: {\n title: 'Download Zippy for Android',\n lead: 'Scan the code with your Android phone, or open Google Play directly on this device.',\n qrHint: 'Scan to open Google Play',\n ctaLabel: 'Open Google Play',\n dialogLabel: 'Get Zippy on Google Play',\n icon: renderGooglePlayLogoSvg('zippy-app-modal-platform-icon zippy-app-modal-platform-icon--play'),\n },\n};\n\nfunction isMobileLikeViewport(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.matchMedia('(max-width: 520px), (pointer: coarse)').matches;\n}\n\nexport class AppStoreDownloadModal {\n private overlay: HTMLElement | null = null;\n private escapeHandler: ((event: KeyboardEvent) => void) | null = null;\n private focusTrapHandler: ((event: KeyboardEvent) => void) | null = null;\n private trigger: HTMLElement | null = null;\n\n constructor(private readonly shadow: ShadowRoot) {}\n\n open(platform: AppStorePlatform, url: string, trigger: HTMLElement): void {\n this.close();\n this.trigger = trigger;\n\n const copy = PLATFORM_COPY[platform];\n const mobile = isMobileLikeViewport();\n\n const overlay = document.createElement('div');\n overlay.className = `zippy-app-modal-overlay${mobile ? ' zippy-app-modal-overlay--mobile' : ''}`;\n overlay.setAttribute('role', 'dialog');\n overlay.setAttribute('aria-modal', 'true');\n overlay.setAttribute('aria-label', copy.dialogLabel);\n\n overlay.innerHTML = `\n <div class=\"zippy-app-modal-panel\">\n <button type=\"button\" class=\"zippy-app-modal-close\" aria-label=\"Close download dialog\"><svg class=\"zippy-app-modal-close-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 7l10 10M17 7 7 17\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg></button>\n <div class=\"zippy-app-modal-header\">\n ${copy.icon}\n <div class=\"zippy-app-modal-heading\">\n <h2 class=\"zippy-app-modal-title\">${copy.title}</h2>\n <p class=\"zippy-app-modal-lead\">${copy.lead}</p>\n </div>\n </div>\n <div class=\"zippy-app-modal-qr-wrap\">\n <div class=\"zippy-app-modal-qr-frame\" aria-label=\"${copy.qrHint}\">${renderUrlQrMarkup(url, 5)}</div>\n <p class=\"zippy-app-modal-qr-hint\">${copy.qrHint}</p>\n </div>\n <div class=\"zippy-app-modal-actions\">\n <a class=\"zippy-app-modal-cta zippy-app-modal-cta--${platform}\" href=\"${escapeAttribute(url)}\" target=\"_blank\" rel=\"noopener noreferrer\">${copy.ctaLabel}</a>\n ${mobile ? `<p class=\"zippy-app-modal-mobile-note\">On this device, use the button above to install the app.</p>` : ''}\n </div>\n </div>\n `;\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) {\n this.close();\n }\n });\n\n overlay.querySelector('.zippy-app-modal-panel')?.addEventListener('click', (event) => {\n event.stopPropagation();\n });\n\n overlay.querySelector('.zippy-app-modal-close')?.addEventListener('click', () => {\n this.close();\n });\n\n const cta = overlay.querySelector<HTMLAnchorElement>('.zippy-app-modal-cta');\n if (mobile && cta) {\n cta.addEventListener('click', (event) => {\n event.preventDefault();\n openAppStore(platform);\n });\n }\n\n this.shadow.appendChild(overlay);\n this.overlay = overlay;\n\n this.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n };\n document.addEventListener('keydown', this.escapeHandler);\n\n this.focusTrapHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || !this.overlay) {\n return;\n }\n const focusables = Array.from(\n this.overlay.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), a[href], [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((element) => element.offsetParent !== null);\n if (focusables.length === 0) {\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', this.focusTrapHandler);\n\n overlay.querySelector<HTMLElement>('.zippy-app-modal-close')?.focus();\n }\n\n close(): void {\n if (this.escapeHandler) {\n document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = null;\n }\n if (this.focusTrapHandler) {\n document.removeEventListener('keydown', this.focusTrapHandler);\n this.focusTrapHandler = null;\n }\n this.overlay?.remove();\n this.overlay = null;\n\n if (this.trigger?.isConnected) {\n this.trigger.focus();\n }\n this.trigger = null;\n }\n\n destroy(): void {\n this.close();\n }\n}\n\nfunction escapeAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n","import type { CheckoutMethod, CheckoutPhase, PayerPreview, PaymentSession, PaymentSessionPayer } from '../types';\nimport type { ResolvedCheckoutUiOptions } from '../config/checkout-policy';\nimport { resolveFallbackMethodAvailability } from '../config/checkout-policy';\nimport type { AppHandoffStatus } from '../app/handoff';\nimport { APP_STORE_LINKS } from '../config/app-links';\nimport { renderAppleStoreIcon, renderGooglePlayIcon } from './app-store-icons';\nimport { AppStoreDownloadModal, type AppStorePlatform } from './app-store-modal';\nimport { renderPaymentQrMarkup } from '../qr/render-qr';\nimport { renderSecureLockSvg } from '../qr/zippy-logo';\nimport { getPayWindowRemainingRatio, msUntil, shouldShowPayProgress } from '../session/timing';\nimport {\n formatAmount,\n formatCountdown,\n formatCountdownAccessible,\n formatDisplayInitials,\n outcomeTerminalCopy,\n TERMINAL_EXIT_COUNTDOWN_SEC,\n terminalExitLeadText,\n type TerminalExitMode,\n} from '../utils';\nimport { CHECKOUT_STYLES } from '../theme';\n\nexport type UiCallbacks = {\n onChooseMethod: (method: CheckoutMethod) => void;\n onVerify: (query: string) => Promise<void>;\n onPay: (paymentId: string) => Promise<void>;\n onSelectPayer?: (payer: PayerPreview) => void;\n onBackToChooseMethod?: () => void;\n onBackToManualEntry?: () => void;\n onBackToMobileAppFallback?: () => void;\n onOpenMobileApp?: () => void;\n onInstallZippy?: () => void;\n onRetryMobileApp?: () => void;\n onPaymentIdChange?: (query: string) => void;\n onTerminalExit?: () => void;\n};\n\nexport type UiState = {\n phase: CheckoutPhase;\n session: PaymentSession | null;\n sessionId: string;\n committedMethod: CheckoutMethod | null;\n paymentId: string;\n verifiedPayer: PayerPreview | null;\n verifyMatches: PayerPreview[] | null;\n errorMessage: string | null;\n loading: boolean;\n mode: 'inline' | 'modal';\n exitMode?: TerminalExitMode | null;\n appHandoffStatus?: AppHandoffStatus;\n mobileAppManualFallback?: boolean;\n};\n\nexport class CheckoutUi {\n private readonly shadow: ShadowRoot;\n private readonly root: HTMLElement;\n private state: UiState;\n private readonly callbacks: UiCallbacks;\n private expiryTimer: ReturnType<typeof setInterval> | null = null;\n private terminalExitTimer: ReturnType<typeof setInterval> | null = null;\n private readonly appStoreModal: AppStoreDownloadModal;\n private uiOptions: ResolvedCheckoutUiOptions;\n\n constructor(\n host: HTMLElement,\n initialState: UiState,\n callbacks: UiCallbacks,\n uiOptions: ResolvedCheckoutUiOptions,\n extraStyles = '',\n ) {\n this.callbacks = callbacks;\n this.uiOptions = uiOptions;\n this.state = initialState;\n this.shadow = host.attachShadow({ mode: 'open' });\n this.appStoreModal = new AppStoreDownloadModal(this.shadow);\n const style = document.createElement('style');\n style.textContent = CHECKOUT_STYLES + extraStyles;\n this.shadow.appendChild(style);\n this.root = document.createElement('div');\n this.root.className = 'zippy-root';\n this.root.setAttribute('role', 'region');\n this.root.setAttribute('aria-label', 'Zippy Pay checkout');\n this.shadow.appendChild(this.root);\n this.render();\n }\n\n update(partial: Partial<UiState>): void {\n const next = { ...this.state, ...partial };\n if (this.shouldSkipRender(this.state, next)) {\n this.state = next;\n return;\n }\n this.state = next;\n this.render();\n }\n\n updateUiOptions(uiOptions: ResolvedCheckoutUiOptions): void {\n this.uiOptions = uiOptions;\n this.render();\n }\n\n private shouldSkipRender(prev: UiState, next: UiState): boolean {\n return this.renderSnapshot(prev) === this.renderSnapshot(next);\n }\n\n private renderSnapshot(state: UiState): string {\n const session = state.session;\n return JSON.stringify({\n phase: state.phase,\n sessionId: state.sessionId,\n committedMethod: state.committedMethod,\n paymentId: state.paymentId,\n errorMessage: state.errorMessage,\n loading: state.loading,\n mode: state.mode,\n exitMode: state.exitMode ?? null,\n appHandoffStatus: state.appHandoffStatus ?? 'idle',\n mobileAppManualFallback: state.mobileAppManualFallback ?? false,\n verifiedPayer: state.verifiedPayer,\n verifyMatches: state.verifyMatches,\n session: session\n ? {\n status: session.status,\n phase: session.phase,\n amount: session.amount,\n currency: session.currency,\n businessName: session.businessName,\n paymentExpiryAt: session.paymentExpiryAt,\n paymentStartAt: session.paymentStartAt,\n payer: session.payer,\n transactionStatus: session.transactionStatus,\n checkoutMethod: session.checkoutMethod,\n expiresAt: session.expiresAt,\n transactionId: session.transactionId,\n }\n : null,\n });\n }\n\n private restoreFocusState(): { id: string | null; selection: number | null } {\n const active = this.shadow.activeElement;\n if (active instanceof HTMLInputElement && active.id) {\n return { id: active.id, selection: active.selectionStart };\n }\n return { id: null, selection: null };\n }\n\n private applyFocusState(focus: { id: string | null; selection: number | null }): void {\n if (!focus.id) {\n return;\n }\n const element = this.shadow.getElementById(focus.id);\n if (!(element instanceof HTMLInputElement)) {\n return;\n }\n element.focus();\n if (focus.selection !== null) {\n element.setSelectionRange(focus.selection, focus.selection);\n }\n }\n\n destroy(): void {\n this.clearExpiryTimer();\n this.clearTerminalExitTimer();\n this.appStoreModal.destroy();\n }\n\n getShadowRoot(): ShadowRoot {\n return this.shadow;\n }\n\n private render(): void {\n const focusState = this.restoreFocusState();\n this.clearExpiryTimer();\n this.clearTerminalExitTimer();\n\n const {\n phase,\n session,\n errorMessage,\n loading,\n verifiedPayer,\n verifyMatches,\n paymentId,\n sessionId,\n committedMethod,\n exitMode,\n mode,\n appHandoffStatus = 'idle',\n mobileAppManualFallback = false,\n } = this.state;\n const isTerminal =\n phase === 'success' ||\n phase === 'expired' ||\n phase === 'cancelled' ||\n phase === 'declined' ||\n phase === 'failed' ||\n phase === 'invalid-session' ||\n phase === 'error';\n const showPayProgress =\n !isTerminal && shouldShowPayProgress(session, phase);\n const isQrPayFlow =\n phase === 'qr-active' ||\n (phase === 'awaiting' && committedMethod === 'qr');\n const isMobileAppFlow =\n phase === 'mobile-app-active' ||\n (phase === 'awaiting' && committedMethod === 'mobileApp');\n\n this.root.className =\n showPayProgress\n ? isQrPayFlow\n ? 'zippy-root zippy-root--paying zippy-root--qr'\n : isMobileAppFlow\n ? 'zippy-root zippy-root--paying zippy-root--mobile-app'\n : 'zippy-root zippy-root--paying'\n : isTerminal\n ? 'zippy-root zippy-root--terminal'\n : 'zippy-root';\n\n this.root.innerHTML = '';\n\n const mount = isTerminal ? this.root : document.createElement('div');\n if (!isTerminal) {\n mount.className = 'zippy-root-body';\n this.root.appendChild(mount);\n }\n\n if (phase === 'loading') {\n mount.appendChild(this.renderLoading());\n mount.appendChild(this.renderBrandFooter());\n if (showPayProgress) {\n const ratio = session ? getPayWindowRemainingRatio(session) : null;\n if (ratio !== null && ratio > 0) {\n this.root.appendChild(this.renderPayProgress());\n }\n }\n this.applyFocusState(focusState);\n return;\n }\n\n if (session && !isTerminal) {\n mount.appendChild(this.renderPaymentHero(session, this.heroSubtitle(phase, session)));\n }\n\n const inlinePaymentExpiryAt = session?.paymentExpiryAt;\n const showInlinePayTimer =\n showPayProgress &&\n phase !== 'qr-active' &&\n phase !== 'mobile-app-active' &&\n inlinePaymentExpiryAt != null &&\n msUntil(inlinePaymentExpiryAt) > 0;\n\n if (showInlinePayTimer) {\n mount.appendChild(this.renderPayTimer(inlinePaymentExpiryAt));\n }\n\n switch (phase) {\n case 'choose-method':\n mount.appendChild(this.renderChooseMethod());\n break;\n case 'qr-active':\n mount.appendChild(this.renderQrActive(sessionId, session));\n break;\n case 'mobile-app-active':\n mount.appendChild(this.renderMobileAppActive(session, appHandoffStatus, loading));\n break;\n case 'manual-entry':\n mount.appendChild(\n this.renderManualEntry(paymentId, errorMessage, loading, mobileAppManualFallback),\n );\n break;\n case 'manual-picker':\n mount.appendChild(\n this.renderPayerPicker(verifyMatches ?? [], loading),\n );\n break;\n case 'manual-confirm':\n mount.appendChild(\n this.renderManualConfirm(verifiedPayer, errorMessage, loading),\n );\n break;\n case 'awaiting':\n mount.appendChild(\n this.renderAwaiting(session, committedMethod ?? 'qr', verifiedPayer),\n );\n break;\n case 'success':\n case 'expired':\n case 'cancelled':\n case 'declined':\n case 'failed':\n case 'invalid-session':\n mount.appendChild(this.renderOutcomeScreen(phase, session, exitMode, mode));\n this.mountTerminalExitTimer();\n break;\n case 'error':\n mount.appendChild(\n this.renderTerminal(\n 'error',\n 'Something went wrong',\n errorMessage ?? 'Please try again or contact the merchant.',\n ),\n );\n break;\n default:\n break;\n }\n\n if (!isTerminal) {\n mount.appendChild(this.renderBrandFooter());\n } else {\n this.root.appendChild(this.renderBrandFooter());\n }\n\n if (showPayProgress) {\n const ratio = session ? getPayWindowRemainingRatio(session) : null;\n if (ratio !== null && ratio > 0) {\n this.root.appendChild(this.renderPayProgress());\n }\n }\n\n this.applyFocusState(focusState);\n }\n\n private heroSubtitle(phase: CheckoutPhase, session: PaymentSession | null): string {\n switch (phase) {\n case 'choose-method':\n return 'Choose how to pay';\n case 'qr-active':\n return session?.status === 'AWAITING_PAYMENT'\n ? 'Waiting for confirmation'\n : 'Scan with the Zippy app';\n case 'mobile-app-active':\n if (this.state.appHandoffStatus === 'failed') {\n return 'Install or choose another way';\n }\n return session?.status === 'AWAITING_PAYMENT'\n ? 'Waiting for confirmation'\n : 'Pay in the Zippy app';\n case 'manual-entry':\n return 'Find your Zippy account';\n case 'manual-picker':\n return 'Select your account';\n case 'manual-confirm':\n return 'Review and confirm';\n case 'awaiting':\n return 'Waiting for confirmation';\n default:\n return '';\n }\n }\n\n private renderPaymentHero(session: PaymentSession, subtitle: string): HTMLElement {\n const header = document.createElement('div');\n header.className = 'zippy-payment-hero';\n\n const business = document.createElement('p');\n business.className = 'zippy-payment-merchant';\n business.textContent = session.businessName;\n\n const amount = document.createElement('p');\n amount.className = 'zippy-payment-amount';\n amount.textContent = formatAmount(session.amount, session.currency);\n\n header.appendChild(business);\n header.appendChild(amount);\n\n if (subtitle) {\n const sub = document.createElement('p');\n sub.className = 'zippy-payment-subtitle';\n sub.textContent = subtitle;\n header.appendChild(sub);\n }\n\n return header;\n }\n\n private renderBrandFooter(): HTMLElement {\n const footer = document.createElement('div');\n footer.className = 'zippy-brand-footer';\n footer.setAttribute('aria-label', 'Zippy checkout footer');\n\n if (this.uiOptions.surface !== 'phone') {\n const appLinks = document.createElement('div');\n appLinks.className = 'zippy-app-links';\n\n const appLabel = document.createElement('p');\n appLabel.className = 'zippy-app-links-label';\n appLabel.textContent = 'Get the Zippy Pay app';\n\n const badges = document.createElement('div');\n badges.className = 'zippy-app-links-badges';\n\n badges.appendChild(\n this.renderStoreBadgeButton(\n 'ios',\n APP_STORE_LINKS.ios,\n 'Show App Store download options',\n renderAppleStoreIcon(),\n ),\n );\n badges.appendChild(\n this.renderStoreBadgeButton(\n 'android',\n APP_STORE_LINKS.android,\n 'Show Google Play download options',\n renderGooglePlayIcon(),\n ),\n );\n\n appLinks.appendChild(appLabel);\n appLinks.appendChild(badges);\n footer.appendChild(appLinks);\n }\n\n const inner = document.createElement('div');\n inner.className = 'zippy-brand-footer-inner';\n\n const secure = document.createElement('span');\n secure.className = 'zippy-brand-secure';\n secure.innerHTML = `${renderSecureLockSvg()}<span class=\"zippy-brand-copy\">Secured by</span>`;\n\n const divider = document.createElement('span');\n divider.className = 'zippy-brand-divider';\n divider.setAttribute('aria-hidden', 'true');\n\n const brand = document.createElement('span');\n brand.className = 'zippy-brand-name';\n brand.textContent = 'Zippy';\n\n inner.appendChild(secure);\n inner.appendChild(divider);\n inner.appendChild(brand);\n\n footer.appendChild(inner);\n return footer;\n }\n\n private renderStoreBadgeButton(\n platform: AppStorePlatform,\n url: string,\n ariaLabel: string,\n icon: string,\n ): HTMLButtonElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = `zippy-app-link zippy-app-link--icon-only zippy-app-link--${platform}`;\n button.setAttribute('aria-label', ariaLabel);\n button.setAttribute('aria-haspopup', 'dialog');\n button.innerHTML = icon;\n button.addEventListener('click', () => {\n this.appStoreModal.open(platform, url, button);\n });\n return button;\n }\n\n private renderLoading(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-status';\n const icon = document.createElement('div');\n icon.className = 'zippy-status-icon loading';\n const spinner = document.createElement('div');\n spinner.className = 'zippy-spinner';\n icon.appendChild(spinner);\n const title = document.createElement('p');\n title.className = 'zippy-status-title';\n title.textContent = 'Loading checkout…';\n wrap.appendChild(icon);\n wrap.appendChild(title);\n return wrap;\n }\n\n private renderChooseMethod(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-choose';\n const { appHandoffStatus = 'idle' } = this.state;\n\n const options = document.createElement('div');\n options.className = 'zippy-choose-options';\n const { methodAvailability } = this.uiOptions;\n\n if (methodAvailability.qr) {\n options.appendChild(\n this.renderMethodCard({\n method: 'qr',\n title: 'QR code',\n description: 'Open Zippy and scan',\n icon: this.qrIconSvg(),\n }),\n );\n }\n\n if (methodAvailability.manual) {\n options.appendChild(\n this.renderMethodCard({\n method: 'manual',\n title: 'Zippy account',\n description: 'ID, email, or phone',\n icon: this.idIconSvg(),\n }),\n );\n }\n\n if (methodAvailability.qr || methodAvailability.manual) {\n wrap.appendChild(options);\n }\n\n if (methodAvailability.mobileApp) {\n const mobileAppCta = document.createElement('div');\n mobileAppCta.className = 'zippy-choose-mobile-app';\n mobileAppCta.appendChild(\n this.renderPayWithZippyButton({\n opening: appHandoffStatus === 'opening',\n action: 'choose',\n }),\n );\n wrap.appendChild(mobileAppCta);\n }\n\n return wrap;\n }\n\n private renderMethodCard(params: {\n method: CheckoutMethod;\n title: string;\n description: string;\n icon: string;\n }): HTMLElement {\n const card = document.createElement('button');\n card.type = 'button';\n card.className = `zippy-method-card zippy-method-card--${params.method}`;\n card.setAttribute(\n 'aria-label',\n params.method === 'qr'\n ? 'Pay by scanning a QR code in the Zippy app'\n : params.method === 'mobileApp'\n ? 'Pay with the Zippy app on this phone'\n : 'Pay with your Zippy ID, email, or phone',\n );\n\n const icon = document.createElement('span');\n icon.className = 'zippy-method-icon';\n icon.innerHTML = params.icon;\n\n const copy = document.createElement('span');\n copy.className = 'zippy-method-copy';\n\n const title = document.createElement('span');\n title.className = 'zippy-method-title';\n title.textContent = params.title;\n\n const description = document.createElement('span');\n description.className = 'zippy-method-hint';\n description.textContent = params.description;\n\n copy.appendChild(title);\n copy.appendChild(description);\n card.appendChild(icon);\n card.appendChild(copy);\n card.addEventListener('click', () => this.callbacks.onChooseMethod(params.method));\n\n return card;\n }\n\n private renderQrActive(sessionId: string, session: PaymentSession | null): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow zippy-flow--centered';\n const isAwaiting = session?.status === 'AWAITING_PAYMENT';\n\n const qrWrap = document.createElement('div');\n qrWrap.className = 'zippy-qr-section';\n const frame = document.createElement('div');\n frame.className = 'zippy-qr-frame';\n frame.innerHTML = renderPaymentQrMarkup(sessionId);\n qrWrap.appendChild(frame);\n\n if (session?.paymentExpiryAt && msUntil(session.paymentExpiryAt) > 0) {\n qrWrap.appendChild(this.renderPayTimer(session.paymentExpiryAt));\n }\n\n if (isAwaiting) {\n qrWrap.appendChild(this.renderQrAwaitingLoader());\n }\n\n wrap.appendChild(qrWrap);\n\n if (isAwaiting) {\n if (session?.payer) {\n wrap.appendChild(this.renderIdentityCard(session.payer));\n }\n wrap.appendChild(\n this.renderFootnote('Complete the payment in the Zippy app to finish checkout.'),\n );\n } else {\n wrap.appendChild(\n this.renderFlowHint('Open Zippy Pay, scan the code, and complete your payment.'),\n );\n wrap.appendChild(this.renderFootnote('Keep this page open until payment completes.'));\n }\n\n return wrap;\n }\n\n private renderMobileAppActive(\n session: PaymentSession | null,\n appHandoffStatus: AppHandoffStatus,\n loading: boolean,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow zippy-flow--centered';\n const isAwaiting = session?.status === 'AWAITING_PAYMENT';\n\n const section = document.createElement('div');\n section.className = 'zippy-mobile-app-section';\n\n const paymentExpiryAt = session?.paymentExpiryAt;\n const showInlineTimer =\n paymentExpiryAt != null &&\n msUntil(paymentExpiryAt) > 0 &&\n appHandoffStatus !== 'idle' &&\n appHandoffStatus !== 'opening';\n\n if (showInlineTimer) {\n section.appendChild(this.renderPayTimer(paymentExpiryAt));\n }\n\n if (appHandoffStatus === 'opening') {\n section.appendChild(this.renderPayWithZippyButton({ opening: true }));\n } else if (appHandoffStatus === 'failed') {\n if (loading) {\n section.appendChild(this.renderMobileAppMethodSwitching());\n } else {\n section.appendChild(this.renderMobileAppHandoffFailed());\n }\n } else if (appHandoffStatus === 'opened' || isAwaiting) {\n if (isAwaiting) {\n section.appendChild(this.renderQrAwaitingLoader());\n } else {\n section.appendChild(this.renderMobileAppOpenedHint());\n }\n } else {\n section.appendChild(this.renderPayWithZippyButton({ disabled: isAwaiting }));\n }\n\n wrap.appendChild(section);\n\n if (isAwaiting) {\n if (session?.payer) {\n wrap.appendChild(this.renderIdentityCard(session.payer));\n }\n wrap.appendChild(\n this.renderFootnote('Complete the payment in the Zippy app to finish checkout.'),\n );\n } else if (appHandoffStatus === 'failed') {\n wrap.appendChild(\n this.renderFootnote(\n loading\n ? 'Switching payment method…'\n : 'Install Zippy or choose another payment method below.',\n ),\n );\n } else {\n wrap.appendChild(\n this.renderFootnote('Keep this page open until payment completes.'),\n );\n }\n\n return wrap;\n }\n\n private renderMobileAppMethodSwitching(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-mobile-app-method-switching';\n wrap.setAttribute('aria-live', 'polite');\n wrap.setAttribute('aria-busy', 'true');\n\n const spinner = document.createElement('span');\n spinner.className = 'zippy-qr-awaiting-spinner';\n spinner.setAttribute('aria-hidden', 'true');\n\n const title = document.createElement('p');\n title.className = 'zippy-mobile-app-method-switching-title';\n title.textContent = 'Switching payment method…';\n\n wrap.appendChild(spinner);\n wrap.appendChild(title);\n return wrap;\n }\n\n private renderPayWithZippyButton(\n options: {\n disabled?: boolean;\n opening?: boolean;\n action?: 'choose' | 'open';\n } = {},\n ): HTMLButtonElement {\n const { disabled = false, opening = false, action = 'open' } = options;\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-mobile-app-pay-btn';\n button.disabled = disabled || opening;\n\n if (opening) {\n button.classList.add('zippy-mobile-app-pay-btn--opening');\n button.setAttribute('aria-busy', 'true');\n button.setAttribute('aria-live', 'polite');\n button.setAttribute('aria-label', 'Opening Zippy Pay');\n\n const spinner = document.createElement('span');\n spinner.className =\n 'zippy-qr-awaiting-spinner zippy-mobile-app-pay-btn-spinner';\n spinner.setAttribute('aria-hidden', 'true');\n\n const label = document.createElement('span');\n label.textContent = 'Opening Zippy…';\n\n button.appendChild(spinner);\n button.appendChild(label);\n } else {\n button.textContent = 'Pay with Zippy';\n button.setAttribute('aria-label', 'Open Zippy Pay to complete this payment');\n }\n\n button.addEventListener('click', () => {\n if (button.disabled) {\n return;\n }\n if (action === 'choose') {\n this.callbacks.onChooseMethod('mobileApp');\n } else {\n this.callbacks.onOpenMobileApp?.();\n }\n });\n return button;\n }\n\n private renderMobileAppOpenedHint(): HTMLElement {\n const hint = document.createElement('p');\n hint.className = 'zippy-mobile-app-opened-hint';\n hint.textContent = 'Complete your payment in the Zippy app.';\n return hint;\n }\n\n private renderMobileAppHandoffFailed(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-mobile-app-handoff-failed';\n\n const message = document.createElement('p');\n message.className = 'zippy-mobile-app-handoff-message';\n message.textContent = \"We couldn't open the Zippy app on this device.\";\n\n const install = document.createElement('button');\n install.type = 'button';\n install.className = 'zippy-install-zippy-btn';\n install.textContent = 'Install Zippy';\n install.setAttribute('aria-label', 'Install Zippy Pay from your app store');\n install.addEventListener('click', () => {\n this.callbacks.onInstallZippy?.();\n });\n\n wrap.appendChild(message);\n wrap.appendChild(this.renderRetryMobileAppLink());\n wrap.appendChild(this.renderMobileAppFallbackOptions());\n wrap.appendChild(install);\n\n return wrap;\n }\n\n private renderMobileAppFallbackOptions(): HTMLElement | DocumentFragment {\n const { checkoutPolicy } = this.uiOptions;\n const fallback = resolveFallbackMethodAvailability(checkoutPolicy);\n\n if (!fallback.qr && !fallback.manual) {\n return document.createDocumentFragment();\n }\n\n const wrap = document.createElement('div');\n wrap.className = 'zippy-mobile-app-fallback';\n\n const label = document.createElement('p');\n label.className = 'zippy-mobile-app-fallback-label';\n label.textContent = 'Or pay another way';\n\n const options = document.createElement('div');\n options.className = 'zippy-choose-options zippy-choose-options--compact';\n\n if (fallback.qr) {\n options.appendChild(\n this.renderMethodCard({\n method: 'qr',\n title: 'QR code',\n description: 'Open Zippy and scan',\n icon: this.qrIconSvg(),\n }),\n );\n }\n\n if (fallback.manual) {\n options.appendChild(\n this.renderMethodCard({\n method: 'manual',\n title: 'Zippy account',\n description: 'ID, email, or phone',\n icon: this.idIconSvg(),\n }),\n );\n }\n\n wrap.appendChild(label);\n wrap.appendChild(options);\n return wrap;\n }\n\n private renderRetryMobileAppLink(): HTMLElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-mobile-app-retry';\n button.textContent = 'Try again';\n button.setAttribute('aria-label', 'Try opening the Zippy app again');\n button.addEventListener('click', () => {\n this.callbacks.onRetryMobileApp?.();\n });\n return button;\n }\n\n private renderQrAwaitingLoader(): HTMLElement {\n const slot = document.createElement('div');\n slot.className = 'zippy-qr-awaiting';\n slot.setAttribute('aria-live', 'polite');\n slot.setAttribute('aria-label', 'Waiting for payment confirmation');\n\n const spinner = document.createElement('span');\n spinner.className = 'zippy-qr-awaiting-spinner';\n spinner.setAttribute('aria-hidden', 'true');\n\n slot.appendChild(spinner);\n return slot;\n }\n\n private renderPayTimer(expiresAt: string): HTMLElement {\n const slot = document.createElement('div');\n slot.className = 'zippy-pay-timer-slot';\n\n const remainingMs = msUntil(expiresAt);\n const timer = document.createElement('div');\n timer.className = 'zippy-pay-timer';\n timer.setAttribute('role', 'timer');\n timer.setAttribute('aria-live', 'polite');\n timer.setAttribute(\n 'aria-label',\n `${formatCountdownAccessible(remainingMs)} remaining to complete payment`,\n );\n\n const label = document.createElement('span');\n label.className = 'zippy-pay-timer-label';\n label.textContent = 'Time remaining';\n\n const value = document.createElement('span');\n value.className = 'zippy-pay-timer-value';\n value.setAttribute('aria-hidden', 'true');\n value.textContent = formatCountdown(remainingMs);\n\n timer.appendChild(label);\n timer.appendChild(value);\n slot.appendChild(timer);\n return slot;\n }\n\n private renderManualEntry(\n query: string,\n errorMessage: string | null,\n loading: boolean,\n mobileAppManualFallback: boolean,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n\n if (mobileAppManualFallback && this.callbacks.onBackToMobileAppFallback) {\n wrap.appendChild(\n this.renderBackButton(loading, {\n label: 'Back',\n onClick: () => this.callbacks.onBackToMobileAppFallback?.(),\n }),\n );\n } else if (this.uiOptions.allowManualBack && this.callbacks.onBackToChooseMethod) {\n wrap.appendChild(this.renderBackButton(loading, { label: 'Back' }));\n }\n\n const form = document.createElement('form');\n form.className = 'zippy-id-form';\n form.addEventListener('submit', (event) => {\n event.preventDefault();\n if (!loading && input.value.trim()) {\n void this.callbacks.onVerify(input.value);\n }\n });\n\n const field = document.createElement('div');\n field.className = 'zippy-input-combo';\n\n const inputWrap = document.createElement('div');\n inputWrap.className = 'zippy-input-combo-input-wrap';\n\n const input = document.createElement('input');\n input.id = 'zippy-payer-query';\n input.className = 'zippy-input-combo-field';\n input.type = 'text';\n input.placeholder = 'Zippy ID, email, or +15551234567';\n input.autocomplete = 'off';\n input.spellcheck = false;\n input.inputMode = 'text';\n input.value = query;\n input.disabled = loading;\n input.setAttribute('aria-label', 'Zippy ID, email, or phone number');\n\n const clearBtn = document.createElement('button');\n clearBtn.type = 'button';\n clearBtn.className = 'zippy-input-combo-clear';\n clearBtn.setAttribute('aria-label', 'Clear input');\n clearBtn.innerHTML =\n '<svg class=\"zippy-input-combo-clear-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 7l10 10M17 7 7 17\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>';\n\n const divider = document.createElement('span');\n divider.className = 'zippy-input-combo-divider';\n divider.setAttribute('aria-hidden', 'true');\n\n const verifyBtn = document.createElement('button');\n verifyBtn.type = 'button';\n verifyBtn.className = 'zippy-input-combo-action';\n verifyBtn.textContent = 'Find';\n verifyBtn.setAttribute('aria-label', 'Find Zippy account');\n\n const syncActionState = (): void => {\n const trimmed = input.value.trim();\n const isVerifying = loading;\n const hasValue = input.value.length > 0 && !loading;\n inputWrap.classList.toggle('zippy-input-combo-input-wrap--has-value', hasValue);\n clearBtn.disabled = !hasValue;\n clearBtn.tabIndex = hasValue ? 0 : -1;\n clearBtn.setAttribute('aria-hidden', hasValue ? 'false' : 'true');\n verifyBtn.disabled = loading || trimmed.length === 0;\n verifyBtn.classList.toggle('zippy-input-combo-action--loading', isVerifying);\n\n const existingSpinner = verifyBtn.querySelector('.zippy-spinner-inline');\n if (isVerifying) {\n verifyBtn.textContent = '';\n if (!existingSpinner) {\n const spinner = document.createElement('span');\n spinner.className = 'zippy-spinner-inline';\n spinner.setAttribute('aria-hidden', 'true');\n verifyBtn.appendChild(spinner);\n }\n verifyBtn.setAttribute('aria-label', 'Finding account');\n } else {\n existingSpinner?.remove();\n verifyBtn.textContent = 'Find';\n verifyBtn.setAttribute('aria-label', 'Find Zippy account');\n }\n };\n\n verifyBtn.addEventListener('click', () => {\n void this.callbacks.onVerify(input.value);\n });\n\n clearBtn.addEventListener('click', () => {\n input.value = '';\n this.state.paymentId = '';\n this.callbacks.onPaymentIdChange?.('');\n input.focus();\n syncActionState();\n });\n\n input.addEventListener('input', () => {\n this.state.paymentId = input.value;\n this.callbacks.onPaymentIdChange?.(input.value);\n syncActionState();\n });\n\n syncActionState();\n\n if (errorMessage) {\n field.classList.add('zippy-input-combo--error');\n }\n\n field.appendChild(inputWrap);\n inputWrap.appendChild(input);\n inputWrap.appendChild(clearBtn);\n field.appendChild(divider);\n field.appendChild(verifyBtn);\n form.appendChild(field);\n\n if (errorMessage) {\n form.appendChild(this.renderFieldError(errorMessage));\n }\n\n form.appendChild(this.renderPayerQueryHint());\n\n wrap.appendChild(form);\n return wrap;\n }\n\n private renderPayerQueryHint(): HTMLElement {\n const hint = document.createElement('div');\n hint.className = 'zippy-query-hint';\n\n const lead = document.createElement('p');\n lead.className = 'zippy-query-hint-lead';\n lead.textContent = 'Find your account using any of:';\n\n const list = document.createElement('ul');\n list.className = 'zippy-query-hint-list';\n\n for (const item of [\n { label: 'Zippy ID', example: 'john.doe12' },\n { label: 'Email', example: 'you@example.com' },\n { label: 'Phone', example: '+15551234567', note: 'E.164 — include + and country code' },\n ]) {\n list.appendChild(this.renderPayerQueryHintItem(item));\n }\n\n hint.appendChild(lead);\n hint.appendChild(list);\n return hint;\n }\n\n private renderPayerQueryHintItem(item: {\n label: string;\n example: string;\n note?: string;\n }): HTMLLIElement {\n const row = document.createElement('li');\n row.className = 'zippy-query-hint-item';\n\n const label = document.createElement('span');\n label.className = 'zippy-query-hint-label';\n label.textContent = item.label;\n\n const exampleWrap = document.createElement('span');\n exampleWrap.className = 'zippy-query-hint-example-wrap';\n\n const example = document.createElement('code');\n example.className = 'zippy-query-hint-example';\n example.textContent = item.example;\n exampleWrap.appendChild(example);\n\n if (item.note) {\n const note = document.createElement('span');\n note.className = 'zippy-query-hint-note';\n note.textContent = item.note;\n exampleWrap.appendChild(note);\n }\n\n row.appendChild(label);\n row.appendChild(exampleWrap);\n return row;\n }\n\n private renderPayerPicker(matches: PayerPreview[], loading: boolean): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n\n if (this.callbacks.onBackToManualEntry) {\n wrap.appendChild(\n this.renderBackButton(loading, {\n label: 'Back',\n onClick: () => this.callbacks.onBackToManualEntry?.(),\n }),\n );\n }\n\n const lead = document.createElement('p');\n lead.className = 'zippy-picker-lead';\n lead.textContent = 'Multiple accounts match. Select the one paying for this checkout.';\n wrap.appendChild(lead);\n\n const list = document.createElement('div');\n list.className = 'zippy-picker-list';\n list.setAttribute('role', 'listbox');\n list.setAttribute('aria-label', 'Matching Zippy accounts');\n\n for (const payer of matches) {\n list.appendChild(this.renderPayerPickerOption(payer, loading));\n }\n\n wrap.appendChild(list);\n return wrap;\n }\n\n private renderPayerPickerOption(payer: PayerPreview, loading: boolean): HTMLElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-picker-option';\n button.disabled = loading;\n button.setAttribute('role', 'option');\n button.setAttribute('aria-label', `Pay as ${payer.displayName}`);\n\n button.appendChild(this.renderIdentityCard(payer));\n button.addEventListener('click', () => {\n this.callbacks.onSelectPayer?.(payer);\n });\n\n return button;\n }\n\n private renderManualConfirm(\n verifiedPayer: PayerPreview | null,\n errorMessage: string | null,\n loading: boolean,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n\n const proceeding = loading && Boolean(verifiedPayer);\n\n if (verifiedPayer) {\n wrap.appendChild(\n this.renderIdentityCard(verifiedPayer, {\n dismissible: true,\n dismissDisabled: proceeding,\n onDismiss: () => this.callbacks.onBackToManualEntry?.(),\n }),\n );\n }\n\n if (errorMessage) {\n wrap.appendChild(this.renderFieldError(errorMessage));\n }\n\n const payBtn = document.createElement('button');\n payBtn.type = 'button';\n payBtn.className = 'zippy-btn zippy-btn-primary zippy-btn-block';\n payBtn.textContent = proceeding ? 'Processing…' : 'Proceed';\n payBtn.disabled = loading || !verifiedPayer;\n payBtn.addEventListener('click', () => {\n if (verifiedPayer) {\n void this.callbacks.onPay(verifiedPayer.paymentId);\n }\n });\n\n wrap.appendChild(payBtn);\n return wrap;\n }\n\n private renderBackButton(\n disabled: boolean,\n options?: { label?: string; onClick?: () => void },\n ): HTMLElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-back-btn';\n button.disabled = disabled;\n button.setAttribute('aria-label', options?.label ?? 'Back to payment options');\n button.innerHTML = `<svg class=\"zippy-back-btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M14.5 6.5 9 12l5.5 5.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg><span>${options?.label ?? 'Back'}</span>`;\n button.addEventListener('click', () => {\n if (options?.onClick) {\n options.onClick();\n } else {\n this.callbacks.onBackToChooseMethod?.();\n }\n });\n return button;\n }\n\n private renderFieldError(message: string): HTMLElement {\n const error = document.createElement('p');\n error.className = 'zippy-field-error';\n error.setAttribute('role', 'alert');\n\n const icon = document.createElement('span');\n icon.className = 'zippy-field-error-icon';\n icon.setAttribute('aria-hidden', 'true');\n icon.textContent = '!';\n\n const copy = document.createElement('span');\n copy.textContent = message;\n\n error.appendChild(icon);\n error.appendChild(copy);\n return error;\n }\n\n private renderIdentityCard(\n payer: PaymentSessionPayer,\n options?: {\n dismissible?: boolean;\n dismissDisabled?: boolean;\n onDismiss?: () => void;\n },\n ): HTMLElement {\n const identity = document.createElement('div');\n identity.className = `zippy-identity-card${\n options?.dismissible ? ' zippy-identity-card--dismissible' : ''\n }`;\n\n const avatar = this.renderIdentityAvatar(payer);\n\n const copy = document.createElement('div');\n copy.className = 'zippy-identity-copy';\n\n const label = document.createElement('p');\n label.className = 'zippy-identity-label';\n label.textContent = 'Paying as';\n\n const name = document.createElement('p');\n name.className = 'zippy-identity-name';\n name.textContent = payer.displayName;\n\n const handle = document.createElement('p');\n handle.className = 'zippy-identity-handle';\n handle.textContent = payer.paymentId;\n\n copy.appendChild(label);\n copy.appendChild(name);\n copy.appendChild(handle);\n identity.appendChild(avatar);\n identity.appendChild(copy);\n\n if (options?.dismissible) {\n identity.appendChild(\n this.renderCardDismissButton(options.dismissDisabled ?? false, options.onDismiss),\n );\n }\n\n return identity;\n }\n\n private renderCardDismissButton(disabled: boolean, onDismiss?: () => void): HTMLButtonElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'zippy-identity-card-dismiss';\n button.disabled = disabled;\n button.setAttribute('aria-label', 'Change account');\n button.innerHTML =\n '<svg class=\"zippy-identity-card-dismiss-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 7l10 10M17 7 7 17\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>';\n button.addEventListener('click', () => {\n onDismiss?.();\n });\n return button;\n }\n\n private renderIdentityAvatar(payer: PaymentSessionPayer): HTMLElement {\n const avatar = document.createElement('div');\n avatar.className = 'zippy-identity-avatar';\n const initials = formatDisplayInitials(payer.displayName);\n const profileImage = payer.profileImage?.trim();\n\n if (profileImage) {\n avatar.classList.add('zippy-identity-avatar--photo');\n const img = document.createElement('img');\n img.className = 'zippy-identity-avatar-image';\n img.src = profileImage;\n img.alt = '';\n img.addEventListener('error', () => {\n avatar.classList.remove('zippy-identity-avatar--photo');\n img.remove();\n avatar.textContent = initials;\n });\n avatar.appendChild(img);\n } else {\n avatar.textContent = initials;\n }\n\n return avatar;\n }\n\n private renderAwaiting(\n session: PaymentSession | null,\n method: CheckoutMethod,\n verifiedPayer: PayerPreview | null,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow zippy-flow-awaiting';\n\n const status = document.createElement('div');\n status.className = 'zippy-awaiting-status';\n status.innerHTML = `<div class=\"zippy-awaiting-ring\" aria-hidden=\"true\"><span></span></div>`;\n wrap.appendChild(status);\n\n const payer = session?.payer ?? verifiedPayer ?? null;\n if (payer) {\n wrap.appendChild(this.renderIdentityCard(payer));\n }\n\n const message = document.createElement('p');\n message.className = 'zippy-awaiting-message';\n message.textContent =\n method === 'qr'\n ? 'Complete the payment in the Zippy app to finish checkout.'\n : method === 'mobileApp'\n ? 'Complete the payment in the Zippy app to finish checkout.'\n : 'Tap the notification in Zippy Pay to approve this payment.';\n wrap.appendChild(message);\n\n wrap.appendChild(this.renderFootnote('Do not close or refresh this page.'));\n return wrap;\n }\n\n private renderFlowHint(text: string): HTMLElement {\n const hint = document.createElement('p');\n hint.className = 'zippy-flow-hint';\n hint.textContent = text;\n return hint;\n }\n\n private renderPayProgress(): HTMLElement {\n const bar = document.createElement('div');\n bar.className = 'zippy-pay-progress';\n bar.setAttribute('role', 'progressbar');\n bar.setAttribute('aria-label', 'Payment time remaining');\n bar.setAttribute('aria-valuemin', '0');\n bar.setAttribute('aria-valuemax', '100');\n\n const fill = document.createElement('div');\n fill.className = 'zippy-pay-progress-fill';\n bar.appendChild(fill);\n this.mountPayProgress(fill, bar);\n return bar;\n }\n\n private mountPayProgress(fill: HTMLElement, bar: HTMLElement): void {\n const tick = (): void => {\n const session = this.state.session;\n if (!session) {\n return;\n }\n\n const ratio = getPayWindowRemainingRatio(session);\n if (ratio === null || ratio <= 0) {\n bar.style.display = 'none';\n bar.setAttribute('aria-valuenow', '0');\n this.clearExpiryTimer();\n return;\n }\n\n bar.style.display = '';\n const pct = Math.round(ratio * 100);\n fill.style.transform = `scaleX(${ratio})`;\n bar.setAttribute('aria-valuenow', String(pct));\n\n const countdownEl = this.shadow.querySelector('.zippy-pay-timer-value');\n const timerEl = this.shadow.querySelector('.zippy-pay-timer');\n if (countdownEl instanceof HTMLElement && session.paymentExpiryAt) {\n const remainingMs = msUntil(session.paymentExpiryAt);\n countdownEl.textContent = formatCountdown(remainingMs);\n if (timerEl instanceof HTMLElement) {\n timerEl.setAttribute(\n 'aria-label',\n `${formatCountdownAccessible(remainingMs)} remaining to complete payment`,\n );\n }\n }\n };\n\n tick();\n this.expiryTimer = setInterval(tick, 1000);\n }\n\n private clearExpiryTimer(): void {\n if (this.expiryTimer !== null) {\n clearInterval(this.expiryTimer);\n this.expiryTimer = null;\n }\n }\n\n private mountTerminalExitTimer(): void {\n this.clearTerminalExitTimer();\n let remaining = TERMINAL_EXIT_COUNTDOWN_SEC;\n\n const updateDisplay = (): void => {\n const countdownEl = this.shadow.querySelector('.zippy-status-exit-countdown');\n if (countdownEl instanceof HTMLElement) {\n countdownEl.textContent = String(remaining);\n }\n };\n\n updateDisplay();\n this.terminalExitTimer = setInterval(() => {\n remaining -= 1;\n if (remaining <= 0) {\n this.clearTerminalExitTimer();\n this.callbacks.onTerminalExit?.();\n return;\n }\n updateDisplay();\n }, 1000);\n }\n\n private clearTerminalExitTimer(): void {\n if (this.terminalExitTimer !== null) {\n clearInterval(this.terminalExitTimer);\n this.terminalExitTimer = null;\n }\n }\n\n private renderFootnote(text: string): HTMLElement {\n const footnote = document.createElement('p');\n footnote.className = 'zippy-footnote';\n footnote.textContent = text;\n return footnote;\n }\n\n private renderOutcomeScreen(\n phase: CheckoutPhase,\n session: PaymentSession | null,\n exitMode: TerminalExitMode | null | undefined,\n embedMode: 'inline' | 'modal',\n ): HTMLElement {\n const copy = outcomeTerminalCopy(phase);\n return this.renderOutcomeStatus(\n copy.kind,\n copy.title,\n copy.detail,\n copy.kind,\n exitMode,\n embedMode,\n session?.transactionId ?? null,\n );\n }\n\n private renderOutcomeStatus(\n kind: 'success' | 'failure',\n titleText: string,\n detailText: string,\n outcome: 'success' | 'failure',\n exitMode: TerminalExitMode | null | undefined,\n embedMode: 'inline' | 'modal',\n transactionId: string | null,\n ): HTMLElement {\n const wrap = this.renderTerminal(kind, titleText, detailText);\n\n if (transactionId) {\n wrap.appendChild(this.renderTransactionReference(transactionId));\n }\n\n const resolvedExitMode = exitMode ?? 'close';\n const exit = document.createElement('p');\n exit.className = 'zippy-status-exit';\n\n const lead = document.createElement('span');\n lead.className = 'zippy-status-exit-lead';\n lead.textContent = terminalExitLeadText(resolvedExitMode, embedMode, outcome);\n\n const countdown = document.createElement('span');\n countdown.className = 'zippy-status-exit-countdown';\n countdown.textContent = String(TERMINAL_EXIT_COUNTDOWN_SEC);\n\n const suffix = document.createElement('span');\n suffix.className = 'zippy-status-exit-suffix';\n suffix.textContent = ' seconds…';\n\n exit.appendChild(lead);\n exit.appendChild(document.createTextNode(' '));\n exit.appendChild(countdown);\n exit.appendChild(suffix);\n wrap.appendChild(exit);\n\n return wrap;\n }\n\n private renderTransactionReference(transactionId: string): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-transaction-ref';\n\n const label = document.createElement('p');\n label.className = 'zippy-transaction-ref-label';\n label.textContent = 'Transaction ID';\n\n const value = document.createElement('p');\n value.className = 'zippy-transaction-ref-value';\n value.textContent = transactionId;\n\n wrap.appendChild(label);\n wrap.appendChild(value);\n return wrap;\n }\n\n private renderTerminal(\n kind: 'success' | 'failure' | 'error',\n titleText: string,\n detailText: string,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-status';\n\n const icon = document.createElement('div');\n icon.className = `zippy-status-icon ${kind}`;\n icon.innerHTML =\n kind === 'success'\n ? `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M7 14.5l4.5 4.5L21 9.5\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n : kind === 'failure'\n ? `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M10 10l8 8M18 10l-8 8\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\"/></svg>`\n : `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M10 10l8 8M18 10l-8 8\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\"/></svg>`;\n\n const title = document.createElement('p');\n title.className = 'zippy-status-title';\n title.textContent = titleText;\n\n const detail = document.createElement('p');\n detail.className = 'zippy-status-detail';\n detail.textContent = detailText;\n\n wrap.appendChild(icon);\n wrap.appendChild(title);\n wrap.appendChild(detail);\n return wrap;\n }\n\n private qrIconSvg(): string {\n return `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"14\" y=\"14\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"18\" y=\"14\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"14\" y=\"18\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"18\" y=\"18\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n </svg>`;\n }\n\n private idIconSvg(): string {\n return `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"9\" r=\"3.5\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <path d=\"M5 20c0-3.87 3.13-7 7-7s7 3.13 7 7\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>\n </svg>`;\n }\n}\n","export const DEFAULT_APP_HANDOFF_TIMEOUT_MS = 8000;\n\nexport type AppHandoffStatus = 'idle' | 'opening' | 'opened' | 'failed';\n\nexport type AppHandoffWatchOptions = {\n timeoutMs?: number;\n onOpened: () => void;\n onFailed: () => void;\n};\n\n/** Detects likely app open via visibility; otherwise fails after timeout. */\nexport function watchAppHandoff(options: AppHandoffWatchOptions): () => void {\n const timeoutMs = options.timeoutMs ?? DEFAULT_APP_HANDOFF_TIMEOUT_MS;\n let settled = false;\n\n const cleanupFns: Array<() => void> = [];\n\n const cleanup = (): void => {\n for (const fn of cleanupFns) {\n fn();\n }\n cleanupFns.length = 0;\n };\n\n const settle = (result: 'opened' | 'failed'): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n if (result === 'opened') {\n options.onOpened();\n } else {\n options.onFailed();\n }\n };\n\n const onVisibilityChange = (): void => {\n if (document.hidden) {\n settle('opened');\n }\n };\n\n document.addEventListener('visibilitychange', onVisibilityChange);\n cleanupFns.push(() => {\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n\n const timer = setTimeout(() => {\n if (document.hidden) {\n settle('opened');\n } else {\n settle('failed');\n }\n }, timeoutMs);\n cleanupFns.push(() => {\n clearTimeout(timer);\n });\n\n return cleanup;\n}\n","import { attachPayerWithRetry, PaymentSessionClient } from './api/client';\nimport { createEmbedHost, hideModal, showModal, type EmbedHost } from './embed/host';\nimport { isTerminalStatus, SessionPoller } from './session/poller';\nimport { msUntil } from './session/timing';\nimport { applyThemeToHost } from './theme';\nimport { CheckoutUi } from './ui/checkout-ui';\nimport type {\n ApiCheckoutMethod,\n CheckoutMethod,\n CheckoutPhase,\n CheckoutSurface,\n PayerPreview,\n PaymentSession,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyPayError,\n} from './types';\nimport { ZippyPayError as ZippyPayErrorClass } from './types';\nimport { parseZippyEnvironment, resolveApiBaseUrl } from './config/environments';\nimport { openAppStore, openPaymentDeepLink } from './qr/deep-link';\nimport {\n buildBindPolicyRequest,\n isCheckoutPolicyBound,\n isCheckoutStartAllowed,\n resolveAutoStartMethod,\n resolveCheckoutUiOptions,\n resolveCheckoutUiOptionsFromBound,\n resolveCheckoutUiOptionsFromSession,\n resolveEntryRouting,\n type ResolvedCheckoutUiOptions,\n} from './config/checkout-policy';\nimport {\n detectCheckoutSurface,\n subscribeCheckoutSurface,\n} from './config/device';\nimport {\n type AppHandoffStatus,\n watchAppHandoff,\n} from './app/handoff';\nimport {\n isUuidV4,\n isValidPayerQuery,\n normalizePayerQuery,\n payerQueryValidationMessage,\n appendRedirectQueryParams,\n type TerminalExitMode,\n} from './utils';\n\nexport class CheckoutController implements ZippyPayCheckoutInstance {\n private readonly config: ZippyPayConfig;\n private readonly client: PaymentSessionClient;\n private readonly embed: EmbedHost;\n private readonly poller: SessionPoller;\n private ui: CheckoutUi | null = null;\n private session: PaymentSession | null = null;\n private paymentId = '';\n private verifiedPayer: PayerPreview | null = null;\n private verifyMatches: PayerPreview[] | null = null;\n private lastVerifiedQuery: string | null = null;\n private committedMethod: CheckoutMethod | null = null;\n private phase: CheckoutPhase = 'loading';\n private errorMessage: string | null = null;\n private loading = true;\n private destroyed = false;\n private modalOpen = false;\n private exitMode: TerminalExitMode | null = null;\n private terminalFailureReason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined' | null = null;\n private uiOptions: ResolvedCheckoutUiOptions;\n private appHandoffStatus: AppHandoffStatus = 'idle';\n private clearAppHandoffWatch: (() => void) | null = null;\n private methodSwitchInProgress = false;\n private entryRoutingDone = false;\n private payWindowExpiryTimer: ReturnType<typeof setTimeout> | null = null;\n private unsubscribeSurface: (() => void) | null = null;\n\n private static readonly PAY_WINDOW_PHASES: readonly CheckoutPhase[] = [\n 'qr-active',\n 'mobile-app-active',\n 'awaiting',\n 'manual-confirm',\n ];\n\n constructor(config: ZippyPayConfig) {\n this.config = {\n mode: 'inline',\n closeOnBackdropClick: false,\n closeOnEscape: false,\n ...config,\n };\n\n if (!isUuidV4(this.config.sessionId)) {\n throw new Error('Zippy Pay: sessionId must be a UUID v4.');\n }\n\n parseZippyEnvironment(this.config.environment);\n\n this.uiOptions = resolveCheckoutUiOptions(\n this.config.checkoutPolicy,\n this.config.mobileApp,\n detectCheckoutSurface(),\n );\n\n this.client = new PaymentSessionClient({\n baseUrl: resolveApiBaseUrl(this.config.environment),\n sessionId: this.config.sessionId,\n clientToken: this.config.clientToken,\n });\n\n this.embed = createEmbedHost(this.config);\n applyThemeToHost(this.embed.host, this.config.theme);\n\n this.poller = new SessionPoller(() => this.client.getSession(), {\n onUpdate: (session) => this.handleSessionUpdate(session),\n onError: (error) => this.handlePollError(error),\n });\n\n this.ui = new CheckoutUi(\n this.embed.host,\n this.snapshotUiState(),\n {\n onChooseMethod: (method) => {\n void this.chooseMethod(method);\n },\n onVerify: (query) => this.verify(query),\n onPay: (paymentId) => this.attach(paymentId),\n onSelectPayer: (payer) => this.selectPayer(payer),\n onBackToChooseMethod: () => this.backToChooseMethod(),\n onBackToManualEntry: () => this.backToManualEntry(),\n onBackToMobileAppFallback: () => this.backToMobileAppFallback(),\n onOpenMobileApp: () => this.beginMobileAppHandoff(),\n onInstallZippy: () => this.installZippy(),\n onRetryMobileApp: () => this.beginMobileAppHandoff(),\n onPaymentIdChange: (query) => {\n const trimmed = normalizePayerQuery(query);\n let shouldSync = false;\n\n if (\n (this.verifiedPayer || this.verifyMatches) &&\n this.lastVerifiedQuery !== null &&\n trimmed !== this.lastVerifiedQuery\n ) {\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n if (\n this.phase === 'manual-confirm' ||\n this.phase === 'manual-picker'\n ) {\n this.phase = 'manual-entry';\n }\n shouldSync = true;\n }\n\n if (this.errorMessage) {\n this.errorMessage = null;\n shouldSync = true;\n }\n\n this.paymentId = query;\n\n if (shouldSync) {\n this.syncUi();\n }\n },\n onTerminalExit: () => this.executeTerminalExit(),\n },\n this.uiOptions,\n );\n\n void this.bootstrap();\n\n this.unsubscribeSurface = subscribeCheckoutSurface((surface) => {\n this.handleSurfaceChange(surface);\n });\n\n if (this.config.mode === 'inline') {\n this.modalOpen = true;\n }\n }\n\n open(): void {\n if (this.config.mode !== 'modal' || this.modalOpen) {\n return;\n }\n this.modalOpen = true;\n showModal(this.embed, this.config, () => this.close());\n }\n\n close(): void {\n if (this.config.mode !== 'modal') {\n return;\n }\n this.modalOpen = false;\n hideModal(this.embed);\n this.config.onClose?.();\n }\n\n destroy(): void {\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.unsubscribeSurface?.();\n this.unsubscribeSurface = null;\n this.poller.stop();\n this.clearAppHandoffWatch?.();\n this.clearAppHandoffWatch = null;\n this.clearPayWindowExpiryWatch();\n this.ui?.destroy();\n this.embed.destroy();\n this.ui = null;\n }\n\n private snapshotUiState() {\n return {\n phase: this.phase,\n session: this.session,\n sessionId: this.config.sessionId,\n committedMethod: this.committedMethod,\n paymentId: this.paymentId,\n verifiedPayer: this.verifiedPayer,\n verifyMatches: this.verifyMatches,\n errorMessage: this.errorMessage,\n loading: this.loading,\n mode: this.config.mode ?? 'inline',\n exitMode: this.exitMode,\n appHandoffStatus: this.appHandoffStatus,\n mobileAppManualFallback: this.isMobileAppManualFallbackActive(),\n };\n }\n\n private syncUi(partial?: {\n errorMessage?: string | null;\n loading?: boolean;\n exitMode?: TerminalExitMode | null;\n }): void {\n if (this.destroyed) {\n return;\n }\n\n if (partial && 'errorMessage' in partial) {\n this.errorMessage = partial.errorMessage ?? null;\n }\n if (partial && 'loading' in partial) {\n this.loading = partial.loading ?? false;\n }\n if (partial && 'exitMode' in partial) {\n this.exitMode = partial.exitMode ?? null;\n }\n\n this.ui?.update(this.snapshotUiState());\n }\n\n private async bootstrap(): Promise<void> {\n try {\n const session = await this.bindPolicy();\n if (this.destroyed) {\n return;\n }\n\n this.applyBoundUiOptions(session);\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n\n this.config.onReady?.(session);\n\n if (!isTerminalStatus(session.status)) {\n await this.routeIdleEntry();\n if (!this.destroyed) {\n this.syncUi({ loading: false });\n this.poller.start(session);\n }\n } else if (!this.destroyed) {\n this.syncUi({ loading: false });\n }\n } catch (error) {\n this.handleBootstrapError(error);\n }\n }\n\n private async bindPolicy(): Promise<PaymentSession> {\n const bindRequest = buildBindPolicyRequest({\n checkoutPolicy: this.config.checkoutPolicy,\n mobileApp: this.config.mobileApp,\n });\n\n try {\n return await this.client.bindCheckoutPolicy(bindRequest);\n } catch (error) {\n if (\n error instanceof ZippyPayErrorClass &&\n error.code === 'payment-session.checkout-policy-conflict'\n ) {\n const session = await this.client.getSession();\n if (isCheckoutPolicyBound(session)) {\n return session;\n }\n }\n throw error;\n }\n }\n\n private applyBoundUiOptions(session: PaymentSession, surface = detectCheckoutSurface()): void {\n this.uiOptions = resolveCheckoutUiOptionsFromSession(session, surface);\n this.ui?.updateUiOptions(this.uiOptions);\n }\n\n private handleSurfaceChange(surface: CheckoutSurface): void {\n if (this.destroyed || this.committedMethod) {\n return;\n }\n\n const session = this.session;\n if (!session || !isCheckoutPolicyBound(session)) {\n return;\n }\n\n if (this.uiOptions.surface === surface) {\n return;\n }\n\n this.uiOptions = resolveCheckoutUiOptionsFromBound(\n session.checkoutPolicy,\n session.mobileAppPolicy ?? 'OFF',\n surface,\n );\n this.ui?.updateUiOptions(this.uiOptions);\n\n if (this.phase === 'choose-method' || this.phase === 'loading') {\n this.syncUi();\n }\n }\n\n private applySession(\n session: PaymentSession,\n options?: { fromMethodSwitch?: boolean },\n ): void {\n this.session = session;\n this.config.onSessionUpdate?.(session);\n\n if (session.transactionStatus === 'DECLINED' && session.status !== 'COMPLETED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'declined', session });\n return;\n }\n\n if (session.status === 'COMPLETED') {\n this.methodSwitchInProgress = false;\n this.handleSuccess(session);\n return;\n }\n\n if (session.status === 'EXPIRED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'expired', session });\n return;\n }\n\n if (session.status === 'FAILED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'failed', session });\n return;\n }\n\n if (session.status === 'CANCELLED') {\n this.methodSwitchInProgress = false;\n this.handleFailure({ reason: 'cancelled', session });\n return;\n }\n\n if (this.isMobileAppManualFallbackActive() && !options?.fromMethodSwitch) {\n this.schedulePayWindowExpiryWatch();\n this.syncUi();\n return;\n }\n\n this.committedMethod = uiMethodFromApi(session.checkoutMethod) ?? this.committedMethod;\n\n this.phase = this.resolveActivePhase(session);\n this.schedulePayWindowExpiryWatch();\n this.syncUi();\n }\n\n private schedulePayWindowExpiryWatch(): void {\n this.clearPayWindowExpiryWatch();\n\n const session = this.session;\n if (!session?.paymentExpiryAt || !CheckoutController.PAY_WINDOW_PHASES.includes(this.phase)) {\n return;\n }\n\n const remainingMs = msUntil(session.paymentExpiryAt);\n if (remainingMs <= 0) {\n void this.handlePayWindowExpired();\n return;\n }\n\n this.payWindowExpiryTimer = setTimeout(() => {\n void this.handlePayWindowExpired();\n }, remainingMs + 250);\n }\n\n private clearPayWindowExpiryWatch(): void {\n if (this.payWindowExpiryTimer !== null) {\n clearTimeout(this.payWindowExpiryTimer);\n this.payWindowExpiryTimer = null;\n }\n }\n\n private async handlePayWindowExpired(): Promise<void> {\n if (this.destroyed || !this.session?.paymentExpiryAt) {\n return;\n }\n\n if (msUntil(this.session.paymentExpiryAt) > 0) {\n this.schedulePayWindowExpiryWatch();\n return;\n }\n\n if (!CheckoutController.PAY_WINDOW_PHASES.includes(this.phase)) {\n return;\n }\n\n try {\n const session = await this.client.getSession();\n if (this.destroyed) {\n return;\n }\n this.applySession(session);\n } catch {\n if (!this.destroyed) {\n this.handleFailure({ reason: 'expired', session: this.session });\n }\n }\n }\n\n private resolveActivePhase(session: PaymentSession): CheckoutPhase {\n if (session.status === 'AWAITING_PAYMENT') {\n if (\n session.checkoutMethod === 'MOBILE_APP' ||\n this.committedMethod === 'mobileApp'\n ) {\n return 'mobile-app-active';\n }\n if (session.checkoutMethod === 'QR' || this.committedMethod === 'qr') {\n return 'qr-active';\n }\n return 'awaiting';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'MOBILE_APP') {\n return 'mobile-app-active';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'QR') {\n return 'qr-active';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'MANUAL') {\n if (this.phase === 'manual-confirm' && this.verifiedPayer) {\n return 'manual-confirm';\n }\n return 'manual-entry';\n }\n\n if (session.phase === 'IDLE') {\n if (this.phase === 'manual-confirm' && this.verifiedPayer) {\n return 'manual-confirm';\n }\n if (this.phase === 'manual-picker' && this.verifyMatches) {\n return 'manual-picker';\n }\n if (this.phase === 'manual-entry') {\n return 'manual-entry';\n }\n if (this.phase === 'choose-method') {\n return 'choose-method';\n }\n if (this.phase === 'qr-active' && this.committedMethod === 'qr') {\n return 'qr-active';\n }\n if (this.phase === 'mobile-app-active' && this.committedMethod === 'mobileApp') {\n return 'mobile-app-active';\n }\n if (!session.checkoutMethod) {\n const routing = resolveEntryRouting(\n this.uiOptions.checkoutPolicy,\n this.uiOptions.mobileAppPolicy,\n this.uiOptions.surface,\n );\n if (routing !== 'chooser') {\n return 'loading';\n }\n }\n return 'choose-method';\n }\n\n return this.phase;\n }\n\n private handleSessionUpdate(session: PaymentSession): void {\n if (this.destroyed) {\n return;\n }\n\n this.applySession(session);\n }\n\n private handleFailure(params: {\n reason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined';\n session?: PaymentSession | null;\n error?: ZippyPayError;\n }): void {\n if (this.destroyed) {\n return;\n }\n\n this.poller.stop();\n this.clearPayWindowExpiryWatch();\n this.loading = false;\n\n const session = params.session ?? this.session;\n\n if (params.reason === 'expired') {\n if (session) {\n this.config.onExpired?.(session);\n }\n } else {\n const error =\n params.error ??\n (params.reason === 'failed' ||\n params.reason === 'cancelled' ||\n params.reason === 'declined'\n ? terminalSessionError(params.reason)\n : undefined);\n if (error) {\n this.config.onError?.(error);\n }\n }\n\n this.terminalFailureReason = params.reason;\n this.phase = this.failurePhaseFromReason(params.reason);\n this.exitMode = this.resolveExitMode('failure', session);\n this.syncUi();\n }\n\n private handleSuccess(session: PaymentSession): void {\n if (this.destroyed) {\n return;\n }\n\n this.poller.stop();\n this.clearPayWindowExpiryWatch();\n this.loading = false;\n this.config.onComplete?.(session);\n\n this.terminalFailureReason = null;\n this.phase = 'success';\n this.exitMode = this.resolveExitMode('success', session);\n this.syncUi();\n }\n\n private executeTerminalExit(): void {\n if (this.destroyed) {\n return;\n }\n\n const session = this.session;\n\n if (this.phase === 'success' && session) {\n if (this.config.redirectOnComplete && session.successUrl) {\n window.location.assign(\n appendRedirectQueryParams(session.successUrl, {\n sessionId: session.sessionId,\n status: session.status,\n transactionId: session.transactionId,\n }),\n );\n return;\n }\n } else if (\n this.phase === 'expired' ||\n this.phase === 'failed' ||\n this.phase === 'cancelled' ||\n this.phase === 'declined' ||\n this.phase === 'invalid-session'\n ) {\n const failureUrl = session?.failureUrl ?? null;\n if (this.config.redirectOnFailure && failureUrl) {\n const redirectUrl =\n this.terminalFailureReason === 'expired'\n ? appendRedirectQueryParams(failureUrl, {\n sessionId: session?.sessionId ?? this.config.sessionId,\n status: session?.status ?? 'EXPIRED',\n })\n : failureUrl;\n window.location.assign(redirectUrl);\n return;\n }\n }\n\n this.teardownView();\n }\n\n private resolveExitMode(\n kind: 'success' | 'failure',\n session: PaymentSession | null | undefined,\n ): TerminalExitMode {\n if (kind === 'success') {\n return this.config.redirectOnComplete && session?.successUrl ? 'redirect' : 'close';\n }\n return this.config.redirectOnFailure && session?.failureUrl ? 'redirect' : 'close';\n }\n\n private failurePhaseFromReason(\n reason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined',\n ): CheckoutPhase {\n switch (reason) {\n case 'expired':\n return 'expired';\n case 'failed':\n return 'failed';\n case 'cancelled':\n return 'cancelled';\n case 'declined':\n return 'declined';\n case 'invalid-session':\n return 'invalid-session';\n }\n }\n\n private teardownView(): void {\n if (this.config.mode === 'modal' && this.modalOpen) {\n this.close();\n }\n this.destroy();\n }\n\n private handleBootstrapError(error: unknown): void {\n if (error instanceof ZippyPayErrorClass && error.status === 401) {\n this.handleFailure({\n reason: 'invalid-session',\n error,\n session: this.session,\n });\n return;\n }\n this.handleError(error);\n }\n\n private handlePollError(error: unknown): void {\n const normalized = normalizeError(error);\n if (normalized.status === 401) {\n this.poller.stop();\n this.handleFailure({\n reason: 'invalid-session',\n error: normalized,\n session: this.session,\n });\n return;\n }\n if (normalized.code === 'payment-session.not-attachable') {\n this.poller.stop();\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n }\n }\n\n private handleError(error: unknown): void {\n const normalized = normalizeError(error);\n if (normalized.status === 401) {\n this.handleFailure({\n reason: 'invalid-session',\n error: normalized,\n session: this.session,\n });\n return;\n }\n if (normalized.code === 'payment-session.not-attachable') {\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n }\n if (normalized.code === 'payment-session.checkout-policy-not-bound') {\n if (this.phase === 'loading' || this.phase === 'choose-method') {\n this.phase = 'error';\n }\n this.syncUi({\n errorMessage:\n normalized.detail || 'Checkout is not ready yet. Please refresh and try again.',\n loading: false,\n });\n this.config.onError?.(normalized);\n this.poller.stop();\n return;\n }\n if (this.phase === 'loading' || this.phase === 'choose-method') {\n this.phase = 'error';\n }\n this.syncUi({ errorMessage: normalized.detail, loading: false });\n this.config.onError?.(normalized);\n this.poller.stop();\n }\n\n private async routeIdleEntry(): Promise<void> {\n if (this.destroyed || this.entryRoutingDone) {\n return;\n }\n\n const session = this.session;\n if (!session || isTerminalStatus(session.status)) {\n return;\n }\n\n if (session.checkoutMethod) {\n this.entryRoutingDone = true;\n return;\n }\n\n if (session.phase !== 'IDLE') {\n return;\n }\n\n const surface = detectCheckoutSurface();\n const { checkoutPolicy, mobileAppPolicy } = this.uiOptions;\n const autoMethod = resolveAutoStartMethod(checkoutPolicy, mobileAppPolicy, surface);\n\n if (autoMethod === 'MOBILE_APP') {\n await this.startMobileAppFlow(false);\n } else if (autoMethod === 'QR') {\n await this.chooseMethod('qr');\n } else {\n const routing = resolveEntryRouting(checkoutPolicy, mobileAppPolicy, surface);\n if (routing === 'auto-manual') {\n this.phase = 'manual-entry';\n this.syncUi({ loading: false });\n } else {\n this.phase = 'choose-method';\n this.syncUi({ loading: false });\n }\n }\n\n this.entryRoutingDone = true;\n }\n\n private openMobileApp(): void {\n openPaymentDeepLink(this.config.sessionId);\n }\n\n private beginMobileAppHandoff(): void {\n if (this.destroyed) {\n return;\n }\n\n this.clearAppHandoffWatch?.();\n this.clearAppHandoffWatch = null;\n this.appHandoffStatus = 'opening';\n this.syncUi();\n\n this.openMobileApp();\n\n this.clearAppHandoffWatch = watchAppHandoff({\n onOpened: () => {\n if (this.destroyed) {\n return;\n }\n this.appHandoffStatus = 'opened';\n this.syncUi();\n },\n onFailed: () => {\n if (this.destroyed) {\n return;\n }\n this.appHandoffStatus = 'failed';\n this.syncUi();\n },\n });\n }\n\n private installZippy(): void {\n openAppStore();\n }\n\n private async startMobileAppFlow(attemptOpen: boolean): Promise<void> {\n if (this.session?.checkoutMethod === 'MOBILE_APP') {\n this.committedMethod = 'mobileApp';\n this.phase = 'mobile-app-active';\n if (attemptOpen) {\n this.beginMobileAppHandoff();\n }\n this.syncUi({ loading: false });\n return;\n }\n\n if (this.committedMethod && this.committedMethod !== 'mobileApp') {\n return;\n }\n\n const surface = detectCheckoutSurface();\n if (!this.canStartAppClaim('MOBILE_APP', surface)) {\n return;\n }\n\n if (attemptOpen) {\n this.committedMethod = 'mobileApp';\n this.phase = 'mobile-app-active';\n this.beginMobileAppHandoff();\n } else {\n this.syncUi({ errorMessage: null, loading: true });\n }\n\n try {\n const session = await this.client.startMobileAppCheckout(surface);\n this.committedMethod = 'mobileApp';\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n\n this.phase = 'mobile-app-active';\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'choose-method');\n }\n }\n\n private canStartAppClaim(\n method: Extract<ApiCheckoutMethod, 'QR' | 'MOBILE_APP'>,\n surface: CheckoutSurface,\n ): boolean {\n if (!this.session || !isCheckoutPolicyBound(this.session)) {\n this.syncUi({\n errorMessage: 'Checkout is not ready yet. Please refresh and try again.',\n loading: false,\n });\n return false;\n }\n\n const checkoutPolicy = this.session.checkoutPolicy;\n const mobileAppPolicy = this.session.mobileAppPolicy ?? 'OFF';\n\n if (!isCheckoutStartAllowed(checkoutPolicy, mobileAppPolicy, surface, method)) {\n this.syncUi({\n errorMessage: 'This payment option is not available on your device.',\n loading: false,\n });\n return false;\n }\n\n return true;\n }\n\n private async chooseMethod(method: CheckoutMethod): Promise<void> {\n if (this.methodSwitchInProgress) {\n return;\n }\n\n if (\n this.committedMethod &&\n !(\n this.appHandoffStatus === 'failed' &&\n this.committedMethod === 'mobileApp' &&\n method !== 'mobileApp'\n )\n ) {\n return;\n }\n\n if (\n this.appHandoffStatus === 'failed' &&\n this.committedMethod === 'mobileApp' &&\n (method === 'qr' || method === 'manual')\n ) {\n await this.chooseFallbackMethod(method);\n return;\n }\n\n if (method === 'mobileApp') {\n await this.startMobileAppFlow(true);\n return;\n }\n\n this.verifiedPayer = null;\n this.syncUi({ errorMessage: null, loading: method === 'qr' });\n\n try {\n if (method === 'qr') {\n const surface = detectCheckoutSurface();\n if (!this.canStartAppClaim('QR', surface)) {\n return;\n }\n\n const session = await this.client.startQrCheckout(surface);\n this.committedMethod = 'qr';\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n this.syncUi({ loading: false });\n } else {\n this.phase = 'manual-entry';\n this.syncUi({ loading: false });\n }\n } catch (error) {\n this.handleFlowError(error, 'choose-method');\n }\n }\n\n private async chooseFallbackMethod(method: 'qr' | 'manual'): Promise<void> {\n if (\n this.appHandoffStatus !== 'failed' ||\n this.committedMethod !== 'mobileApp' ||\n this.methodSwitchInProgress\n ) {\n return;\n }\n\n this.clearAppHandoffWatch?.();\n this.clearAppHandoffWatch = null;\n\n if (method === 'manual') {\n // MOBILE_APP → MANUAL: attach auto-switches on the backend; no checkout/start.\n this.methodSwitchInProgress = true;\n this.appHandoffStatus = 'idle';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.paymentId = '';\n this.phase = 'manual-entry';\n this.syncUi({ errorMessage: null, loading: false });\n return;\n }\n\n this.methodSwitchInProgress = true;\n this.verifiedPayer = null;\n this.syncUi({ errorMessage: null, loading: true });\n\n try {\n const surface = detectCheckoutSurface();\n const session = await this.client.startQrCheckout(surface);\n if (this.destroyed) {\n return;\n }\n\n this.methodSwitchInProgress = false;\n this.appHandoffStatus = 'idle';\n this.loading = false;\n this.applySession(session, { fromMethodSwitch: true });\n } catch (error) {\n this.methodSwitchInProgress = false;\n this.handleFlowError(error, 'mobile-app-active');\n }\n }\n\n private backToChooseMethod(): void {\n if (!this.uiOptions.allowManualBack) {\n return;\n }\n\n if (this.committedMethod || (this.loading && this.verifiedPayer)) {\n return;\n }\n\n this.phase = 'choose-method';\n this.paymentId = '';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.errorMessage = null;\n this.loading = false;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private backToManualEntry(): void {\n if (this.loading && this.verifiedPayer) {\n return;\n }\n\n this.phase = 'manual-entry';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.errorMessage = null;\n this.loading = false;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private backToMobileAppFallback(): void {\n if (this.loading && this.verifiedPayer) {\n return;\n }\n\n if (!this.isMobileAppManualFallbackActive()) {\n return;\n }\n\n this.methodSwitchInProgress = false;\n this.appHandoffStatus = 'failed';\n this.phase = 'mobile-app-active';\n this.paymentId = '';\n this.verifiedPayer = null;\n this.verifyMatches = null;\n this.lastVerifiedQuery = null;\n this.errorMessage = null;\n this.loading = false;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private isMobileAppManualFallbackActive(): boolean {\n if (this.committedMethod !== 'mobileApp') {\n return false;\n }\n\n if (this.methodSwitchInProgress) {\n return true;\n }\n\n return (\n this.session?.checkoutMethod === 'MOBILE_APP' &&\n (this.phase === 'manual-entry' ||\n this.phase === 'manual-picker' ||\n this.phase === 'manual-confirm')\n );\n }\n\n private selectPayer(payer: PayerPreview): void {\n if (this.loading || this.phase !== 'manual-picker') {\n return;\n }\n\n this.verifiedPayer = payer;\n this.phase = 'manual-confirm';\n this.errorMessage = null;\n this.syncUi({ errorMessage: null, loading: false });\n }\n\n private async verify(query: string): Promise<void> {\n this.paymentId = query;\n if (!isValidPayerQuery(query)) {\n this.syncUi({ errorMessage: payerQueryValidationMessage(), loading: false });\n return;\n }\n\n const normalizedQuery = normalizePayerQuery(query);\n this.syncUi({ errorMessage: null, loading: true });\n try {\n const { items } = await this.client.verifyPayer(query);\n if (this.phase !== 'manual-entry') {\n return;\n }\n\n this.lastVerifiedQuery = normalizedQuery;\n this.verifyMatches = null;\n\n if (items.length === 1) {\n this.verifiedPayer = items[0]!;\n this.phase = 'manual-confirm';\n } else {\n this.verifiedPayer = null;\n this.verifyMatches = items;\n this.phase = 'manual-picker';\n }\n\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'manual-entry');\n }\n }\n\n private async attach(_paymentId: string): Promise<void> {\n if (!this.verifiedPayer) {\n this.syncUi({\n errorMessage: 'Find your account before proceeding to pay.',\n loading: false,\n });\n return;\n }\n\n this.syncUi({ errorMessage: null, loading: true });\n try {\n const session = await attachPayerWithRetry(this.client, this.verifiedPayer.paymentId);\n this.methodSwitchInProgress = false;\n this.committedMethod = 'manual';\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n if (session.status === 'AWAITING_PAYMENT') {\n this.poller.start(session);\n }\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'manual-confirm');\n }\n }\n\n private handleFlowError(error: unknown, fallbackPhase: CheckoutPhase): void {\n const normalized = normalizeError(error);\n const message = formatFlowErrorMessage(normalized, fallbackPhase);\n\n if (normalized.code === 'payment-session.not-attachable') {\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n } else if (normalized.code === 'payment-session.checkout-method-conflict') {\n void this.refreshAfterConflict();\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n return;\n } else if (normalized.code === 'payment-session.checkout-policy-not-bound') {\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n return;\n } else if (\n normalized.code === 'payment-session.checkout-policy-denied' ||\n normalized.code === 'payment-session.checkout-policy-conflict'\n ) {\n void this.refreshAfterConflict();\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n return;\n } else {\n this.phase = fallbackPhase;\n }\n\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n }\n\n private async refreshAfterConflict(): Promise<void> {\n try {\n const session = await this.client.getSession();\n if (isCheckoutPolicyBound(session)) {\n this.applyBoundUiOptions(session);\n }\n this.applySession(session);\n } catch {\n // keep current error state\n }\n }\n}\n\nfunction terminalSessionError(reason: 'failed' | 'cancelled' | 'declined'): ZippyPayError {\n if (reason === 'failed') {\n return new ZippyPayErrorClass({\n code: 'payment-session.failed',\n status: 400,\n title: 'Payment failed',\n detail: 'Something went wrong with this payment.',\n });\n }\n\n if (reason === 'declined') {\n return new ZippyPayErrorClass({\n code: 'payment-session.declined',\n status: 400,\n title: 'Payment declined',\n detail: 'Your payment was declined.',\n });\n }\n\n return new ZippyPayErrorClass({\n code: 'payment-session.cancelled',\n status: 400,\n title: 'Payment cancelled',\n detail: 'This payment was cancelled.',\n });\n}\n\nfunction uiMethodFromApi(method: ApiCheckoutMethod | null): CheckoutMethod | null {\n if (method === 'QR') {\n return 'qr';\n }\n if (method === 'MANUAL') {\n return 'manual';\n }\n if (method === 'MOBILE_APP') {\n return 'mobileApp';\n }\n return null;\n}\n\nfunction formatFlowErrorMessage(error: ZippyPayError, phase: CheckoutPhase): string {\n const isVerifyFailure =\n phase === 'manual-entry' &&\n (error.status === 404 ||\n error.code.includes('not-found') ||\n error.code.includes('payer-not-found') ||\n error.code === 'payer.not-found');\n\n if (isVerifyFailure) {\n return 'No Zippy account found';\n }\n\n return error.detail?.trim() || 'Something went wrong. Please try again.';\n}\n\nfunction normalizeError(error: unknown): ZippyPayError {\n if (error instanceof ZippyPayErrorClass) {\n return error;\n }\n return new ZippyPayErrorClass({\n code: 'unknown',\n status: 500,\n title: 'Unexpected error',\n detail: error instanceof Error ? error.message : 'An unexpected error occurred',\n });\n}\n\nexport function createCheckout(config: ZippyPayConfig): ZippyPayCheckoutInstance {\n return new CheckoutController(config);\n}\n","import { createCheckout } from '../checkout-controller';\nimport { parseZippyEnvironment } from '../config/environments';\nimport type {\n CheckoutPolicy,\n PaymentSession,\n ZippyEnvironment,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyPayError,\n ZippyTheme,\n} from '../types';\n\nconst ELEMENT_TAG = 'zippy-pay-checkout';\n\nconst THEME_ATTRIBUTE_MAP: Record<string, keyof ZippyTheme> = {\n 'theme-primary': 'primary',\n 'theme-primary-foreground': 'primaryForeground',\n 'theme-background': 'background',\n 'theme-surface': 'surface',\n 'theme-text': 'text',\n 'theme-text-muted': 'textMuted',\n 'theme-border': 'border',\n 'theme-error': 'error',\n 'theme-success': 'success',\n 'theme-border-radius': 'borderRadius',\n 'theme-font-family': 'fontFamily',\n 'theme-mode': 'mode',\n};\n\nexport class ZippyPayCheckoutElement extends HTMLElement {\n private instance: ZippyPayCheckoutInstance | null = null;\n\n static get observedAttributes(): string[] {\n return [\n 'mode',\n 'session-id',\n 'environment',\n 'checkout-policy',\n 'mobile-app-policy',\n ...Object.keys(THEME_ATTRIBUTE_MAP),\n ];\n }\n\n connectedCallback(): void {\n this.mount();\n }\n\n disconnectedCallback(): void {\n this.unmount();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.unmount();\n this.mount();\n }\n }\n\n set clientToken(value: string) {\n this.dataset.clientToken = value;\n if (this.isConnected) {\n this.unmount();\n this.mount();\n }\n }\n\n get clientToken(): string {\n return this.dataset.clientToken ?? this.getAttribute('client-token') ?? '';\n }\n\n private mount(): void {\n const config = this.readConfig();\n if (!config) {\n return;\n }\n\n this.innerHTML = '';\n const mode = config.mode ?? 'inline';\n let container: HTMLElement | undefined;\n\n if (mode === 'inline') {\n const host = document.createElement('div');\n this.appendChild(host);\n container = host;\n }\n\n this.instance = createCheckout({\n ...config,\n container,\n mode,\n onReady: (session: PaymentSession) => this.dispatch('zippy-ready', session),\n onSessionUpdate: (session: PaymentSession) =>\n this.dispatch('zippy-session-update', session),\n onComplete: (session: PaymentSession) => this.dispatch('zippy-complete', session),\n onExpired: (session: PaymentSession) => this.dispatch('zippy-expired', session),\n onError: (error: ZippyPayError) => this.dispatch('zippy-error', error),\n onClose: () => this.dispatch('zippy-close', null),\n });\n\n if (config.mode === 'modal') {\n this.instance.open();\n }\n }\n\n private unmount(): void {\n this.instance?.destroy();\n this.instance = null;\n this.innerHTML = '';\n }\n\n private readConfig(): ZippyPayConfig | null {\n const environmentAttr = this.getAttribute('environment') ?? 'production';\n const sessionId = this.getAttribute('session-id') ?? '';\n const clientToken = this.clientToken;\n const mode = (this.getAttribute('mode') as ZippyPayConfig['mode']) ?? 'inline';\n\n if (!sessionId || !clientToken) {\n return null;\n }\n\n let environment: ZippyEnvironment;\n try {\n environment = parseZippyEnvironment(environmentAttr);\n } catch {\n return null;\n }\n\n const theme: ZippyTheme = {};\n for (const [attr, key] of Object.entries(THEME_ATTRIBUTE_MAP)) {\n const value = this.getAttribute(attr);\n if (value) {\n if (key === 'mode') {\n theme.mode = value as ZippyTheme['mode'];\n } else {\n theme[key] = value;\n }\n }\n }\n\n return {\n environment,\n sessionId,\n clientToken,\n mode,\n theme,\n checkoutPolicy: parseCheckoutPolicyAttribute(this.getAttribute('checkout-policy')),\n mobileApp: parseMobileAppAttribute(this.getAttribute('mobile-app-policy')),\n };\n }\n\n private dispatch<T>(name: string, detail: T): void {\n this.dispatchEvent(\n new CustomEvent(name, {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n open(): void {\n this.instance?.open();\n }\n\n close(): void {\n this.instance?.close();\n }\n\n destroy(): void {\n this.instance?.destroy();\n this.instance = null;\n }\n}\n\nfunction parseCheckoutPolicyAttribute(value: string | null): CheckoutPolicy | undefined {\n if (value === 'QR' || value === 'MANUAL') {\n return value;\n }\n return undefined;\n}\n\nfunction parseMobileAppAttribute(value: string | null): ZippyPayConfig['mobileApp'] {\n if (value === 'off' || value === 'option' || value === 'enforce') {\n return { policy: value };\n }\n return undefined;\n}\n\nexport function defineZippyPayCheckoutElement(): void {\n if (typeof customElements === 'undefined') {\n return;\n }\n if (!customElements.get(ELEMENT_TAG)) {\n customElements.define(ELEMENT_TAG, ZippyPayCheckoutElement);\n }\n}\n\nexport { ELEMENT_TAG };\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'zippy-pay-checkout': ZippyPayCheckoutElement;\n }\n}\n","import { createCheckout } from './checkout-controller';\nimport { defineZippyPayCheckoutElement } from './element/zippy-pay-checkout';\n\nexport { PaymentSessionClient, attachPayerWithRetry } from './api/client';\nexport { SessionPoller, isTerminalStatus, phaseFromSession } from './session/poller';\nexport {\n getCountdownTarget,\n getPayWindowRemainingRatio,\n getSoftIdleHint,\n msUntil,\n shouldShowPayProgress,\n} from './session/timing';\nexport { CheckoutController, createCheckout } from './checkout-controller';\nexport {\n defineZippyPayCheckoutElement,\n ZippyPayCheckoutElement,\n ELEMENT_TAG,\n} from './element/zippy-pay-checkout';\nexport {\n PAYMENT_ID_PATTERN,\n E164_PHONE_PATTERN,\n EMAIL_PATTERN,\n normalizePaymentId,\n normalizePayerQuery,\n isValidPaymentId,\n isValidPayerQuery,\n paymentIdValidationMessage,\n payerQueryValidationMessage,\n formatAmount,\n} from './utils';\nexport {\n ZIPPY_API_BASE_URLS,\n ZIPPY_API_PATH_PREFIX,\n isZippyEnvironment,\n parseZippyEnvironment,\n resolveApiBaseUrl,\n} from './config/environments';\nexport {\n ANDROID_APP_PACKAGE,\n ANDROID_PLAY_STORE_NATIVE_URL,\n APP_STORE_LINKS,\n IOS_APP_STORE_NATIVE_URL,\n resolveAppStoreOpenUrl,\n resolveAppStoreUrl,\n} from './config/app-links';\nexport type { AppStoreLinks } from './config/app-links';\nexport {\n buildBindPolicyRequest,\n isCheckoutPolicyBound,\n isCheckoutStartAllowed,\n isFullChooserPolicy,\n resolveAutoStartMethod,\n resolveCheckoutUiOptions,\n resolveCheckoutUiOptionsFromBound,\n resolveCheckoutUiOptionsFromSession,\n resolveEntryRouting,\n resolveMethodAvailability,\n resolveMobileAppPolicy,\n} from './config/checkout-policy';\nexport {\n detectCheckoutSurface,\n isAndroidDevice,\n isPhoneDevice,\n subscribeCheckoutSurface,\n} from './config/device';\n\nexport { buildPaymentQrPayload,\n renderPaymentQrSvg,\n renderBrandedPaymentQrSvg,\n renderPaymentQrMarkup,\n renderUrlQrMarkup,\n renderQrSvg,\n} from './qr/render-qr';\nexport { openAppStore, openPaymentDeepLink, buildAndroidPaymentIntentUrl, buildPaymentDeepLinkOpenUrl } from './qr/deep-link';\nexport { resolveTheme, DEFAULT_THEME, applyThemeToHost } from './theme';\n\nexport type {\n PaymentSession,\n PaymentSessionPayer,\n PaymentSessionStatus,\n PaymentSessionPhase,\n ApiCheckoutMethod,\n ApiCheckoutPolicy,\n ApiMobileAppPolicy,\n BoundCheckoutPolicy,\n BindCheckoutPolicyRequest,\n StartCheckoutRequest,\n CheckoutSurface,\n VerifyPayerResponse,\n PayerPreview,\n CheckoutPolicy,\n MobileAppPolicy,\n ZippyMobileAppConfig,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyEnvironment,\n ZippyTheme,\n CheckoutPhase,\n CheckoutMethod,\n EmbedMode,\n ProblemJson,\n} from './types';\n\nexport { ZippyPayError, TERMINAL_STATUSES, POLLABLE_STATUSES } from './types';\n\nimport type { ZippyPayConfig, ZippyPayCheckoutInstance } from './types';\n\nexport const ZippyPay = {\n create(config: ZippyPayConfig): ZippyPayCheckoutInstance {\n const instance = createCheckout(config);\n if ((config.mode ?? 'inline') === 'modal') {\n instance.open();\n }\n return instance;\n },\n};\n\ndefineZippyPayCheckoutElement();\n\nexport default ZippyPay;\n"]}
|