@seams/wallet 0.17.0 → 0.19.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 (341) hide show
  1. package/README.md +4 -5
  2. package/dist/.build-inputs.sha256 +1 -1
  3. package/dist/esm/SeamsWeb/index.js +1 -1
  4. package/dist/esm/SeamsWeb/walletIframe/client/inboundMessages.js +1 -1
  5. package/dist/esm/SeamsWeb/walletIframe/client/router.js +10 -4
  6. package/dist/esm/SeamsWeb/walletIframe/coordinator.js +23 -1
  7. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.js +5 -4
  8. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +121 -246
  9. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/icons.js +37 -1
  10. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.js +4 -2
  11. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.js +117 -0
  12. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.js +60 -0
  13. package/dist/esm/SeamsWeb/walletIframe/shared/facadeBoundary.js +2 -0
  14. package/dist/esm/core/browser/walletIframe/events.js +6 -0
  15. package/dist/esm/core/config/configBuilder.js +2 -0
  16. package/dist/esm/core/signingEngine/uiConfirm/ui/appearance.js +27 -0
  17. package/dist/esm/core/signingEngine/uiConfirm/ui/export-private-key-reveal.js +155 -0
  18. package/dist/esm/core/signingEngine/uiConfirm/ui/export-viewer-host.js +209 -0
  19. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.js +7 -4
  20. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.js +10 -6
  21. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.js +9 -6
  22. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.js +9 -6
  23. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.js +7 -4
  24. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +4 -1
  25. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/EmailOtpContent.js +4 -1
  26. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.js +5 -4
  27. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.js +319 -0
  28. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.js +10 -7
  29. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.js +9 -5
  30. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +28 -22
  31. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.js +2 -1
  32. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +51 -26
  33. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +42 -27
  34. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +25 -18
  35. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionTree.js +8 -5
  36. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/WalletLocale.js +24 -0
  37. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +6 -4
  38. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountExportPrivateKeySurface.js +92 -0
  39. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +4 -2
  40. package/dist/esm/core/signingEngine/uiConfirm/ui/surface-measurement-binding.js +12 -0
  41. package/dist/esm/core/ui/locale.js +10 -0
  42. package/dist/esm/core/ui/messages.js +698 -0
  43. package/dist/esm/index.js +3 -2
  44. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonMock.js +7 -3
  45. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +7 -4
  46. package/dist/esm/react/components/AccountMenuButton/AccountMenuDeviceDetails.js +4 -3
  47. package/dist/esm/react/components/AccountMenuButton/AccountMenuDialog.js +5 -2
  48. package/dist/esm/react/components/AccountMenuButton/AccountMenuMockScreens.js +31 -27
  49. package/dist/esm/react/components/AccountMenuButton/AccountMenuScreen.js +6 -3
  50. package/dist/esm/react/components/AccountMenuButton/AccountsSection.js +6 -3
  51. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodRow.js +5 -4
  52. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +33 -27
  53. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsView.js +5 -2
  54. package/dist/esm/react/components/AccountMenuButton/ExportKeysScreen.js +5 -3
  55. package/dist/esm/react/components/AccountMenuButton/ExportKeysSection.css +20 -0
  56. package/dist/esm/react/components/AccountMenuButton/ExportKeysSection.js +4 -3
  57. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.css +9 -3
  58. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +50 -41
  59. package/dist/esm/react/components/AccountMenuButton/LockMenuItem.js +2 -1
  60. package/dist/esm/react/components/AccountMenuButton/MenuItem.js +3 -2
  61. package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +8 -4
  62. package/dist/esm/react/components/AccountMenuButton/RecoveryCodeAcknowledgement.js +3 -2
  63. package/dist/esm/react/components/AccountMenuButton/RecoveryCodeActions.js +4 -3
  64. package/dist/esm/react/components/AccountMenuButton/SegmentedControl.js +2 -1
  65. package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +11 -10
  66. package/dist/esm/react/components/AccountMenuButton/UserAccountButton.css +1 -0
  67. package/dist/esm/react/components/AccountMenuButton/UserAccountButton.js +8 -4
  68. package/dist/esm/react/components/AccountMenuButton/WalletRegionSection.js +22 -15
  69. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +20 -16
  70. package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +15 -0
  71. package/dist/esm/react/components/AccountMenuButton/index.js +18 -15
  72. package/dist/esm/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.js +30 -26
  73. package/dist/esm/react/components/QRCodeScanner.js +28 -23
  74. package/dist/esm/react/components/ShowQRCode.js +39 -31
  75. package/dist/esm/react/components/theme/ThemeProvider.js +3 -0
  76. package/dist/esm/react/context/WalletLocale.js +15 -0
  77. package/dist/esm/react/context/index.js +8 -3
  78. package/dist/esm/react/styles/styles.css +36 -0
  79. package/dist/esm/sdk/ConfirmationDrawer-DCw0m-Iv.js +1 -0
  80. package/dist/{public/sdk/NonceCoordinator-DuDKN-B8.js → esm/sdk/NonceCoordinator-Dq-FZpBz.js} +1 -1
  81. package/dist/{public/sdk/accountLifecycle-D61FIpFS.js → esm/sdk/accountLifecycle-fLNUdjct.js} +1 -1
  82. package/dist/{public/sdk/activeWalletSession-Ba6X4CUN.js → esm/sdk/activeWalletSession-BpbnpU9s.js} +1 -1
  83. package/dist/esm/sdk/adapters-BNmcyf9K.js +2 -0
  84. package/dist/esm/sdk/appearance-token-vars-DxBm_cKA.js +2 -0
  85. package/dist/esm/sdk/{canonicalPrimitives-BOzRXzfv.js → canonicalPrimitives-BMP5yILS.js} +1 -1
  86. package/dist/esm/sdk/{challengeDelivery-FD9GHK1T.js → challengeDelivery-CG2J5Qxs.js} +1 -1
  87. package/dist/{public/sdk/clientSessionPersistenceState-BHRUSWMt.js → esm/sdk/clientSessionPersistenceState-BgO4P6CZ.js} +1 -1
  88. package/dist/esm/sdk/{commitQueue-DOIaR0Hr.js → commitQueue-BW7BpYyA.js} +1 -1
  89. package/dist/esm/sdk/configBuilder-BMNShuOu.js +1 -0
  90. package/dist/esm/sdk/{configHelpers-BXdl5Mxs.js → configHelpers-D50F_Txb.js} +1 -1
  91. package/dist/esm/sdk/{digestEncoding-CbEFYvlJ.js → digestEncoding-aC4dSf_x.js} +1 -1
  92. package/dist/esm/sdk/{display-CY_aJEn6.js → display-WtILOPQR.js} +1 -1
  93. package/dist/{public/sdk/ecdsaCapabilityManifest-DzA996y9.js → esm/sdk/ecdsaCapabilityManifest-DRc423SV.js} +1 -1
  94. package/dist/{public/sdk/ecdsaDerivationClientWasm-DQlajPpE.js → esm/sdk/ecdsaDerivationClientWasm-DmwKWUEb.js} +1 -1
  95. package/dist/{public/sdk/ecdsaDerivationExport-DyugdheE.js → esm/sdk/ecdsaDerivationExport-DX89rq_u.js} +1 -1
  96. package/dist/esm/sdk/{ecdsaWalletRecords-C_v74n5X.js → ecdsaWalletRecords-CxxUt3fS.js} +1 -1
  97. package/dist/{public/sdk/emailOtpEcdsaDerivationIdentity-BDVjvnmO.js → esm/sdk/emailOtpEcdsaDerivationIdentity-CupWCKNg.js} +1 -1
  98. package/dist/esm/sdk/{export-viewer-host-DsRaS0UH.js → export-viewer-host-DsdzagKK.js} +1 -1
  99. package/dist/{public/sdk/exportKeypairOperation-SJPysnE1.js → esm/sdk/exportKeypairOperation-BwW_E4Lt.js} +1 -1
  100. package/dist/esm/sdk/{helpers-D3CUEdHI.js → helpers-DS0bksx9.js} +1 -1
  101. package/dist/esm/sdk/{host-GPb_mSAQ.js → host-DMR4KDy9.js} +1 -1
  102. package/dist/esm/sdk/{intentDigest-CGLrsMgj.js → intentDigest-Rh5Mg8X7.js} +1 -1
  103. package/dist/esm/sdk/{lanes-DJKIHJBm.js → lanes-BzU7cv2T.js} +1 -1
  104. package/dist/esm/sdk/localOnly-DO191vDh.js +1 -0
  105. package/dist/esm/sdk/mountExportPrivateKeySurface-DQzFzhNu.js +1 -0
  106. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-B1D0ovqx.js +2 -0
  107. package/dist/{public/sdk/nearEd25519YaoMaterialActivation-J6EHFScV.js → esm/sdk/nearEd25519YaoMaterialActivation-DgWDGRI_.js} +1 -1
  108. package/dist/{public/sdk/nearEd25519YaoSigningPreparation-CqBNMG87.js → esm/sdk/nearEd25519YaoSigningPreparation-yKDLQXBS.js} +1 -1
  109. package/dist/esm/sdk/{nonceLaneKeys-D18nlLjh.js → nonceLaneKeys-BzMBVxMU.js} +1 -1
  110. package/dist/esm/sdk/{operationFingerprint-Boa9DQ51.js → operationFingerprint-C4VX-0NI.js} +1 -1
  111. package/dist/{public/sdk/passkey-custody-CBSal3E9.js → esm/sdk/passkey-custody-Ba-NQ_4C.js} +1 -1
  112. package/dist/esm/sdk/{pendingWalletRecoveryCodeBackup-CvsrXbzn.js → pendingWalletRecoveryCodeBackup-DOeIn_Qj.js} +1 -1
  113. package/dist/{public/sdk/presignaturePool-CQNt13kE.js → esm/sdk/presignaturePool-BHoxnbOA.js} +1 -1
  114. package/dist/esm/sdk/{prfCache-DJ93rtDv.js → prfCache-BAFh1skJ.js} +1 -1
  115. package/dist/esm/sdk/{primitives-cC0a9GRC.js → primitives-CTmDwMNc.js} +1 -1
  116. package/dist/esm/sdk/{recovery-entrypoint-nj7Zo3CR.js → recovery-entrypoint-DWghFZrZ.js} +1 -1
  117. package/dist/esm/sdk/{registration-49OGU_GZ.js → registration-DknFwoqn.js} +1 -1
  118. package/dist/esm/sdk/{registration-C7tywPXF.js → registration-sQndIWRF.js} +1 -1
  119. package/dist/esm/sdk/{registrationAccounts-9GFI0Ger.js → registrationAccounts-CD1u1ZqZ.js} +1 -1
  120. package/dist/esm/sdk/{registrationIds-Br-zI4_5.js → registrationIds-B1OpqRAt.js} +1 -1
  121. package/dist/{public/sdk/registrationIntent-PqmcTEE3.js → esm/sdk/registrationIntent-D4YDjf2U.js} +1 -1
  122. package/dist/esm/sdk/{requireStepUpAuth-C4PGTly-.js → requireStepUpAuth-CnSCFSOZ.js} +1 -1
  123. package/dist/{public/sdk/routerAbNormalSigning-xxATTIh5.js → esm/sdk/routerAbNormalSigning-BV1t27aB.js} +1 -1
  124. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  125. package/dist/esm/sdk/runtime-auth-BxG-J-BB.js +1 -0
  126. package/dist/esm/sdk/runtime-device-link-Dn_5hPCq.js +1 -0
  127. package/dist/esm/sdk/runtime-ecdsa-tempo-lTFTb9Rh.js +1 -0
  128. package/dist/esm/sdk/runtime-email-otp-CPqTCH8Q.js +1 -0
  129. package/dist/esm/sdk/runtime-export-Brz53_oi.js +1 -0
  130. package/dist/esm/sdk/runtime-near-Da_xFUXx.js +1 -0
  131. package/dist/esm/sdk/runtime-preferences-riUZGaTs.js +1 -0
  132. package/dist/esm/sdk/runtime-recovery-CTj4nDAM.js +1 -0
  133. package/dist/esm/sdk/{runtime-recovery-codes-LR4mg7-k.js → runtime-recovery-codes-D8T9LQ7-.js} +1 -1
  134. package/dist/esm/sdk/{secp256k1-BldUPNQI.js → secp256k1-wOOHtPcK.js} +1 -1
  135. package/dist/esm/sdk/{secureRandomId-LwBFx84B.js → secureRandomId-8LSc91aN.js} +1 -1
  136. package/dist/esm/sdk/sessionObservationRevision-C7v-wN8_.js +1 -0
  137. package/dist/esm/sdk/shared-hx7KVyeq.js +6 -0
  138. package/dist/esm/sdk/{signEvmFamily-C_RvEnDB.js → signEvmFamily-DT34Vtpa.js} +1 -1
  139. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-CUKdq5dE.js → signEvmFamilyWithUiConfirmForTempo-NYCFU6Li.js} +1 -1
  140. package/dist/esm/sdk/{signEvmWithUiConfirm-CxXzcvj2.js → signEvmWithUiConfirm-D6nmJr_L.js} +1 -1
  141. package/dist/{public/sdk/signNear-Dno7NsP_.js → esm/sdk/signNear-B000QxBd.js} +1 -1
  142. package/dist/{public/sdk/signingFlow-DtugI_2z.js → esm/sdk/signingFlow-gl85GOW4.js} +1 -1
  143. package/dist/esm/sdk/{signingQueue-C1Pb07gm.js → signingQueue-gW7wmOuL.js} +1 -1
  144. package/dist/esm/sdk/{singletons-DxIyVhNb.js → singletons-CAsc9LvA.js} +1 -1
  145. package/dist/{public/sdk/thresholdEcdsa-murTq-xz.js → esm/sdk/thresholdEcdsa-Ci7yz395.js} +1 -1
  146. package/dist/{public/sdk/transactionState-XbZm9Zon.js → esm/sdk/transactionState-lB2qpkOm.js} +1 -1
  147. package/dist/esm/sdk/tx-confirm-ui.js +1799 -432
  148. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  149. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  150. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  151. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  152. package/dist/esm/sdk/{wallet-recovery-CVUalZ3p.js → wallet-recovery-DFaS3geI.js} +1 -1
  153. package/dist/esm/sdk/wallet-ui.css +1 -1
  154. package/dist/{public/sdk/walletAuthMethodRecord-Bv68Vq-g.js → esm/sdk/walletAuthMethodRecord-CWdqdY_s.js} +1 -1
  155. package/dist/{public/sdk/walletAuthority-v5wvv3IB.js → esm/sdk/walletAuthority-BY3kyKQ-.js} +1 -1
  156. package/dist/{public/sdk/walletCustodyEcdsaContinuity-rRHExT_R.js → esm/sdk/walletCustodyEcdsaContinuity-mGh1Ysko.js} +1 -1
  157. package/dist/esm/sdk/{walletDbName-DRzPv5Ir.js → walletDbName-BxWApBQF.js} +1 -1
  158. package/dist/{public/sdk/walletOwnershipGeneration-pMmmJ6XA.js → esm/sdk/walletOwnershipGeneration-DSGfjuV2.js} +1 -1
  159. package/dist/esm/sdk/{walletRecoveryCommit-DvC6WlGz.js → walletRecoveryCommit-DQA_wveK.js} +1 -1
  160. package/dist/esm/sdk/{walletRecoveryRotate-Dd3prJpr.js → walletRecoveryRotate-zvQThn37.js} +1 -1
  161. package/dist/esm/sdk/walletRegistrationSetupPrewarm-DdVpKccU.js +1 -0
  162. package/dist/{public/sdk/walletSessionAuthorizationStatus-DVV3xkAx.js → esm/sdk/walletSessionAuthorizationStatus-ONPRiEbK.js} +1 -1
  163. package/dist/{public/sdk/walletSessionAuthorizationStore-D-MhJ0PC.js → esm/sdk/walletSessionAuthorizationStore-DnUMtkev.js} +1 -1
  164. package/dist/esm/sdk/warmSessionHydration-D8Vdro9n.js +1 -0
  165. package/dist/{public/sdk/webauthnP256-XgYu-Y6E.js → esm/sdk/webauthnP256-_ajaNl90.js} +1 -1
  166. package/dist/esm/sdk/{webauthnPromptCoordinator-D5sP8Q7e.js → webauthnPromptCoordinator-9bVeHcTZ.js} +1 -1
  167. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  168. package/dist/public/headers.manifest.json +1 -1
  169. package/dist/public/sdk/ConfirmationDrawer-DCw0m-Iv.js +1 -0
  170. package/dist/{esm/sdk/NonceCoordinator-DuDKN-B8.js → public/sdk/NonceCoordinator-Dq-FZpBz.js} +1 -1
  171. package/dist/{esm/sdk/accountLifecycle-D61FIpFS.js → public/sdk/accountLifecycle-fLNUdjct.js} +1 -1
  172. package/dist/{esm/sdk/activeWalletSession-Ba6X4CUN.js → public/sdk/activeWalletSession-BpbnpU9s.js} +1 -1
  173. package/dist/public/sdk/adapters-BNmcyf9K.js +2 -0
  174. package/dist/public/sdk/appearance-token-vars-DxBm_cKA.js +2 -0
  175. package/dist/public/sdk/{canonicalPrimitives-BOzRXzfv.js → canonicalPrimitives-BMP5yILS.js} +1 -1
  176. package/dist/public/sdk/{challengeDelivery-FD9GHK1T.js → challengeDelivery-CG2J5Qxs.js} +1 -1
  177. package/dist/{esm/sdk/clientSessionPersistenceState-BHRUSWMt.js → public/sdk/clientSessionPersistenceState-BgO4P6CZ.js} +1 -1
  178. package/dist/public/sdk/{commitQueue-DOIaR0Hr.js → commitQueue-BW7BpYyA.js} +1 -1
  179. package/dist/public/sdk/configBuilder-BMNShuOu.js +1 -0
  180. package/dist/public/sdk/{configHelpers-BXdl5Mxs.js → configHelpers-D50F_Txb.js} +1 -1
  181. package/dist/public/sdk/{digestEncoding-CbEFYvlJ.js → digestEncoding-aC4dSf_x.js} +1 -1
  182. package/dist/public/sdk/{display-CY_aJEn6.js → display-WtILOPQR.js} +1 -1
  183. package/dist/{esm/sdk/ecdsaCapabilityManifest-DzA996y9.js → public/sdk/ecdsaCapabilityManifest-DRc423SV.js} +1 -1
  184. package/dist/{esm/sdk/ecdsaDerivationClientWasm-DQlajPpE.js → public/sdk/ecdsaDerivationClientWasm-DmwKWUEb.js} +1 -1
  185. package/dist/{esm/sdk/ecdsaDerivationExport-DyugdheE.js → public/sdk/ecdsaDerivationExport-DX89rq_u.js} +1 -1
  186. package/dist/public/sdk/{ecdsaWalletRecords-C_v74n5X.js → ecdsaWalletRecords-CxxUt3fS.js} +1 -1
  187. package/dist/{esm/sdk/emailOtpEcdsaDerivationIdentity-BDVjvnmO.js → public/sdk/emailOtpEcdsaDerivationIdentity-CupWCKNg.js} +1 -1
  188. package/dist/public/sdk/{export-viewer-host-DsRaS0UH.js → export-viewer-host-DsdzagKK.js} +1 -1
  189. package/dist/{esm/sdk/exportKeypairOperation-SJPysnE1.js → public/sdk/exportKeypairOperation-BwW_E4Lt.js} +1 -1
  190. package/dist/public/sdk/{helpers-D3CUEdHI.js → helpers-DS0bksx9.js} +1 -1
  191. package/dist/public/sdk/{host-GPb_mSAQ.js → host-DMR4KDy9.js} +1 -1
  192. package/dist/public/sdk/{intentDigest-CGLrsMgj.js → intentDigest-Rh5Mg8X7.js} +1 -1
  193. package/dist/public/sdk/{lanes-DJKIHJBm.js → lanes-BzU7cv2T.js} +1 -1
  194. package/dist/public/sdk/localOnly-DO191vDh.js +1 -0
  195. package/dist/public/sdk/mountExportPrivateKeySurface-DQzFzhNu.js +1 -0
  196. package/dist/public/sdk/mountRecoveryCodeBackupSurface-B1D0ovqx.js +2 -0
  197. package/dist/{esm/sdk/nearEd25519YaoMaterialActivation-J6EHFScV.js → public/sdk/nearEd25519YaoMaterialActivation-DgWDGRI_.js} +1 -1
  198. package/dist/{esm/sdk/nearEd25519YaoSigningPreparation-CqBNMG87.js → public/sdk/nearEd25519YaoSigningPreparation-yKDLQXBS.js} +1 -1
  199. package/dist/public/sdk/{nonceLaneKeys-D18nlLjh.js → nonceLaneKeys-BzMBVxMU.js} +1 -1
  200. package/dist/public/sdk/{operationFingerprint-Boa9DQ51.js → operationFingerprint-C4VX-0NI.js} +1 -1
  201. package/dist/{esm/sdk/passkey-custody-CBSal3E9.js → public/sdk/passkey-custody-Ba-NQ_4C.js} +1 -1
  202. package/dist/public/sdk/{pendingWalletRecoveryCodeBackup-CvsrXbzn.js → pendingWalletRecoveryCodeBackup-DOeIn_Qj.js} +1 -1
  203. package/dist/{esm/sdk/presignaturePool-CQNt13kE.js → public/sdk/presignaturePool-BHoxnbOA.js} +1 -1
  204. package/dist/public/sdk/{prfCache-DJ93rtDv.js → prfCache-BAFh1skJ.js} +1 -1
  205. package/dist/public/sdk/{primitives-cC0a9GRC.js → primitives-CTmDwMNc.js} +1 -1
  206. package/dist/public/sdk/{recovery-entrypoint-nj7Zo3CR.js → recovery-entrypoint-DWghFZrZ.js} +1 -1
  207. package/dist/public/sdk/{registration-49OGU_GZ.js → registration-DknFwoqn.js} +1 -1
  208. package/dist/public/sdk/{registration-C7tywPXF.js → registration-sQndIWRF.js} +1 -1
  209. package/dist/public/sdk/{registrationAccounts-9GFI0Ger.js → registrationAccounts-CD1u1ZqZ.js} +1 -1
  210. package/dist/public/sdk/{registrationIds-Br-zI4_5.js → registrationIds-B1OpqRAt.js} +1 -1
  211. package/dist/{esm/sdk/registrationIntent-PqmcTEE3.js → public/sdk/registrationIntent-D4YDjf2U.js} +1 -1
  212. package/dist/public/sdk/{requireStepUpAuth-C4PGTly-.js → requireStepUpAuth-CnSCFSOZ.js} +1 -1
  213. package/dist/{esm/sdk/routerAbNormalSigning-xxATTIh5.js → public/sdk/routerAbNormalSigning-BV1t27aB.js} +1 -1
  214. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  215. package/dist/public/sdk/runtime-auth-BxG-J-BB.js +1 -0
  216. package/dist/public/sdk/runtime-device-link-Dn_5hPCq.js +1 -0
  217. package/dist/public/sdk/runtime-ecdsa-tempo-lTFTb9Rh.js +1 -0
  218. package/dist/public/sdk/runtime-email-otp-CPqTCH8Q.js +1 -0
  219. package/dist/public/sdk/runtime-export-Brz53_oi.js +1 -0
  220. package/dist/public/sdk/runtime-near-Da_xFUXx.js +1 -0
  221. package/dist/public/sdk/runtime-preferences-riUZGaTs.js +1 -0
  222. package/dist/public/sdk/runtime-recovery-CTj4nDAM.js +1 -0
  223. package/dist/public/sdk/{runtime-recovery-codes-LR4mg7-k.js → runtime-recovery-codes-D8T9LQ7-.js} +1 -1
  224. package/dist/public/sdk/{secp256k1-BldUPNQI.js → secp256k1-wOOHtPcK.js} +1 -1
  225. package/dist/public/sdk/{secureRandomId-LwBFx84B.js → secureRandomId-8LSc91aN.js} +1 -1
  226. package/dist/public/sdk/sessionObservationRevision-C7v-wN8_.js +1 -0
  227. package/dist/public/sdk/shared-hx7KVyeq.js +6 -0
  228. package/dist/public/sdk/{signEvmFamily-C_RvEnDB.js → signEvmFamily-DT34Vtpa.js} +1 -1
  229. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-CUKdq5dE.js → signEvmFamilyWithUiConfirmForTempo-NYCFU6Li.js} +1 -1
  230. package/dist/public/sdk/{signEvmWithUiConfirm-CxXzcvj2.js → signEvmWithUiConfirm-D6nmJr_L.js} +1 -1
  231. package/dist/{esm/sdk/signNear-Dno7NsP_.js → public/sdk/signNear-B000QxBd.js} +1 -1
  232. package/dist/{esm/sdk/signingFlow-DtugI_2z.js → public/sdk/signingFlow-gl85GOW4.js} +1 -1
  233. package/dist/public/sdk/{signingQueue-C1Pb07gm.js → signingQueue-gW7wmOuL.js} +1 -1
  234. package/dist/public/sdk/{singletons-DxIyVhNb.js → singletons-CAsc9LvA.js} +1 -1
  235. package/dist/{esm/sdk/thresholdEcdsa-murTq-xz.js → public/sdk/thresholdEcdsa-Ci7yz395.js} +1 -1
  236. package/dist/{esm/sdk/transactionState-XbZm9Zon.js → public/sdk/transactionState-lB2qpkOm.js} +1 -1
  237. package/dist/public/sdk/tx-confirm-ui.js +1799 -432
  238. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  239. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  240. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  241. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  242. package/dist/public/sdk/{wallet-recovery-CVUalZ3p.js → wallet-recovery-DFaS3geI.js} +1 -1
  243. package/dist/public/sdk/wallet-ui.css +1 -1
  244. package/dist/{esm/sdk/walletAuthMethodRecord-Bv68Vq-g.js → public/sdk/walletAuthMethodRecord-CWdqdY_s.js} +1 -1
  245. package/dist/{esm/sdk/walletAuthority-v5wvv3IB.js → public/sdk/walletAuthority-BY3kyKQ-.js} +1 -1
  246. package/dist/{esm/sdk/walletCustodyEcdsaContinuity-rRHExT_R.js → public/sdk/walletCustodyEcdsaContinuity-mGh1Ysko.js} +1 -1
  247. package/dist/public/sdk/{walletDbName-DRzPv5Ir.js → walletDbName-BxWApBQF.js} +1 -1
  248. package/dist/{esm/sdk/walletOwnershipGeneration-pMmmJ6XA.js → public/sdk/walletOwnershipGeneration-DSGfjuV2.js} +1 -1
  249. package/dist/public/sdk/{walletRecoveryCommit-DvC6WlGz.js → walletRecoveryCommit-DQA_wveK.js} +1 -1
  250. package/dist/public/sdk/{walletRecoveryRotate-Dd3prJpr.js → walletRecoveryRotate-zvQThn37.js} +1 -1
  251. package/dist/public/sdk/walletRegistrationSetupPrewarm-DdVpKccU.js +1 -0
  252. package/dist/{esm/sdk/walletSessionAuthorizationStatus-DVV3xkAx.js → public/sdk/walletSessionAuthorizationStatus-ONPRiEbK.js} +1 -1
  253. package/dist/{esm/sdk/walletSessionAuthorizationStore-D-MhJ0PC.js → public/sdk/walletSessionAuthorizationStore-DnUMtkev.js} +1 -1
  254. package/dist/public/sdk/warmSessionHydration-D8Vdro9n.js +1 -0
  255. package/dist/{esm/sdk/webauthnP256-XgYu-Y6E.js → public/sdk/webauthnP256-_ajaNl90.js} +1 -1
  256. package/dist/public/sdk/{webauthnPromptCoordinator-D5sP8Q7e.js → webauthnPromptCoordinator-9bVeHcTZ.js} +1 -1
  257. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  258. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  259. package/dist/public/wallet-assets.manifest.json +192 -192
  260. package/dist/public/wallet-service/index.html +4 -4
  261. package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +2 -1
  262. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +20 -3
  263. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +3 -0
  264. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.d.ts +0 -1
  265. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +5 -6
  266. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/icons.d.ts +2 -0
  267. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.d.ts +35 -0
  268. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.d.ts +17 -0
  269. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.d.ts +3 -1
  270. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.d.ts +0 -1
  271. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.d.ts +3 -1
  272. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.d.ts +3 -1
  273. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.d.ts +0 -1
  274. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.d.ts +0 -1
  275. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.d.ts +0 -1
  276. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.d.ts +1 -1
  277. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.d.ts +3 -1
  278. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.d.ts +0 -1
  279. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.d.ts +3 -1
  280. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.d.ts +0 -1
  281. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.d.ts +0 -1
  282. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.d.ts +3 -1
  283. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReview.d.ts +3 -1
  284. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionTree.d.ts +0 -1
  285. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/WalletLocale.d.ts +18 -0
  286. package/dist/types/wallet/src/core/types/seams.d.ts +3 -0
  287. package/dist/types/wallet/src/core/ui/locale.d.ts +5 -0
  288. package/dist/types/wallet/src/core/ui/messages.d.ts +8 -0
  289. package/dist/types/wallet/src/index.d.ts +3 -1
  290. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonMock.d.ts +1 -0
  291. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletRegionSection.d.ts +3 -0
  292. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +4 -1
  293. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.d.ts +2 -1
  294. package/dist/types/wallet/src/react/context/WalletLocale.d.ts +16 -0
  295. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  296. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  297. package/package.json +1 -1
  298. package/dist/esm/sdk/ConfirmationDrawer-CXVNmfTy.js +0 -1
  299. package/dist/esm/sdk/adapters-CTlDBRJy.js +0 -2
  300. package/dist/esm/sdk/configBuilder-BMawmNpz.js +0 -1
  301. package/dist/esm/sdk/jsxRuntime.module-DKsgiFjd.js +0 -2
  302. package/dist/esm/sdk/localOnly-CPmpw381.js +0 -1
  303. package/dist/esm/sdk/mountExportPrivateKeySurface-C8_tpDHF.js +0 -1
  304. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-BtNFtmSj.js +0 -2
  305. package/dist/esm/sdk/runtime-auth-CpjGW90U.js +0 -1
  306. package/dist/esm/sdk/runtime-device-link-CKgfGi7D.js +0 -1
  307. package/dist/esm/sdk/runtime-ecdsa-tempo-5VV9xSEh.js +0 -1
  308. package/dist/esm/sdk/runtime-email-otp-D1hYZNn6.js +0 -1
  309. package/dist/esm/sdk/runtime-export-B92wQD25.js +0 -1
  310. package/dist/esm/sdk/runtime-near-CUuKg38M.js +0 -1
  311. package/dist/esm/sdk/runtime-preferences-EdL3G_MO.js +0 -1
  312. package/dist/esm/sdk/runtime-recovery-uyw8sywI.js +0 -1
  313. package/dist/esm/sdk/sessionObservationRevision-DmmNV25w.js +0 -1
  314. package/dist/esm/sdk/shared-ha31XIdc.js +0 -6
  315. package/dist/esm/sdk/walletRegistrationSetupPrewarm-DcbhVNMQ.js +0 -1
  316. package/dist/esm/sdk/warmSessionHydration-CsQpQVuy.js +0 -1
  317. package/dist/public/sdk/ConfirmationDrawer-CXVNmfTy.js +0 -1
  318. package/dist/public/sdk/adapters-CTlDBRJy.js +0 -2
  319. package/dist/public/sdk/configBuilder-BMawmNpz.js +0 -1
  320. package/dist/public/sdk/jsxRuntime.module-DKsgiFjd.js +0 -2
  321. package/dist/public/sdk/localOnly-CPmpw381.js +0 -1
  322. package/dist/public/sdk/mountExportPrivateKeySurface-C8_tpDHF.js +0 -1
  323. package/dist/public/sdk/mountRecoveryCodeBackupSurface-BtNFtmSj.js +0 -2
  324. package/dist/public/sdk/runtime-auth-CpjGW90U.js +0 -1
  325. package/dist/public/sdk/runtime-device-link-CKgfGi7D.js +0 -1
  326. package/dist/public/sdk/runtime-ecdsa-tempo-5VV9xSEh.js +0 -1
  327. package/dist/public/sdk/runtime-email-otp-D1hYZNn6.js +0 -1
  328. package/dist/public/sdk/runtime-export-B92wQD25.js +0 -1
  329. package/dist/public/sdk/runtime-near-CUuKg38M.js +0 -1
  330. package/dist/public/sdk/runtime-preferences-EdL3G_MO.js +0 -1
  331. package/dist/public/sdk/runtime-recovery-uyw8sywI.js +0 -1
  332. package/dist/public/sdk/sessionObservationRevision-DmmNV25w.js +0 -1
  333. package/dist/public/sdk/shared-ha31XIdc.js +0 -6
  334. package/dist/public/sdk/walletRegistrationSetupPrewarm-DcbhVNMQ.js +0 -1
  335. package/dist/public/sdk/warmSessionHydration-CsQpQVuy.js +0 -1
  336. /package/dist/esm/sdk/{base64-DW79QA0h.js → base64-BmKR3UqU.js} +0 -0
  337. /package/dist/esm/sdk/{signingSessionSeal-DX41aXUL.js → signingSessionSeal-DqbjG8c8.js} +0 -0
  338. /package/dist/esm/sdk/{theme-BKaFqCAj.js → theme-os0Salmo.js} +0 -0
  339. /package/dist/public/sdk/{base64-DW79QA0h.js → base64-BmKR3UqU.js} +0 -0
  340. /package/dist/public/sdk/{signingSessionSeal-DX41aXUL.js → signingSessionSeal-DqbjG8c8.js} +0 -0
  341. /package/dist/public/sdk/{theme-BKaFqCAj.js → theme-os0Salmo.js} +0 -0
