@seams/wallet 0.15.6 → 0.18.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.
Files changed (605) hide show
  1. package/README.md +15 -8
  2. package/THIRD_PARTY_NOTICES.md +102 -1
  3. package/dist/.build-inputs.sha256 +1 -1
  4. package/dist/esm/SeamsWeb/SeamsWeb.js +20 -1
  5. package/dist/esm/SeamsWeb/operations/registration/registrationSignerSet.js +73 -0
  6. package/dist/esm/SeamsWeb/operations/session/thresholdEcdsaProvisioning.js +22 -0
  7. package/dist/esm/SeamsWeb/publicApi/capabilitySelection.js +2 -1
  8. package/dist/esm/SeamsWeb/publicApi/createPublicApi.js +26 -1
  9. package/dist/esm/SeamsWeb/walletIframe/client/overlay/overlay-controller.js +71 -69
  10. package/dist/esm/SeamsWeb/walletIframe/client/preferenceState.js +6 -8
  11. package/dist/esm/SeamsWeb/walletIframe/client/preferences.js +7 -5
  12. package/dist/esm/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +2 -1
  13. package/dist/esm/SeamsWeb/walletIframe/client/router.js +116 -108
  14. package/dist/esm/SeamsWeb/walletIframe/client/surface/transactionSurfaceQueue.js +11 -7
  15. package/dist/esm/SeamsWeb/walletIframe/client/transactionReviewReservation.js +3 -2
  16. package/dist/esm/SeamsWeb/walletIframe/client/transport/IframeTransport.js +53 -49
  17. package/dist/esm/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.js +6 -2
  18. package/dist/esm/SeamsWeb/walletIframe/coordinator.js +18 -13
  19. package/dist/esm/SeamsWeb/walletIframe/host/surface-measurement-reporter.js +14 -13
  20. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.js +6 -8
  21. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +387 -535
  22. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.js +13 -8
  23. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.js +116 -0
  24. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.js +60 -0
  25. package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +1 -0
  26. package/dist/esm/SeamsWeb/walletIframe/shared/facadeBoundary.js +2 -0
  27. package/dist/esm/core/config/configBuilder.js +3 -1
  28. package/dist/esm/core/config/defaultConfigs.js +1 -0
  29. package/dist/esm/core/indexedDB/accountSignerLifecycle.js +2 -0
  30. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +1 -0
  31. package/dist/esm/core/indexedDB/seamsWalletDB/manager.js +6 -5
  32. package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +2 -0
  33. package/dist/esm/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +2 -2
  34. package/dist/esm/core/indexedDB/unifiedIndexedDBManager.js +6 -3
  35. package/dist/esm/core/rpcClients/near/NearRpcError.js +7 -0
  36. package/dist/esm/core/rpcClients/relayer/routerAbNormalSigning.js +3 -0
  37. package/dist/esm/core/rpcClients/relayer/walletRegistration.js +6 -2
  38. package/dist/esm/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +5 -4
  39. package/dist/esm/core/signingEngine/chains/evm/evmAdapter.js +2 -1
  40. package/dist/esm/core/signingEngine/chains/tempo/tempoAdapter.js +2 -1
  41. package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +1 -1
  42. package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +5 -1
  43. package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/webauthnP256.js +1 -1
  44. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +3 -2
  45. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignatureRefillProgress.js +5 -7
  46. package/dist/esm/core/signingEngine/session/lifecycle/walletSessionFailure.js +2 -0
  47. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +68 -10
  48. package/dist/esm/core/signingEngine/session/material/walletSigningStateFailure.js +2 -2
  49. package/dist/esm/core/signingEngine/session/operationState/authorizationAdmission.js +2 -0
  50. package/dist/esm/core/signingEngine/stepUpConfirmation/methodSelection.js +2 -0
  51. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.js +36 -32
  52. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.js +10 -6
  53. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.js +12 -12
  54. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.js +29 -29
  55. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.js +141 -141
  56. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +21 -21
  57. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/EmailOtpContent.js +45 -40
  58. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.js +19 -21
  59. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/HaloBorder.js +21 -24
  60. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.js +16 -16
  61. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.js +9 -5
  62. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +128 -125
  63. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.js +72 -74
  64. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +51 -26
  65. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +65 -53
  66. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +44 -40
  67. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionTree.js +122 -122
  68. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/WalletLocale.js +24 -0
  69. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/email-otp-session.js +81 -80
  70. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +47 -41
  71. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +17 -11
  72. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/tree.js +4 -21
  73. package/dist/esm/core/types/actionBuilders.js +16 -2
  74. package/dist/esm/core/types/amounts.js +83 -0
  75. package/dist/esm/core/types/linkDevice.js +1 -1
  76. package/dist/esm/core/ui/locale.js +10 -0
  77. package/dist/esm/core/ui/messages.js +694 -0
  78. package/dist/esm/externalEvm/controller.js +49 -48
  79. package/dist/esm/index.js +3 -1
  80. package/dist/esm/react/boundWallet.js +56 -0
  81. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonMock.js +7 -3
  82. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +6 -3
  83. package/dist/esm/react/components/AccountMenuButton/AccountMenuDeviceDetails.js +4 -3
  84. package/dist/esm/react/components/AccountMenuButton/AccountMenuDialog.js +5 -2
  85. package/dist/esm/react/components/AccountMenuButton/AccountMenuMockScreens.js +31 -27
  86. package/dist/esm/react/components/AccountMenuButton/AccountMenuScreen.js +6 -3
  87. package/dist/esm/react/components/AccountMenuButton/AccountsSection.js +6 -3
  88. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodRow.js +5 -4
  89. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +33 -27
  90. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsView.js +5 -2
  91. package/dist/esm/react/components/AccountMenuButton/ExportKeysScreen.js +5 -3
  92. package/dist/esm/react/components/AccountMenuButton/ExportKeysSection.js +4 -3
  93. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.css +13 -2
  94. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +50 -41
  95. package/dist/esm/react/components/AccountMenuButton/LockMenuItem.js +2 -1
  96. package/dist/esm/react/components/AccountMenuButton/MenuItem.js +3 -2
  97. package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +8 -4
  98. package/dist/esm/react/components/AccountMenuButton/RecoveryCodeAcknowledgement.js +3 -2
  99. package/dist/esm/react/components/AccountMenuButton/RecoveryCodeActions.js +4 -3
  100. package/dist/esm/react/components/AccountMenuButton/SegmentedControl.js +2 -1
  101. package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +11 -10
  102. package/dist/esm/react/components/AccountMenuButton/UserAccountButton.js +8 -4
  103. package/dist/esm/react/components/AccountMenuButton/WalletRegionSection.js +112 -108
  104. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +74 -73
  105. package/dist/esm/react/components/AccountMenuButton/index.js +18 -15
  106. package/dist/esm/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.js +30 -26
  107. package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +17 -6
  108. package/dist/esm/react/components/QRCodeScanner.js +28 -23
  109. package/dist/esm/react/components/ShowQRCode.css +13 -2
  110. package/dist/esm/react/components/ShowQRCode.js +39 -31
  111. package/dist/esm/react/components/theme/ThemeProvider.js +3 -0
  112. package/dist/esm/react/context/WalletLocale.js +15 -0
  113. package/dist/esm/react/context/index.js +38 -6
  114. package/dist/esm/react/context/useSeamsWithSdkFlow.js +1 -1
  115. package/dist/esm/react/externalEvm.js +22 -25
  116. package/dist/esm/react/index.js +4 -4
  117. package/dist/esm/react/styles/styles.css +13 -2
  118. package/dist/esm/react/transactionReview/TransactionReviewHost.js +3 -6
  119. package/dist/esm/react/transactionReview/boundCalls.js +1 -1
  120. package/dist/esm/react/transactionReview/controller.js +121 -119
  121. package/dist/esm/sdk/ConfirmationDrawer-mu3iThxX.js +1 -0
  122. package/dist/esm/sdk/NonceCoordinator-Dq-FZpBz.js +1 -0
  123. package/dist/{public/sdk/accountLifecycle-CBOkr0vU.js → esm/sdk/accountLifecycle-fLNUdjct.js} +1 -1
  124. package/dist/esm/sdk/{activeWalletSession-WdZkhtBB.js → activeWalletSession-BpbnpU9s.js} +1 -1
  125. package/dist/esm/sdk/adapters-u7LVXthY.js +2 -0
  126. package/dist/esm/sdk/appearance-token-vars-CzBVbO39.js +2 -0
  127. package/dist/esm/sdk/authorizationAdmission-Dd23mTx7.js +1 -0
  128. package/dist/esm/sdk/{canonicalPrimitives-Dsbsxgxc.js → canonicalPrimitives-BMP5yILS.js} +1 -1
  129. package/dist/esm/sdk/{capabilityKinds-N8xo_IEh.js → capabilityKinds-D0Yrp9uf.js} +1 -1
  130. package/dist/esm/sdk/{chains-C_X_fNuS.js → chains-CPmd4s9f.js} +1 -1
  131. package/dist/esm/sdk/challengeDelivery-CG2J5Qxs.js +1 -0
  132. package/dist/esm/sdk/{clientSessionPersistenceState-CBylL1Ul.js → clientSessionPersistenceState-BgO4P6CZ.js} +1 -1
  133. package/dist/esm/sdk/{commitQueue-DYEgzoLA.js → commitQueue-BW7BpYyA.js} +1 -1
  134. package/dist/esm/sdk/configBuilder-BMNShuOu.js +1 -0
  135. package/dist/esm/sdk/{configHelpers-B-hs0mTO.js → configHelpers-D50F_Txb.js} +1 -1
  136. package/dist/esm/sdk/{digestEncoding-BX3VW9eF.js → digestEncoding-aC4dSf_x.js} +1 -1
  137. package/dist/esm/sdk/{display-DsfJkAra.js → display-WtILOPQR.js} +1 -1
  138. package/dist/esm/sdk/domainIds-C3fUa33Q.js +1 -0
  139. package/dist/esm/sdk/ecdsaCapabilityManifest-DRc423SV.js +1 -0
  140. package/dist/esm/sdk/{ecdsaChainTarget-Bfatk3oP.js → ecdsaChainTarget-DkOrgv4y.js} +1 -1
  141. package/dist/esm/sdk/ecdsaDerivationClientWasm-DmwKWUEb.js +1 -0
  142. package/dist/{public/sdk/ecdsaDerivationExport-DOGzq0qC.js → esm/sdk/ecdsaDerivationExport-DX89rq_u.js} +1 -1
  143. package/dist/esm/sdk/{ecdsaWalletRecords-CHfrYvKr.js → ecdsaWalletRecords-CxxUt3fS.js} +1 -1
  144. package/dist/{public/sdk/emailOtpEcdsaDerivationIdentity-Bik0N8v9.js → esm/sdk/emailOtpEcdsaDerivationIdentity-CupWCKNg.js} +1 -1
  145. package/dist/esm/sdk/{errors-DIWY1KR9.js → errors-ADOZT8oV.js} +1 -1
  146. package/dist/esm/sdk/export-viewer-host-ivf9LlBo.js +1 -0
  147. package/dist/{public/sdk/exportKeypairOperation-DzbjKbnk.js → esm/sdk/exportKeypairOperation-Gw7L5Htj.js} +1 -1
  148. package/dist/esm/sdk/{helpers-B9fpZNAP.js → helpers-DS0bksx9.js} +1 -1
  149. package/dist/esm/sdk/{host-DfWylEiw.js → host-B-2QXolt.js} +1 -1
  150. package/dist/esm/sdk/{intentDigest-P_-CM7lS.js → intentDigest-Rh5Mg8X7.js} +1 -1
  151. package/dist/esm/sdk/{lanes-5kcTFbPx.js → lanes-BzU7cv2T.js} +1 -1
  152. package/dist/esm/sdk/localOnly-BKpUHtHa.js +1 -0
  153. package/dist/esm/sdk/mountExportPrivateKeySurface-C8pUK6PQ.js +1 -0
  154. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-DUudF89t.js +2 -0
  155. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-DgWDGRI_.js +1 -0
  156. package/dist/{public/sdk/nearEd25519YaoSigningPreparation-RIfkYN0d.js → esm/sdk/nearEd25519YaoSigningPreparation-yKDLQXBS.js} +1 -1
  157. package/dist/esm/sdk/{nonceLaneKeys-BCYfl1wv.js → nonceLaneKeys-BzMBVxMU.js} +1 -1
  158. package/dist/esm/sdk/{normalization-n503J-BI.js → normalization-Ct9-AY13.js} +1 -1
  159. package/dist/esm/sdk/{operationFingerprint-BHNYryLY.js → operationFingerprint-C4VX-0NI.js} +1 -1
  160. package/dist/esm/sdk/{passkey-custody-DpTM-eNJ.js → passkey-custody-Ba-NQ_4C.js} +1 -1
  161. package/dist/esm/sdk/{pendingWalletRecoveryCodeBackup-C60sZMj5.js → pendingWalletRecoveryCodeBackup-7tBjuSe7.js} +1 -1
  162. package/dist/esm/sdk/presignaturePool-BHoxnbOA.js +1 -0
  163. package/dist/esm/sdk/{prfCache-DJ93rtDv.js → prfCache-BAFh1skJ.js} +1 -1
  164. package/dist/esm/sdk/{primitives-CqrjmIAH.js → primitives-CTmDwMNc.js} +1 -1
  165. package/dist/{public/sdk/recovery-entrypoint-BULjaFBM.js → esm/sdk/recovery-entrypoint-DWghFZrZ.js} +1 -1
  166. package/dist/esm/sdk/{registration-CyF7nOXs.js → registration-CWpOVwhj.js} +1 -1
  167. package/dist/esm/sdk/registration-D2OEgY7O.js +1 -0
  168. package/dist/esm/sdk/{registrationAccounts-BQMUusdD.js → registrationAccounts-CD1u1ZqZ.js} +1 -1
  169. package/dist/esm/sdk/{registrationAuthMethodInput-RbSR7R1G.js → registrationAuthMethodInput-B23_HRil.js} +1 -1
  170. package/dist/esm/sdk/{registrationIds-BaK3jUS6.js → registrationIds-B1OpqRAt.js} +1 -1
  171. package/dist/esm/sdk/{registrationIntent-090Zj7Iu.js → registrationIntent-D4YDjf2U.js} +1 -1
  172. package/dist/{public/sdk/registrationSignerPlan-CPzHavPM.js → esm/sdk/registrationSignerPlan-BHkqlian.js} +1 -1
  173. package/dist/{public/sdk/requireStepUpAuth-BCY5ZStI.js → esm/sdk/requireStepUpAuth-CnSCFSOZ.js} +1 -1
  174. package/dist/esm/sdk/routerAbNormalSigning-BV1t27aB.js +1 -0
  175. package/dist/esm/sdk/runtime-auth-jtyQAuxZ.js +1 -0
  176. package/dist/esm/sdk/runtime-device-link-vhRhB-wS.js +1 -0
  177. package/dist/esm/sdk/runtime-ecdsa-tempo-BXWgFVBa.js +1 -0
  178. package/dist/esm/sdk/runtime-email-otp-BlAaSKtk.js +1 -0
  179. package/dist/esm/sdk/runtime-export-B4FuHhcH.js +1 -0
  180. package/dist/esm/sdk/runtime-near-BnWOpEpA.js +1 -0
  181. package/dist/esm/sdk/runtime-preferences-COm-LTiu.js +1 -0
  182. package/dist/esm/sdk/runtime-recovery-BJTo5Idi.js +1 -0
  183. package/dist/esm/sdk/{runtime-recovery-codes-GOytzExh.js → runtime-recovery-codes-CEOjdUHV.js} +1 -1
  184. package/dist/esm/sdk/{sdkSentEvents-D4KtK7_I.js → sdkSentEvents-DujYAPEM.js} +1 -1
  185. package/dist/esm/sdk/secp256k1-wOOHtPcK.js +1 -0
  186. package/dist/esm/sdk/{secureRandomId-LwBFx84B.js → secureRandomId-8LSc91aN.js} +1 -1
  187. package/dist/esm/sdk/sessionObservationRevision-C7v-wN8_.js +1 -0
  188. package/dist/esm/sdk/shared-BKPGtAps.js +6 -0
  189. package/dist/{public/sdk/signEvmFamily-Cpm3e6Zs.js → esm/sdk/signEvmFamily-DT34Vtpa.js} +1 -1
  190. package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-NYCFU6Li.js +1 -0
  191. package/dist/esm/sdk/{signEvmWithUiConfirm-BRmdLgmm.js → signEvmWithUiConfirm-D6nmJr_L.js} +1 -1
  192. package/dist/esm/sdk/signNear-B000QxBd.js +1 -0
  193. package/dist/esm/sdk/signatureUses-B_nN17i7.js +1 -0
  194. package/dist/esm/sdk/{signerDomain-Dp7BhfmZ.js → signerDomain-BFqRQ0Jl.js} +1 -1
  195. package/dist/esm/sdk/{signingFlow-VAnM8L5C.js → signingFlow-gl85GOW4.js} +2 -2
  196. package/dist/esm/sdk/{signingQueue-D_Ebmzcn.js → signingQueue-gW7wmOuL.js} +1 -1
  197. package/dist/{public/sdk/singletons-BXhnsqeY.js → esm/sdk/singletons-CAsc9LvA.js} +1 -1
  198. package/dist/esm/sdk/surface-measurement-reporter-BJhfiPw6.js +1 -0
  199. package/dist/{public/sdk/thresholdEcdsa-CneSKcRt.js → esm/sdk/thresholdEcdsa-Ci7yz395.js} +1 -1
  200. package/dist/esm/sdk/{trace-BBux0jtr.js → trace-CsRMlSh1.js} +1 -1
  201. package/dist/{public/sdk/transaction-activity-Cccvec2J.js → esm/sdk/transaction-activity-C0nCSW6c.js} +1 -1
  202. package/dist/esm/sdk/transactionReviewAdmission-CNNho8IG.js +1 -0
  203. package/dist/{public/sdk/transactionState-Day-1x7Y.js → esm/sdk/transactionState-lB2qpkOm.js} +1 -1
  204. package/dist/esm/sdk/tx-confirm-ui.js +2502 -1174
  205. package/dist/esm/sdk/{types-hKLqDUhR.js → types-CQTWmtqu.js} +1 -1
  206. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  207. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  208. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  209. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  210. package/dist/{public/sdk/wallet-recovery-Bfhfk52N.js → esm/sdk/wallet-recovery-DFaS3geI.js} +1 -1
  211. package/dist/esm/sdk/wallet-ui.css +1 -1
  212. package/dist/{public/sdk/walletAuthMethodRecord-LniOQQmj.js → esm/sdk/walletAuthMethodRecord-CWdqdY_s.js} +1 -1
  213. package/dist/{public/sdk/walletAuthority-CAiGuWW2.js → esm/sdk/walletAuthority-BY3kyKQ-.js} +1 -1
  214. package/dist/esm/sdk/walletCustodyEcdsaContinuity-mGh1Ysko.js +1 -0
  215. package/dist/esm/sdk/{walletDbName-DtRewci9.js → walletDbName-BxWApBQF.js} +1 -1
  216. package/dist/esm/sdk/{walletOwnershipGeneration-B6HyR2rE.js → walletOwnershipGeneration-DSGfjuV2.js} +1 -1
  217. package/dist/esm/sdk/{walletRecoveryCommit-C6HF84_U.js → walletRecoveryCommit-DQA_wveK.js} +1 -1
  218. package/dist/esm/sdk/{walletRecoveryRotate-BN3H8byw.js → walletRecoveryRotate-zvQThn37.js} +1 -1
  219. package/dist/esm/sdk/walletRegistrationSetupPrewarm-DdVpKccU.js +1 -0
  220. package/dist/esm/sdk/walletSessionAuthorizationStatus-ONPRiEbK.js +1 -0
  221. package/dist/esm/sdk/walletSessionAuthorizationStore-DnUMtkev.js +1 -0
  222. package/dist/esm/sdk/walletSessionFailure-C6TAQTZn.js +1 -0
  223. package/dist/esm/sdk/warmSessionHydration-D8Vdro9n.js +1 -0
  224. package/dist/esm/sdk/webauthnP256-_ajaNl90.js +1 -0
  225. package/dist/esm/sdk/webauthnPromptCoordinator-9bVeHcTZ.js +1 -0
  226. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  227. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +6 -0
  228. package/dist/esm/shared-ts/src/near/nearClient.js +6 -0
  229. package/dist/esm/shared-ts/src/threshold/participants.js +2 -1
  230. package/dist/esm/shared-ts/src/threshold/secp256k1.js +6 -0
  231. package/dist/esm/shared-ts/src/utils/domainIds.js +7 -0
  232. package/dist/esm/shared-ts/src/utils/index.js +1 -1
  233. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +14 -1
  234. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +5 -4
  235. package/dist/esm/utils/qrScanner.js +10 -8
  236. package/dist/public/headers.manifest.json +1 -1
  237. package/dist/public/sdk/ConfirmationDrawer-mu3iThxX.js +1 -0
  238. package/dist/public/sdk/NonceCoordinator-Dq-FZpBz.js +1 -0
  239. package/dist/{esm/sdk/accountLifecycle-CBOkr0vU.js → public/sdk/accountLifecycle-fLNUdjct.js} +1 -1
  240. package/dist/public/sdk/{activeWalletSession-WdZkhtBB.js → activeWalletSession-BpbnpU9s.js} +1 -1
  241. package/dist/public/sdk/adapters-u7LVXthY.js +2 -0
  242. package/dist/public/sdk/appearance-token-vars-CzBVbO39.js +2 -0
  243. package/dist/public/sdk/authorizationAdmission-Dd23mTx7.js +1 -0
  244. package/dist/public/sdk/{canonicalPrimitives-Dsbsxgxc.js → canonicalPrimitives-BMP5yILS.js} +1 -1
  245. package/dist/public/sdk/{capabilityKinds-N8xo_IEh.js → capabilityKinds-D0Yrp9uf.js} +1 -1
  246. package/dist/public/sdk/{chains-C_X_fNuS.js → chains-CPmd4s9f.js} +1 -1
  247. package/dist/public/sdk/challengeDelivery-CG2J5Qxs.js +1 -0
  248. package/dist/public/sdk/{clientSessionPersistenceState-CBylL1Ul.js → clientSessionPersistenceState-BgO4P6CZ.js} +1 -1
  249. package/dist/public/sdk/{commitQueue-DYEgzoLA.js → commitQueue-BW7BpYyA.js} +1 -1
  250. package/dist/public/sdk/configBuilder-BMNShuOu.js +1 -0
  251. package/dist/public/sdk/{configHelpers-B-hs0mTO.js → configHelpers-D50F_Txb.js} +1 -1
  252. package/dist/public/sdk/{digestEncoding-BX3VW9eF.js → digestEncoding-aC4dSf_x.js} +1 -1
  253. package/dist/public/sdk/{display-DsfJkAra.js → display-WtILOPQR.js} +1 -1
  254. package/dist/public/sdk/domainIds-C3fUa33Q.js +1 -0
  255. package/dist/public/sdk/ecdsaCapabilityManifest-DRc423SV.js +1 -0
  256. package/dist/public/sdk/{ecdsaChainTarget-Bfatk3oP.js → ecdsaChainTarget-DkOrgv4y.js} +1 -1
  257. package/dist/public/sdk/ecdsaDerivationClientWasm-DmwKWUEb.js +1 -0
  258. package/dist/{esm/sdk/ecdsaDerivationExport-DOGzq0qC.js → public/sdk/ecdsaDerivationExport-DX89rq_u.js} +1 -1
  259. package/dist/public/sdk/{ecdsaWalletRecords-CHfrYvKr.js → ecdsaWalletRecords-CxxUt3fS.js} +1 -1
  260. package/dist/{esm/sdk/emailOtpEcdsaDerivationIdentity-Bik0N8v9.js → public/sdk/emailOtpEcdsaDerivationIdentity-CupWCKNg.js} +1 -1
  261. package/dist/public/sdk/{errors-DIWY1KR9.js → errors-ADOZT8oV.js} +1 -1
  262. package/dist/public/sdk/export-viewer-host-ivf9LlBo.js +1 -0
  263. package/dist/{esm/sdk/exportKeypairOperation-DzbjKbnk.js → public/sdk/exportKeypairOperation-Gw7L5Htj.js} +1 -1
  264. package/dist/public/sdk/{helpers-B9fpZNAP.js → helpers-DS0bksx9.js} +1 -1
  265. package/dist/public/sdk/{host-DfWylEiw.js → host-B-2QXolt.js} +1 -1
  266. package/dist/public/sdk/{intentDigest-P_-CM7lS.js → intentDigest-Rh5Mg8X7.js} +1 -1
  267. package/dist/public/sdk/{lanes-5kcTFbPx.js → lanes-BzU7cv2T.js} +1 -1
  268. package/dist/public/sdk/localOnly-BKpUHtHa.js +1 -0
  269. package/dist/public/sdk/mountExportPrivateKeySurface-C8pUK6PQ.js +1 -0
  270. package/dist/public/sdk/mountRecoveryCodeBackupSurface-DUudF89t.js +2 -0
  271. package/dist/public/sdk/nearEd25519YaoMaterialActivation-DgWDGRI_.js +1 -0
  272. package/dist/{esm/sdk/nearEd25519YaoSigningPreparation-RIfkYN0d.js → public/sdk/nearEd25519YaoSigningPreparation-yKDLQXBS.js} +1 -1
  273. package/dist/public/sdk/{nonceLaneKeys-BCYfl1wv.js → nonceLaneKeys-BzMBVxMU.js} +1 -1
  274. package/dist/public/sdk/{normalization-n503J-BI.js → normalization-Ct9-AY13.js} +1 -1
  275. package/dist/public/sdk/{operationFingerprint-BHNYryLY.js → operationFingerprint-C4VX-0NI.js} +1 -1
  276. package/dist/public/sdk/{passkey-custody-DpTM-eNJ.js → passkey-custody-Ba-NQ_4C.js} +1 -1
  277. package/dist/public/sdk/{pendingWalletRecoveryCodeBackup-C60sZMj5.js → pendingWalletRecoveryCodeBackup-7tBjuSe7.js} +1 -1
  278. package/dist/public/sdk/presignaturePool-BHoxnbOA.js +1 -0
  279. package/dist/public/sdk/{prfCache-DJ93rtDv.js → prfCache-BAFh1skJ.js} +1 -1
  280. package/dist/public/sdk/{primitives-CqrjmIAH.js → primitives-CTmDwMNc.js} +1 -1
  281. package/dist/{esm/sdk/recovery-entrypoint-BULjaFBM.js → public/sdk/recovery-entrypoint-DWghFZrZ.js} +1 -1
  282. package/dist/public/sdk/{registration-CyF7nOXs.js → registration-CWpOVwhj.js} +1 -1
  283. package/dist/public/sdk/registration-D2OEgY7O.js +1 -0
  284. package/dist/public/sdk/{registrationAccounts-BQMUusdD.js → registrationAccounts-CD1u1ZqZ.js} +1 -1
  285. package/dist/public/sdk/{registrationAuthMethodInput-RbSR7R1G.js → registrationAuthMethodInput-B23_HRil.js} +1 -1
  286. package/dist/public/sdk/{registrationIds-BaK3jUS6.js → registrationIds-B1OpqRAt.js} +1 -1
  287. package/dist/public/sdk/{registrationIntent-090Zj7Iu.js → registrationIntent-D4YDjf2U.js} +1 -1
  288. package/dist/{esm/sdk/registrationSignerPlan-CPzHavPM.js → public/sdk/registrationSignerPlan-BHkqlian.js} +1 -1
  289. package/dist/{esm/sdk/requireStepUpAuth-BCY5ZStI.js → public/sdk/requireStepUpAuth-CnSCFSOZ.js} +1 -1
  290. package/dist/public/sdk/routerAbNormalSigning-BV1t27aB.js +1 -0
  291. package/dist/public/sdk/runtime-auth-jtyQAuxZ.js +1 -0
  292. package/dist/public/sdk/runtime-device-link-vhRhB-wS.js +1 -0
  293. package/dist/public/sdk/runtime-ecdsa-tempo-BXWgFVBa.js +1 -0
  294. package/dist/public/sdk/runtime-email-otp-BlAaSKtk.js +1 -0
  295. package/dist/public/sdk/runtime-export-B4FuHhcH.js +1 -0
  296. package/dist/public/sdk/runtime-near-BnWOpEpA.js +1 -0
  297. package/dist/public/sdk/runtime-preferences-COm-LTiu.js +1 -0
  298. package/dist/public/sdk/runtime-recovery-BJTo5Idi.js +1 -0
  299. package/dist/public/sdk/{runtime-recovery-codes-GOytzExh.js → runtime-recovery-codes-CEOjdUHV.js} +1 -1
  300. package/dist/public/sdk/{sdkSentEvents-D4KtK7_I.js → sdkSentEvents-DujYAPEM.js} +1 -1
  301. package/dist/public/sdk/secp256k1-wOOHtPcK.js +1 -0
  302. package/dist/public/sdk/{secureRandomId-LwBFx84B.js → secureRandomId-8LSc91aN.js} +1 -1
  303. package/dist/public/sdk/sessionObservationRevision-C7v-wN8_.js +1 -0
  304. package/dist/public/sdk/shared-BKPGtAps.js +6 -0
  305. package/dist/{esm/sdk/signEvmFamily-Cpm3e6Zs.js → public/sdk/signEvmFamily-DT34Vtpa.js} +1 -1
  306. package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-NYCFU6Li.js +1 -0
  307. package/dist/public/sdk/{signEvmWithUiConfirm-BRmdLgmm.js → signEvmWithUiConfirm-D6nmJr_L.js} +1 -1
  308. package/dist/public/sdk/signNear-B000QxBd.js +1 -0
  309. package/dist/public/sdk/signatureUses-B_nN17i7.js +1 -0
  310. package/dist/public/sdk/{signerDomain-Dp7BhfmZ.js → signerDomain-BFqRQ0Jl.js} +1 -1
  311. package/dist/public/sdk/{signingFlow-VAnM8L5C.js → signingFlow-gl85GOW4.js} +2 -2
  312. package/dist/public/sdk/{signingQueue-D_Ebmzcn.js → signingQueue-gW7wmOuL.js} +1 -1
  313. package/dist/{esm/sdk/singletons-BXhnsqeY.js → public/sdk/singletons-CAsc9LvA.js} +1 -1
  314. package/dist/public/sdk/surface-measurement-reporter-BJhfiPw6.js +1 -0
  315. package/dist/{esm/sdk/thresholdEcdsa-CneSKcRt.js → public/sdk/thresholdEcdsa-Ci7yz395.js} +1 -1
  316. package/dist/public/sdk/{trace-BBux0jtr.js → trace-CsRMlSh1.js} +1 -1
  317. package/dist/{esm/sdk/transaction-activity-Cccvec2J.js → public/sdk/transaction-activity-C0nCSW6c.js} +1 -1
  318. package/dist/public/sdk/transactionReviewAdmission-CNNho8IG.js +1 -0
  319. package/dist/{esm/sdk/transactionState-Day-1x7Y.js → public/sdk/transactionState-lB2qpkOm.js} +1 -1
  320. package/dist/public/sdk/tx-confirm-ui.js +2502 -1174
  321. package/dist/public/sdk/{types-hKLqDUhR.js → types-CQTWmtqu.js} +1 -1
  322. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  323. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  324. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  325. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  326. package/dist/{esm/sdk/wallet-recovery-Bfhfk52N.js → public/sdk/wallet-recovery-DFaS3geI.js} +1 -1
  327. package/dist/public/sdk/wallet-ui.css +1 -1
  328. package/dist/{esm/sdk/walletAuthMethodRecord-LniOQQmj.js → public/sdk/walletAuthMethodRecord-CWdqdY_s.js} +1 -1
  329. package/dist/{esm/sdk/walletAuthority-CAiGuWW2.js → public/sdk/walletAuthority-BY3kyKQ-.js} +1 -1
  330. package/dist/public/sdk/walletCustodyEcdsaContinuity-mGh1Ysko.js +1 -0
  331. package/dist/public/sdk/{walletDbName-DtRewci9.js → walletDbName-BxWApBQF.js} +1 -1
  332. package/dist/public/sdk/{walletOwnershipGeneration-B6HyR2rE.js → walletOwnershipGeneration-DSGfjuV2.js} +1 -1
  333. package/dist/public/sdk/{walletRecoveryCommit-C6HF84_U.js → walletRecoveryCommit-DQA_wveK.js} +1 -1
  334. package/dist/public/sdk/{walletRecoveryRotate-BN3H8byw.js → walletRecoveryRotate-zvQThn37.js} +1 -1
  335. package/dist/public/sdk/walletRegistrationSetupPrewarm-DdVpKccU.js +1 -0
  336. package/dist/public/sdk/walletSessionAuthorizationStatus-ONPRiEbK.js +1 -0
  337. package/dist/public/sdk/walletSessionAuthorizationStore-DnUMtkev.js +1 -0
  338. package/dist/public/sdk/walletSessionFailure-C6TAQTZn.js +1 -0
  339. package/dist/public/sdk/warmSessionHydration-D8Vdro9n.js +1 -0
  340. package/dist/public/sdk/webauthnP256-_ajaNl90.js +1 -0
  341. package/dist/public/sdk/webauthnPromptCoordinator-9bVeHcTZ.js +1 -0
  342. package/dist/public/sdk/workers/device-linking-key.worker.js +12 -11
  343. package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +146 -48
  344. package/dist/public/sdk/workers/ecdsa-online-client.worker.js +7 -6
  345. package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +7 -6
  346. package/dist/public/sdk/workers/email-otp.worker.js +17 -3
  347. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +10 -0
  348. package/dist/public/sdk/workers/passkey-mpc-session.worker.js +2 -1
  349. package/dist/public/wallet-assets.manifest.json +228 -228
  350. package/dist/public/wallet-service/index.html +4 -4
  351. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +14 -14
  352. package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +1 -1
  353. package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +1 -1
  354. package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +1 -1
  355. package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +5 -5
  356. package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +3 -3
  357. package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +1 -1
  358. package/dist/types/shared-ts/src/tenant-root/tenantRootIdentity.d.ts +1 -1
  359. package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +2 -2
  360. package/dist/types/shared-ts/src/utils/base64.d.ts +2 -2
  361. package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +1 -1
  362. package/dist/types/shared-ts/src/utils/digests.d.ts +2 -2
  363. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +16 -16
  364. package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +1 -1
  365. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +10 -10
  366. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +12 -11
  367. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +3 -3
  368. package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +1 -1
  369. package/dist/types/shared-ts/src/utils/signerDomain.d.ts +15 -15
  370. package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +11 -11
  371. package/dist/types/shared-ts/src/utils/walletSessionFailure.d.ts +8 -8
  372. package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +2 -2
  373. package/dist/types/shared-ts/src/utils/wireSchema.d.ts +1 -1
  374. package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +1 -1
  375. package/dist/types/wallet/build-paths.d.ts +73 -73
  376. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.d.ts +3 -2
  377. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingResume.d.ts +2 -2
  378. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceTargetActivation.d.ts +1 -1
  379. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +3 -3
  380. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationEd25519Yao.d.ts +4 -3
  381. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationSignerSet.d.ts +5 -0
  382. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTiming.d.ts +2 -2
  383. package/dist/types/wallet/src/SeamsWeb/publicApi/createPublicApi.d.ts +10 -1
  384. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +4 -2
  385. package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +1 -0
  386. package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +1 -0
  387. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +2 -1
  388. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +4 -4
  389. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createEmailOtpCommands.d.ts +3 -2
  390. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.d.ts +0 -1
  391. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +4 -6
  392. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.d.ts +35 -0
  393. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.d.ts +17 -0
  394. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +3 -3
  395. package/dist/types/wallet/src/config.d.ts +8 -8
  396. package/dist/types/wallet/src/core/browser/walletIframe/events.d.ts +1 -1
  397. package/dist/types/wallet/src/core/indexedDB/linkedAuthoritySignerMaterial.d.ts +3 -3
  398. package/dist/types/wallet/src/core/indexedDB/pendingWalletRecoveryCommit.d.ts +1 -1
  399. package/dist/types/wallet/src/core/indexedDB/schemaNames.d.ts +181 -181
  400. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.d.ts +8 -8
  401. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.d.ts +4 -4
  402. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.d.ts +1 -1
  403. package/dist/types/wallet/src/core/indexedDB/walletCustodyEd25519MaterialRecord.d.ts +2 -2
  404. package/dist/types/wallet/src/core/indexedDB/walletDbName.d.ts +1 -1
  405. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmAdapter.d.ts +1 -1
  406. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmSigning.types.d.ts +1 -0
  407. package/dist/types/wallet/src/core/signingEngine/chains/tempo/tempoAdapter.d.ts +1 -1
  408. package/dist/types/wallet/src/core/signingEngine/flows/shared/signingStateMachine.d.ts +27 -27
  409. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/secp256k1.d.ts +1 -1
  410. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/webauthnP256.d.ts +1 -1
  411. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.d.ts +17 -17
  412. package/dist/types/wallet/src/core/signingEngine/nonce/nonceTypes.d.ts +40 -40
  413. package/dist/types/wallet/src/core/signingEngine/session/material/walletSigningStateFailure.d.ts +4 -4
  414. package/dist/types/wallet/src/core/signingEngine/session/operationState/types.d.ts +8 -8
  415. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +1 -1
  416. package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionRecords.d.ts +1 -1
  417. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmCommon.d.ts +3 -3
  418. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/types.d.ts +4 -4
  419. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +1 -1
  420. package/dist/types/wallet/src/core/signingEngine/threshold/sessionPolicy.d.ts +1 -1
  421. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.d.ts +1 -1
  422. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.d.ts +3 -1
  423. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.d.ts +2 -3
  424. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.d.ts +3 -1
  425. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.d.ts +3 -1
  426. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.d.ts +0 -1
  427. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.d.ts +0 -1
  428. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/CopyStatusIcon.d.ts +1 -1
  429. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.d.ts +0 -1
  430. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.d.ts +1 -1
  431. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PadlockIcon.d.ts +1 -1
  432. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PasskeyHaloLoading.d.ts +1 -1
  433. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.d.ts +3 -1
  434. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.d.ts +1 -2
  435. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.d.ts +3 -1
  436. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.d.ts +0 -1
  437. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/SeamsWordmark.d.ts +1 -1
  438. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.d.ts +0 -1
  439. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.d.ts +3 -1
  440. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReview.d.ts +3 -1
  441. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionTree.d.ts +0 -1
  442. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/WalletLocale.d.ts +18 -0
  443. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/helpers.d.ts +2 -2
  444. package/dist/types/wallet/src/core/signingEngine/workerManager/SignerWorkerManager.d.ts +1 -0
  445. package/dist/types/wallet/src/core/signingEngine/workerManager/deviceLinkingPorts.d.ts +1 -1
  446. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaClientWorkerChannels.d.ts +3 -3
  447. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaPresignPoolIdentity.d.ts +1 -1
  448. package/dist/types/wallet/src/core/signingEngine/workerManager/validation.d.ts +1 -1
  449. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTransport.d.ts +1 -0
  450. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +1 -1
  451. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ecdsaTargetShareHpke.d.ts +3 -3
  452. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ordinaryMaterialState.d.ts +1 -1
  453. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/crypto.d.ts +3 -3
  454. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/materialParsing.d.ts +1 -1
  455. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/payloadParsing.d.ts +2 -2
  456. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/unlock.d.ts +1 -1
  457. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/workerErrorPayload.d.ts +2 -2
  458. package/dist/types/wallet/src/core/types/actionBuilders.d.ts +16 -2
  459. package/dist/types/wallet/src/core/types/amounts.d.ts +75 -0
  460. package/dist/types/wallet/src/core/types/amounts.typecheck.d.ts +2 -0
  461. package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +5 -5
  462. package/dist/types/wallet/src/core/types/seams.d.ts +3 -0
  463. package/dist/types/wallet/src/core/types/secure-confirm-worker.d.ts +1 -1
  464. package/dist/types/wallet/src/core/types/signer-worker.d.ts +7 -7
  465. package/dist/types/wallet/src/core/ui/locale.d.ts +5 -0
  466. package/dist/types/wallet/src/core/ui/messages.d.ts +8 -0
  467. package/dist/types/wallet/src/externalEvm/types.d.ts +1 -0
  468. package/dist/types/wallet/src/index.d.ts +5 -1
  469. package/dist/types/wallet/src/react/{hooks/useWallet.d.ts → boundWallet.d.ts} +8 -48
  470. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonMock.d.ts +1 -0
  471. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonView.d.ts +0 -1
  472. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountsSection.d.ts +0 -1
  473. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +0 -1
  474. package/dist/types/wallet/src/react/components/AccountMenuButton/ExportKeysSection.d.ts +0 -1
  475. package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +0 -1
  476. package/dist/types/wallet/src/react/components/AccountMenuButton/ProfileDropdown.d.ts +0 -1
  477. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletRegionSection.d.ts +3 -0
  478. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +4 -2
  479. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/GlobeIcon.d.ts +1 -1
  480. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/HoverArrowIcon.d.ts +0 -1
  481. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/KeyIcon.d.ts +1 -1
  482. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LaptopIcon.d.ts +1 -1
  483. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LinkIcon.d.ts +1 -1
  484. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LockIcon.d.ts +1 -1
  485. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LockKeyholeIcon.d.ts +1 -1
  486. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MailIcon.d.ts +1 -1
  487. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/PlusIcon.d.ts +1 -1
  488. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/RecoveryCodesIcon.d.ts +1 -1
  489. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/ScanIcon.d.ts +1 -1
  490. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SlidersIcon.d.ts +1 -1
  491. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SmartphoneIcon.d.ts +1 -1
  492. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/TouchIcon.d.ts +0 -1
  493. package/dist/types/wallet/src/react/components/AccountMenuButton/index.d.ts +0 -1
  494. package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +8 -8
  495. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.d.ts +2 -1
  496. package/dist/types/wallet/src/react/components/ShowQRCode.d.ts +0 -1
  497. package/dist/types/wallet/src/react/components/VoiceAssistantCard.d.ts +0 -1
  498. package/dist/types/wallet/src/react/components/theme/design-tokens.d.ts +1 -0
  499. package/dist/types/wallet/src/react/context/WalletLocale.d.ts +16 -0
  500. package/dist/types/wallet/src/react/context/index.d.ts +2 -1
  501. package/dist/types/wallet/src/react/context/useSeamsContextValue.d.ts +2 -2
  502. package/dist/types/wallet/src/react/index.d.ts +3 -2
  503. package/dist/types/wallet/src/react/styles.d.ts +2 -0
  504. package/dist/types/wallet/src/react/transactionReview/boundCalls.d.ts +57 -57
  505. package/dist/types/wallet/src/react/types.d.ts +14 -1
  506. package/dist/types/wallet/src/theme/base-styles.d.ts +4 -4
  507. package/dist/workers/device-linking-key.worker.js +12 -11
  508. package/dist/workers/ecdsa-derivation-client.worker.js +146 -48
  509. package/dist/workers/ecdsa-online-client.worker.js +7 -6
  510. package/dist/workers/ecdsa-presign-client.worker.js +7 -6
  511. package/dist/workers/email-otp.worker.js +17 -3
  512. package/dist/workers/passkey-mpc-export.worker.js +10 -0
  513. package/dist/workers/passkey-mpc-session.worker.js +2 -1
  514. package/package.json +8 -6
  515. package/dist/esm/react/hooks/useWallet.js +0 -108
  516. package/dist/esm/sdk/ConfirmationDrawer-BFzQjd1P.js +0 -1
  517. package/dist/esm/sdk/NonceCoordinator-CDGnEgfI.js +0 -1
  518. package/dist/esm/sdk/adapters-DsAaBNNY.js +0 -2
  519. package/dist/esm/sdk/authorizationAdmission-CGinGhXH.js +0 -1
  520. package/dist/esm/sdk/challengeDelivery-CATQ4u6P.js +0 -1
  521. package/dist/esm/sdk/configBuilder-BMawmNpz.js +0 -1
  522. package/dist/esm/sdk/domainIds-BzkGsRqO.js +0 -1
  523. package/dist/esm/sdk/ecdsaCapabilityManifest-DX6TflEz.js +0 -1
  524. package/dist/esm/sdk/ecdsaDerivationClientWasm-CpjnN4aK.js +0 -1
  525. package/dist/esm/sdk/export-viewer-host-CV-lSsQF.js +0 -1
  526. package/dist/esm/sdk/jsxRuntime.module-DKsgiFjd.js +0 -2
  527. package/dist/esm/sdk/localOnly-C5mSXb_D.js +0 -1
  528. package/dist/esm/sdk/mountExportPrivateKeySurface-CatAhYoG.js +0 -1
  529. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-DlEb3uD7.js +0 -2
  530. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-Bo3IOTS-.js +0 -1
  531. package/dist/esm/sdk/presignaturePool-V10fZpG3.js +0 -1
  532. package/dist/esm/sdk/registration-yoF0o52H.js +0 -1
  533. package/dist/esm/sdk/routerAbNormalSigning-C4P2tDU-.js +0 -1
  534. package/dist/esm/sdk/runtime-auth--i_j8PP7.js +0 -1
  535. package/dist/esm/sdk/runtime-device-link-fpvaxYyR.js +0 -1
  536. package/dist/esm/sdk/runtime-ecdsa-tempo-AE5QTaXu.js +0 -1
  537. package/dist/esm/sdk/runtime-email-otp-Dl03QI-O.js +0 -1
  538. package/dist/esm/sdk/runtime-export-F9s12UcT.js +0 -1
  539. package/dist/esm/sdk/runtime-near-Bjrz1KYf.js +0 -1
  540. package/dist/esm/sdk/runtime-preferences-oLRSEqmz.js +0 -1
  541. package/dist/esm/sdk/runtime-recovery-DBBKvIIg.js +0 -1
  542. package/dist/esm/sdk/secp256k1-CKq7_HD-.js +0 -1
  543. package/dist/esm/sdk/sessionObservationRevision-CnEOLDbl.js +0 -1
  544. package/dist/esm/sdk/shared-D893jckQ.js +0 -6
  545. package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-DGWmm9n7.js +0 -1
  546. package/dist/esm/sdk/signNear-XGZBxc_g.js +0 -1
  547. package/dist/esm/sdk/signatureUses-BKAoDbQd.js +0 -1
  548. package/dist/esm/sdk/surface-measurement-reporter-DvVHPu_O.js +0 -1
  549. package/dist/esm/sdk/transactionReviewAdmission-CIvR4W5_.js +0 -1
  550. package/dist/esm/sdk/walletCustodyEcdsaContinuity-B4fTDL10.js +0 -1
  551. package/dist/esm/sdk/walletRegistrationSetupPrewarm-B9kpnrbK.js +0 -1
  552. package/dist/esm/sdk/walletSessionAuthorizationStatus-BL7j2TeM.js +0 -1
  553. package/dist/esm/sdk/walletSessionAuthorizationStore-DmYe-cDR.js +0 -1
  554. package/dist/esm/sdk/walletSessionFailure-YuhraC3P.js +0 -1
  555. package/dist/esm/sdk/warmSessionHydration-CsQpQVuy.js +0 -1
  556. package/dist/esm/sdk/webauthnP256-BwgxtG5N.js +0 -1
  557. package/dist/esm/sdk/webauthnPromptCoordinator-CwJeKiYq.js +0 -1
  558. package/dist/public/sdk/ConfirmationDrawer-BFzQjd1P.js +0 -1
  559. package/dist/public/sdk/NonceCoordinator-CDGnEgfI.js +0 -1
  560. package/dist/public/sdk/adapters-DsAaBNNY.js +0 -2
  561. package/dist/public/sdk/authorizationAdmission-CGinGhXH.js +0 -1
  562. package/dist/public/sdk/challengeDelivery-CATQ4u6P.js +0 -1
  563. package/dist/public/sdk/configBuilder-BMawmNpz.js +0 -1
  564. package/dist/public/sdk/domainIds-BzkGsRqO.js +0 -1
  565. package/dist/public/sdk/ecdsaCapabilityManifest-DX6TflEz.js +0 -1
  566. package/dist/public/sdk/ecdsaDerivationClientWasm-CpjnN4aK.js +0 -1
  567. package/dist/public/sdk/export-viewer-host-CV-lSsQF.js +0 -1
  568. package/dist/public/sdk/jsxRuntime.module-DKsgiFjd.js +0 -2
  569. package/dist/public/sdk/localOnly-C5mSXb_D.js +0 -1
  570. package/dist/public/sdk/mountExportPrivateKeySurface-CatAhYoG.js +0 -1
  571. package/dist/public/sdk/mountRecoveryCodeBackupSurface-DlEb3uD7.js +0 -2
  572. package/dist/public/sdk/nearEd25519YaoMaterialActivation-Bo3IOTS-.js +0 -1
  573. package/dist/public/sdk/presignaturePool-V10fZpG3.js +0 -1
  574. package/dist/public/sdk/registration-yoF0o52H.js +0 -1
  575. package/dist/public/sdk/routerAbNormalSigning-C4P2tDU-.js +0 -1
  576. package/dist/public/sdk/runtime-auth--i_j8PP7.js +0 -1
  577. package/dist/public/sdk/runtime-device-link-fpvaxYyR.js +0 -1
  578. package/dist/public/sdk/runtime-ecdsa-tempo-AE5QTaXu.js +0 -1
  579. package/dist/public/sdk/runtime-email-otp-Dl03QI-O.js +0 -1
  580. package/dist/public/sdk/runtime-export-F9s12UcT.js +0 -1
  581. package/dist/public/sdk/runtime-near-Bjrz1KYf.js +0 -1
  582. package/dist/public/sdk/runtime-preferences-oLRSEqmz.js +0 -1
  583. package/dist/public/sdk/runtime-recovery-DBBKvIIg.js +0 -1
  584. package/dist/public/sdk/secp256k1-CKq7_HD-.js +0 -1
  585. package/dist/public/sdk/sessionObservationRevision-CnEOLDbl.js +0 -1
  586. package/dist/public/sdk/shared-D893jckQ.js +0 -6
  587. package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-DGWmm9n7.js +0 -1
  588. package/dist/public/sdk/signNear-XGZBxc_g.js +0 -1
  589. package/dist/public/sdk/signatureUses-BKAoDbQd.js +0 -1
  590. package/dist/public/sdk/surface-measurement-reporter-DvVHPu_O.js +0 -1
  591. package/dist/public/sdk/transactionReviewAdmission-CIvR4W5_.js +0 -1
  592. package/dist/public/sdk/walletCustodyEcdsaContinuity-B4fTDL10.js +0 -1
  593. package/dist/public/sdk/walletRegistrationSetupPrewarm-B9kpnrbK.js +0 -1
  594. package/dist/public/sdk/walletSessionAuthorizationStatus-BL7j2TeM.js +0 -1
  595. package/dist/public/sdk/walletSessionAuthorizationStore-DmYe-cDR.js +0 -1
  596. package/dist/public/sdk/walletSessionFailure-YuhraC3P.js +0 -1
  597. package/dist/public/sdk/warmSessionHydration-CsQpQVuy.js +0 -1
  598. package/dist/public/sdk/webauthnP256-BwgxtG5N.js +0 -1
  599. package/dist/public/sdk/webauthnPromptCoordinator-CwJeKiYq.js +0 -1
  600. /package/dist/esm/sdk/{base64-DW79QA0h.js → base64-BmKR3UqU.js} +0 -0
  601. /package/dist/esm/sdk/{signingSessionSeal-DX41aXUL.js → signingSessionSeal-DqbjG8c8.js} +0 -0
  602. /package/dist/esm/sdk/{theme-BKaFqCAj.js → theme-os0Salmo.js} +0 -0
  603. /package/dist/public/sdk/{base64-DW79QA0h.js → base64-BmKR3UqU.js} +0 -0
  604. /package/dist/public/sdk/{signingSessionSeal-DX41aXUL.js → signingSessionSeal-DqbjG8c8.js} +0 -0
  605. /package/dist/public/sdk/{theme-BKaFqCAj.js → theme-os0Salmo.js} +0 -0
