@seams/wallet 0.27.0 → 0.29.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 (389) hide show
  1. package/README.md +29 -4
  2. package/dist/.build-inputs.sha256 +1 -1
  3. package/dist/esm/SeamsWeb/publicApi/createPublicApi.js +11 -0
  4. package/dist/esm/SeamsWeb/publicApi/near.js +3 -0
  5. package/dist/esm/SeamsWeb/publicApi/ownerNearOperation.js +175 -0
  6. package/dist/esm/SeamsWeb/walletIframe/client/nearCommands.js +4 -0
  7. package/dist/esm/SeamsWeb/walletIframe/client/ownerNearOperation.js +67 -0
  8. package/dist/esm/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +27 -17
  9. package/dist/esm/SeamsWeb/walletIframe/client/router.js +63 -2
  10. package/dist/esm/SeamsWeb/walletIframe/client/sessionCommands.js +20 -0
  11. package/dist/esm/SeamsWeb/walletIframe/host/walletMutationGuard.js +6 -0
  12. package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +42 -5
  13. package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +1 -1
  14. package/dist/esm/SeamsWeb/walletIframe/shared/ownerNearOperation.js +152 -0
  15. package/dist/esm/core/accountData/near/accountProjection.js +1 -1
  16. package/dist/esm/core/authMethods/plugins.js +8 -2
  17. package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +4 -3
  18. package/dist/esm/core/rpcClients/relayer/walletRegistration.js +1 -1
  19. package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +1 -1
  20. package/dist/esm/core/signingEngine/flows/shared/signingConfirmation.js +1 -1
  21. package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +1 -1
  22. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +1 -1
  23. package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +2 -2
  24. package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +2 -2
  25. package/dist/esm/core/signingEngine/flows/signNear/signNear.js +3 -8
  26. package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +1 -1
  27. package/dist/esm/core/signingEngine/flows/signNear/signTransactions.js +3 -4
  28. package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +1 -1
  29. package/dist/esm/core/ui/messages.js +5 -0
  30. package/dist/esm/index.js +3 -2
  31. package/dist/esm/react/boundWallet.js +24 -0
  32. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +35 -22
  33. package/dist/esm/react/components/AccountMenuButton/AccountSettingsDialog.js +157 -0
  34. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +13 -1
  35. package/dist/esm/react/components/AccountMenuButton/ExternalWalletSettings.js +46 -0
  36. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +14 -2
  37. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +1 -1
  38. package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +154 -5
  39. package/dist/esm/react/components/AccountMenuButton/index.js +7 -3
  40. package/dist/esm/react/context/reactLoginStateBuilders.js +20 -0
  41. package/dist/esm/react/context/useLoginStateRefresher.js +1 -0
  42. package/dist/esm/react/hooks/useAccountInput.js +1 -1
  43. package/dist/esm/react/hooks/useOwnerNearOperation.js +10 -0
  44. package/dist/esm/react/index.js +3 -2
  45. package/dist/esm/react/styles/styles.css +154 -5
  46. package/dist/esm/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-BRnd5SEf.js} +1 -1
  47. package/dist/esm/sdk/NonceCoordinator-CNXYrOoy.js +1 -0
  48. package/dist/{public/sdk/SeamsWordmark-DwvPx2UA.js → esm/sdk/SeamsWordmark-CeEi2RlU.js} +1 -1
  49. package/dist/esm/sdk/accountLifecycle-B5a9SCM7.js +1 -0
  50. package/dist/esm/sdk/{adapters-d9yh1bdC.js → adapters-B2k8y0MB.js} +1 -1
  51. package/dist/esm/sdk/appearance-token-vars-DkF3EBbF.js +1 -0
  52. package/dist/esm/sdk/authorization-gVWwKwav.js +1 -0
  53. package/dist/esm/sdk/clientSessionPersistenceState-BxpITYM_.js +1 -0
  54. package/dist/esm/sdk/{collectAuthenticationCredentialForChallengeB64u-I4wq8OGq.js → collectAuthenticationCredentialForChallengeB64u-BoFVpdRS.js} +1 -1
  55. package/dist/esm/sdk/{commitQueue-CYruPlkm.js → commitQueue-C1wkey4q.js} +1 -1
  56. package/dist/esm/sdk/configBuilder-DpChXfDO.js +1 -0
  57. package/dist/esm/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
  58. package/dist/esm/sdk/confirm-ui-Dx6c4-Rk.js +2 -0
  59. package/dist/esm/sdk/{device-linking-DiCNt3iA.js → device-linking-_o3_fgiG.js} +1 -1
  60. package/dist/esm/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-CObsEWBa.js} +1 -1
  61. package/dist/esm/sdk/{display-D0EPmU4w.js → display-CUWg48tD.js} +1 -1
  62. package/dist/{public/sdk/ecdsaCapabilityManifest-DAJEVjlP.js → esm/sdk/ecdsaCapabilityManifest--1Ztngfx.js} +1 -1
  63. package/dist/{public/sdk/ecdsaDerivationClientWasm-AYOJgTJm.js → esm/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js} +1 -1
  64. package/dist/esm/sdk/ecdsaDerivationExport-BUUUGc6o.js +1 -0
  65. package/dist/esm/sdk/{ecdsaWalletRecords-WLyq414E.js → ecdsaWalletRecords-CKaXfsVu.js} +1 -1
  66. package/dist/esm/sdk/ed25519OperationFingerprint-Dev4P6Og.js +1 -0
  67. package/dist/{public/sdk/emailOtpEcdsaDerivationIdentity-HFQXc1Yw.js → esm/sdk/emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js} +1 -1
  68. package/dist/esm/sdk/{enrichDisplayModelWithAbi-O6Mw4i2E.js → enrichDisplayModelWithAbi-JeAcpa7r.js} +1 -1
  69. package/dist/esm/sdk/{evmCryptoWasm-BUPb4hBH.js → evmCryptoWasm-CeH6Qeaa.js} +1 -1
  70. package/dist/esm/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-O0OV1Oou.js} +1 -1
  71. package/dist/esm/sdk/exportKeypairOperation-DkqY9Bpf.js +1 -0
  72. package/dist/esm/sdk/host-BeE2dIU4.js +1 -0
  73. package/dist/{public/sdk/icons-BlMXolHv.js → esm/sdk/icons-pSZJ5Xrm.js} +1 -1
  74. package/dist/esm/sdk/indexedDB-CA4tGqkr.js +1 -0
  75. package/dist/esm/sdk/{intentDigest-HvRsBQ1z.js → intentDigest-gM3r4SVX.js} +1 -1
  76. package/dist/esm/sdk/{lanes-BU-fGqY4.js → lanes-vBKm6yBJ.js} +1 -1
  77. package/dist/esm/sdk/{localOnly-BATWJj78.js → localOnly-U_MucUAe.js} +1 -1
  78. package/dist/{public/sdk/mountExportPrivateKeySurface-CyHU8bVc.js → esm/sdk/mountExportPrivateKeySurface-C2-fnvP6.js} +1 -1
  79. package/dist/{public/sdk/mountRecoveryCodeBackupSurface-C7aglQxf.js → esm/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js} +1 -1
  80. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-CnbgQfZc.js +1 -0
  81. package/dist/esm/sdk/{nonceLaneKeys-BF_UpvIy.js → nonceLaneKeys-DtBpxubF.js} +1 -1
  82. package/dist/esm/sdk/{normalization-Df9fZWJC.js → normalization-DmfGvZ_3.js} +1 -1
  83. package/dist/esm/sdk/ownerNearOperation-DjNDxW3_.js +1 -0
  84. package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → esm/sdk/pendingWalletRecoveryCodeBackup-DXFrQmO5.js} +1 -1
  85. package/dist/esm/sdk/{presignaturePool-BbvqRWYw.js → presignaturePool-Dq4RhzXn.js} +1 -1
  86. package/dist/{public/sdk/recovery-entrypoint-DJbMDC_m.js → esm/sdk/recovery-entrypoint-s9OoKBcl.js} +1 -1
  87. package/dist/esm/sdk/registration-CTtTocyo.js +1 -0
  88. package/dist/esm/sdk/{registration-HSwOHZOo.js → registration-D3p7muCc.js} +1 -1
  89. package/dist/esm/sdk/{registrationAccounts-4r74gX1l.js → registrationAccounts-Bso0ntMs.js} +1 -1
  90. package/dist/{public/sdk/registrationIntent-Do1tD1V7.js → esm/sdk/registrationIntent-C1-Kyx_-.js} +1 -1
  91. package/dist/esm/sdk/{registrationSignerPlan-DK2b3N_p.js → registrationSignerPlan-CeMidFme.js} +1 -1
  92. package/dist/{public/sdk/requireStepUpAuth-COqCGb1i.js → esm/sdk/requireStepUpAuth-iVo6h_U-.js} +1 -1
  93. package/dist/esm/sdk/resealedEnvelopeResult-DXDo-72P.js +1 -0
  94. package/dist/esm/sdk/{routerAbNormalSigning-D-UZmCBS.js → routerAbNormalSigning-DVFFkNhJ.js} +1 -1
  95. package/dist/esm/sdk/runtime-auth-Dsmw_dUA.js +1 -0
  96. package/dist/esm/sdk/runtime-device-link-qmYvGep9.js +1 -0
  97. package/dist/esm/sdk/runtime-ecdsa-tempo-Zh95TuLV.js +1 -0
  98. package/dist/esm/sdk/runtime-email-otp-CnLuW4H1.js +1 -0
  99. package/dist/esm/sdk/runtime-export-m8lvrXtw.js +1 -0
  100. package/dist/esm/sdk/runtime-near-BiXzXXhH.js +1 -0
  101. package/dist/esm/sdk/runtime-preferences-DlKHDIjb.js +1 -0
  102. package/dist/esm/sdk/runtime-recovery-C6lS71Jp.js +1 -0
  103. package/dist/esm/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-B033ake_.js} +1 -1
  104. package/dist/esm/sdk/runtimeContext-RNS2E5wy.js +7 -0
  105. package/dist/{public/sdk/secp256k1-CE7-q9Sn.js → esm/sdk/secp256k1-DPeaOjM0.js} +1 -1
  106. package/dist/esm/sdk/signEvmFamily-Cksw3RpU.js +1 -0
  107. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-CrMIAXUe.js → signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js} +1 -1
  108. package/dist/esm/sdk/{signEvmWithUiConfirm-CGrLtMV6.js → signEvmWithUiConfirm-B14zYdwE.js} +1 -1
  109. package/dist/esm/sdk/signNear-D0rFEYP1.js +1 -0
  110. package/dist/esm/sdk/{signatureUses-kSrUHSSH.js → signatureUses-BLOoPRsb.js} +1 -1
  111. package/dist/{public/sdk/signingFlow-BcetvUeS.js → esm/sdk/signingFlow-Bd1X0e-1.js} +2 -2
  112. package/dist/{public/sdk/signingQueue-dMFOFOP5.js → esm/sdk/signingQueue-DoUBeaCv.js} +1 -1
  113. package/dist/esm/sdk/{thresholdEcdsa-CqR1fFA-.js → thresholdEcdsa-BxfOZmiR.js} +1 -1
  114. package/dist/esm/sdk/{trace--mRP2OQc.js → trace-BnhLKxcu.js} +1 -1
  115. package/dist/esm/sdk/{transaction-activity-DCzHGg3b.js → transaction-activity-BXSxMp1E.js} +1 -1
  116. package/dist/{public/sdk/transactionState-29T9xfvL.js → esm/sdk/transactionState-G_FPe-U8.js} +1 -1
  117. package/dist/esm/sdk/tx-confirm-ui.js +8 -0
  118. package/dist/esm/sdk/{types-f7dyj5N6.js → types-A-w1cYlJ.js} +1 -1
  119. package/dist/esm/sdk/{unlockedEd25519ExportRootCapability-yzxQjIFd.js → unlockedEd25519ExportRootCapability-5F1egCSv.js} +1 -1
  120. package/dist/esm/sdk/voiceid-host.js +1 -1
  121. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  122. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  123. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  124. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  125. package/dist/esm/sdk/{wallet-recovery-BZB2Vu3X.js → wallet-recovery-DXdm68_Q.js} +1 -1
  126. package/dist/{public/sdk/walletAuthMethodRecord-DLBB5fez.js → esm/sdk/walletAuthMethodRecord-BW-XV4fv.js} +1 -1
  127. package/dist/esm/sdk/{walletAuthority-BTGAuOi8.js → walletAuthority-DbGaSw7D.js} +1 -1
  128. package/dist/esm/sdk/{walletCapabilityBindings-D5YYB7nN.js → walletCapabilityBindings-mPx-6_r-.js} +1 -1
  129. package/dist/{public/sdk/walletCustodyEcdsaContinuity-C31YQ9av.js → esm/sdk/walletCustodyEcdsaContinuity-BnyL1Ryu.js} +1 -1
  130. package/dist/esm/sdk/{walletOwnershipGeneration-CgjCtPrV.js → walletOwnershipGeneration-BZc6UKqX.js} +1 -1
  131. package/dist/esm/sdk/walletRecoveryAdminProof-DdwikrW3.js +1 -0
  132. package/dist/esm/sdk/walletRecoveryCommit-DbAoiJp5.js +1 -0
  133. package/dist/{public/sdk/walletSessionAuthorizationStore-B9Vwkshr.js → esm/sdk/walletSessionAuthorizationStore-BivTUoKY.js} +1 -1
  134. package/dist/esm/sdk/{webauthnP256-BsQQPurm.js → webauthnP256-BGHikiNl.js} +1 -1
  135. package/dist/esm/shared-ts/src/auth/externalAuth.js +53 -0
  136. package/dist/esm/shared-ts/src/utils/index.js +2 -2
  137. package/dist/esm/voiceid-host.js +2 -2
  138. package/dist/public/headers.manifest.json +1 -1
  139. package/dist/public/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-BRnd5SEf.js} +1 -1
  140. package/dist/public/sdk/NonceCoordinator-CNXYrOoy.js +1 -0
  141. package/dist/{esm/sdk/SeamsWordmark-DwvPx2UA.js → public/sdk/SeamsWordmark-CeEi2RlU.js} +1 -1
  142. package/dist/public/sdk/accountLifecycle-B5a9SCM7.js +1 -0
  143. package/dist/public/sdk/{adapters-d9yh1bdC.js → adapters-B2k8y0MB.js} +1 -1
  144. package/dist/public/sdk/appearance-token-vars-DkF3EBbF.js +1 -0
  145. package/dist/public/sdk/authorization-gVWwKwav.js +1 -0
  146. package/dist/public/sdk/clientSessionPersistenceState-BxpITYM_.js +1 -0
  147. package/dist/public/sdk/{collectAuthenticationCredentialForChallengeB64u-I4wq8OGq.js → collectAuthenticationCredentialForChallengeB64u-BoFVpdRS.js} +1 -1
  148. package/dist/public/sdk/{commitQueue-CYruPlkm.js → commitQueue-C1wkey4q.js} +1 -1
  149. package/dist/public/sdk/configBuilder-DpChXfDO.js +1 -0
  150. package/dist/public/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
  151. package/dist/public/sdk/confirm-ui-Dx6c4-Rk.js +2 -0
  152. package/dist/public/sdk/{device-linking-DiCNt3iA.js → device-linking-_o3_fgiG.js} +1 -1
  153. package/dist/public/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-CObsEWBa.js} +1 -1
  154. package/dist/public/sdk/{display-D0EPmU4w.js → display-CUWg48tD.js} +1 -1
  155. package/dist/{esm/sdk/ecdsaCapabilityManifest-DAJEVjlP.js → public/sdk/ecdsaCapabilityManifest--1Ztngfx.js} +1 -1
  156. package/dist/{esm/sdk/ecdsaDerivationClientWasm-AYOJgTJm.js → public/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js} +1 -1
  157. package/dist/public/sdk/ecdsaDerivationExport-BUUUGc6o.js +1 -0
  158. package/dist/public/sdk/{ecdsaWalletRecords-WLyq414E.js → ecdsaWalletRecords-CKaXfsVu.js} +1 -1
  159. package/dist/public/sdk/ed25519OperationFingerprint-Dev4P6Og.js +1 -0
  160. package/dist/{esm/sdk/emailOtpEcdsaDerivationIdentity-HFQXc1Yw.js → public/sdk/emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js} +1 -1
  161. package/dist/public/sdk/{enrichDisplayModelWithAbi-O6Mw4i2E.js → enrichDisplayModelWithAbi-JeAcpa7r.js} +1 -1
  162. package/dist/public/sdk/{evmCryptoWasm-BUPb4hBH.js → evmCryptoWasm-CeH6Qeaa.js} +1 -1
  163. package/dist/public/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-O0OV1Oou.js} +1 -1
  164. package/dist/public/sdk/exportKeypairOperation-DkqY9Bpf.js +1 -0
  165. package/dist/public/sdk/host-BeE2dIU4.js +1 -0
  166. package/dist/{esm/sdk/icons-BlMXolHv.js → public/sdk/icons-pSZJ5Xrm.js} +1 -1
  167. package/dist/public/sdk/indexedDB-CA4tGqkr.js +1 -0
  168. package/dist/public/sdk/{intentDigest-HvRsBQ1z.js → intentDigest-gM3r4SVX.js} +1 -1
  169. package/dist/public/sdk/{lanes-BU-fGqY4.js → lanes-vBKm6yBJ.js} +1 -1
  170. package/dist/public/sdk/{localOnly-BATWJj78.js → localOnly-U_MucUAe.js} +1 -1
  171. package/dist/{esm/sdk/mountExportPrivateKeySurface-CyHU8bVc.js → public/sdk/mountExportPrivateKeySurface-C2-fnvP6.js} +1 -1
  172. package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-C7aglQxf.js → public/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js} +1 -1
  173. package/dist/public/sdk/nearEd25519YaoSigningPreparation-CnbgQfZc.js +1 -0
  174. package/dist/public/sdk/{nonceLaneKeys-BF_UpvIy.js → nonceLaneKeys-DtBpxubF.js} +1 -1
  175. package/dist/public/sdk/{normalization-Df9fZWJC.js → normalization-DmfGvZ_3.js} +1 -1
  176. package/dist/public/sdk/ownerNearOperation-DjNDxW3_.js +1 -0
  177. package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → public/sdk/pendingWalletRecoveryCodeBackup-DXFrQmO5.js} +1 -1
  178. package/dist/public/sdk/{presignaturePool-BbvqRWYw.js → presignaturePool-Dq4RhzXn.js} +1 -1
  179. package/dist/{esm/sdk/recovery-entrypoint-DJbMDC_m.js → public/sdk/recovery-entrypoint-s9OoKBcl.js} +1 -1
  180. package/dist/public/sdk/registration-CTtTocyo.js +1 -0
  181. package/dist/public/sdk/{registration-HSwOHZOo.js → registration-D3p7muCc.js} +1 -1
  182. package/dist/public/sdk/{registrationAccounts-4r74gX1l.js → registrationAccounts-Bso0ntMs.js} +1 -1
  183. package/dist/{esm/sdk/registrationIntent-Do1tD1V7.js → public/sdk/registrationIntent-C1-Kyx_-.js} +1 -1
  184. package/dist/public/sdk/{registrationSignerPlan-DK2b3N_p.js → registrationSignerPlan-CeMidFme.js} +1 -1
  185. package/dist/{esm/sdk/requireStepUpAuth-COqCGb1i.js → public/sdk/requireStepUpAuth-iVo6h_U-.js} +1 -1
  186. package/dist/public/sdk/resealedEnvelopeResult-DXDo-72P.js +1 -0
  187. package/dist/public/sdk/{routerAbNormalSigning-D-UZmCBS.js → routerAbNormalSigning-DVFFkNhJ.js} +1 -1
  188. package/dist/public/sdk/runtime-auth-Dsmw_dUA.js +1 -0
  189. package/dist/public/sdk/runtime-device-link-qmYvGep9.js +1 -0
  190. package/dist/public/sdk/runtime-ecdsa-tempo-Zh95TuLV.js +1 -0
  191. package/dist/public/sdk/runtime-email-otp-CnLuW4H1.js +1 -0
  192. package/dist/public/sdk/runtime-export-m8lvrXtw.js +1 -0
  193. package/dist/public/sdk/runtime-near-BiXzXXhH.js +1 -0
  194. package/dist/public/sdk/runtime-preferences-DlKHDIjb.js +1 -0
  195. package/dist/public/sdk/runtime-recovery-C6lS71Jp.js +1 -0
  196. package/dist/public/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-B033ake_.js} +1 -1
  197. package/dist/public/sdk/runtimeContext-RNS2E5wy.js +7 -0
  198. package/dist/{esm/sdk/secp256k1-CE7-q9Sn.js → public/sdk/secp256k1-DPeaOjM0.js} +1 -1
  199. package/dist/public/sdk/signEvmFamily-Cksw3RpU.js +1 -0
  200. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-CrMIAXUe.js → signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js} +1 -1
  201. package/dist/public/sdk/{signEvmWithUiConfirm-CGrLtMV6.js → signEvmWithUiConfirm-B14zYdwE.js} +1 -1
  202. package/dist/public/sdk/signNear-D0rFEYP1.js +1 -0
  203. package/dist/public/sdk/{signatureUses-kSrUHSSH.js → signatureUses-BLOoPRsb.js} +1 -1
  204. package/dist/{esm/sdk/signingFlow-BcetvUeS.js → public/sdk/signingFlow-Bd1X0e-1.js} +2 -2
  205. package/dist/{esm/sdk/signingQueue-dMFOFOP5.js → public/sdk/signingQueue-DoUBeaCv.js} +1 -1
  206. package/dist/public/sdk/{thresholdEcdsa-CqR1fFA-.js → thresholdEcdsa-BxfOZmiR.js} +1 -1
  207. package/dist/public/sdk/{trace--mRP2OQc.js → trace-BnhLKxcu.js} +1 -1
  208. package/dist/public/sdk/{transaction-activity-DCzHGg3b.js → transaction-activity-BXSxMp1E.js} +1 -1
  209. package/dist/{esm/sdk/transactionState-29T9xfvL.js → public/sdk/transactionState-G_FPe-U8.js} +1 -1
  210. package/dist/public/sdk/tx-confirm-ui.js +8 -0
  211. package/dist/public/sdk/{types-f7dyj5N6.js → types-A-w1cYlJ.js} +1 -1
  212. package/dist/public/sdk/{unlockedEd25519ExportRootCapability-yzxQjIFd.js → unlockedEd25519ExportRootCapability-5F1egCSv.js} +1 -1
  213. package/dist/public/sdk/voiceid-host.js +1 -1
  214. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  215. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  216. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  217. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  218. package/dist/public/sdk/{wallet-recovery-BZB2Vu3X.js → wallet-recovery-DXdm68_Q.js} +1 -1
  219. package/dist/{esm/sdk/walletAuthMethodRecord-DLBB5fez.js → public/sdk/walletAuthMethodRecord-BW-XV4fv.js} +1 -1
  220. package/dist/public/sdk/{walletAuthority-BTGAuOi8.js → walletAuthority-DbGaSw7D.js} +1 -1
  221. package/dist/public/sdk/{walletCapabilityBindings-D5YYB7nN.js → walletCapabilityBindings-mPx-6_r-.js} +1 -1
  222. package/dist/{esm/sdk/walletCustodyEcdsaContinuity-C31YQ9av.js → public/sdk/walletCustodyEcdsaContinuity-BnyL1Ryu.js} +1 -1
  223. package/dist/public/sdk/{walletOwnershipGeneration-CgjCtPrV.js → walletOwnershipGeneration-BZc6UKqX.js} +1 -1
  224. package/dist/public/sdk/walletRecoveryAdminProof-DdwikrW3.js +1 -0
  225. package/dist/public/sdk/walletRecoveryCommit-DbAoiJp5.js +1 -0
  226. package/dist/{esm/sdk/walletSessionAuthorizationStore-B9Vwkshr.js → public/sdk/walletSessionAuthorizationStore-BivTUoKY.js} +1 -1
  227. package/dist/public/sdk/{webauthnP256-BsQQPurm.js → webauthnP256-BGHikiNl.js} +1 -1
  228. package/dist/public/wallet-assets.manifest.json +262 -262
  229. package/dist/public/wallet-service/index.html +4 -4
  230. package/dist/types/shared-ts/src/auth/externalAuth.d.ts +127 -0
  231. package/dist/types/shared-ts/src/authorization/index.d.ts +1 -1
  232. package/dist/types/shared-ts/src/authorization/walletOwnerOperation.d.ts +10 -0
  233. package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +4 -0
  234. package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +2 -0
  235. package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
  236. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostOwnerAuthority.d.ts +2 -1
  237. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +1 -0
  238. package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +1 -0
  239. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationPasskeyMaterial.d.ts +24 -0
  240. package/dist/types/wallet/src/SeamsWeb/publicApi/auth.d.ts +1 -1
  241. package/dist/types/wallet/src/SeamsWeb/publicApi/createPublicApi.d.ts +1 -0
  242. package/dist/types/wallet/src/SeamsWeb/publicApi/nearCommands.d.ts +2 -0
  243. package/dist/types/wallet/src/SeamsWeb/publicApi/ownerNearOperation.d.ts +58 -0
  244. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +21 -2
  245. package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +57 -56
  246. package/dist/types/wallet/src/SeamsWeb/signingSurface/nearOwnerOperation.d.ts +16 -0
  247. package/dist/types/wallet/src/SeamsWeb/signingSurface/nearPasskeyOperationMaterial.d.ts +72 -0
  248. package/dist/types/wallet/src/SeamsWeb/signingSurface/types.d.ts +3 -0
  249. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/ownerNearOperation.d.ts +25 -0
  250. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +8 -1
  251. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/WalletHostRuntime.d.ts +8 -2
  252. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createNearCommands.d.ts +2 -1
  253. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createSessionCommands.d.ts +9 -2
  254. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/externalAuth.d.ts +31 -0
  255. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/externalOwnerApproval.d.ts +24 -0
  256. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ownerNearOperation.d.ts +12 -0
  257. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +2 -2
  258. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/sessionObserver.d.ts +1 -0
  259. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionState.d.ts +8 -0
  260. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +17 -7
  261. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/ownerNearOperation.d.ts +51 -0
  262. package/dist/types/wallet/src/core/authMethods/plugins.d.ts +2 -0
  263. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/registrationSetup.d.ts +1 -0
  264. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/repositories.d.ts +4 -0
  265. package/dist/types/wallet/src/core/rpcClients/near/NearClient.d.ts +4 -0
  266. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryRotate.d.ts +2 -2
  267. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +1 -0
  268. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +21 -0
  269. package/dist/types/wallet/src/core/types/seams.d.ts +21 -6
  270. package/dist/types/wallet/src/core/ui/messages.d.ts +1 -1
  271. package/dist/types/wallet/src/index.d.ts +3 -0
  272. package/dist/types/wallet/src/react/boundWallet.d.ts +21 -1
  273. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonView.d.ts +2 -1
  274. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountSettingsDialog.d.ts +10 -0
  275. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -2
  276. package/dist/types/wallet/src/react/components/AccountMenuButton/ExternalWalletSettings.d.ts +10 -0
  277. package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -2
  278. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +1 -0
  279. package/dist/types/wallet/src/react/components/AccountMenuButton/hooks/useProfileState.d.ts +2 -2
  280. package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +4 -3
  281. package/dist/types/wallet/src/react/context/reactLoginStateBuilders.d.ts +1 -1
  282. package/dist/types/wallet/src/react/hooks/useOwnerNearOperation.d.ts +4 -0
  283. package/dist/types/wallet/src/react/index.d.ts +3 -0
  284. package/dist/types/wallet/src/react/types.d.ts +13 -3
  285. package/dist/types/wallet/src/voiceid-host.d.ts +2 -2
  286. package/package.json +1 -1
  287. package/dist/esm/react/components/AccountMenuButton/AccountMenuModal.js +0 -66
  288. package/dist/esm/sdk/NonceCoordinator-3YhmDTS5.js +0 -1
  289. package/dist/esm/sdk/accountLifecycle-6DHYWf0v.js +0 -1
  290. package/dist/esm/sdk/appearance-token-vars-BJydfWT_.js +0 -1
  291. package/dist/esm/sdk/clientSessionPersistenceState-BCkJAYSz.js +0 -1
  292. package/dist/esm/sdk/configBuilder-CSwJrmcR.js +0 -1
  293. package/dist/esm/sdk/confirm-ui-nU6ymgiv.js +0 -2
  294. package/dist/esm/sdk/ecdsaDerivationExport-DJKOzDbS.js +0 -1
  295. package/dist/esm/sdk/exportKeypairOperation-CGE9ZU1m.js +0 -1
  296. package/dist/esm/sdk/host-DayrOrgm.js +0 -1
  297. package/dist/esm/sdk/indexedDB-C4SDsyOG.js +0 -1
  298. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-BfXmy3Jr.js +0 -1
  299. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-DHNk0F8e.js +0 -1
  300. package/dist/esm/sdk/registration-CNLUYN-p.js +0 -1
  301. package/dist/esm/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
  302. package/dist/esm/sdk/runtime-auth-BCoj7_-G.js +0 -1
  303. package/dist/esm/sdk/runtime-device-link-DAsq5tGT.js +0 -1
  304. package/dist/esm/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js +0 -1
  305. package/dist/esm/sdk/runtime-email-otp-BxSKK9AG.js +0 -1
  306. package/dist/esm/sdk/runtime-export-BWnQXMzT.js +0 -1
  307. package/dist/esm/sdk/runtime-near-CuzPZrDS.js +0 -1
  308. package/dist/esm/sdk/runtime-preferences-B-nDWlm3.js +0 -1
  309. package/dist/esm/sdk/runtime-recovery-DpOdEJ8N.js +0 -1
  310. package/dist/esm/sdk/runtimeContext-5JcewRo3.js +0 -6
  311. package/dist/esm/sdk/sessionObservationRevision-JOvVF4Hf.js +0 -1
  312. package/dist/esm/sdk/signEvmFamily-BY5jlZEG.js +0 -1
  313. package/dist/esm/sdk/signNear-DMpJFkwF.js +0 -1
  314. package/dist/esm/sdk/signer-worker-BNodGJKY.js +0 -1
  315. package/dist/esm/sdk/walletRecoveryAdminProof-CvSYbyg5.js +0 -1
  316. package/dist/esm/sdk/walletRecoveryCommit-Cc2LAkCS.js +0 -1
  317. package/dist/public/sdk/NonceCoordinator-3YhmDTS5.js +0 -1
  318. package/dist/public/sdk/accountLifecycle-6DHYWf0v.js +0 -1
  319. package/dist/public/sdk/appearance-token-vars-BJydfWT_.js +0 -1
  320. package/dist/public/sdk/clientSessionPersistenceState-BCkJAYSz.js +0 -1
  321. package/dist/public/sdk/configBuilder-CSwJrmcR.js +0 -1
  322. package/dist/public/sdk/confirm-ui-nU6ymgiv.js +0 -2
  323. package/dist/public/sdk/ecdsaDerivationExport-DJKOzDbS.js +0 -1
  324. package/dist/public/sdk/exportKeypairOperation-CGE9ZU1m.js +0 -1
  325. package/dist/public/sdk/host-DayrOrgm.js +0 -1
  326. package/dist/public/sdk/indexedDB-C4SDsyOG.js +0 -1
  327. package/dist/public/sdk/nearEd25519YaoMaterialActivation-BfXmy3Jr.js +0 -1
  328. package/dist/public/sdk/nearEd25519YaoSigningPreparation-DHNk0F8e.js +0 -1
  329. package/dist/public/sdk/registration-CNLUYN-p.js +0 -1
  330. package/dist/public/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
  331. package/dist/public/sdk/runtime-auth-BCoj7_-G.js +0 -1
  332. package/dist/public/sdk/runtime-device-link-DAsq5tGT.js +0 -1
  333. package/dist/public/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js +0 -1
  334. package/dist/public/sdk/runtime-email-otp-BxSKK9AG.js +0 -1
  335. package/dist/public/sdk/runtime-export-BWnQXMzT.js +0 -1
  336. package/dist/public/sdk/runtime-near-CuzPZrDS.js +0 -1
  337. package/dist/public/sdk/runtime-preferences-B-nDWlm3.js +0 -1
  338. package/dist/public/sdk/runtime-recovery-DpOdEJ8N.js +0 -1
  339. package/dist/public/sdk/runtimeContext-5JcewRo3.js +0 -6
  340. package/dist/public/sdk/sessionObservationRevision-JOvVF4Hf.js +0 -1
  341. package/dist/public/sdk/signEvmFamily-BY5jlZEG.js +0 -1
  342. package/dist/public/sdk/signNear-DMpJFkwF.js +0 -1
  343. package/dist/public/sdk/signer-worker-BNodGJKY.js +0 -1
  344. package/dist/public/sdk/walletRecoveryAdminProof-CvSYbyg5.js +0 -1
  345. package/dist/public/sdk/walletRecoveryCommit-Cc2LAkCS.js +0 -1
  346. package/dist/types/shared-ts/src/authorization/walletCustodyOperation.d.ts +0 -10
  347. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuModal.d.ts +0 -9
  348. /package/dist/esm/sdk/{accountIds-CW2BP-d9.js → accountIds-DGWFzEnw.js} +0 -0
  349. /package/dist/esm/sdk/{actions-DrtSTGus.js → actions-7SvZZut1.js} +0 -0
  350. /package/dist/esm/sdk/{authenticatorOptions-WCDKYRux.js → authenticatorOptions-B4q62CLs.js} +0 -0
  351. /package/dist/esm/sdk/{confirmTypes-BvVtQs-M.js → confirmTypes-DmEPoxys.js} +0 -0
  352. /package/dist/esm/sdk/{csp-stylesheet-DUSqfXvZ.js → csp-stylesheet-5LU6VGKK.js} +0 -0
  353. /package/dist/esm/sdk/{digestEncoding-CqNXPZY9.js → digestEncoding-34kXJoJr.js} +0 -0
  354. /package/dist/esm/sdk/{ecdsaChainTarget-Bm5X4k-V.js → ecdsaChainTarget-BoRVQtjQ.js} +0 -0
  355. /package/dist/esm/sdk/{executeWorkerOperation-C9FOCCR7.js → executeWorkerOperation-CAYSt0NA.js} +0 -0
  356. /package/dist/esm/sdk/{helpers-Dubwo5uK.js → helpers-B7c1zc7h.js} +0 -0
  357. /package/dist/esm/sdk/{jsonRpc-BVDv1wfm.js → jsonRpc-DGzeiNSa.js} +0 -0
  358. /package/dist/esm/sdk/{keccak-mS0Mejjx.js → keccak-DGHI1G6t.js} +0 -0
  359. /package/dist/esm/sdk/{keyMaterialEnvelope-Dm2ZEilb.js → keyMaterialEnvelope-Czkks9Ki.js} +0 -0
  360. /package/dist/esm/sdk/{presignatures-BCeq56DG.js → presignatures-CkhuZ0YQ.js} +0 -0
  361. /package/dist/esm/sdk/{profileAccountProjection-C5sNt-s2.js → profileAccountProjection-dvLchPBo.js} +0 -0
  362. /package/dist/esm/sdk/{registrationAuthMethodInput-BR1WVbK3.js → registrationAuthMethodInput-C4o7yFBJ.js} +0 -0
  363. /package/dist/esm/sdk/{sdkSentEvents-DjOlKtdW.js → sdkSentEvents-BFwv3mBw.js} +0 -0
  364. /package/dist/esm/sdk/{signerDomain-BAsLT3XN.js → signerDomain-D-EUTlLK.js} +0 -0
  365. /package/dist/esm/sdk/{signerSlot-D2RZnb27.js → signerSlot-BlijMq8C.js} +0 -0
  366. /package/dist/esm/sdk/{surface-measurement-reporter-DXsvq401.js → surface-measurement-reporter-DJ_dQhBV.js} +0 -0
  367. /package/dist/esm/sdk/{walletCustodyOperation-DimzAbCB.js → walletOwnerOperation-CScYv2K6.js} +0 -0
  368. /package/dist/esm/sdk/{walletSessionAuthorizationStatus-DG7DPcgR.js → walletSessionAuthorizationStatus-GhcGvDCX.js} +0 -0
  369. /package/dist/public/sdk/{accountIds-CW2BP-d9.js → accountIds-DGWFzEnw.js} +0 -0
  370. /package/dist/public/sdk/{actions-DrtSTGus.js → actions-7SvZZut1.js} +0 -0
  371. /package/dist/public/sdk/{authenticatorOptions-WCDKYRux.js → authenticatorOptions-B4q62CLs.js} +0 -0
  372. /package/dist/public/sdk/{confirmTypes-BvVtQs-M.js → confirmTypes-DmEPoxys.js} +0 -0
  373. /package/dist/public/sdk/{csp-stylesheet-DUSqfXvZ.js → csp-stylesheet-5LU6VGKK.js} +0 -0
  374. /package/dist/public/sdk/{digestEncoding-CqNXPZY9.js → digestEncoding-34kXJoJr.js} +0 -0
  375. /package/dist/public/sdk/{ecdsaChainTarget-Bm5X4k-V.js → ecdsaChainTarget-BoRVQtjQ.js} +0 -0
  376. /package/dist/public/sdk/{executeWorkerOperation-C9FOCCR7.js → executeWorkerOperation-CAYSt0NA.js} +0 -0
  377. /package/dist/public/sdk/{helpers-Dubwo5uK.js → helpers-B7c1zc7h.js} +0 -0
  378. /package/dist/public/sdk/{jsonRpc-BVDv1wfm.js → jsonRpc-DGzeiNSa.js} +0 -0
  379. /package/dist/public/sdk/{keccak-mS0Mejjx.js → keccak-DGHI1G6t.js} +0 -0
  380. /package/dist/public/sdk/{keyMaterialEnvelope-Dm2ZEilb.js → keyMaterialEnvelope-Czkks9Ki.js} +0 -0
  381. /package/dist/public/sdk/{presignatures-BCeq56DG.js → presignatures-CkhuZ0YQ.js} +0 -0
  382. /package/dist/public/sdk/{profileAccountProjection-C5sNt-s2.js → profileAccountProjection-dvLchPBo.js} +0 -0
  383. /package/dist/public/sdk/{registrationAuthMethodInput-BR1WVbK3.js → registrationAuthMethodInput-C4o7yFBJ.js} +0 -0
  384. /package/dist/public/sdk/{sdkSentEvents-DjOlKtdW.js → sdkSentEvents-BFwv3mBw.js} +0 -0
  385. /package/dist/public/sdk/{signerDomain-BAsLT3XN.js → signerDomain-D-EUTlLK.js} +0 -0
  386. /package/dist/public/sdk/{signerSlot-D2RZnb27.js → signerSlot-BlijMq8C.js} +0 -0
  387. /package/dist/public/sdk/{surface-measurement-reporter-DXsvq401.js → surface-measurement-reporter-DJ_dQhBV.js} +0 -0
  388. /package/dist/public/sdk/{walletCustodyOperation-DimzAbCB.js → walletOwnerOperation-CScYv2K6.js} +0 -0
  389. /package/dist/public/sdk/{walletSessionAuthorizationStatus-DG7DPcgR.js → walletSessionAuthorizationStatus-GhcGvDCX.js} +0 -0