@@ -39,6 +39,42 @@ function passkeyRingIcon() {
39
39
  })]
40
40
  });
41
41
  }
42
+ /** The passkey ring as it closes and fills behind a check. */
43
+ function passkeySuccessIcon() {
44
+ return /* @__PURE__ */ jsxs("svg", {
45
+ class: "seams-success-ring",
46
+ viewBox: "0 0 56 56",
47
+ fill: "none",
48
+ "aria-hidden": "true",
49
+ focusable: "false",
50
+ children: [
51
+ /* @__PURE__ */ jsx("circle", {
52
+ class: "seams-passkey-ring-track",
53
+ cx: "28",
54
+ cy: "28",
55
+ r: "26.75"
56
+ }),
57
+ /* @__PURE__ */ jsx("circle", {
58
+ class: "seams-success-ring-arc",
59
+ cx: "28",
60
+ cy: "28",
61
+ r: "26.75",
62
+ pathLength: "100"
63
+ }),
64
+ /* @__PURE__ */ jsx("circle", {
65
+ class: "seams-success-ring-seal",
66
+ cx: "28",
67
+ cy: "28",
68
+ r: "28"
69
+ }),
70
+ /* @__PURE__ */ jsx("path", {
71
+ class: "seams-success-ring-check",
72
+ d: "M36.7 21.5 24.75 33.4l-5.4-5.4",
73
+ pathLength: "1"
74
+ })
75
+ ]
76
+ });
77
+ }
42
78
  function accountDropdownIcon() {
43
79
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("svg", {
44
80
  class: "seams-account-dropdown-arrow",
@@ -153,6 +189,6 @@ function alertIcon() {
153
189
  }));
154
190
  }