@@ -1,8 +1,10 @@
1
1
  import { isLinkedDeviceTargetEmailAddressV1 } from "../../../../../core/types/linkDevice.js";
2
- import { EMAIL_OTP_RECOVERY_KEY_ALPHABET } from "../../../../../shared-ts/src/utils/emailOtpRecoveryKey.js";
3
2
  import "../../../../../shared-ts/src/wallet-recovery/recoveryCodes.js";
4
- import { demoEmailOtpCodeFromDelivery } from "../../../../../core/signingEngine/session/emailOtp/challengeDelivery.js";
5
- import { AUTH_MENU_WAITING_PROMPTS, isAuthMenuActionReady, isAuthMenuGoogleActionReady, isAuthMenuLoadingStatus, isAuthMenuReady, resolveAuthMenuLoginAccount } from "../../auth-menu/domain.js";
3
+ import { walletDisplayText, walletText } from "../../../../../core/ui/messages.js";
4
+ import { WalletLocaleContext, WalletText } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
5
+ import { recoveryInputCharacters, rejectedRecoveryCharacters, renderRecoveryCodeGroups } from "./recovery-code-input.js";
6
+ import { AUTH_MENU_WAITING_PROMPTS, isAuthMenuActionReady, isAuthMenuGoogleActionReady, isAuthMenuLoadingStatus, isAuthMenuReady } from "../../auth-menu/domain.js";
7
+ import { AUTH_MENU_ACCOUNT_LIST_ID, AUTH_MENU_TITLE_ID, accountGroups, accountSecondaryText, authViewKey, menuNotice, modeLabel, modeSwitchCopy, otpCodeDigits, passkeyButtonLabel, recoveryAnnouncement, recoveryBackLabel, recoveryCaretAtPoint, recoveryNavigationLocked, renderDemoEmailCode, renderOtpCodeDigit, savedAccountsTriggerLabel, selectedAccountPrimaryText, selectedLoginAccount } from "./presentation.js";
6
8
  import { PadlockIcon } from "../../../../../core/signingEngine/uiConfirm/ui/preact/PadlockIcon.js";