@@ -4,7 +4,7 @@ import { WalletText, useWalletLocale } from "../../context/WalletLocale.js";
4
4
  import TouchIcon from "./icons/TouchIcon.js";
5
5
  import { UserAccountButton } from "./UserAccountButton.js";
6
6
  import { ProfileDropdown } from "./ProfileDropdown.js";
7
- import { AccountMenuModal } from "./AccountMenuModal.js";
7
+ import { AccountSettingsDialog } from "./AccountSettingsDialog.js";
8
8
  import { LockKeyholeIcon } from "./icons/LockKeyholeIcon.js";
9
9
  import { useLayoutEffect, useRef, useState } from "react";
10
10
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -13,9 +13,9 @@ import "./Web3AuthProfileButton.css";
13
13
  function measurePanel(element, setHeight) {
14
14
  setHeight(element.offsetHeight);
15
15
  }
16
- function observePanel(contentRef, isOpen, setHeight) {
16
+ function observePanel(contentRef, isOpen, presentation, setHeight) {
17
17
  const content = contentRef.current;
18
- if (!content || !isOpen) {
18
+ if (!content || !isOpen || presentation === "drawer") {
19
19
  setHeight(null);
20
20
  return;
21
21
  }
@@ -28,14 +28,14 @@ function observePanel(contentRef, isOpen, setHeight) {
28
28
  function closeWithEscape(presentation, onClose, event) {
29
29
  if (event.key !== "Escape" || event.defaultPrevented) return;
30
30
  event.preventDefault();
31
- if (presentation === "modal") event.stopPropagation();
31
+ if (presentation !== "dropdown") event.stopPropagation();
32
32
  onClose();
33
33
  }
34
- function revealModalScreen(presentation, event) {
35
- if (presentation !== "modal" || !(event.target instanceof HTMLElement)) return;
34
+ function revealDialogScreen(presentation, event) {
35
+ if (presentation === "dropdown" || !(event.target instanceof HTMLElement)) return;
36
36
  if (!event.target.matches(".seams-account-heading h2, .seams-account-identity")) return;
37
- const dialog = event.currentTarget.closest("dialog.seams-account-modal");
38
- if (dialog instanceof HTMLDialogElement) dialog.scrollTop = 0;
37
+ const scrollArea = presentation === "drawer" ? event.target.closest(".seams-account-main") : event.currentTarget.closest("dialog.seams-account-dialog");
38
+ if (scrollArea) scrollArea.scrollTop = 0;
39
39
  }
40
40
  function restoreTriggerFocus(buttonRef, previousOpen, isOpen) {
41
41
  if (previousOpen.current && !isOpen) buttonRef.current?.querySelector("[aria-expanded]")?.focus({ preventScroll: true });
@@ -55,20 +55,21 @@ function AccountMenuButtonView({ presentation, buttonRef, dropdownRef, trigger,
55
55
  const previousOpen = useRef(trigger.isOpen);
56
56
  useLayoutEffect(restoreTriggerFocus.bind(null, buttonRef, previousOpen, trigger.isOpen), [buttonRef, trigger.isOpen]);
57
57
  const [height, setHeight] = useState(null);
58
- useLayoutEffect(observePanel.bind(null, contentRef, trigger.isOpen, setHeight), [trigger.isOpen, presentation]);
58
+ useLayoutEffect(observePanel.bind(null, contentRef, trigger.isOpen, presentation, setHeight), [trigger.isOpen, presentation]);
59
+ const panelOpen = presentation !== "dropdown" || trigger.isOpen;
59
60
  const panel = /* @__PURE__ */ jsx("div", {
60
61
  ref: buttonRef,
61
- className: `seams-profile-button-morphable ${trigger.isOpen ? "open" : "closed"} ${className ?? ""}`,
62
- style: trigger.isOpen ? style : {
62
+ className: `seams-profile-button-morphable ${panelOpen ? "open" : "closed"} ${className ?? ""}`,
63
+ style: panelOpen ? style : {
63
64
  ...style,
64
65
  width: "fit-content"
65
66
  },
66
- "data-state": trigger.isOpen ? "open" : "closed",
67
- onFocusCapture: revealModalScreen.bind(null, presentation),
68
- children: trigger.isOpen ? /* @__PURE__ */ jsx("div", {
67
+ "data-state": panelOpen ? "open" : "closed",
68
+ onFocusCapture: revealDialogScreen.bind(null, presentation),
69
+ children: panelOpen ? /* @__PURE__ */ jsx("div", {
69
70
  className: "seams-account-resize",
70
71
  onKeyDown: closeWithEscape.bind(null, presentation, dropdown.onClose),
71
- style: { height: height ?? void 0 },
72
+ style: { height: presentation === "drawer" ? void 0 : height ?? void 0 },
72
73
  children: /* @__PURE__ */ jsxs("div", {
73
74
  ref: contentRef,
74
75
  className: "seams-account-panel-content",
@@ -92,7 +93,11 @@ function AccountMenuButtonView({ presentation, buttonRef, dropdownRef, trigger,
92
93
  strokeWidth: "1.5",
93
94
  children: /* @__PURE__ */ jsx("path", { d: "m6 6 12 12M18 6 6 18" })
94
95
  })
95
- })
96
+ }),
97
+ presentation === "drawer" ? /* @__PURE__ */ jsx("h2", {
98
+ className: "seams-account-drawer-title",
99
+ children: /* @__PURE__ */ jsx(WalletText, { message: "Wallet settings" })
100
+ }) : null
96
101
  ]
97
102
  }),
98
103
  /* @__PURE__ */ jsx("div", {
@@ -131,12 +136,20 @@ function AccountMenuButtonView({ presentation, buttonRef, dropdownRef, trigger,
131
136
  })
132
137
  }) : /* @__PURE__ */ jsx(UserAccountButton, { ...trigger })
133
138
  });
134
- if (presentation === "modal") return /* @__PURE__ */ jsx(AccountMenuModal, {
135
- isOpen: trigger.isOpen,
136
- onClose: dropdown.onClose,
137
- children: panel
138
- });
139
- return panel;
139
+ switch (presentation) {
140
+ case "dropdown": return panel;
141
+ case "modal":
142
+ case "drawer": return /* @__PURE__ */ jsx(AccountSettingsDialog, {
143
+ presentation,
144
+ isOpen: trigger.isOpen,
145
+ onClose: dropdown.onClose,
146
+ children: panel
147
+ });
148
+ default: return assertNever(presentation);
149
+ }
150
+ }
151
+ function assertNever(value) {
152
+ throw new Error(`Unsupported account menu presentation: ${String(value)}`);
140
153
  }
141
154
  //#endregion
142
155
  export { AccountMenuButtonView };
@@ -0,0 +1,157 @@
1
+ import { walletText } from "../../../core/ui/messages.js";
2
+ import { useWalletLocale } from "../../context/WalletLocale.js";
3
+ import { Theme, useTheme } from "../theme/ThemeProvider.js";
4
+ import { Component } from "react";
5
+ import { createPortal } from "react-dom";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/react/components/AccountMenuButton/AccountSettingsDialog.tsx
8
+ const DRAWER_DURATION_MS = 240;
9
+ const DRAWER_EASING = "cubic-bezier(0.32, 0.72, 0, 1)";
10
+ function ignoreCancelledAnimation() {}
11
+ function assertNever(value) {
12
+ throw new Error(`Unsupported settings dialog state: ${String(value)}`);
13
+ }
14
+ function isBackdrop(event) {
15
+ if (event.target !== event.currentTarget) return false;
16
+ const bounds = event.currentTarget.getBoundingClientRect();
17
+ return event.clientX < bounds.left || event.clientX > bounds.right || event.clientY < bounds.top || event.clientY > bounds.bottom;
18
+ }
19
+ var SettingsDialog = class extends Component {
20
+ state = { dialog: { kind: "closed" } };
21
+ dialog = null;
22
+ motion = null;
23
+ startedOutside = false;
24
+ static getDerivedStateFromProps(props, state) {
25
+ if (props.isOpen) return { dialog: {
26
+ kind: "open",
27
+ content: props.children
28
+ } };
29
+ switch (state.dialog.kind) {
30
+ case "closed": return null;
31
+ case "open":
32
+ if (props.presentation === "modal") return { dialog: { kind: "closed" } };
33
+ return { dialog: {
34
+ kind: "closing",
35
+ content: state.dialog.content
36
+ } };
37
+ case "closing": return props.presentation === "modal" ? { dialog: { kind: "closed" } } : null;
38
+ default: return assertNever(state.dialog);
39
+ }
40
+ }
41
+ componentDidMount() {
42
+ this.syncDialog("closed", this.props.presentation);
43
+ }
44
+ componentDidUpdate(previousProps, previousState) {
45
+ this.syncDialog(previousState.dialog.kind, previousProps.presentation);
46
+ }
47
+ componentWillUnmount() {
48
+ this.clearMotion();
49
+ this.dialog?.close();
50
+ }
51
+ setDialog = (dialog) => {
52
+ if (dialog === this.dialog) return;
53
+ this.clearMotion();
54
+ this.dialog?.close();
55
+ this.dialog = dialog;
56
+ };
57
+ clearMotion() {
58
+ this.motion?.cancel();
59
+ this.motion = null;
60
+ }
61
+ syncDialog(previous, presentation) {
62
+ const dialog = this.dialog;
63
+ if (!dialog) return;
64
+ dialog.inert = this.state.dialog.kind === "closing";
65
+ if (!dialog.open) dialog.showModal();
66
+ if (this.props.presentation === "modal") {
67
+ this.clearMotion();
68
+ return;
69
+ }
70
+ if (previous === this.state.dialog.kind && presentation === this.props.presentation) return;
71
+ if (previous === "closing" && this.state.dialog.kind === "open") dialog.querySelector(".seams-account-close")?.focus({ preventScroll: true });
72
+ this.animateDrawer(previous === "closed" || presentation !== this.props.presentation);
73
+ }
74
+ animateDrawer(entering) {
75
+ const dialog = this.dialog;
76
+ if (!dialog) return;
77
+ const computed = getComputedStyle(dialog);
78
+ const offset = computed.getPropertyValue("--seams-account-drawer-offset").trim();
79
+ const from = entering ? offset : computed.transform;
80
+ this.clearMotion();
81
+ if (matchMedia("(prefers-reduced-motion: reduce)").matches) {
82
+ if (this.state.dialog.kind === "closing") this.setState({ dialog: { kind: "closed" } });
83
+ return;
84
+ }
85
+ const to = this.state.dialog.kind === "closing" ? offset : "none";
86
+ const animation = dialog.animate([{ transform: from }, { transform: to }], {
87
+ duration: DRAWER_DURATION_MS,
88
+ easing: DRAWER_EASING,
89
+ fill: "both"
90
+ });
91
+ this.motion = animation;
92
+ animation.finished.then(this.finishMotion.bind(this, animation), ignoreCancelledAnimation);
93
+ }
94
+ finishMotion(animation) {
95
+ if (this.motion !== animation) return;
96
+ if (this.state.dialog.kind === "closing") {
97
+ this.setState({ dialog: { kind: "closed" } });
98
+ return;
99
+ }
100
+ this.clearMotion();
101
+ }
102
+ requestClose = () => {
103
+ if (this.state.dialog.kind === "open") this.props.onClose();
104
+ };
105
+ rememberBackdrop = (event) => {
106
+ this.startedOutside = isBackdrop(event);
107
+ };
108
+ closeBackdrop = (event) => {
109
+ const shouldClose = this.startedOutside && isBackdrop(event);
110
+ this.startedOutside = false;
111
+ if (!shouldClose) return;
112
+ event.stopPropagation();
113
+ this.requestClose();
114
+ };
115
+ cancelDialog = (event) => {
116
+ event.preventDefault();
117
+ event.stopPropagation();
118
+ this.requestClose();
119
+ };
120
+ render() {
121
+ if (this.state.dialog.kind === "closed" || typeof document === "undefined") return null;
122
+ return createPortal(/* @__PURE__ */ jsx(Theme, {
123
+ tag: "div",
124
+ theme: this.props.theme,
125
+ tokens: { [this.props.theme]: this.props.tokens },
126
+ children: /* @__PURE__ */ jsx("dialog", {
127
+ ref: this.setDialog,
128
+ "data-seams-root": "",
129
+ "data-presentation": this.props.presentation,
130
+ "data-state": this.state.dialog.kind,
131
+ className: "seams-account-dialog",
132
+ "aria-label": this.props.label,
133
+ onCancel: this.cancelDialog,
134
+ onPointerDown: this.rememberBackdrop,
135
+ onClick: this.closeBackdrop,
136
+ children: this.state.dialog.content
137
+ })
138
+ }), document.body);
139
+ }
140
+ };
141
+ function AccountSettingsDialog(props) {
142
+ const locale = useWalletLocale();
143
+ const { theme, tokens } = useTheme();
144
+ return /* @__PURE__ */ jsx(SettingsDialog, {
145
+ presentation: props.presentation,
146
+ isOpen: props.isOpen,
147
+ onClose: props.onClose,
148
+ theme,
149
+ tokens,
150
+ label: walletText(locale, "Wallet settings"),
151
+ children: props.children
152
+ });
153
+ }
154
+ //#endregion
155
+ export { AccountSettingsDialog };
156
+
157
+ //# sourceMappingURL=AccountSettingsDialog.js.map
@@ -2,6 +2,7 @@ import { walletDisplayText, walletText } from "../../../core/ui/messages.js";
2
2
  import { WalletText, useWalletLocale } from "../../context/WalletLocale.js";
3
3
  import { useSeams } from "../../context/index.js";
4
4
  import { AccountMenuDialogFrame } from "./AccountMenuDialog.js";
5
+ import { ExternalWalletSettingsView } from "./ExternalWalletSettings.js";
5
6
  import { AuthenticationMethodRow } from "./AuthenticationMethodRow.js";
6
7
  import { VoiceIdMethodRow, VoiceIdSetupRow } from "./VoiceIdAvailabilityControl.js";
7
8
  import { AuthenticationMethodsView } from "./AuthenticationMethodsView.js";
@@ -115,7 +116,18 @@ function methodDescription(method) {
115
116
  case "voiceid": return "Voice unlock on this device";
116
117
  }
117
118
  }
118
- const AuthenticationMethodsModal = ({ walletId, isOpen, onClose, presentation }) => {
119
+ function AuthenticationMethodsModal(props) {
120
+ const { loginState } = useSeams();
121
+ if (!props.isOpen) return null;
122
+ if (loginState.isLoggedIn && loginState.access === "external") return /* @__PURE__ */ jsx(ExternalWalletSettingsView, {
123
+ settings: loginState.externalSettings,
124
+ view: "methods",
125
+ presentation: props.presentation,
126
+ onClose: props.onClose
127
+ });
128
+ return /* @__PURE__ */ jsx(OwnerAuthenticationMethodsModal, { ...props });
129
+ }
130
+ const OwnerAuthenticationMethodsModal = ({ walletId, isOpen, onClose, presentation }) => {
119
131
  const locale = useWalletLocale();
120
132
  const { seams, loginState, refreshSession } = useSeams();
121
133
  const [loadState, setLoadState] = React.useState({ kind: "idle" });
@@ -0,0 +1,46 @@
1
+ import { walletText } from "../../../core/ui/messages.js";
2
+ import { WalletText, useWalletLocale } from "../../context/WalletLocale.js";
3
+ import { AccountMenuDialogFrame } from "./AccountMenuDialog.js";
4
+ import { AccountMenuDeviceDetails } from "./AccountMenuDeviceDetails.js";
5
+ import { useRef } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/react/components/AccountMenuButton/ExternalWalletSettings.tsx
8
+ function ExternalWalletSettingsView(props) {
9
+ const locale = useWalletLocale();
10
+ const ref = useRef(null);
11
+ const title = props.view === "methods" ? "Authentication methods" : "Linked devices";
12
+ const details = props.view === "methods" ? props.settings.methods.map(methodDetail.bind(null, locale)) : props.settings.devices.map(deviceDetail.bind(null, locale));
13
+ return /* @__PURE__ */ jsxs(AccountMenuDialogFrame, {
14
+ presentation: props.presentation,
15
+ onClose: props.onClose,
16
+ dialogRef: ref,
17
+ contentClassName: "",
18
+ titleId: `external-wallet-${props.view}`,
19
+ title,
20
+ children: [/* @__PURE__ */ jsx(AccountMenuDeviceDetails, {
21
+ title: "Wallet access",
22
+ description: "Connected to your wallet",
23
+ details
24
+ }), /* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(WalletText, { message: "Confirm with a wallet authentication method to make security changes." }) })]
25
+ });
26
+ }
27
+ function methodDetail(locale, method, index) {
28
+ return {
29
+ label: walletText(locale, "Method {value0}", { value0: index + 1 }),
30
+ value: {
31
+ passkey: "Passkey",
32
+ email_otp: "Email code",
33
+ voiceid: "VoiceID"
34
+ }[method.kind]
35
+ };
36
+ }
37
+ function deviceDetail(locale, _device, index) {
38
+ return {
39
+ label: walletText(locale, "Device {value0}", { value0: index + 1 }),
40
+ value: "Active"
41
+ };
42
+ }
43
+ //#endregion
44
+ export { ExternalWalletSettingsView };
45
+
46
+ //# sourceMappingURL=ExternalWalletSettings.js.map
@@ -1,8 +1,9 @@
1
1
  import { walletDisplayText, walletText } from "../../../core/ui/messages.js";
2
2
  import { WalletText, useWalletLocale } from "../../context/WalletLocale.js";
3
3
  import { useSeams } from "../../context/index.js";
4
- import { AccountMenuDeviceDetails } from "./AccountMenuDeviceDetails.js";
5
4
  import { AccountMenuDialogFrame } from "./AccountMenuDialog.js";
5
+ import { AccountMenuDeviceDetails } from "./AccountMenuDeviceDetails.js";
6
+ import { ExternalWalletSettingsView } from "./ExternalWalletSettings.js";
6
7
  import { MailIcon } from "./icons/MailIcon.js";
7
8
  import { AuthenticationMethodRow } from "./AuthenticationMethodRow.js";
8
9
  import { LaptopIcon } from "./icons/LaptopIcon.js";
@@ -214,7 +215,18 @@ function withLinkedDevicesLoadTimeout(promise) {
214
215
  });
215
216
  });
216
217
  }
217
- const LinkedDevicesModal = ({ walletId, isOpen, onClose, presentation }) => {
218
+ function LinkedDevicesModal(props) {
219
+ const { loginState } = useSeams();
220
+ if (!props.isOpen) return null;
221
+ if (loginState.isLoggedIn && loginState.access === "external") return /* @__PURE__ */ jsx(ExternalWalletSettingsView, {
222
+ settings: loginState.externalSettings,
223
+ view: "devices",
224
+ presentation: props.presentation,
225
+ onClose: props.onClose
226
+ });
227
+ return /* @__PURE__ */ jsx(OwnerLinkedDevicesModal, { ...props });
228
+ }
229
+ const OwnerLinkedDevicesModal = ({ walletId, isOpen, onClose, presentation }) => {
218
230
  const locale = useWalletLocale();
219
231
  const { seams, loginState } = useSeams();
220
232
  const [loadState, setLoadState] = React.useState({ kind: "idle" });
@@ -182,7 +182,7 @@ var WalletSettingsLayout = class extends Component {
182
182
  children: [
183
183
  /* @__PURE__ */ jsxs("div", {
184
184
  className: "seams-settings-identity",
185
- children: [/* @__PURE__ */ jsx(TouchIcon, {}), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("strong", { children: this.props.walletId }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { message: "Unlocked on this device" }) })] })]
185
+ children: [/* @__PURE__ */ jsx(TouchIcon, {}), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("strong", { children: this.props.walletId }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { copy: this.props.access === "external" ? "Connected with Google" : "Unlocked on this device" }) })] })]
186
186
  }),
187
187
  /* @__PURE__ */ jsx("button", {
188
188
  className: "seams-settings-mobile-toggle",
@@ -574,7 +574,7 @@
574
574
  accent-color: var(--seams-colors-textPrimary);
575
575
  }
576
576
 
577
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal {
577
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog {
578
578
  display: none;
579
579
  position: fixed;
580
580
  inset: 0;
@@ -596,16 +596,165 @@
596
596
  color: var(--seams-colors-textPrimary);
597
597
  box-shadow: none;
598
598
  }
599
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal[open] {
599
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog[open] {
600
600
  display: block;
601
601
  }
602
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal::backdrop {
602
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog::backdrop {
603
603
  background: rgb(0 0 0 / 0.26);
604
604
  }
605
- [data-seams-root].seams-theme-provider .seams-account-modal .seams-profile-button-morphable.open {
605
+ [data-seams-root].seams-theme-provider .seams-account-dialog .seams-profile-button-morphable.open {
606
606
  width: 100%;
607
607
  }
608
- html:has(dialog[data-seams-root].seams-account-modal[open]) {
608
+ html:has(dialog[data-seams-root].seams-account-dialog[open]) {
609
609
  overflow: hidden;
610
610
  scrollbar-gutter: stable;
611
611
  }
612
+
613
+ [data-seams-root].seams-theme-provider
614
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer'] {
615
+ --seams-account-drawer-offset: translateX(100%);
616
+ inset-block: 0;
617
+ inset-inline: auto 0;
618
+ margin: 0;
619
+ width: min(440px, 100vw);
620
+ max-width: 100vw;
621
+ height: 100dvh;
622
+ max-height: 100dvh;
623
+ border-radius: 0;
624
+ border-start-start-radius: var(--seams-border-radius-lg);
625
+ border-end-start-radius: var(--seams-border-radius-lg);
626
+ overflow: hidden;
627
+ background: var(--seams-colors-colorBackground);
628
+ box-shadow: var(--seams-shadows-xl);
629
+ }
630
+ @media (min-width: 601px) {
631
+ [data-seams-root].seams-theme-provider
632
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer']:dir(rtl) {
633
+ --seams-account-drawer-offset: translateX(-100%);
634
+ }
635
+ }
636
+ [data-seams-root].seams-theme-provider .seams-account-dialog[data-presentation='drawer']::backdrop {
637
+ background: rgb(13 20 24 / 0.22);
638
+ transition: background-color 240ms ease;
639
+ }
640
+ [data-seams-root].seams-theme-provider
641
+ .seams-account-dialog[data-presentation='drawer'][data-state='closing']::backdrop {
642
+ background: transparent;
643
+ }
644
+ @starting-style {
645
+ [data-seams-root].seams-theme-provider
646
+ .seams-account-dialog[data-presentation='drawer'][open]::backdrop {
647
+ background: transparent;
648
+ }
649
+ }
650
+ [data-seams-root].seams-theme-provider
651
+ .seams-account-dialog[data-presentation='drawer']
652
+ .seams-profile-button-morphable.open {
653
+ height: 100%;
654
+ border: 0;
655
+ border-radius: inherit;
656
+ box-shadow: none;
657
+ animation: none;
658
+ }
659
+ [data-seams-root].seams-theme-provider
660
+ .seams-account-dialog[data-presentation='drawer']
661
+ .seams-account-resize {
662
+ height: 100%;
663
+ }
664
+ [data-seams-root].seams-theme-provider
665
+ .seams-account-dialog[data-presentation='drawer']
666
+ .seams-account-panel-content {
667
+ display: flex;
668
+ flex-direction: column;
669
+ height: 100%;
670
+ }
671
+ [data-seams-root].seams-theme-provider
672
+ .seams-account-dialog[data-presentation='drawer']
673
+ .seams-account-origin {
674
+ display: grid;
675
+ grid-template-columns: 14px 1fr 32px;
676
+ flex: none;
677
+ padding: var(--seams-spacing-lg) var(--seams-spacing-lg) 0;
678
+ }
679
+ [data-seams-root].seams-theme-provider h2.seams-account-drawer-title {
680
+ grid-column: 1 / -1;
681
+ color: var(--seams-colors-textPrimary);
682
+ font: inherit;
683
+ font-size: 25px;
684
+ font-weight: 550;
685
+ letter-spacing: -0.8px;
686
+ line-height: 1.2;
687
+ margin: var(--seams-spacing-md) 0 2px;
688
+ }
689
+ [data-seams-root].seams-theme-provider
690
+ .seams-account-dialog[data-presentation='drawer']
691
+ .seams-account-main {
692
+ flex: 1;
693
+ min-height: 0;
694
+ overflow-y: auto;
695
+ overscroll-behavior: contain;
696
+ padding: calc(var(--seams-spacing-md) + var(--seams-spacing-xs)) var(--seams-spacing-lg)
697
+ var(--seams-spacing-lg);
698
+ }
699
+ [data-seams-root].seams-theme-provider
700
+ .seams-account-dialog[data-presentation='drawer']
701
+ .seams-account-main:has(> .seams-account-identity) {
702
+ display: flex;
703
+ flex-direction: column;
704
+ }
705
+ [data-seams-root].seams-theme-provider
706
+ .seams-account-dialog[data-presentation='drawer']
707
+ .seams-account-identity {
708
+ flex: none;
709
+ }
710
+ [data-seams-root].seams-theme-provider
711
+ .seams-account-dialog[data-presentation='drawer']
712
+ .seams-profile-dropdown-menu {
713
+ display: flex;
714
+ flex-direction: column;
715
+ flex: 1;
716
+ }
717
+ [data-seams-root].seams-theme-provider
718
+ .seams-account-dialog[data-presentation='drawer']
719
+ button.seams-lock-menu-item {
720
+ margin-top: auto;
721
+ flex: none;
722
+ }
723
+ [data-seams-root].seams-theme-provider
724
+ .seams-account-dialog[data-presentation='drawer']
725
+ .seams-account-menu-group:last-of-type {
726
+ margin-bottom: var(--seams-spacing-lg);
727
+ }
728
+ [data-seams-root].seams-theme-provider
729
+ .seams-account-dialog[data-presentation='drawer']
730
+ .seams-account-footer {
731
+ flex: none;
732
+ padding: var(--seams-spacing-md) var(--seams-spacing-lg);
733
+ }
734
+ [data-seams-root].seams-theme-provider
735
+ .seams-account-dialog[data-presentation='drawer']
736
+ button.seams-dropdown-menu-item {
737
+ min-height: 46px;
738
+ }
739
+ @media (max-width: 600px) {
740
+ [data-seams-root].seams-theme-provider
741
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer'] {
742
+ --seams-account-drawer-offset: translateY(100%);
743
+ inset: auto 0 0;
744
+ width: 100%;
745
+ height: min(720px, calc(100dvh - 36px));
746
+ max-height: calc(100dvh - 36px);
747
+ border-radius: var(--seams-border-radius-lg) var(--seams-border-radius-lg) 0 0;
748
+ }
749
+ [data-seams-root].seams-theme-provider
750
+ .seams-account-dialog[data-presentation='drawer']
751
+ .seams-account-footer {
752
+ padding-bottom: max(var(--seams-spacing-md), env(safe-area-inset-bottom));
753
+ }
754
+ }
755
+ @media (prefers-reduced-motion: reduce) {
756
+ [data-seams-root].seams-theme-provider
757
+ .seams-account-dialog[data-presentation='drawer']::backdrop {
758
+ transition: none;
759
+ }
760
+ }
@@ -115,15 +115,17 @@ const AccountMenuButtonInner = (props) => {
115
115
  const accountMenuCapabilities = accountMenuCapabilitiesForLoginState(loginState);
116
116
  const canShowRecoveryCodes = accountMenuCapabilities.kind === "owner" && Boolean(walletId);
117
117
  const canManageLinkedDevices = accountMenuCapabilities.canManageLinkedDevices;
118
+ const canReadSettings = loginState.isLoggedIn && loginState.access === "external";
118
119
  const handleQrCodeScanned = useCallback(() => {
119
120
  setShowQRScanner(false);
120
121
  handleClose();
121
122
  }, [handleClose]);
122
123
  useEffect(() => {
123
124
  const switchedWallet = accountSetupState.kind !== "idle" && walletId !== null && walletId !== accountSetupState.walletId;
124
- if (!canManageLinkedDevices && !accountSetupRunning && accountSetupState.kind !== "added" || switchedWallet) setScreen("overview");
125
+ if (!canManageLinkedDevices && !canReadSettings && !accountSetupRunning && accountSetupState.kind !== "added" || switchedWallet) setScreen("overview");
125
126
  }, [
126
127
  canManageLinkedDevices,
128
+ canReadSettings,
127
129
  accountSetupRunning,
128
130
  accountSetupState,
129
131
  walletId
@@ -330,7 +332,7 @@ const AccountMenuButtonInner = (props) => {
330
332
  icon: /* @__PURE__ */ jsx(TouchIcon, {}),
331
333
  label: "Authentication methods",
332
334
  description: "Add or remove ways to unlock this device",
333
- disabled: !canManageLinkedDevices,
335
+ disabled: !canManageLinkedDevices && !canReadSettings,
334
336
  onClick: setScreen.bind(null, "authentication-methods"),
335
337
  keepOpenOnClick: true
336
338
  }, {
@@ -346,7 +348,7 @@ const AccountMenuButtonInner = (props) => {
346
348
  icon: /* @__PURE__ */ jsx(LinkIcon, {}),
347
349
  label: "Linked devices",
348
350
  description: "See devices using this wallet",
349
- disabled: !canManageLinkedDevices,
351
+ disabled: !canManageLinkedDevices && !canReadSettings,
350
352
  onClick: setScreen.bind(null, "linked-devices"),
351
353
  keepOpenOnClick: true
352
354
  });
@@ -372,6 +374,7 @@ const AccountMenuButtonInner = (props) => {
372
374
  accountsRows.length,
373
375
  layout,
374
376
  accountMenuCapabilities,
377
+ canReadSettings,
375
378
  canShowRecoveryCodes,
376
379
  exportLoadingChain,
377
380
  loginState.isLoggedIn,
@@ -491,6 +494,7 @@ const AccountMenuButtonInner = (props) => {
491
494
  })
492
495
  };
493
496
  if (layout === "page" && loginState.isLoggedIn && walletId) return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(WalletSettingsLayout, {
497
+ access: loginState.access,
494
498
  walletId: toWalletId(walletId),
495
499
  placement: seams.placement,
496
500
  menuItems: MENU_ITEMS,
@@ -3,6 +3,7 @@ import { isWalletSessionReadyForUi } from "./walletSessionReadiness.js";
3
3
  //#region src/react/context/reactLoginStateBuilders.ts
4
4
  function linkedDeviceManagementPermissionForLoginState(state) {
5
5
  if (!state.isLoggedIn) return { kind: "unauthenticated" };
6
+ if (state.access === "external") return { kind: "settings_only" };
6
7
  if (state.currentAuthMethod.kind !== "selected") return { kind: "signing_only" };
7
8
  return { kind: "owner" };
8
9
  }
@@ -24,6 +25,11 @@ function accountMenuCapabilitiesForLoginState(state) {
24
25
  canExportKeys: false,
25
26
  canManageLinkedDevices: false
26
27
  };
28
+ case "settings_only": return {
29
+ kind: "settings_only",
30
+ canExportKeys: false,
31
+ canManageLinkedDevices: false
32
+ };
27
33
  }
28
34
  return assertNeverAccountMenuPermission(management);
29
35
  }
@@ -47,8 +53,21 @@ function buildReactLoggedInLoginStateFromSession(session) {
47
53
  if (session.appIdentity.kind !== "resolved") return null;
48
54
  const appIdentity = session.appIdentity;
49
55
  const authentication = session.authentication;
56
+ if (session.externalSettings) return {
57
+ isLoggedIn: true,
58
+ access: "external",
59
+ externalSettings: session.externalSettings,
60
+ walletId: String(appIdentity.walletId),
61
+ nearAccountId: appIdentity.nearAccountId ? String(appIdentity.nearAccountId) : null,
62
+ nearPublicKey: appIdentity.nearOperationalPublicKey,
63
+ currentAuthMethod: buildNoCurrentWalletAuthMethod(),
64
+ authMethods: [],
65
+ thresholdEcdsaEthereumAddress: appIdentity.thresholdEcdsaEthereumAddress,
66
+ thresholdEcdsaPublicKeyB64u: appIdentity.thresholdEcdsaPublicKeyB64u
67
+ };
50
68
  if (authentication.kind === "authenticated" && session.appIdentity.authMethods.length === 0) return {
51
69
  isLoggedIn: true,
70
+ access: "wallet",
52
71
  walletId: String(appIdentity.walletId),
53
72
  nearAccountId: appIdentity.nearAccountId ? String(appIdentity.nearAccountId) : null,
54
73
  nearPublicKey: appIdentity.nearOperationalPublicKey,
@@ -63,6 +82,7 @@ function buildReactLoggedInLoginStateFromSession(session) {
63
82
  const currentAuthMethod = buildSelectedCurrentWalletAuthMethod({ binding: matchingAuthMethods[0] });
64
83
  return {
65
84
  isLoggedIn: true,
85
+ access: "wallet",
66
86
  walletId: String(appIdentity.walletId),
67
87
  nearAccountId: appIdentity.nearAccountId ? String(appIdentity.nearAccountId) : null,
68
88
  nearPublicKey: appIdentity.nearOperationalPublicKey,
@@ -31,6 +31,7 @@ function useLoginStateRefresher(args) {
31
31
  const state = await seams.getWalletIframeExactSessionState();
32
32
  if (generation !== refreshGeneration.current || selectedWallet !== seams.preferences.getCurrentWalletId()) return;
33
33
  switch (state.kind) {
34
+ case "external_read":
34
35
  case "active_session":
35
36
  case "expired_session":
36
37
  case "wallet_authenticated_identity_unresolvable":