155
191
  //#endregion
156
- export { accountDropdownIcon, alertIcon, backIcon, chevronIcon, fingerprintIcon, googleIcon, linkDeviceIcon, linkFailedIcon, mailIcon, passkeyRingIcon, recoveryIcon, rerollIcon, shieldIcon };
192
+ export { accountDropdownIcon, alertIcon, backIcon, chevronIcon, fingerprintIcon, googleIcon, linkDeviceIcon, linkFailedIcon, mailIcon, passkeyRingIcon, passkeySuccessIcon, recoveryIcon, rerollIcon, shieldIcon };
157
193
 
158
194
  //# sourceMappingURL=icons.js.map
@@ -1,5 +1,6 @@
1
1
  import { appearanceTokenCssRule } from "../../../../../core/signingEngine/uiConfirm/ui/appearance-token-vars.js";
2
2
  import { createCspStylesheetManager, getDefaultCspNonce } from "../../../../../core/browser/walletIframe/csp-stylesheet.js";
3
+ import { withWalletLocale } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
3
4
  import { AuthMenuSurface } from "./AuthMenuSurface.js";
4
5
  import { render } from "preact";
5
6
  import { jsx } from "preact/jsx-runtime";
@@ -45,14 +46,15 @@ var MountedAuthMenuSurface = class {
45
46
  }