7
9
  import { blinkMenuItem } from "../../../../../utils/menuItemBlink.js";
8
10
  import { accountDropdownIcon, backIcon, chevronIcon, fingerprintIcon, googleIcon, linkDeviceIcon, linkFailedIcon, mailIcon, passkeyRingIcon, recoveryIcon, rerollIcon } from "./icons.js";
@@ -12,457 +14,27 @@ import { Component, Fragment } from "preact";
12
14
  import { Fragment as Fragment$1, jsx, jsxs } from "preact/jsx-runtime";
13
15
  //#region src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.tsx
14
16
  /** @jsxImportSource preact */
15
- function renderDemoEmailCode(delivery) {
16
- const code = demoEmailOtpCodeFromDelivery(delivery);
17
- if (code === null) return null;
18
- return /* @__PURE__ */ jsxs("p", {
19
- class: "seams-otp-description",
20
- children: ["Demo email code: ", /* @__PURE__ */ jsx("code", { children: code })]
21
- });
22
- }
23
- const AUTH_MENU_TITLE_ID = "seams-auth-menu-title";
24
- const AUTH_MENU_ACCOUNT_LIST_ID = "seams-auth-menu-account-list";
25
- function otpCodeDigits(code, length = 6) {
26
- return code.padEnd(length, " ").slice(0, length).split("");
27
- }
28
- const RECOVERY_CODE_CHARACTERS = new Set(EMAIL_OTP_RECOVERY_KEY_ALPHABET);
29
- function recoveryInputCharacters(code) {
30
- let characters = "";
31
- for (const character of code.toUpperCase()) {
32
- const read = character === "O" ? "0" : character === "I" || character === "L" ? "1" : character;
33
- if (RECOVERY_CODE_CHARACTERS.has(read)) characters += read;
34
- }
35
- return characters;
36
- }
37
- const RECOVERY_CODE_SEPARATOR = /[\s\-\u2010-\u2015\u2212]/;
38
- /** Characters the input dropped because no recovery code contains them, such as U. */
39
- function rejectedRecoveryCharacters(input) {
40
- const rejected = /* @__PURE__ */ new Set();
41
- for (const character of input.toUpperCase()) {
42
- if (RECOVERY_CODE_SEPARATOR.test(character)) continue;
43
- if (recoveryInputCharacters(character)) continue;
44
- rejected.add(character);
45
- }
46
- return Array.from(rejected).slice(0, 3);
47
- }
48
- function renderRecoveryCodeGroups(code, selection, arrival) {
49
- const caret = selection && selection.start === selection.end ? selection.start : null;
50
- const lastIndex = 31;
51
- const focusIndex = selection === null ? null : Math.min(selection.start, lastIndex);
52
- const groups = [];
53
- for (let start = 0; start < 32; start += 4) {
54
- const end = start + 4;
55
- const slots = [];
56
- for (let index = start; index < end; index += 1) {
57
- const character = code[index] ?? "";
58
- const classes = ["seams-otp-slot"];
59
- if (character) classes.push("is-filled");
60
- if (index === caret) classes.push("is-caret");
61
- if (caret === 32 && index === lastIndex) classes.push("is-caret-after");
62
- if (selection && index >= selection.start && index < selection.end) classes.push("is-selected");
63
- if (arrival && index >= arrival.start && index < arrival.end) classes.push("is-new");
64
- slots.push(/* @__PURE__ */ jsx("span", {
65
- class: classes.join(" "),
66
- "data-recovery-slot": index,
67
- children: character
68
- }, index));
69
- }
70
- const groupClasses = ["seams-recovery-code-group"];
71
- if (focusIndex !== null && focusIndex >= start && focusIndex < end) groupClasses.push("is-active");
72
- if (code.length >= end) groupClasses.push("is-complete");
73
- groups.push(/* @__PURE__ */ jsx("div", {
74
- class: groupClasses.join(" "),
75
- children: slots
76
- }, start));
77
- }
78
- return groups;
79
- }
80
- function recoveryCaretAtPoint(root, clientX, clientY, codeLength) {
81
- let nearest = null;
82
- for (const slot of root.querySelectorAll("[data-recovery-slot]")) {
83
- const index = Number(slot.dataset.recoverySlot);
84
- const box = slot.getBoundingClientRect();
85
- const dx = clientX < box.left ? box.left - clientX : Math.max(0, clientX - box.right);
86
- const dy = clientY < box.top ? box.top - clientY : Math.max(0, clientY - box.bottom);
87
- const distance = dx * dx + dy * dy;
88
- if (nearest === null || distance < nearest.distance) nearest = {
89
- index,
90
- distance,
91
- after: clientX > box.left + box.width / 2
92
- };
93
- }
94
- if (nearest === null) return null;
95
- return Math.min(nearest.after ? nearest.index + 1 : nearest.index, codeLength);
96
- }
97
- function renderOtpCodeDigit(digit) {
98
- return /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("span", {
99
- class: `seams-otp-slot ${digit.trim() ? "is-filled" : ""}`,
100
- children: digit
101
- }) });
102
- }
103
- function authViewKey(viewModel) {
104
- const stage = viewModel.kind === "recovery" ? `:${viewModel.stage}` : "";
105
- return `${viewModel.kind}:${viewModel.mode}:${viewModel.status.kind}${stage}`;
106
- }
107
- function recoveryAnnouncement(viewModel) {
108
- if (viewModel.status.kind === "busy") return viewModel.status.headline;
109
- if (viewModel.status.kind === "recoverable") return viewModel.status.message;
110
- if (viewModel.stage === "passkey_ready") return "Recovery code accepted.";
111
- if (viewModel.stage === "sign_in_ready") return "Wallet recovered. Unlock it to continue.";
112
- return "";
113
- }
114
- function recoveryBackLabel(viewModel) {
115
- if (viewModel.kind !== "recovery") return "Back";
116
- return viewModel.stage === "choose_method" ? "Back to recovery code" : "Back to unlock wallet";
117
- }
118
- function recoveryNavigationLocked(viewModel) {
119
- return viewModel.kind === "recovery" && viewModel.stage === "finalizing";
120
- }
121
- function modeSwitchCopy(mode) {
122
- return mode === "register" ? {
123
- prompt: "Already have a wallet?",
124
- action: "Unlock wallet",
125
- nextMode: "login"
126
- } : {
127
- prompt: "Don't have a wallet?",
128
- action: "Create a wallet",
129
- nextMode: "register"
130
- };
131
- }
132
- function modeLabel(mode) {
133
- return mode === "register" ? "Create a wallet" : "Unlock wallet";
134
- }
135
- function passkeyButtonLabel(mode) {
136
- return mode === "register" ? "Create wallet with passkey" : "Unlock with passkey";
137
- }
138
- /** The failure the footer strip reports. Only the menu itself reports there. */
139
- function menuNotice(viewModel) {
140
- if (viewModel.kind === "google_otp_login" || viewModel.kind === "google_registration") return viewModel.error || null;
141
- return viewModel.kind === "passkey" && viewModel.status.kind === "recoverable" && viewModel.status.reason === "error" ? viewModel.status.message : null;
142
- }
143
- function selectedLoginAccount(viewModel) {
144
- return resolveAuthMenuLoginAccount(viewModel.accountOptions, viewModel.selectedAccount).selectedAccount;
145
- }
146
- function selectedAccountPrimaryText(account) {
147
- return account.walletId;
148
- }
149
- function accountSecondaryText(account) {
150
- return account.authMethod === "email_otp" ? account.emailAddress : null;
151
- }
152
- function savedAccountsTriggerLabel(account) {
153
- if (!account) return "Saved wallets";
154
- const emailAddress = accountSecondaryText(account);
155
- return emailAddress ? `Saved wallets. Selected wallet ID ${account.walletId}, email ${emailAddress}` : `Saved wallets. Selected ${account.walletId}`;
156
- }
157
- function accountGroups(options) {
158
- const passkeyAccounts = options.filter((option) => option.authMethod === "passkey");
159
- const emailOtpAccounts = options.filter((option) => option.authMethod === "email_otp");
160
- return [{
161
- authMethod: "passkey",
162
- label: "Passkey",
163
- accounts: passkeyAccounts
164
- }, {
165
- authMethod: "email_otp",
166
- label: "Email OTP",
167
- accounts: emailOtpAccounts
168
- }].filter((group) => group.accounts.length > 0);
169
- }
170
17
  const ACCOUNT_MENU_EXIT_MS = 160;
171
18
  var AuthMenuSurface = class extends Component {
172
- constructor(..._args) {
173
- super(..._args);
174
- this.state = {
175
- accountMenu: "closed",
176
- recoverySelection: null,
177
- recoveryRejection: null
178
- };
179
- this.recoveryDrawnCode = "";
180
- this.recoveryArrival = null;
181
- this.recoveryArrivalTimer = null;
182
- this.recoveryRejectionTimer = null;
183
- this.accountMenuExitTimer = null;
184
- this.accountMenuChoice = null;
185
- this.previouslyFocusedElement = null;
186
- this.shouldFocusInitialControl = true;
187
- this.contentResizeObserver = null;
188
- this.contentHeightFrame = null;
189
- this.previousLinkDeviceStateKind = null;
190
- this.previousRecoveryStage = null;
191
- this.lastMethod = "passkey";
192
- this.queueContentHeightSync = () => {
193
- if (this.contentHeightFrame !== null) cancelAnimationFrame(this.contentHeightFrame);
194
- this.contentHeightFrame = requestAnimationFrame(this.syncContentHeight);
195
- };
196
- this.syncContentHeight = () => {
197
- this.contentHeightFrame = null;
198
- const switcher = this.props.element.querySelector(".seams-content-switcher");
199
- const sizer = this.props.element.querySelector(".seams-content-sizer");
200
- if (!switcher || !sizer) return;
201
- this.props.styles.setDynamicDeclarations(this.props.element.id + "-height", "#" + this.props.element.id + " .seams-content-switcher", { height: sizer.scrollHeight + "px" });
202
- };
203
- this.onKeydown = (event) => {
204
- if (event.key === "Escape") {
205
- event.preventDefault();
206
- if (this.viewModel && recoveryNavigationLocked(this.viewModel)) return;
207
- if (this.accountMenuOpen) {
208
- this.closeAccountMenu();
209
- return;
210
- }
211
- this.emitIntent({
212
- kind: "close",
213
- reason: "escape"
214
- });
215
- return;
216
- }
217
- if (event.key !== "Tab") return;
218
- const focusable = this.focusableElements();
219
- if (focusable.length === 0) return;
220
- const active = document.activeElement;
221
- const activeIndex = focusable.indexOf(active instanceof HTMLElement ? active : focusable[0]);
222
- if (event.shiftKey && activeIndex <= 0) {
223
- event.preventDefault();
224
- focusable[focusable.length - 1]?.focus();
225
- } else if (!event.shiftKey && activeIndex === focusable.length - 1) {
226
- event.preventDefault();
227
- focusable[0]?.focus();
228
- }
229
- };
230
- this.onBackClick = () => {
231
- this.emitIntent({ kind: "back" });
232
- };
233
- this.onKeyDown = (event) => {
234
- if (event.key !== "Escape" || event.defaultPrevented) return;
235
- const viewModel = this.viewModel;
236
- if (!viewModel || viewModel.kind !== "recovery" && !isAuthMenuLoadingStatus(viewModel.status)) return;
237
- event.preventDefault();
238
- event.stopPropagation();
239
- if (recoveryNavigationLocked(viewModel)) return;
240
- this.emitIntent({ kind: "back" });
241
- };
242
- this.onIntentSwitchClick = () => {
243
- const viewModel = this.viewModel;
244
- if (!viewModel) return;
245
- this.emitIntent({
246
- kind: "mode_selected",
247
- mode: modeSwitchCopy(viewModel.mode).nextMode
248
- });
249
- };
250
- this.onRegistrationReroll = () => {
251
- this.emitIntent({ kind: "registration_reroll" });
252
- };
253
- this.onPasskeyNameInput = (event) => {
254
- if (!(event.currentTarget instanceof HTMLInputElement)) return;
255
- this.emitIntent({
256
- kind: "passkey_name_changed",
257
- passkeyName: event.currentTarget.value
258
- });
259
- };
260
- this.onLoginAccountSelect = (event) => {
261
- const option = event.currentTarget;
262
- if (!(option instanceof HTMLButtonElement)) return;
263
- const walletId = option.dataset.walletId;
264
- const authMethod = option.dataset.authMethod;
265
- const viewModel = this.viewModel;
266
- if (!walletId || viewModel.kind !== "passkey" || viewModel.mode !== "login") return;
267
- const selected = viewModel.accountOptions.find((account) => account.walletId === walletId && account.authMethod === authMethod);
268
- const previous = selectedLoginAccount(viewModel);
269
- if (!selected || !previous || this.accountMenuChoice) return;
270
- const blink = blinkMenuItem(option);
271
- if (!blink) return;
272
- const choice = {
273
- chosen: selected,
274
- previous
275
- };
276
- this.accountMenuChoice = choice;
277
- this.emitIntent({
278
- kind: "login_account_selected",
279
- walletId: selected.walletId,
280
- authMethod: selected.authMethod
281
- });
282
- blink.then(() => {
283
- if (this.accountMenuChoice === choice) this.closeAccountMenu();
284
- });
285
- };
286
- this.onAccountMenuToggle = () => {
287
- if (this.accountMenuOpen) this.closeAccountMenu();
288
- else this.openAccountMenu();
289
- };
290
- this.onDocumentPointerDown = (event) => {
291
- if (!this.accountMenuOpen || !(event.target instanceof Node)) return;
292
- if (this.props.element.querySelector(".seams-account-menu")?.contains(event.target)) return;
293
- this.closeAccountMenu();
294
- };
295
- this.onPrimaryClick = () => {
296
- const viewModel = this.viewModel;
297
- if (!viewModel || !isAuthMenuActionReady(viewModel)) return;
298
- if (viewModel.kind === "link_device") return;
299
- if (viewModel.kind === "google_otp_login") {
300
- this.emitIntent({ kind: "google_otp_submit" });
301
- return;
302
- }
303
- if (viewModel.kind === "google_registration") {
304
- this.emitIntent({ kind: "google_registration_complete" });
305
- return;
306
- }
307
- const intent = viewModel.mode === "register" ? {
308
- kind: "submit",
309
- mode: "register",
310
- passkeyName: viewModel.passkeyName
311
- } : {
312
- kind: "submit",
313
- mode: "login"
314
- };
315
- this.lastMethod = "passkey";
316
- this.emitIntent(intent);
317
- };
318
- this.onGoogleOtpCodeInput = (event) => {
319
- if (!(event.currentTarget instanceof HTMLInputElement)) return;
320
- this.emitIntent({
321
- kind: "google_otp_code_changed",
322
- code: event.currentTarget.value
323
- });
324
- };
325
- this.onGoogleOtpKeydown = (event) => {
326
- if (event.key !== "Enter") return;
327
- event.preventDefault();
328
- this.emitIntent({ kind: "google_otp_submit" });
329
- };
330
- this.onGoogleOtpResend = () => {
331
- this.emitIntent({ kind: "google_otp_resend" });
332
- };
333
- this.onGoogleRegistrationReroll = () => {
334
- this.emitIntent({ kind: "google_registration_reroll" });
335
- };
336
- this.onGoogleClick = () => {
337
- this.lastMethod = "google";
338
- this.emitIntent({
339
- kind: "external_auth",
340
- provider: "google"
341
- });
342
- };
343
- this.onNoticeRetry = () => {
344
- if (this.lastMethod === "google" && isAuthMenuGoogleActionReady(this.viewModel)) this.onGoogleClick();
345
- else this.onPrimaryClick();
346
- };
347
- this.onLinkDeviceOpen = () => {
348
- this.emitIntent({ kind: "link_device_open" });
349
- };
350
- this.onRecoveryOpen = () => {
351
- this.emitIntent({ kind: "recovery_open" });
352
- };
353
- this.onRecoveryCodeInput = (event) => {
354
- if (!(event.currentTarget instanceof HTMLInputElement)) return;
355
- if (this.viewModel.kind !== "recovery") return;
356
- const input = event.currentTarget;
357
- const raw = input.value;
358
- const rejected = rejectedRecoveryCharacters(raw);
359
- if (rejected.length > 0) this.showRecoveryRejection(rejected);
360
- const caret = recoveryInputCharacters(raw.slice(0, input.selectionStart ?? raw.length)).length;
361
- const code = recoveryInputCharacters(raw).slice(0, 32);
362
- if (input.value !== code) {
363
- input.value = code;
364
- input.setSelectionRange(Math.min(caret, code.length), Math.min(caret, code.length));
365
- }
366
- this.syncRecoverySelection(input);
367
- this.emitIntent({
368
- kind: "recovery_code_changed",
369
- recoveryCode: code
370
- });
371
- };
372
- this.onRecoverySelectionMove = (event) => {
373
- if (event.currentTarget instanceof HTMLInputElement) this.syncRecoverySelection(event.currentTarget);
374
- };
375
- this.onRecoveryCodeClick = (event) => {
376
- const input = event.currentTarget;
377
- if (!(input instanceof HTMLInputElement)) return;
378
- if (input.selectionStart === input.selectionEnd) {
379
- const caret = recoveryCaretAtPoint(this.props.element, event.clientX, event.clientY, input.value.length);
380
- if (caret !== null) input.setSelectionRange(caret, caret);
381
- }
382
- this.syncRecoverySelection(input);
383
- };
384
- this.clearRecoveryRejection = () => {
385
- this.recoveryRejectionTimer = null;
386
- this.setState({ recoveryRejection: null });
387
- };
388
- this.endRecoveryArrival = () => {
389
- this.recoveryArrivalTimer = null;
390
- this.recoveryArrival = null;
391
- };
392
- this.onRecoveryCodeBlur = () => {
393
- this.setState({ recoverySelection: null });
394
- };
395
- this.onRecoverySubmit = (event) => {
396
- event.preventDefault();
397
- this.emitIntent({ kind: "recovery_code_submit" });
398
- };
399
- this.onRecoveryPasskeySelected = () => {
400
- this.emitIntent({ kind: "recovery_passkey_selected" });
401
- };
402
- this.onRecoveryGoogleSelected = () => {
403
- this.emitIntent({ kind: "recovery_google_selected" });
404
- };
405
- this.onRecoveryGoogleOtpCodeInput = (event) => {
406
- if (!(event.currentTarget instanceof HTMLInputElement)) return;
407
- this.emitIntent({
408
- kind: "recovery_google_otp_code_changed",
409
- code: event.currentTarget.value
410
- });
411
- };
412
- this.onRecoveryGoogleOtpKeydown = (event) => {
413
- if (event.key !== "Enter") return;
414
- event.preventDefault();
415
- this.emitIntent({ kind: "recovery_google_otp_submit" });
416
- };
417
- this.onRecoveryGoogleOtpSubmit = () => {
418
- this.emitIntent({ kind: "recovery_google_otp_submit" });
419
- };
420
- this.onRecoveryCreatePasskey = () => {
421
- this.emitIntent({ kind: "recovery_create_passkey" });
422
- };
423
- this.onRecoverySignIn = () => {
424
- this.emitIntent({ kind: "recovery_sign_in" });
425
- };
426
- this.onLinkDeviceCreatePasskey = () => {
427
- this.emitIntent({ kind: "link_device_create_passkey" });
428
- };
429
- this.onLinkDeviceFactorChange = (event) => {
430
- if (!(event.currentTarget instanceof HTMLInputElement)) return;
431
- const targetFactor = event.currentTarget.value === "email_otp" ? { kind: "email_otp" } : { kind: "passkey_prf" };
432
- this.emitIntent({
433
- kind: "link_device_factor_selected",
434
- targetFactor
435
- });
436
- };
437
- this.onLinkDeviceTargetEmailInput = (event) => {
438
- if (!(event.currentTarget instanceof HTMLInputElement)) return;
439
- this.emitIntent({
440
- kind: "link_device_target_email_changed",
441
- emailAddress: event.currentTarget.value
442
- });
443
- };
444
- this.onLinkDeviceStart = () => {
445
- this.emitIntent({ kind: "link_device_start" });
446
- };
447
- this.onLinkDeviceEmailOtpCodeInput = (event) => {
448
- if (!(event.currentTarget instanceof HTMLInputElement)) return;
449
- this.emitIntent({
450
- kind: "link_device_email_otp_code_changed",
451
- code: event.currentTarget.value
452
- });
453
- };
454
- this.onLinkDeviceEmailOtpKeydown = (event) => {
455
- if (event.key !== "Enter") return;
456
- event.preventDefault();
457
- this.emitIntent({ kind: "link_device_email_otp_submit" });
458
- };
459
- this.onLinkDeviceEmailOtpResend = () => {
460
- this.emitIntent({ kind: "link_device_email_otp_resend" });
461
- };
462
- this.onLinkDeviceEmailOtpSubmit = () => {
463
- this.emitIntent({ kind: "link_device_email_otp_submit" });
464
- };
465
- }
19
+ static contextType = WalletLocaleContext;
20
+ state = {
21
+ accountMenu: "closed",
22
+ recoverySelection: null,
23
+ recoveryRejection: null
24
+ };
25
+ recoveryDrawnCode = "";
26
+ recoveryArrival = null;
27
+ recoveryArrivalTimer = null;
28
+ recoveryRejectionTimer = null;
29
+ accountMenuExitTimer = null;
30
+ accountMenuChoice = null;
31
+ previouslyFocusedElement = null;
32
+ shouldFocusInitialControl = true;
33
+ contentResizeObserver = null;
34
+ contentHeightFrame = null;
35
+ previousLinkDeviceStateKind = null;
36
+ previousRecoveryStage = null;
37
+ lastMethod = "passkey";
466
38
  get viewModel() {
467
39
  return this.props.viewModel;
468
40
  }
@@ -557,6 +129,17 @@ var AuthMenuSurface = class extends Component {
557
129
  this.contentResizeObserver.observe(sizer);
558
130
  window.addEventListener("resize", this.queueContentHeightSync);
559
131
  }
132
+ queueContentHeightSync = () => {
133
+ if (this.contentHeightFrame !== null) cancelAnimationFrame(this.contentHeightFrame);
134
+ this.contentHeightFrame = requestAnimationFrame(this.syncContentHeight);
135
+ };
136
+ syncContentHeight = () => {
137
+ this.contentHeightFrame = null;
138
+ const switcher = this.props.element.querySelector(".seams-content-switcher");
139
+ const sizer = this.props.element.querySelector(".seams-content-sizer");
140
+ if (!switcher || !sizer) return;
141
+ this.props.styles.setDynamicDeclarations(this.props.element.id + "-height", "#" + this.props.element.id + " .seams-content-switcher", { height: sizer.scrollHeight + "px" });
142
+ };
560
143
  focusInitialControl() {
561
144
  if (!this.props.element.isConnected || !this.shouldFocusInitialControl) return;
562
145
  this.shouldFocusInitialControl = false;
@@ -570,9 +153,197 @@ var AuthMenuSurface = class extends Component {
570
153
  if (!target?.isConnected) return;
571
154
  target.focus();
572
155
  }
156
+ onKeydown = (event) => {
157
+ if (event.key === "Escape") {
158
+ event.preventDefault();
159
+ if (this.viewModel && recoveryNavigationLocked(this.viewModel)) return;
160
+ if (this.accountMenuOpen) {
161
+ this.closeAccountMenu();
162
+ return;
163
+ }
164
+ this.emitIntent({
165
+ kind: "close",
166
+ reason: "escape"
167
+ });
168
+ return;
169
+ }
170
+ if (event.key !== "Tab") return;
171
+ const focusable = this.focusableElements();
172
+ if (focusable.length === 0) return;
173
+ const active = document.activeElement;
174
+ const activeIndex = focusable.indexOf(active instanceof HTMLElement ? active : focusable[0]);
175
+ if (event.shiftKey && activeIndex <= 0) {
176
+ event.preventDefault();
177
+ focusable[focusable.length - 1]?.focus();
178
+ } else if (!event.shiftKey && activeIndex === focusable.length - 1) {
179
+ event.preventDefault();
180
+ focusable[0]?.focus();
181
+ }
182
+ };
573
183
  focusableElements() {
574
184
  return Array.from(this.props.element.querySelectorAll("button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex=\"-1\"])"));
575
185
  }
186
+ onBackClick = () => {
187
+ this.emitIntent({ kind: "back" });
188
+ };
189
+ /**
190
+ * Escape backs out of the in-progress views the back arrow already serves.
191
+ * The host dialog is opened non-modally, so it never receives the UA's
192
+ * `cancel` event — without this the key does nothing while a ceremony is
193
+ * pending. Deliberately scoped to those views: from the menu itself Escape
194
+ * belongs to the embedding page, not to us.
195
+ */
196
+ onKeyDown = (event) => {
197
+ if (event.key !== "Escape" || event.defaultPrevented) return;
198
+ const viewModel = this.viewModel;
199
+ if (!viewModel || viewModel.kind !== "recovery" && !isAuthMenuLoadingStatus(viewModel.status)) return;
200
+ event.preventDefault();
201
+ event.stopPropagation();
202
+ if (recoveryNavigationLocked(viewModel)) return;
203
+ this.emitIntent({ kind: "back" });
204
+ };
205
+ onIntentSwitchClick = () => {
206
+ const viewModel = this.viewModel;
207
+ if (!viewModel) return;
208
+ this.emitIntent({
209
+ kind: "mode_selected",
210
+ mode: modeSwitchCopy(viewModel.mode).nextMode
211
+ });
212
+ };
213
+ onRegistrationReroll = () => {
214
+ this.emitIntent({ kind: "registration_reroll" });
215
+ };
216
+ onPasskeyNameInput = (event) => {
217
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
218
+ this.emitIntent({
219
+ kind: "passkey_name_changed",
220
+ passkeyName: event.currentTarget.value
221
+ });
222
+ };
223
+ onLoginAccountSelect = (event) => {
224
+ const option = event.currentTarget;
225
+ if (!(option instanceof HTMLButtonElement)) return;
226
+ const walletId = option.dataset.walletId;
227
+ const authMethod = option.dataset.authMethod;
228
+ const viewModel = this.viewModel;
229
+ if (!walletId || viewModel.kind !== "passkey" || viewModel.mode !== "login") return;
230
+ const selected = viewModel.accountOptions.find((account) => account.walletId === walletId && account.authMethod === authMethod);
231
+ const previous = selectedLoginAccount(viewModel);
232
+ if (!selected || !previous || this.accountMenuChoice) return;
233
+ const blink = blinkMenuItem(option);
234
+ if (!blink) return;
235
+ const choice = {
236
+ chosen: selected,
237
+ previous
238
+ };
239
+ this.accountMenuChoice = choice;
240
+ this.emitIntent({
241
+ kind: "login_account_selected",
242
+ walletId: selected.walletId,
243
+ authMethod: selected.authMethod
244
+ });
245
+ blink.then(() => {
246
+ if (this.accountMenuChoice === choice) this.closeAccountMenu();
247
+ });
248
+ };
249
+ onAccountMenuToggle = () => {
250
+ if (this.accountMenuOpen) this.closeAccountMenu();
251
+ else this.openAccountMenu();
252
+ };
253
+ onDocumentPointerDown = (event) => {
254
+ if (!this.accountMenuOpen || !(event.target instanceof Node)) return;
255
+ if (this.props.element.querySelector(".seams-account-menu")?.contains(event.target)) return;
256
+ this.closeAccountMenu();
257
+ };
258
+ onPrimaryClick = () => {
259
+ const viewModel = this.viewModel;
260
+ if (!viewModel || !isAuthMenuActionReady(viewModel)) return;
261
+ if (viewModel.kind === "link_device") return;
262
+ if (viewModel.kind === "google_otp_login") {
263
+ this.emitIntent({ kind: "google_otp_submit" });
264
+ return;
265
+ }
266
+ if (viewModel.kind === "google_registration") {
267
+ this.emitIntent({ kind: "google_registration_complete" });
268
+ return;
269
+ }
270
+ const intent = viewModel.mode === "register" ? {
271
+ kind: "submit",
272
+ mode: "register",
273
+ passkeyName: viewModel.passkeyName
274
+ } : {
275
+ kind: "submit",
276
+ mode: "login"
277
+ };
278
+ this.lastMethod = "passkey";
279
+ this.emitIntent(intent);
280
+ };
281
+ onGoogleOtpCodeInput = (event) => {
282
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
283
+ this.emitIntent({
284
+ kind: "google_otp_code_changed",
285
+ code: event.currentTarget.value
286
+ });
287
+ };
288
+ onGoogleOtpKeydown = (event) => {
289
+ if (event.key !== "Enter") return;
290
+ event.preventDefault();
291
+ this.emitIntent({ kind: "google_otp_submit" });
292
+ };
293
+ onGoogleOtpResend = () => {
294
+ this.emitIntent({ kind: "google_otp_resend" });
295
+ };
296
+ onGoogleRegistrationReroll = () => {
297
+ this.emitIntent({ kind: "google_registration_reroll" });
298
+ };
299
+ onGoogleClick = () => {
300
+ this.lastMethod = "google";
301
+ this.emitIntent({
302
+ kind: "external_auth",
303
+ provider: "google"
304
+ });
305
+ };
306
+ onNoticeRetry = () => {
307
+ if (this.lastMethod === "google" && isAuthMenuGoogleActionReady(this.viewModel)) this.onGoogleClick();
308
+ else this.onPrimaryClick();
309
+ };
310
+ onLinkDeviceOpen = () => {
311
+ this.emitIntent({ kind: "link_device_open" });
312
+ };
313
+ onRecoveryOpen = () => {
314
+ this.emitIntent({ kind: "recovery_open" });
315
+ };
316
+ onRecoveryCodeInput = (event) => {
317
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
318
+ if (this.viewModel.kind !== "recovery") return;
319
+ const input = event.currentTarget;
320
+ const raw = input.value;
321
+ const rejected = rejectedRecoveryCharacters(raw);
322
+ if (rejected.length > 0) this.showRecoveryRejection(rejected);
323
+ const caret = recoveryInputCharacters(raw.slice(0, input.selectionStart ?? raw.length)).length;
324
+ const code = recoveryInputCharacters(raw).slice(0, 32);
325
+ if (input.value !== code) {
326
+ input.value = code;
327
+ input.setSelectionRange(Math.min(caret, code.length), Math.min(caret, code.length));
328
+ }
329
+ this.syncRecoverySelection(input);
330
+ this.emitIntent({
331
+ kind: "recovery_code_changed",
332
+ recoveryCode: code
333
+ });
334
+ };
335
+ onRecoverySelectionMove = (event) => {
336
+ if (event.currentTarget instanceof HTMLInputElement) this.syncRecoverySelection(event.currentTarget);
337
+ };
338
+ onRecoveryCodeClick = (event) => {
339
+ const input = event.currentTarget;
340
+ if (!(input instanceof HTMLInputElement)) return;
341
+ if (input.selectionStart === input.selectionEnd) {
342
+ const caret = recoveryCaretAtPoint(this.props.element, event.clientX, event.clientY, input.value.length);
343
+ if (caret !== null) input.setSelectionRange(caret, caret);
344
+ }
345
+ this.syncRecoverySelection(input);
346
+ };
576
347
  showRecoveryRejection(characters) {
577
348
  const parity = this.state.recoveryRejection?.parity === 0 ? 1 : 0;
578
349
  this.setState({ recoveryRejection: {
@@ -582,6 +353,10 @@ var AuthMenuSurface = class extends Component {
582
353
  if (this.recoveryRejectionTimer !== null) clearTimeout(this.recoveryRejectionTimer);
583
354
  this.recoveryRejectionTimer = setTimeout(this.clearRecoveryRejection, 2e3);
584
355
  }
356
+ clearRecoveryRejection = () => {
357
+ this.recoveryRejectionTimer = null;
358
+ this.setState({ recoveryRejection: null });
359
+ };
585
360
  recoveryCodeArrival(code) {
586
361
  const drawn = this.recoveryDrawnCode;
587
362
  if (code === drawn) return this.recoveryArrival;
@@ -597,6 +372,13 @@ var AuthMenuSurface = class extends Component {
597
372
  this.recoveryArrivalTimer = setTimeout(this.endRecoveryArrival, 600);
598
373
  return this.recoveryArrival;
599
374
  }
375
+ endRecoveryArrival = () => {
376
+ this.recoveryArrivalTimer = null;
377
+ this.recoveryArrival = null;
378
+ };
379
+ onRecoveryCodeBlur = () => {
380
+ this.setState({ recoverySelection: null });
381
+ };
600
382
  syncRecoverySelection(input) {
601
383
  const length = input.value.length;
602
384
  const start = Math.min(input.selectionStart ?? length, length);
@@ -608,6 +390,76 @@ var AuthMenuSurface = class extends Component {
608
390
  end
609
391
  } });
610
392
  }
393
+ onRecoverySubmit = (event) => {
394
+ event.preventDefault();
395
+ this.emitIntent({ kind: "recovery_code_submit" });
396
+ };
397
+ onRecoveryPasskeySelected = () => {
398
+ this.emitIntent({ kind: "recovery_passkey_selected" });
399
+ };
400
+ onRecoveryGoogleSelected = () => {
401
+ this.emitIntent({ kind: "recovery_google_selected" });
402
+ };
403
+ onRecoveryGoogleOtpCodeInput = (event) => {
404
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
405
+ this.emitIntent({
406
+ kind: "recovery_google_otp_code_changed",
407
+ code: event.currentTarget.value
408
+ });
409
+ };
410
+ onRecoveryGoogleOtpKeydown = (event) => {
411
+ if (event.key !== "Enter") return;
412
+ event.preventDefault();
413
+ this.emitIntent({ kind: "recovery_google_otp_submit" });
414
+ };
415
+ onRecoveryGoogleOtpSubmit = () => {
416
+ this.emitIntent({ kind: "recovery_google_otp_submit" });
417
+ };
418
+ onRecoveryCreatePasskey = () => {
419
+ this.emitIntent({ kind: "recovery_create_passkey" });
420
+ };
421
+ onRecoverySignIn = () => {
422
+ this.emitIntent({ kind: "recovery_sign_in" });
423
+ };
424
+ onLinkDeviceCreatePasskey = () => {
425
+ this.emitIntent({ kind: "link_device_create_passkey" });
426
+ };
427
+ onLinkDeviceFactorChange = (event) => {
428
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
429
+ const targetFactor = event.currentTarget.value === "email_otp" ? { kind: "email_otp" } : { kind: "passkey_prf" };
430
+ this.emitIntent({
431
+ kind: "link_device_factor_selected",
432
+ targetFactor
433
+ });
434
+ };
435
+ onLinkDeviceTargetEmailInput = (event) => {
436
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
437
+ this.emitIntent({
438
+ kind: "link_device_target_email_changed",
439
+ emailAddress: event.currentTarget.value
440
+ });
441
+ };
442
+ onLinkDeviceStart = () => {
443
+ this.emitIntent({ kind: "link_device_start" });
444
+ };
445
+ onLinkDeviceEmailOtpCodeInput = (event) => {
446
+ if (!(event.currentTarget instanceof HTMLInputElement)) return;
447
+ this.emitIntent({
448
+ kind: "link_device_email_otp_code_changed",
449
+ code: event.currentTarget.value
450
+ });
451
+ };
452
+ onLinkDeviceEmailOtpKeydown = (event) => {
453
+ if (event.key !== "Enter") return;
454
+ event.preventDefault();
455
+ this.emitIntent({ kind: "link_device_email_otp_submit" });
456
+ };
457
+ onLinkDeviceEmailOtpResend = () => {
458
+ this.emitIntent({ kind: "link_device_email_otp_resend" });
459
+ };
460
+ onLinkDeviceEmailOtpSubmit = () => {
461
+ this.emitIntent({ kind: "link_device_email_otp_submit" });
462
+ };
611
463
  emitIntent(intent) {
612
464
  this.props.onIntent(intent);
613
465
  }
@@ -646,7 +498,7 @@ var AuthMenuSurface = class extends Component {
646
498
  /* @__PURE__ */ jsx("button", {
647
499
  class: `seams-back-button ${loading || linkDevice || otpPrompt || registrationPrompt || recovery ? "is-visible" : ""}`,
648
500
  type: "button",
649
- "aria-label": recoveryBackLabel(viewModel),
501
+ "aria-label": walletDisplayText(this.context, recoveryBackLabel(viewModel)),
650
502
  "data-auth-menu-close": true,
651
503
  disabled: recoveryNavigationLocked(viewModel),
652
504
  onClick: this.onBackClick,
@@ -657,7 +509,7 @@ var AuthMenuSurface = class extends Component {
657
509
  role: "status",
658
510
  "aria-live": "polite",
659
511
  "aria-atomic": "true",
660
- children: recoveryAnnouncement(viewModel)
512
+ children: /* @__PURE__ */ jsx(WalletText, { copy: recoveryAnnouncement(viewModel) })
661
513
  }) : null,
662
514
  /* @__PURE__ */ jsx("div", {
663
515
  class: "seams-content-area",
@@ -700,16 +552,16 @@ var AuthMenuSurface = class extends Component {
700
552
  children: [
701
553
  eyebrow === viewModel.heading ? null : /* @__PURE__ */ jsx("div", {
702
554
  class: "seams-menu-eyebrow",
703
- children: eyebrow
555
+ children: /* @__PURE__ */ jsx(WalletText, { copy: eyebrow })
704
556
  }),
705
557
  /* @__PURE__ */ jsx("div", {
706
558
  class: "seams-title",
707
559
  id: AUTH_MENU_TITLE_ID,
708
- children: viewModel.heading
560
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.heading })
709
561
  }),
710
562
  viewModel.subtitle ? /* @__PURE__ */ jsx("div", {
711
563
  class: "seams-subhead",
712
- children: viewModel.subtitle
564
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.subtitle })
713
565
  }) : null
714
566
  ]
715
567
  });
@@ -720,10 +572,10 @@ var AuthMenuSurface = class extends Component {
720
572
  children: /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
721
573
  class: "seams-title",
722
574
  id: AUTH_MENU_TITLE_ID,
723
- children: viewModel.heading
575
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.heading })
724
576
  }), /* @__PURE__ */ jsx("div", {
725
577
  class: "seams-subhead",
726
- children: viewModel.subtitle
578
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.subtitle })
727
579
  })] })