46
47
  update(viewModel) {
47
48
  if (this.state.kind === "disposed") return;
49
+ this.element.lang = viewModel.appearance.locale ?? "en";
48
50
  this.element.dataset.theme = viewModel.appearance.theme.mode;
49
51
  this.styles.setDynamicRule(this.element.id + "-appearance", appearanceTokenCssRule(this.element.id, viewModel.appearance));
50
- render(/* @__PURE__ */ jsx(AuthMenuSurface, {
52
+ render(withWalletLocale(viewModel.appearance.locale ?? "en", /* @__PURE__ */ jsx(AuthMenuSurface, {
51
53
  element: this.element,
52
54
  viewModel,
53
55
  onIntent: this.state.onIntent,
54
56
  styles: this.styles
55
- }), this.element);
57
+ })), this.element);
56
58
  }
57
59
  dispose() {
58
60
  if (this.state.kind === "disposed") return;
@@ -0,0 +1,117 @@
1
+ import { demoEmailOtpCodeFromDelivery } from "../../../../../core/signingEngine/session/emailOtp/challengeDelivery.js";
2
+ import { WalletText } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
3
+ import { resolveAuthMenuLoginAccount } from "../../auth-menu/domain.js";
4
+ import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
5
+ //#region src/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.tsx
6
+ function renderDemoEmailCode(delivery) {
7
+ const code = demoEmailOtpCodeFromDelivery(delivery);
8
+ if (code === null) return null;
9
+ return /* @__PURE__ */ jsxs("p", {
10
+ class: "seams-otp-description",
11
+ children: [
12
+ /* @__PURE__ */ jsx(WalletText, { message: "Demo email code:" }),
13
+ " ",
14
+ /* @__PURE__ */ jsx("code", { children: code })
15
+ ]
16
+ });
17
+ }
18
+ const AUTH_MENU_TITLE_ID = "seams-auth-menu-title";
19
+ const AUTH_MENU_ACCOUNT_LIST_ID = "seams-auth-menu-account-list";
20
+ function otpCodeDigits(code, length = 6) {
21
+ return code.padEnd(length, " ").slice(0, length).split("");
22
+ }
23
+ function recoveryCaretAtPoint(root, clientX, clientY, codeLength) {
24
+ let nearest = null;
25
+ for (const slot of root.querySelectorAll("[data-recovery-slot]")) {
26
+ const index = Number(slot.dataset.recoverySlot);
27
+ const box = slot.getBoundingClientRect();
28
+ const dx = clientX < box.left ? box.left - clientX : Math.max(0, clientX - box.right);
29
+ const dy = clientY < box.top ? box.top - clientY : Math.max(0, clientY - box.bottom);
30
+ const distance = dx * dx + dy * dy;
31
+ if (nearest === null || distance < nearest.distance) nearest = {
32
+ index,
33
+ distance,
34
+ after: clientX > box.left + box.width / 2
35
+ };
36
+ }
37
+ if (nearest === null) return null;
38
+ return Math.min(nearest.after ? nearest.index + 1 : nearest.index, codeLength);
39
+ }
40
+ function renderOtpCodeDigit(digit) {
41
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("span", {
42
+ class: `seams-otp-slot ${digit.trim() ? "is-filled" : ""}`,
43
+ children: digit
44
+ }) });
45
+ }
46
+ function authViewKey(viewModel) {
47
+ const stage = viewModel.kind === "recovery" ? `:${viewModel.stage}` : "";
48
+ return `${viewModel.kind}:${viewModel.mode}:${viewModel.status.kind}${stage}`;
49
+ }
50
+ function recoveryAnnouncement(viewModel) {
51
+ if (viewModel.status.kind === "succeeded") return "";
52
+ if (viewModel.status.kind === "busy") return viewModel.status.headline;
53
+ if (viewModel.status.kind === "recoverable") return viewModel.status.message;
54
+ if (viewModel.stage === "passkey_ready") return "Recovery code accepted.";
55
+ if (viewModel.stage === "sign_in_ready") return "Wallet recovered. Unlock it to continue.";
56
+ return "";
57
+ }
58
+ function recoveryBackLabel(viewModel) {
59
+ if (viewModel.kind !== "recovery") return "Back";
60
+ return viewModel.stage === "choose_method" ? "Back to recovery code" : "Back to unlock wallet";
61
+ }
62
+ function recoveryNavigationLocked(viewModel) {
63
+ return viewModel.kind === "recovery" && viewModel.stage === "finalizing";
64
+ }
65
+ function modeSwitchCopy(mode) {
66
+ return mode === "register" ? {
67
+ prompt: "Already have a wallet?",
68
+ action: "Unlock wallet",
69
+ nextMode: "login"
70
+ } : {
71
+ prompt: "Don't have a wallet?",
72
+ action: "Create a wallet",
73
+ nextMode: "register"
74
+ };
75
+ }
76
+ function modeLabel(mode) {
77
+ return mode === "register" ? "Create a wallet" : "Unlock wallet";
78
+ }
79
+ function passkeyButtonLabel(mode) {
80
+ return mode === "register" ? "Create wallet with passkey" : "Unlock with passkey";
81
+ }
82
+ /** The failure the footer strip reports. Only the menu itself reports there. */
83
+ function menuNotice(viewModel) {
84
+ if (viewModel.kind === "google_otp_login" || viewModel.kind === "google_registration") return viewModel.error || null;
85
+ return viewModel.kind === "passkey" && viewModel.status.kind === "recoverable" && viewModel.status.reason === "error" ? viewModel.status.message : null;
86
+ }
87
+ function selectedLoginAccount(viewModel) {
88
+ return resolveAuthMenuLoginAccount(viewModel.accountOptions, viewModel.selectedAccount).selectedAccount;
89
+ }
90
+ function selectedAccountPrimaryText(account) {
91
+ return account.walletId;
92
+ }
93
+ function accountSecondaryText(account) {
94
+ return account.authMethod === "email_otp" ? account.emailAddress : null;
95
+ }
96
+ function savedAccountsTriggerLabel(account) {
97
+ if (!account) return "Saved wallets";
98
+ const emailAddress = accountSecondaryText(account);
99
+ return emailAddress ? `Saved wallets. Selected wallet ID ${account.walletId}, email ${emailAddress}` : `Saved wallets. Selected ${account.walletId}`;
100
+ }
101
+ function accountGroups(options) {
102
+ const passkeyAccounts = options.filter((option) => option.authMethod === "passkey");
103
+ const emailOtpAccounts = options.filter((option) => option.authMethod === "email_otp");
104
+ return [{
105
+ authMethod: "passkey",
106
+ label: "Passkey",
107
+ accounts: passkeyAccounts
108
+ }, {
109
+ authMethod: "email_otp",
110
+ label: "Email OTP",
111
+ accounts: emailOtpAccounts
112
+ }].filter((group) => group.accounts.length > 0);
113
+ }
114
+ //#endregion
115
+ export { 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 };
116
+
117
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1,60 @@
1
+ import { EMAIL_OTP_RECOVERY_KEY_ALPHABET } from "../../../../../shared-ts/src/utils/emailOtpRecoveryKey.js";
2
+ import "../../../../../shared-ts/src/wallet-recovery/recoveryCodes.js";
3
+ import { jsx } from "preact/jsx-runtime";
4
+ //#region src/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.tsx
5
+ const RECOVERY_CODE_CHARACTERS = new Set(EMAIL_OTP_RECOVERY_KEY_ALPHABET);
6
+ function recoveryInputCharacters(code) {
7
+ let characters = "";
8
+ for (const character of code.toUpperCase()) {
9
+ const read = character === "O" ? "0" : character === "I" || character === "L" ? "1" : character;
10
+ if (RECOVERY_CODE_CHARACTERS.has(read)) characters += read;
11
+ }
12
+ return characters;
13
+ }
14
+ const RECOVERY_CODE_SEPARATOR = /[\s\-\u2010-\u2015\u2212]/;
15
+ /** Characters the input dropped because no recovery code contains them, such as U. */
16
+ function rejectedRecoveryCharacters(input) {
17
+ const rejected = /* @__PURE__ */ new Set();
18
+ for (const character of input.toUpperCase()) {
19
+ if (RECOVERY_CODE_SEPARATOR.test(character)) continue;
20
+ if (recoveryInputCharacters(character)) continue;
21
+ rejected.add(character);
22
+ }
23
+ return Array.from(rejected).slice(0, 3);
24
+ }
25
+ function renderRecoveryCodeGroups(code, selection, arrival) {
26
+ const caret = selection && selection.start === selection.end ? selection.start : null;
27
+ const lastIndex = 31;
28
+ const focusIndex = selection === null ? null : Math.min(selection.start, lastIndex);
29
+ const groups = [];
30
+ for (let start = 0; start < 32; start += 4) {
31
+ const end = start + 4;
32
+ const slots = [];
33
+ for (let index = start; index < end; index += 1) {
34
+ const character = code[index] ?? "";
35
+ const classes = ["seams-otp-slot"];
36
+ if (character) classes.push("is-filled");
37
+ if (index === caret) classes.push("is-caret");
38
+ if (caret === 32 && index === lastIndex) classes.push("is-caret-after");
39
+ if (selection && index >= selection.start && index < selection.end) classes.push("is-selected");
40
+ if (arrival && index >= arrival.start && index < arrival.end) classes.push("is-new");
41
+ slots.push(/* @__PURE__ */ jsx("span", {
42
+ class: classes.join(" "),
43
+ "data-recovery-slot": index,
44
+ children: character
45
+ }, index));
46
+ }
47
+ const groupClasses = ["seams-recovery-code-group"];
48
+ if (focusIndex !== null && focusIndex >= start && focusIndex < end) groupClasses.push("is-active");
49
+ if (code.length >= end) groupClasses.push("is-complete");
50
+ groups.push(/* @__PURE__ */ jsx("div", {
51
+ class: groupClasses.join(" "),
52
+ children: slots
53
+ }, start));
54
+ }
55
+ return groups;
56
+ }
57
+ //#endregion
58
+ export { recoveryInputCharacters, rejectedRecoveryCharacters, renderRecoveryCodeGroups };
59
+
60
+ //# sourceMappingURL=recovery-code-input.js.map
@@ -1,4 +1,5 @@
1
1
  import { parseMpcMaterialActivationRef } from "../../../shared-ts/src/utils/domainIds.js";