728
580
  }) });
729
581
  }
@@ -758,7 +610,7 @@ var AuthMenuSurface = class extends Component {
758
610
  class: "seams-account-menu-trigger",
759
611
  type: "button",
760
612
  "data-auth-menu-input": true,
761
- "aria-label": savedAccountsTriggerLabel(selected),
613
+ "aria-label": walletDisplayText(this.context, savedAccountsTriggerLabel(selected)),
762
614
  "aria-haspopup": "listbox",
763
615
  "aria-expanded": this.accountMenuOpen ? "true" : "false",
764
616
  "aria-controls": AUTH_MENU_ACCOUNT_LIST_ID,
@@ -777,7 +629,7 @@ var AuthMenuSurface = class extends Component {
777
629
  children: [/* @__PURE__ */ jsx("div", {
778
630
  id: groupLabelId,
779
631
  class: "seams-account-menu-group-label",
780
- children: group.label
632
+ children: /* @__PURE__ */ jsx(WalletText, { copy: group.label })
781
633
  }), group.accounts.map((account) => {
782
634
  const isSelected = account.walletId === listSelected.walletId && account.authMethod === listSelected.authMethod;
783
635
  const isChosen = !isSelected && account.walletId === choice?.chosen.walletId && account.authMethod === choice.chosen.authMethod;
@@ -787,7 +639,7 @@ var AuthMenuSurface = class extends Component {
787
639
  type: "button",
788
640
  role: "option",
789
641
  "aria-selected": isSelected ? "true" : "false",
790
- title: secondaryText ? `${account.walletId} ${secondaryText}` : account.walletId,
642
+ title: walletDisplayText(this.context, secondaryText ? `${account.walletId} ${secondaryText}` : account.walletId),
791
643
  "data-wallet-id": account.walletId,
792
644
  "data-auth-method": account.authMethod,
793
645
  onClick: this.onLoginAccountSelect,
@@ -801,7 +653,7 @@ var AuthMenuSurface = class extends Component {
801
653
  children: account.walletId
802
654
  }), secondaryText ? /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("span", {
803
655
  class: "seams-account-menu-account-secondary",
804
- children: secondaryText
656
+ children: /* @__PURE__ */ jsx(WalletText, { copy: secondaryText })
805
657
  }) }) : null]
806
658
  })]
807
659
  }) });
@@ -826,7 +678,7 @@ var AuthMenuSurface = class extends Component {
826
678
  "data-auth-menu-input": true,
827
679
  type: "text",
828
680
  autocomplete: "nickname",
829
- placeholder: viewModel.passkeyNameLabel,
681
+ placeholder: walletDisplayText(this.context, viewModel.passkeyNameLabel),
830
682
  value: viewModel.passkeyName,
831
683
  readonly: viewModel.passkeyNameReadOnly,
832
684
  disabled: isAuthMenuLoadingStatus(viewModel.status),
@@ -835,8 +687,8 @@ var AuthMenuSurface = class extends Component {
835
687
  }), viewModel.passkeyNameReadOnly ? /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("button", {
836
688
  class: "seams-input-action-trigger auth-menu-registration-reroll",
837
689
  type: "button",
838
- title: "Generate another name",
839
- "aria-label": "Generate another name",
690
+ title: walletText(this.context, "Generate another name"),
691
+ "aria-label": walletText(this.context, "Generate another name"),
840
692
  onClick: this.onRegistrationReroll,
841
693
  disabled: !isAuthMenuReady(viewModel),
842
694
  children: rerollIcon()
@@ -854,21 +706,21 @@ var AuthMenuSurface = class extends Component {
854
706
  "data-auth-menu-primary": true,
855
707
  disabled: !isAuthMenuActionReady(viewModel),
856
708
  onClick: this.onPrimaryClick,
857
- children: [fingerprintIcon(), /* @__PURE__ */ jsx("span", { children: passkeyButtonLabel(viewModel.mode) })]
709
+ children: [fingerprintIcon(), /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(WalletText, { copy: passkeyButtonLabel(viewModel.mode) }) })]
858
710
  }), googleEnabled ? /* @__PURE__ */ jsxs("button", {
859
711
  class: "seams-auth-method-btn",
860
712
  type: "button",
861
713
  "data-auth-menu-provider": "google",
862
714
  disabled: !isAuthMenuGoogleActionReady(viewModel),
863
715
  onClick: this.onGoogleClick,
864
- children: [googleIcon(), /* @__PURE__ */ jsx("span", { children: "Continue with Google" })]
716
+ children: [googleIcon(), /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(WalletText, { message: "Continue with Google" }) })]
865
717
  }) : null]