2
+ import { normalizeWalletLocale } from "../../../core/ui/locale.js";
2
3
  import { resolveAppearanceTheme, resolveThemePalette } from "../../../core/config/configHelpers.js";
3
4
  import { nearAccountRefFromAccountId, thresholdEcdsaChainTargetFromRequest, thresholdEcdsaChainTargetsEqual, walletSessionRefFromSession } from "../../../core/signingEngine/interfaces/ecdsaChainTarget.js";
4
5
  import { parseExactEcdsaSigningLaneIdentity, parseExactEd25519ExportMaterialIdentity } from "../../../core/signingEngine/session/identity/exactSigningLaneIdentity.js";
@@ -72,6 +73,7 @@ function normalizeExportKeypairWithUIInput(input, theme) {
72
73
  function resolveRuntimeAppearance(current, input) {
73
74
  const rawInput = input;
74
75
  return {
76
+ locale: normalizeWalletLocale(rawInput.locale ?? current.locale),
75
77
  theme: resolveAppearanceTheme({
76
78
  value: rawInput.theme,
77
79
  fallback: current.theme,
@@ -0,0 +1,6 @@
1
+ //#region src/core/browser/walletIframe/events.ts
2
+ const WalletIframeDomEvents = { TX_CONFIRMER_CANCEL: "seams:tx-confirmer-cancel" };
3
+ //#endregion
4
+ export { WalletIframeDomEvents };
5
+
6
+ //# sourceMappingURL=events.js.map
@@ -1,4 +1,5 @@
1
1
  import { normalizeTrimmedString } from "../../shared-ts/src/utils/normalize.js";
2
+ import { normalizeWalletLocale } from "../ui/locale.js";
2
3
  import { copyEcdsaSignerProvisioningDefaults, resolveAppearanceTheme, resolveBoolean, resolveChains, resolveIntegerInRange, resolveThemePalette } from "./configHelpers.js";
3
4
  import { normalizeWalletHostVariant } from "../browser/walletIframe/hostVariant.js";
4
5
  import { SIGNING_SESSION_SEAL_ALG, SIGNING_SESSION_SEAL_GROUP_ID } from "../../shared-ts/src/utils/signingSessionSeal.js";
@@ -208,6 +209,7 @@ function buildConfigsFromDefaults(args) {
208
209
  }
209
210
  },
210
211
  ui: { appearance: {
212
+ locale: normalizeWalletLocale(rawAppearance?.locale ?? defaults.ui.appearance.locale),
211
213
  theme: appearanceTheme,
212
214
  palette: appearancePalette
213
215
  } }
@@ -0,0 +1,27 @@
1
+ //#region src/core/signingEngine/uiConfirm/ui/appearance.ts
2
+ const DEFAULT_UI_APPEARANCE = {
3
+ theme: {
4
+ id: "default",
5
+ mode: "dark",
6
+ colors: {}
7
+ },
8
+ palette: "default"
9
+ };
10
+ function isThemeMode(value) {
11
+ return value === "light" || value === "dark";
12
+ }
13
+ function resolveUiAppearance(args) {
14
+ const appearance = args.requestedAppearance ?? args.getAppearance?.() ?? DEFAULT_UI_APPEARANCE;
15
+ if (!isThemeMode(args.requestedMode) || args.requestedMode === appearance.theme.mode) return appearance;
16
+ return {
17
+ ...appearance,
18
+ theme: {
19
+ ...appearance.theme,
20
+ mode: args.requestedMode
21
+ }
22
+ };
23
+ }
24
+ //#endregion
25
+ export { resolveUiAppearance };
26
+
27
+ //# sourceMappingURL=appearance.js.map
@@ -0,0 +1,155 @@
1
+ //#region src/core/signingEngine/uiConfirm/ui/export-private-key-reveal.ts
2
+ const HEX_REEL_ALPHABET = "0123456789abcdef";
3
+ const BASE58_REEL_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
4
+ const REEL_GLYPH_MIN_HOLD_MS = 90;
5
+ const REEL_GLYPH_MAX_HOLD_MS = 150;
6
+ const REEL_SETTLE_HOLD_EXTENSION_MS = 90;
7
+ const REEL_SETTLE_STAGGER_MS = 700;
8
+ const REEL_SETTLE_SPIN_MS = 300;
9
+ function assertNever(value) {
10
+ throw new Error(`Unexpected private key reveal state: ${String(value)}`);
11
+ }
12
+ function reelDefinition(scheme) {
13
+ switch (scheme) {
14
+ case "secp256k1": return {
15
+ prefix: "0x",
16
+ alphabet: HEX_REEL_ALPHABET,
17
+ slotCount: 64
18
+ };
19
+ case "ed25519": return {
20
+ prefix: "ed25519:",
21
+ alphabet: BASE58_REEL_ALPHABET,
22
+ slotCount: 88
23
+ };
24
+ default: return assertNever(scheme);
25
+ }
26
+ }
27
+ function randomReelGlyph(alphabet) {
28
+ return alphabet[Math.floor(Math.random() * alphabet.length)] ?? alphabet[0] ?? "x";
29
+ }
30
+ function randomGlyphHoldMs(minimumMs, maximumMs) {
31
+ return minimumMs + Math.random() * (maximumMs - minimumMs);
32
+ }
33
+ function createReelSlots(definition, reducedMotion, now) {
34
+ const slots = [];
35
+ for (let index = 0; index < definition.slotCount; index += 1) slots.push({
36
+ glyph: reducedMotion ? "x" : randomReelGlyph(definition.alphabet),
37
+ nextChangeAtMs: reducedMotion ? Number.POSITIVE_INFINITY : now + index * 37 % 90
38
+ });
39
+ return slots;
40
+ }
41
+ function createSpinningState(entryKey, scheme, reducedMotion, now) {
42
+ const definition = reelDefinition(scheme);
43
+ return {
44
+ kind: "spinning",
45
+ entryKey,
46
+ prefix: definition.prefix,
47
+ alphabet: definition.alphabet,
48
+ slots: createReelSlots(definition, reducedMotion, now)
49
+ };
50
+ }
51
+ function maskedPrivateKey(privateKey) {
52
+ if (!privateKey) return "";
53
+ const visibleStartLength = (privateKey.startsWith("ed25519:") ? 8 : 0) + 6;
54
+ const hiddenEnd = Math.max(visibleStartLength, privateKey.length - 6);
55
+ return `${privateKey.slice(0, visibleStartLength)}${"x".repeat(hiddenEnd - visibleStartLength)}${privateKey.slice(hiddenEnd)}`;
56
+ }
57
+ function settlingState(state, maskedTarget, startedAtMs) {
58
+ const prefix = maskedTarget.startsWith(state.prefix) ? state.prefix : "";
59
+ const targetSlots = Array.from(maskedTarget.slice(prefix.length));
60
+ const slots = targetSlots.length === state.slots.length ? state.slots : targetSlots.map((_, index) => ({
61
+ glyph: randomReelGlyph(state.alphabet),
62
+ nextChangeAtMs: startedAtMs + index * 37 % 90
63
+ }));
64
+ return {
65
+ kind: "settling",
66
+ entryKey: state.entryKey,
67
+ prefix,
68
+ alphabet: state.alphabet,
69
+ slots,
70
+ targetSlots,
71
+ lockedSlots: 0,
72
+ startedAtMs
73
+ };
74
+ }
75
+ function lockedSlotCount(state, now) {
76
+ const lastIndex = Math.max(1, state.targetSlots.length - 1);
77
+ let count = 0;
78
+ for (let index = 0; index < state.targetSlots.length; index += 1) {
79
+ const stagger = index / lastIndex * REEL_SETTLE_STAGGER_MS;
80
+ if (now >= state.startedAtMs + stagger + REEL_SETTLE_SPIN_MS) count += 1;
81
+ }
82
+ return count;
83
+ }
84
+ function settlingProgress(state, index, now) {
85
+ const stagger = index / Math.max(1, state.targetSlots.length - 1) * REEL_SETTLE_STAGGER_MS;
86
+ const slotStartedAtMs = state.startedAtMs + stagger;
87
+ return Math.max(0, Math.min(1, (now - slotStartedAtMs) / REEL_SETTLE_SPIN_MS));
88
+ }
89
+ function cycleSpinningSlots(slots, alphabet, now) {
90
+ let nextSlots = null;
91
+ for (let index = 0; index < slots.length; index += 1) {
92
+ const slot = slots[index];
93
+ if (!slot || now < slot.nextChangeAtMs) continue;
94
+ if (nextSlots === null) nextSlots = [...slots];
95
+ nextSlots[index] = {
96
+ glyph: randomReelGlyph(alphabet),
97
+ nextChangeAtMs: now + randomGlyphHoldMs(REEL_GLYPH_MIN_HOLD_MS, REEL_GLYPH_MAX_HOLD_MS)
98
+ };
99
+ }
100
+ return nextSlots ?? slots;
101
+ }
102
+ function cycleSettlingSlots(state, lockedSlots, now) {
103
+ let nextSlots = null;
104
+ for (let index = 0; index < state.slots.length; index += 1) {
105
+ const slot = state.slots[index];
106
+ if (!slot) continue;
107
+ if (index < lockedSlots) {
108
+ const targetGlyph = state.targetSlots[index] ?? slot.glyph;
109
+ if (slot.glyph === targetGlyph && slot.nextChangeAtMs === Number.POSITIVE_INFINITY) continue;
110
+ if (nextSlots === null) nextSlots = [...state.slots];
111
+ nextSlots[index] = {
112
+ glyph: targetGlyph,
113
+ nextChangeAtMs: Number.POSITIVE_INFINITY
114
+ };
115
+ continue;
116
+ }
117
+ if (now < slot.nextChangeAtMs) continue;
118
+ const holdExtensionMs = settlingProgress(state, index, now) * REEL_SETTLE_HOLD_EXTENSION_MS;
119
+ if (nextSlots === null) nextSlots = [...state.slots];
120
+ nextSlots[index] = {
121
+ glyph: randomReelGlyph(state.alphabet),
122
+ nextChangeAtMs: now + randomGlyphHoldMs(REEL_GLYPH_MIN_HOLD_MS + holdExtensionMs, REEL_GLYPH_MAX_HOLD_MS + holdExtensionMs)
123
+ };
124
+ }
125
+ return nextSlots ?? state.slots;
126
+ }
127
+ function advanceRevealState(state, now) {
128
+ if (state.kind === "spinning") {
129
+ const slots = cycleSpinningSlots(state.slots, state.alphabet, now);
130
+ if (slots === state.slots) return state;
131
+ return {
132
+ ...state,
133
+ slots
134
+ };
135
+ }
136
+ if (state.kind === "settling") {
137
+ const nextLockedSlots = lockedSlotCount(state, now);
138
+ if (nextLockedSlots >= state.targetSlots.length) return {
139
+ kind: "settled",
140
+ entryKey: state.entryKey
141
+ };
142
+ const slots = cycleSettlingSlots(state, nextLockedSlots, now);
143
+ if (slots === state.slots && nextLockedSlots === state.lockedSlots) return state;
144
+ return {
145
+ ...state,
146
+ slots,
147
+ lockedSlots: nextLockedSlots
148
+ };
149
+ }
150
+ return assertNever(state);
151
+ }
152
+ //#endregion
153
+ export { advanceRevealState, createSpinningState, maskedPrivateKey, settlingState };
154
+
155
+ //# sourceMappingURL=export-private-key-reveal.js.map
@@ -0,0 +1,209 @@
1
+ import { createWalletIframeSurfaceMeasurementReporter } from "../../../../SeamsWeb/walletIframe/host/surface-measurement-reporter.js";
2
+ import { sameSurfaceMeasurementBinding } from "./surface-measurement-binding.js";
3
+ import { resolveUiAppearance } from "./appearance.js";
4
+ //#region src/core/signingEngine/uiConfirm/ui/export-viewer-host.ts
5
+ let mountedHost = null;
6
+ let mountVersion = 0;
7
+ var ExportViewerHost = class {
8
+ surface;
9
+ state;
10
+ constructor(session, context, model, binding, lifecycle, mount) {
11
+ this.session = session;
12
+ this.context = context;
13
+ this.state = {
14
+ kind: "mounted",
15
+ lifecycle,
16
+ binding,
17
+ reporter: null
18
+ };
19
+ this.surface = mount({
20
+ parent: document.body,
21
+ context,
22
+ model,
23
+ onClosed: this.closed
24
+ });
25
+ }
26
+ start() {
27
+ if (this.state.kind === "disposed") return;
28
+ notifyLifecycle(this.state.lifecycle, "opened");
29
+ if (this.state.kind === "mounted") this.bindMeasurement(this.state.binding);
30
+ }
31
+ matches(session, context) {
32
+ return this.surface.element.isConnected && this.context === context && this.session.kind === session.kind && this.session.id === session.id;
33
+ }
34
+ update(model, binding, lifecycle) {
35
+ if (this.state.kind === "disposed") return;
36
+ if (lifecycle) this.state.lifecycle = lifecycle;
37
+ this.surface.update(model);
38
+ if (!sameSurfaceMeasurementBinding(this.state.binding, binding)) this.bindMeasurement(binding);
39
+ }
40
+ dispose() {
41
+ if (mountedHost === this) mountedHost = null;
42
+ this.surface.dispose();
43
+ }
44
+ closed = () => {
45
+ const state = this.state;
46
+ if (state.kind === "disposed") return;
47
+ this.state = { kind: "disposed" };
48
+ if (mountedHost === this) {
49
+ mountedHost = null;
50
+ mountVersion += 1;
51
+ }
52
+ state.reporter?.disconnect();
53
+ notifyLifecycle(state.lifecycle, "closed");
54
+ };
55
+ bindMeasurement(binding) {
56
+ const state = this.state;
57
+ if (state.kind === "disposed") return;
58
+ state.reporter?.disconnect();
59
+ state.binding = binding;
60
+ state.reporter = null;
61
+ if (binding.kind === "disabled") return;
62
+ const reporter = createWalletIframeSurfaceMeasurementReporter({
63
+ kind: "request_surface",
64
+ element: this.surface.element,
65
+ requestId: binding.requestId,
66
+ postMeasurement: binding.postMeasurement
67
+ });
68
+ if (this.state === state) state.reporter = reporter;
69
+ else reporter.disconnect();
70
+ }
71
+ };
72
+ function notifyLifecycle(listener, event) {
73
+ try {
74
+ listener?.(event);
75
+ } catch {}
76
+ }
77
+ function exportContext(args) {
78
+ const binding = args.surfaceMeasurementBinding;
79
+ if (binding.kind !== "wallet_iframe") return "standalone";
80
+ return (binding.hostSurfaceVariant ?? args.variant) === "modal" ? "wallet-iframe" : "standalone";
81
+ }
82
+ function normalizeGuidance(guidance) {
83
+ if (!guidance) return void 0;
84
+ const title = guidance.title.trim();
85
+ const body = guidance.body?.trim();
86
+ const steps = guidance.steps?.map(trimText).filter(nonemptyText);
87
+ if (!title && !body && !steps?.length) return void 0;
88
+ return {
89
+ title,
90
+ body,
91
+ steps
92
+ };
93
+ }
94
+ function trimText(value) {
95
+ return value.trim();
96
+ }
97
+ function nonemptyText(value) {
98
+ return value.length > 0;
99
+ }
100
+ function hasKey(entry) {
101
+ return !!entry.publicKey.trim() || !!entry.privateKey.trim();
102
+ }
103
+ function keyMetadata(entry, index) {
104
+ return {
105
+ id: `${entry.scheme}-${index}`,
106
+ scheme: entry.scheme,
107
+ label: entry.label.trim(),
108
+ publicKey: entry.publicKey.trim(),
109
+ address: entry.address?.trim() ?? ""
110
+ };
111
+ }
112
+ function normalizeExportContent(args) {
113
+ const accountId = args.accountId.trim();
114
+ const guidance = normalizeGuidance(args.guidance);
115
+ const message = args.errorMessage?.trim();
116
+ if (message) return {
117
+ kind: "failed",
118
+ accountId,
119
+ guidance,
120
+ message
121
+ };
122
+ const entries = args.keys?.filter(hasKey) ?? [];
123
+ if (entries.length === 0) {
124
+ const publicKey = args.publicKey?.trim() ?? "";
125
+ const privateKey = args.privateKey?.trim() ?? "";
126
+ if (publicKey || privateKey) entries.push({
127
+ scheme: "ed25519",
128
+ label: "NEAR Ed25519",
129
+ publicKey,
130
+ privateKey
131
+ });
132
+ }
133
+ if (args.loading) {
134
+ const loading = {
135
+ kind: "loading",
136
+ accountId,
137
+ guidance,
138
+ entries: []
139
+ };
140
+ for (const [index, entry] of entries.entries()) loading.entries.push({
141
+ ...keyMetadata(entry, index),
142
+ material: { kind: "loading" }
143
+ });
144
+ return loading;
145
+ }
146
+ const ready = {
147
+ kind: "ready",
148
+ accountId,
149
+ guidance,
150
+ entries: []
151
+ };
152
+ for (const [index, entry] of entries.entries()) {
153
+ const privateKey = entry.privateKey.trim();
154
+ ready.entries.push({
155
+ ...keyMetadata(entry, index),
156
+ material: privateKey ? {
157
+ kind: "ready",
158
+ value: privateKey
159
+ } : { kind: "unavailable" }
160
+ });
161
+ }
162
+ return ready;
163
+ }
164
+ function isExportViewerSessionOpen(sessionId) {
165
+ const id = sessionId.trim();
166
+ return !!id && mountedHost?.session.kind === "tracked" && mountedHost.session.id === id && mountedHost.surface.element.isConnected;
167
+ }
168
+ async function upsertExportViewerHost(args) {
169
+ if (typeof document === "undefined") throw new Error("Export viewer host requires a DOM environment");
170
+ const version = ++mountVersion;
171
+ const model = {
172
+ variant: args.variant,
173
+ appearance: resolveUiAppearance({
174
+ requestedAppearance: args.appearance,
175
+ requestedMode: args.theme
176
+ }),
177
+ content: normalizeExportContent(args)
178
+ };
179
+ const id = args.sessionId?.trim();
180
+ const session = id ? {
181
+ kind: "tracked",
182
+ id
183
+ } : { kind: "untracked" };
184
+ const context = exportContext(args);
185
+ const { mountExportPrivateKeySurface } = await import("./preact/mountExportPrivateKeySurface.js");
186
+ if (version !== mountVersion) return;
187
+ if (mountedHost?.matches(session, context)) {
188
+ mountedHost.update(model, args.surfaceMeasurementBinding, args.onLifecycle);
189
+ return;
190
+ }
191
+ mountedHost?.dispose();
192
+ if (version !== mountVersion) return;
193
+ const host = new ExportViewerHost(session, context, model, args.surfaceMeasurementBinding, args.onLifecycle ?? null, mountExportPrivateKeySurface);
194
+ mountedHost = host;
195
+ try {
196
+ host.start();
197
+ } catch (error) {
198
+ host.dispose();
199
+ throw error;
200
+ }
201
+ }
202
+ function removeExportViewerHostIfPresent() {
203
+ mountVersion += 1;
204
+ mountedHost?.dispose();
205
+ }
206
+ //#endregion
207
+ export { isExportViewerSessionOpen, removeExportViewerHostIfPresent, upsertExportViewerHost };
208
+
209
+ //# sourceMappingURL=export-viewer-host.js.map