866
718
  }) });
867
719
  }
868
720
  renderOtherOptions() {
869
721
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
870
722
  class: "seams-menu-options-label",
871
- children: "Other options"
723
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Other options" })
872
724
  }), /* @__PURE__ */ jsxs("div", {
873
725
  class: "seams-menu-options",
874
726
  children: [/* @__PURE__ */ jsxs("button", {
@@ -882,7 +734,7 @@ var AuthMenuSurface = class extends Component {
882
734
  }),
883
735
  /* @__PURE__ */ jsxs("span", {
884
736
  class: "seams-menu-option-text",
885
- children: ["Link this device ", /* @__PURE__ */ jsx("small", { children: "Scan a code with your other device" })]
737
+ children: [/* @__PURE__ */ jsx(WalletText, { message: "Link this device" }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { message: "Scan a code with your other device" }) })]
886
738
  }),
887
739
  chevronIcon()
888
740
  ]
@@ -898,7 +750,7 @@ var AuthMenuSurface = class extends Component {
898
750
  }),
899
751
  /* @__PURE__ */ jsxs("span", {
900
752
  class: "seams-menu-option-text",
901
- children: ["Recover wallet ", /* @__PURE__ */ jsx("small", { children: "Use your recovery code" })]
753
+ children: [/* @__PURE__ */ jsx(WalletText, { message: "Recover wallet" }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { message: "Use your recovery code" }) })]
902
754
  }),
903
755
  chevronIcon()
904
756
  ]
@@ -920,7 +772,7 @@ var AuthMenuSurface = class extends Component {
920
772
  class: `seams-recovery-status ${feedbackIsError ? "seams-recovery-error" : ""}`,
921
773
  "aria-hidden": feedbackIsError ? "false" : "true",
922
774
  role: feedbackIsError ? "alert" : "status",
923
- children: feedbackMessage
775
+ children: /* @__PURE__ */ jsx(WalletText, { copy: feedbackMessage })
924
776
  }),
925
777
  /* @__PURE__ */ jsxs("form", {
926
778
  class: "seams-recovery-form",
@@ -934,7 +786,7 @@ var AuthMenuSurface = class extends Component {
934
786
  children: [/* @__PURE__ */ jsx("label", {
935
787
  class: "seams-field-label",
936
788
  for: "seams-recovery-code",
937
- children: "Recovery code"
789
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Recovery code" })
938
790
  }), /* @__PURE__ */ jsxs("span", {
939
791
  id: "seams-recovery-code-count",
940
792
  class: "seams-recovery-code-count",
@@ -977,7 +829,7 @@ var AuthMenuSurface = class extends Component {
977
829
  id: "seams-recovery-code-hint",
978
830
  class: `seams-recovery-code-hint ${rejection ? "is-error" : ""}`,
979
831
  "aria-live": "polite",
980
- children: rejection ? `Recovery codes don’t use ${rejection.characters.join(", ")}.` : "You can paste the whole code."
832
+ children: rejection ? `Recovery codes don’t use ${rejection.characters.join(", ")}.` : /* @__PURE__ */ jsx(WalletText, { message: "You can paste the whole code." })
981
833
  })
982
834
  ]
983
835
  }), /* @__PURE__ */ jsx("button", {
@@ -985,7 +837,7 @@ var AuthMenuSurface = class extends Component {
985
837
  type: "submit",
986
838
  "data-auth-menu-primary": true,
987
839
  "data-recovery-continue": true,
988
- children: "Continue"
840
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Continue" })
989
841
  })]
990
842
  })
991
843
  ] });
@@ -999,7 +851,7 @@ var AuthMenuSurface = class extends Component {
999
851
  /* @__PURE__ */ jsx("p", {
1000
852
  class: `seams-recovery-status ${viewModel.status.kind === "recoverable" ? "seams-recovery-error" : ""}`,
1001
853
  "aria-hidden": "true",
1002
- children: statusMessage
854
+ children: /* @__PURE__ */ jsx(WalletText, { copy: statusMessage })
1003
855
  }),
1004
856
  /* @__PURE__ */ jsxs("div", {
1005
857
  class: "seams-auth-methods seams-recovery-methods",
@@ -1013,7 +865,7 @@ var AuthMenuSurface = class extends Component {
1013
865
  children: [busyTarget === "passkey" ? /* @__PURE__ */ jsx("span", {
1014
866
  class: "seams-spinner",
1015
867
  "aria-hidden": "true"
1016
- }) : fingerprintIcon(), /* @__PURE__ */ jsx("span", { children: "Create a passkey" })]
868
+ }) : fingerprintIcon(), /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(WalletText, { message: "Create a passkey" }) })]
1017
869
  }), googleEnabled ? /* @__PURE__ */ jsxs("button", {
1018
870
  class: "seams-auth-method-btn",
1019
871
  type: "button",
@@ -1023,12 +875,12 @@ var AuthMenuSurface = class extends Component {
1023
875
  children: [busyTarget === "google_email_otp" ? /* @__PURE__ */ jsx("span", {
1024
876
  class: "seams-spinner",
1025
877
  "aria-hidden": "true"
1026
- }) : googleIcon(), /* @__PURE__ */ jsx("span", { children: "Continue with Google" })]
878
+ }) : googleIcon(), /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(WalletText, { message: "Continue with Google" }) })]
1027
879
  }) : null]
1028
880
  }),
1029
881
  /* @__PURE__ */ jsx("p", {
1030
882
  class: "seams-recovery-method-note",
1031
- children: "This adds a new sign-in method to your wallet."
883
+ children: /* @__PURE__ */ jsx(WalletText, { message: "This adds a new sign-in method to your wallet." })
1032
884
  })
1033
885
  ] });
1034
886
  }
@@ -1042,13 +894,13 @@ var AuthMenuSurface = class extends Component {
1042
894
  children: [
1043
895
  /* @__PURE__ */ jsx("p", {
1044
896
  class: "seams-otp-description",
1045
- children: deliveryMessage
897
+ children: /* @__PURE__ */ jsx(WalletText, { copy: deliveryMessage })
1046
898
  }),
1047
899
  renderDemoEmailCode(viewModel.delivery),
1048
900
  /* @__PURE__ */ jsx("label", {
1049
901
  class: "seams-field-label",
1050
902
  for: "seams-recovery-google-otp",
1051
- children: "Email code"
903
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Email code" })
1052
904
  }),
1053
905
  /* @__PURE__ */ jsxs("div", {
1054
906
  class: "seams-otp-code-field",
@@ -1082,7 +934,7 @@ var AuthMenuSurface = class extends Component {
1082
934
  id: "seams-recovery-google-otp-error",
1083
935
  class: "seams-recovery-status seams-recovery-error",
1084
936
  role: "alert",
1085
- children: viewModel.status.message
937
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.status.message })
1086
938
  }) }) : null,
1087
939
  /* @__PURE__ */ jsx("button", {
1088
940
  class: "seams-link-device-btn seams-link-device-btn-primary",
@@ -1090,7 +942,7 @@ var AuthMenuSurface = class extends Component {
1090
942
  "data-auth-menu-primary": true,
1091
943
  disabled: !canSubmit,
1092
944
  onClick: this.onRecoveryGoogleOtpSubmit,
1093
- children: "Verify email code"
945
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Verify email code" })
1094
946
  })
1095
947
  ]
1096
948
  })] });
@@ -1104,13 +956,13 @@ var AuthMenuSurface = class extends Component {
1104
956
  class: "seams-recovery-confirmation",
1105
957
  children: [message === null ? null : /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("p", {
1106
958
  class: "seams-recovery-status",
1107
- children: message
959
+ children: /* @__PURE__ */ jsx(WalletText, { copy: message })
1108
960
  }) }), /* @__PURE__ */ jsxs("button", {
1109
961
  class: "seams-link-device-btn seams-link-device-btn-primary",
1110
962
  type: "button",
1111
963
  "data-auth-menu-primary": true,
1112
964
  onClick: action,
1113
- children: [googleTarget && !finalizationRetry ? googleIcon() : null, signIn ? googleTarget ? "Unlock with Google" : "Unlock with new passkey" : finalizationRetry ? "Retry finalization" : googleTarget ? "Continue with Google" : "Create new passkey"]
965
+ children: [googleTarget && !finalizationRetry ? googleIcon() : null, signIn ? googleTarget ? /* @__PURE__ */ jsx(WalletText, { message: "Unlock with Google" }) : /* @__PURE__ */ jsx(WalletText, { message: "Unlock with new passkey" }) : finalizationRetry ? /* @__PURE__ */ jsx(WalletText, { message: "Retry finalization" }) : googleTarget ? /* @__PURE__ */ jsx(WalletText, { message: "Continue with Google" }) : /* @__PURE__ */ jsx(WalletText, { message: "Create new passkey" })]
1114
966
  })]
1115
967
  })] });
1116
968
  }
@@ -1118,11 +970,11 @@ var AuthMenuSurface = class extends Component {
1118
970
  const copy = modeSwitchCopy(viewModel.mode);
1119
971
  return /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsxs("div", {
1120
972
  class: "seams-auth-intent-switch",
1121
- children: [/* @__PURE__ */ jsx("span", { children: copy.prompt }), /* @__PURE__ */ jsx("button", {
973
+ children: [/* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(WalletText, { copy: copy.prompt }) }), /* @__PURE__ */ jsx("button", {
1122
974
  type: "button",
1123
975
  "data-auth-menu-mode": copy.nextMode,
1124
976
  onClick: this.onIntentSwitchClick,
1125
- children: copy.action
977
+ children: /* @__PURE__ */ jsx(WalletText, { copy: copy.action })
1126
978
  })]
1127
979
  }) });
1128
980
  }
@@ -1139,7 +991,7 @@ var AuthMenuSurface = class extends Component {
1139
991
  prompt ? /* @__PURE__ */ jsx("span", {
1140
992
  class: "seams-passkey-prompt",
1141
993
  role: "img",
1142
- "aria-label": prompt.label,
994
+ "aria-label": walletDisplayText(this.context, prompt.label),
1143
995
  children: passkeyRingIcon()
1144
996
  }) : null,
1145
997
  /* @__PURE__ */ jsxs("div", {
@@ -1147,20 +999,20 @@ var AuthMenuSurface = class extends Component {
1147
999
  children: [
1148
1000
  /* @__PURE__ */ jsx("span", {
1149
1001
  class: "seams-waiting-text",
1150
- children: waitingText
1002
+ children: /* @__PURE__ */ jsx(WalletText, { copy: waitingText })
1151
1003
  }),
1152
1004
  prompt ? /* @__PURE__ */ jsx("span", {
1153
1005
  class: "seams-passkey-instruction",
1154
- children: prompt.instruction
1006
+ children: /* @__PURE__ */ jsx(WalletText, { copy: prompt.instruction })
1155
1007
  }) : null,
1156
1008
  viewModel.showProgress && status.detail && status.detail !== waitingText ? /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("span", {
1157
1009
  class: "seams-waiting-sdk-events",
1158
- children: status.detail
1010
+ children: /* @__PURE__ */ jsx(WalletText, { copy: status.detail })
1159
1011
  }) }) : null
1160
1012
  ]
1161
1013
  }),
1162
1014
  prompt ? null : /* @__PURE__ */ jsx("div", {
1163
- "aria-label": "Loading",
1015
+ "aria-label": walletText(this.context, "Loading"),
1164
1016
  class: "seams-spinner"
1165
1017
  })
1166
1018
  ]
@@ -1214,18 +1066,18 @@ var AuthMenuSurface = class extends Component {
1214
1066
  children: /* @__PURE__ */ jsx("h2", {
1215
1067
  class: "qr-title",
1216
1068
  id: AUTH_MENU_TITLE_ID,
1217
- children: viewModel.heading
1069
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.heading })
1218
1070
  })
1219
1071
  }),
1220
1072
  /* @__PURE__ */ jsx("div", {
1221
1073
  class: "qr-instruction",
1222
- children: ready ? viewModel.subtitle : "Preparing a one-time code for your other device."
1074
+ children: ready ? /* @__PURE__ */ jsx(WalletText, { copy: viewModel.subtitle }) : /* @__PURE__ */ jsx(WalletText, { message: "Preparing a one-time code for your other device." })
1223
1075
  }),
1224
1076
  /* @__PURE__ */ jsxs("div", {
1225
1077
  class: "qr-status",
1226
1078
  role: "status",
1227
1079
  "aria-live": "polite",
1228
- children: [ready ? linkDevice.message : "Generating QR code", /* @__PURE__ */ jsx("span", { class: "animated-ellipsis" })]
1080
+ children: [ready ? /* @__PURE__ */ jsx(WalletText, { copy: linkDevice.message }) : /* @__PURE__ */ jsx(WalletText, { message: "Generating QR code" }), /* @__PURE__ */ jsx("span", { class: "animated-ellipsis" })]
1229
1081
  })
1230
1082
  ]
1231
1083
  })
@@ -1243,18 +1095,18 @@ var AuthMenuSurface = class extends Component {
1243
1095
  /* @__PURE__ */ jsx("h2", {
1244
1096
  class: "qr-title",
1245
1097
  id: AUTH_MENU_TITLE_ID,
1246
- children: "Match your other device"
1098
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Match your other device" })
1247
1099
  }),
1248
1100
  /* @__PURE__ */ jsx("p", {
1249
1101
  class: "seams-link-device-confirmation-copy",
1250
- children: "Choose the unlock method for Device 2. Email code sends a one-time code to the address you enter."
1102
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Choose the unlock method for Device 2. Email code sends a one-time code to the address you enter." })
1251
1103
  }),
1252
1104
  /* @__PURE__ */ jsxs("fieldset", {
1253
1105
  class: "seams-link-device-factor-options",
1254
1106
  children: [
1255
1107
  /* @__PURE__ */ jsx("legend", {
1256
1108
  class: "sr-only",
1257
- children: "Wallet unlock method"
1109
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Wallet unlock method" })
1258
1110
  }),
1259
1111
  /* @__PURE__ */ jsxs("label", { children: [
1260
1112
  /* @__PURE__ */ jsx("span", {
@@ -1263,7 +1115,7 @@ var AuthMenuSurface = class extends Component {
1263
1115
  }),
1264
1116
  /* @__PURE__ */ jsx("span", {
1265
1117
  class: "seams-auth-method-choice-label",
1266
- children: "Passkey"
1118
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Passkey" })
1267
1119
  }),
1268
1120
  /* @__PURE__ */ jsx("input", {
1269
1121
  type: "radio",
@@ -1280,7 +1132,7 @@ var AuthMenuSurface = class extends Component {
1280
1132
  }),
1281
1133
  /* @__PURE__ */ jsx("span", {
1282
1134
  class: "seams-auth-method-choice-label",
1283
- children: "Email code"
1135
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Email code" })
1284
1136
  }),
1285
1137
  /* @__PURE__ */ jsx("input", {
1286
1138
  type: "radio",
@@ -1296,13 +1148,13 @@ var AuthMenuSurface = class extends Component {
1296
1148
  class: "seams-link-device-target-email",
1297
1149
  children: [/* @__PURE__ */ jsx("span", {
1298
1150
  class: "seams-field-label",
1299
- children: "Email address"
1151
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Email address" })
1300
1152
  }), /* @__PURE__ */ jsx("input", {
1301
1153
  type: "email",
1302
1154
  name: "linked-device-target-email",
1303
1155
  autocomplete: "email",
1304
1156
  value: emailAddress,
1305
- "aria-label": "Email address",
1157
+ "aria-label": walletText(this.context, "Email address"),
1306
1158
  "aria-invalid": emailAddress.length > 0 && !canStart ? "true" : "false",
1307
1159
  onInput: this.onLinkDeviceTargetEmailInput
1308
1160
  })]
@@ -1310,7 +1162,7 @@ var AuthMenuSurface = class extends Component {
1310
1162
  linkDevice.error ? /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("p", {
1311
1163
  class: "seams-link-device-inline-error",
1312
1164
  role: "alert",
1313
- children: linkDevice.error
1165
+ children: /* @__PURE__ */ jsx(WalletText, { copy: linkDevice.error })
1314
1166
  }) }) : null,
1315
1167
  /* @__PURE__ */ jsx("button", {
1316
1168
  class: "seams-link-device-btn seams-link-device-btn-primary",
@@ -1318,7 +1170,7 @@ var AuthMenuSurface = class extends Component {
1318
1170
  "data-auth-menu-primary": true,
1319
1171
  disabled: !canStart,
1320
1172
  onClick: this.onLinkDeviceStart,
1321
- children: "Continue"
1173
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Continue" })
1322
1174
  })
1323
1175
  ]
1324
1176
  }) });
@@ -1340,11 +1192,11 @@ var AuthMenuSurface = class extends Component {
1340
1192
  /* @__PURE__ */ jsx("h2", {
1341
1193
  class: "qr-title",
1342
1194
  id: AUTH_MENU_TITLE_ID,
1343
- children: view.heading
1195
+ children: /* @__PURE__ */ jsx(WalletText, { copy: view.heading })
1344
1196
  }),
1345
1197
  hint ? /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("div", {
1346
1198
  class: "seams-link-device-email-chip",
1347
- title: hint,
1199
+ title: walletDisplayText(this.context, hint),
1348
1200
  children: /* @__PURE__ */ jsx("span", { children: hint })
1349
1201
  }) }) : null,
1350
1202
  /* @__PURE__ */ jsxs("p", {
@@ -1352,7 +1204,7 @@ var AuthMenuSurface = class extends Component {
1352
1204
  id: "seams-linked-device-otp-status",
1353
1205
  role: "status",
1354
1206
  "aria-live": "polite",
1355
- children: [view.status, view.pending ? /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("span", {
1207
+ children: [/* @__PURE__ */ jsx(WalletText, { copy: view.status }), view.pending ? /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("span", {
1356
1208
  class: "animated-ellipsis",
1357
1209
  "aria-hidden": "true"
1358
1210
  }) }) : null]
@@ -1360,7 +1212,7 @@ var AuthMenuSurface = class extends Component {
1360
1212
  showCodeField ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("label", {
1361
1213
  class: "sr-only",
1362
1214
  for: "seams-linked-device-email-otp",
1363
- children: "Email code"
1215
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Email code" })
1364
1216
  }), /* @__PURE__ */ jsxs("div", {
1365
1217
  class: "seams-otp-code-field",
1366
1218
  "data-disabled": busy ? "true" : "false",
@@ -1373,7 +1225,7 @@ var AuthMenuSurface = class extends Component {
1373
1225
  autocomplete: "one-time-code",
1374
1226
  pattern: "[0-9]*",
1375
1227
  maxLength: 6,
1376
- "aria-label": "Email verification code",
1228
+ "aria-label": walletText(this.context, "Email verification code"),
1377
1229
  "aria-describedby": "seams-linked-device-otp-status",
1378
1230
  "aria-invalid": activation.kind === "incorrect" ? "true" : "false",
1379
1231
  value: linkDevice.otpCode,
@@ -1400,26 +1252,26 @@ var AuthMenuSurface = class extends Component {
1400
1252
  type: "button",
1401
1253
  "data-link-device-error-dismiss": true,
1402
1254
  onClick: this.onBackClick,
1403
- children: "Return to unlock wallet"
1255
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Return to unlock wallet" })
1404
1256
  }) });
1405
1257
  if (activation.kind === "expired") return /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsx("button", {
1406
1258
  class: "seams-link-device-btn seams-link-device-btn-primary",
1407
1259
  type: "button",
1408
1260
  onClick: this.onLinkDeviceEmailOtpResend,
1409
- children: "Send a new code"
1261
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Send a new code" })
1410
1262
  }) });
1411
1263
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
1412
1264
  class: "seams-link-device-btn seams-link-device-btn-primary",
1413
1265
  type: "button",
1414
1266
  disabled: !input.canSubmit,
1415
1267
  onClick: this.onLinkDeviceEmailOtpSubmit,
1416
- children: activation.kind === "submitting" ? "Verifying" : "Verify code"
1268
+ children: activation.kind === "submitting" ? /* @__PURE__ */ jsx(WalletText, { message: "Verifying" }) : /* @__PURE__ */ jsx(WalletText, { message: "Verify code" })
1417
1269
  }), /* @__PURE__ */ jsx("button", {
1418
1270
  class: "seams-otp-resend",
1419
1271
  type: "button",
1420
1272
  disabled: input.busy,
1421
1273
  onClick: this.onLinkDeviceEmailOtpResend,
1422
- children: "Send another code"
1274
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Send another code" })
1423
1275
  })] });
1424
1276
  }
1425
1277
  renderLinkDeviceFailure(linkDevice) {
@@ -1427,7 +1279,7 @@ var AuthMenuSurface = class extends Component {
1427
1279
  return this.renderLinkDeviceFailurePanel({
1428
1280
  dismiss: "error",
1429
1281
  title: activationFailed ? "Device linked" : "Couldn't link device",
1430
- detail: activationFailed ? /* @__PURE__ */ jsxs(Fragment$1, { children: ["Unable to open the wallet. Go back and try again. ", linkDevice.message] }) : linkDevice.message,
1282
+ detail: activationFailed ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(WalletText, { message: "Unable to open the wallet. Go back and try again." }), /* @__PURE__ */ jsx(WalletText, { copy: linkDevice.message })] }) : linkDevice.message,
1431
1283
  action: "Return to unlock wallet"
1432
1284
  });
1433
1285
  }
@@ -1442,12 +1294,12 @@ var AuthMenuSurface = class extends Component {
1442
1294
  /* @__PURE__ */ jsx("h2", {
1443
1295
  class: "qr-title",
1444
1296
  id: AUTH_MENU_TITLE_ID,
1445
- children: panel.title
1297
+ children: /* @__PURE__ */ jsx(WalletText, { copy: panel.title })
1446
1298
  }),
1447
1299
  /* @__PURE__ */ jsx("p", {
1448
1300
  class: "seams-link-device-failure-detail",
1449
1301
  role: "alert",
1450
- children: panel.detail
1302
+ children: typeof panel.detail === "string" ? /* @__PURE__ */ jsx(WalletText, { copy: panel.detail }) : panel.detail
1451
1303
  }),
1452
1304
  /* @__PURE__ */ jsx("button", {
1453
1305
  class: "seams-link-device-btn",
@@ -1455,7 +1307,7 @@ var AuthMenuSurface = class extends Component {
1455
1307
  "data-auth-menu-primary": true,
1456
1308
  [`data-link-device-${panel.dismiss}-dismiss`]: true,
1457
1309
  onClick: this.onBackClick,
1458
- children: panel.action
1310
+ children: /* @__PURE__ */ jsx(WalletText, { copy: panel.action })
1459
1311
  })
1460
1312
  ]
1461
1313
  }) });
@@ -1471,13 +1323,13 @@ var AuthMenuSurface = class extends Component {
1471
1323
  /* @__PURE__ */ jsx("h2", {
1472
1324
  class: "qr-title",
1473
1325
  id: AUTH_MENU_TITLE_ID,
1474
- children: "Opening linked wallet"
1326
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Opening linked wallet" })
1475
1327
  }),
1476
1328
  /* @__PURE__ */ jsx("p", {
1477
1329
  class: "seams-link-device-confirmation-copy",
1478
1330
  role: "status",
1479
1331
  "aria-live": "polite",
1480
- children: linkDevice.message
1332
+ children: /* @__PURE__ */ jsx(WalletText, { copy: linkDevice.message })
1481
1333
  })
1482
1334
  ]
1483
1335
  }) });
@@ -1492,7 +1344,7 @@ var AuthMenuSurface = class extends Component {
1492
1344
  class: "qr-title",
1493
1345
  id: AUTH_MENU_TITLE_ID,
1494
1346
  "aria-live": "polite",
1495
- children: linkDevice.message
1347
+ children: /* @__PURE__ */ jsx(WalletText, { copy: linkDevice.message })
1496
1348
  }),
1497
1349
  /* @__PURE__ */ jsx("button", {
1498
1350
  class: "seams-link-device-btn seams-link-device-btn-primary",
@@ -1501,7 +1353,7 @@ var AuthMenuSurface = class extends Component {
1501
1353
  "data-link-device-passkey-action": true,
1502
1354
  disabled: creating,
1503
1355
  onClick: this.onLinkDeviceCreatePasskey,
1504
- children: creating ? "Waiting for passkey" : "Create passkey"
1356
+ children: creating ? /* @__PURE__ */ jsx(WalletText, { message: "Waiting for passkey" }) : /* @__PURE__ */ jsx(WalletText, { message: "Create passkey" })
1505
1357
  })
1506
1358
  ]
1507
1359
  }) });
@@ -1519,19 +1371,19 @@ var AuthMenuSurface = class extends Component {
1519
1371
  /* @__PURE__ */ jsx("div", {
1520
1372
  class: "seams-otp-title",
1521
1373
  id: AUTH_MENU_TITLE_ID,
1522
- children: viewModel.heading
1374
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.heading })
1523
1375
  }),
1524
1376
  /* @__PURE__ */ jsx("p", {
1525
1377
  class: "seams-otp-description",
1526
- children: deliveryMessage
1378
+ children: /* @__PURE__ */ jsx(WalletText, { copy: deliveryMessage })
1527
1379
  }),
1528
1380
  renderDemoEmailCode(viewModel.delivery),
1529
1381
  /* @__PURE__ */ jsxs("div", {
1530
1382
  class: "seams-otp-account",
1531
- title: viewModel.walletId,
1383
+ title: walletDisplayText(this.context, viewModel.walletId),
1532
1384
  children: [/* @__PURE__ */ jsx("span", {
1533
1385
  class: "seams-otp-account-label",
1534
- children: "Wallet"
1386
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Wallet" })
1535
1387
  }), /* @__PURE__ */ jsx("span", {
1536
1388
  class: "seams-otp-account-value",
1537
1389
  children: viewModel.walletId
@@ -1542,7 +1394,7 @@ var AuthMenuSurface = class extends Component {
1542
1394
  /* @__PURE__ */ jsx("label", {
1543
1395
  class: "seams-field-label",
1544
1396
  for: "seams-auth-menu-google-otp",
1545
- children: "Email code"
1397
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Email code" })
1546
1398
  }),
1547
1399
  /* @__PURE__ */ jsxs("div", {
1548
1400
  class: "seams-otp-code-field",
@@ -1570,7 +1422,7 @@ var AuthMenuSurface = class extends Component {
1570
1422
  }),
1571
1423
  /* @__PURE__ */ jsx("p", {
1572
1424
  class: "seams-otp-helper",
1573
- children: viewModel.prompt.helperText ?? ""
1425
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.prompt.helperText ?? "" })
1574
1426
  }),
1575
1427
  /* @__PURE__ */ jsx("button", {
1576
1428
  class: "seams-auth-method-btn seams-auth-method-btn-primary",
@@ -1578,14 +1430,14 @@ var AuthMenuSurface = class extends Component {
1578
1430
  "data-auth-menu-primary": true,
1579
1431
  disabled: !isAuthMenuActionReady(viewModel),
1580
1432
  onClick: this.onPrimaryClick,
1581
- children: viewModel.submitBusy ? "Unlocking…" : viewModel.ctaLabel
1433
+ children: viewModel.submitBusy ? /* @__PURE__ */ jsx(WalletText, { message: "Unlocking…" }) : /* @__PURE__ */ jsx(WalletText, { copy: viewModel.ctaLabel })
1582
1434
  }),
1583
1435
  /* @__PURE__ */ jsx("button", {
1584
1436
  class: "seams-otp-resend auth-menu-google-resend",
1585
1437
  type: "button",
1586
1438
  disabled: viewModel.resendBusy || viewModel.submitBusy,
1587
1439
  onClick: this.onGoogleOtpResend,
1588
- children: viewModel.resendBusy ? "Sending…" : "Resend Code"
1440
+ children: viewModel.resendBusy ? /* @__PURE__ */ jsx(WalletText, { message: "Sending…" }) : /* @__PURE__ */ jsx(WalletText, { message: "Resend Code" })
1589
1441
  })
1590
1442
  ]
1591
1443
  }) });
@@ -1600,18 +1452,18 @@ var AuthMenuSurface = class extends Component {
1600
1452
  /* @__PURE__ */ jsx("div", {
1601
1453
  class: "seams-otp-title",
1602
1454
  id: AUTH_MENU_TITLE_ID,
1603
- children: viewModel.heading
1455
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.heading })
1604
1456
  }),
1605
1457
  /* @__PURE__ */ jsx("p", {
1606
1458
  class: "seams-otp-description",
1607
- children: viewModel.subtitle
1459
+ children: /* @__PURE__ */ jsx(WalletText, { copy: viewModel.subtitle })
1608
1460
  }),
1609
1461
  /* @__PURE__ */ jsxs("div", {
1610
1462
  class: "seams-otp-account",
1611
- title: viewModel.walletId,
1463
+ title: walletDisplayText(this.context, viewModel.walletId),
1612
1464
  children: [/* @__PURE__ */ jsx("span", {
1613
1465
  class: "seams-otp-account-label",
1614
- children: "Wallet"
1466
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Wallet" })
1615
1467
  }), /* @__PURE__ */ jsx("span", {
1616
1468
  class: "seams-otp-account-value",
1617
1469
  children: viewModel.walletId
@@ -1622,7 +1474,7 @@ var AuthMenuSurface = class extends Component {
1622
1474
  type: "button",
1623
1475
  disabled: viewModel.rerollBusy || viewModel.submitBusy,
1624
1476
  onClick: this.onGoogleRegistrationReroll,
1625
- children: viewModel.rerollBusy ? "Generating…" : "Generate another name"
1477
+ children: viewModel.rerollBusy ? /* @__PURE__ */ jsx(WalletText, { message: "Generating…" }) : /* @__PURE__ */ jsx(WalletText, { message: "Generate another name" })
1626
1478
  })
1627
1479
  ]
1628
1480
  }), /* @__PURE__ */ jsx("button", {
@@ -1631,7 +1483,7 @@ var AuthMenuSurface = class extends Component {
1631
1483
  "data-auth-menu-primary": true,
1632
1484
  disabled: !isAuthMenuActionReady(viewModel),
1633
1485
  onClick: this.onPrimaryClick,
1634
- children: viewModel.submitBusy ? "Creating..." : viewModel.ctaLabel
1486
+ children: viewModel.submitBusy ? /* @__PURE__ */ jsx(WalletText, { message: "Creating..." }) : /* @__PURE__ */ jsx(WalletText, { copy: viewModel.ctaLabel })
1635
1487
  })]
1636
1488
  }) });
1637
1489
  }