@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.
- package/README.md +29 -4
- package/dist/.build-inputs.sha256 +1 -1
- package/dist/esm/SeamsWeb/publicApi/createPublicApi.js +11 -0
- package/dist/esm/SeamsWeb/publicApi/near.js +3 -0
- package/dist/esm/SeamsWeb/publicApi/ownerNearOperation.js +175 -0
- package/dist/esm/SeamsWeb/walletIframe/client/nearCommands.js +4 -0
- package/dist/esm/SeamsWeb/walletIframe/client/ownerNearOperation.js +67 -0
- package/dist/esm/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +27 -17
- package/dist/esm/SeamsWeb/walletIframe/client/router.js +63 -2
- package/dist/esm/SeamsWeb/walletIframe/client/sessionCommands.js +20 -0
- package/dist/esm/SeamsWeb/walletIframe/host/walletMutationGuard.js +6 -0
- package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +42 -5
- package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +1 -1
- package/dist/esm/SeamsWeb/walletIframe/shared/ownerNearOperation.js +152 -0
- package/dist/esm/core/accountData/near/accountProjection.js +1 -1
- package/dist/esm/core/authMethods/plugins.js +8 -2
- package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +4 -3
- package/dist/esm/core/rpcClients/relayer/walletRegistration.js +1 -1
- package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +1 -1
- package/dist/esm/core/signingEngine/flows/shared/signingConfirmation.js +1 -1
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +1 -1
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +1 -1
- package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +2 -2
- package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +2 -2
- package/dist/esm/core/signingEngine/flows/signNear/signNear.js +3 -8
- package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +1 -1
- package/dist/esm/core/signingEngine/flows/signNear/signTransactions.js +3 -4
- package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +1 -1
- package/dist/esm/core/ui/messages.js +5 -0
- package/dist/esm/index.js +3 -2
- package/dist/esm/react/boundWallet.js +24 -0
- package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +35 -22
- package/dist/esm/react/components/AccountMenuButton/AccountSettingsDialog.js +157 -0
- package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +13 -1
- package/dist/esm/react/components/AccountMenuButton/ExternalWalletSettings.js +46 -0
- package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +14 -2
- package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +154 -5
- package/dist/esm/react/components/AccountMenuButton/index.js +7 -3
- package/dist/esm/react/context/reactLoginStateBuilders.js +20 -0
- package/dist/esm/react/context/useLoginStateRefresher.js +1 -0
- package/dist/esm/react/hooks/useAccountInput.js +1 -1
- package/dist/esm/react/hooks/useOwnerNearOperation.js +10 -0
- package/dist/esm/react/index.js +3 -2
- package/dist/esm/react/styles/styles.css +154 -5
- package/dist/esm/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-BRnd5SEf.js} +1 -1
- package/dist/esm/sdk/NonceCoordinator-CNXYrOoy.js +1 -0
- package/dist/{public/sdk/SeamsWordmark-DwvPx2UA.js → esm/sdk/SeamsWordmark-CeEi2RlU.js} +1 -1
- package/dist/esm/sdk/accountLifecycle-B5a9SCM7.js +1 -0
- package/dist/esm/sdk/{adapters-d9yh1bdC.js → adapters-B2k8y0MB.js} +1 -1
- package/dist/esm/sdk/appearance-token-vars-DkF3EBbF.js +1 -0
- package/dist/esm/sdk/authorization-gVWwKwav.js +1 -0
- package/dist/esm/sdk/clientSessionPersistenceState-BxpITYM_.js +1 -0
- package/dist/esm/sdk/{collectAuthenticationCredentialForChallengeB64u-I4wq8OGq.js → collectAuthenticationCredentialForChallengeB64u-BoFVpdRS.js} +1 -1
- package/dist/esm/sdk/{commitQueue-CYruPlkm.js → commitQueue-C1wkey4q.js} +1 -1
- package/dist/esm/sdk/configBuilder-DpChXfDO.js +1 -0
- package/dist/esm/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
- package/dist/esm/sdk/confirm-ui-Dx6c4-Rk.js +2 -0
- package/dist/esm/sdk/{device-linking-DiCNt3iA.js → device-linking-_o3_fgiG.js} +1 -1
- package/dist/esm/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-CObsEWBa.js} +1 -1
- package/dist/esm/sdk/{display-D0EPmU4w.js → display-CUWg48tD.js} +1 -1
- package/dist/{public/sdk/ecdsaCapabilityManifest-DAJEVjlP.js → esm/sdk/ecdsaCapabilityManifest--1Ztngfx.js} +1 -1
- package/dist/{public/sdk/ecdsaDerivationClientWasm-AYOJgTJm.js → esm/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js} +1 -1
- package/dist/esm/sdk/ecdsaDerivationExport-BUUUGc6o.js +1 -0
- package/dist/esm/sdk/{ecdsaWalletRecords-WLyq414E.js → ecdsaWalletRecords-CKaXfsVu.js} +1 -1
- package/dist/esm/sdk/ed25519OperationFingerprint-Dev4P6Og.js +1 -0
- package/dist/{public/sdk/emailOtpEcdsaDerivationIdentity-HFQXc1Yw.js → esm/sdk/emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js} +1 -1
- package/dist/esm/sdk/{enrichDisplayModelWithAbi-O6Mw4i2E.js → enrichDisplayModelWithAbi-JeAcpa7r.js} +1 -1
- package/dist/esm/sdk/{evmCryptoWasm-BUPb4hBH.js → evmCryptoWasm-CeH6Qeaa.js} +1 -1
- package/dist/esm/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-O0OV1Oou.js} +1 -1
- package/dist/esm/sdk/exportKeypairOperation-DkqY9Bpf.js +1 -0
- package/dist/esm/sdk/host-BeE2dIU4.js +1 -0
- package/dist/{public/sdk/icons-BlMXolHv.js → esm/sdk/icons-pSZJ5Xrm.js} +1 -1
- package/dist/esm/sdk/indexedDB-CA4tGqkr.js +1 -0
- package/dist/esm/sdk/{intentDigest-HvRsBQ1z.js → intentDigest-gM3r4SVX.js} +1 -1
- package/dist/esm/sdk/{lanes-BU-fGqY4.js → lanes-vBKm6yBJ.js} +1 -1
- package/dist/esm/sdk/{localOnly-BATWJj78.js → localOnly-U_MucUAe.js} +1 -1
- package/dist/{public/sdk/mountExportPrivateKeySurface-CyHU8bVc.js → esm/sdk/mountExportPrivateKeySurface-C2-fnvP6.js} +1 -1
- package/dist/{public/sdk/mountRecoveryCodeBackupSurface-C7aglQxf.js → esm/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js} +1 -1
- package/dist/esm/sdk/nearEd25519YaoSigningPreparation-CnbgQfZc.js +1 -0
- package/dist/esm/sdk/{nonceLaneKeys-BF_UpvIy.js → nonceLaneKeys-DtBpxubF.js} +1 -1
- package/dist/esm/sdk/{normalization-Df9fZWJC.js → normalization-DmfGvZ_3.js} +1 -1
- package/dist/esm/sdk/ownerNearOperation-DjNDxW3_.js +1 -0
- package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → esm/sdk/pendingWalletRecoveryCodeBackup-DXFrQmO5.js} +1 -1
- package/dist/esm/sdk/{presignaturePool-BbvqRWYw.js → presignaturePool-Dq4RhzXn.js} +1 -1
- package/dist/{public/sdk/recovery-entrypoint-DJbMDC_m.js → esm/sdk/recovery-entrypoint-s9OoKBcl.js} +1 -1
- package/dist/esm/sdk/registration-CTtTocyo.js +1 -0
- package/dist/esm/sdk/{registration-HSwOHZOo.js → registration-D3p7muCc.js} +1 -1
- package/dist/esm/sdk/{registrationAccounts-4r74gX1l.js → registrationAccounts-Bso0ntMs.js} +1 -1
- package/dist/{public/sdk/registrationIntent-Do1tD1V7.js → esm/sdk/registrationIntent-C1-Kyx_-.js} +1 -1
- package/dist/esm/sdk/{registrationSignerPlan-DK2b3N_p.js → registrationSignerPlan-CeMidFme.js} +1 -1
- package/dist/{public/sdk/requireStepUpAuth-COqCGb1i.js → esm/sdk/requireStepUpAuth-iVo6h_U-.js} +1 -1
- package/dist/esm/sdk/resealedEnvelopeResult-DXDo-72P.js +1 -0
- package/dist/esm/sdk/{routerAbNormalSigning-D-UZmCBS.js → routerAbNormalSigning-DVFFkNhJ.js} +1 -1
- package/dist/esm/sdk/runtime-auth-Dsmw_dUA.js +1 -0
- package/dist/esm/sdk/runtime-device-link-qmYvGep9.js +1 -0
- package/dist/esm/sdk/runtime-ecdsa-tempo-Zh95TuLV.js +1 -0
- package/dist/esm/sdk/runtime-email-otp-CnLuW4H1.js +1 -0
- package/dist/esm/sdk/runtime-export-m8lvrXtw.js +1 -0
- package/dist/esm/sdk/runtime-near-BiXzXXhH.js +1 -0
- package/dist/esm/sdk/runtime-preferences-DlKHDIjb.js +1 -0
- package/dist/esm/sdk/runtime-recovery-C6lS71Jp.js +1 -0
- package/dist/esm/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-B033ake_.js} +1 -1
- package/dist/esm/sdk/runtimeContext-RNS2E5wy.js +7 -0
- package/dist/{public/sdk/secp256k1-CE7-q9Sn.js → esm/sdk/secp256k1-DPeaOjM0.js} +1 -1
- package/dist/esm/sdk/signEvmFamily-Cksw3RpU.js +1 -0
- package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-CrMIAXUe.js → signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js} +1 -1
- package/dist/esm/sdk/{signEvmWithUiConfirm-CGrLtMV6.js → signEvmWithUiConfirm-B14zYdwE.js} +1 -1
- package/dist/esm/sdk/signNear-D0rFEYP1.js +1 -0
- package/dist/esm/sdk/{signatureUses-kSrUHSSH.js → signatureUses-BLOoPRsb.js} +1 -1
- package/dist/{public/sdk/signingFlow-BcetvUeS.js → esm/sdk/signingFlow-Bd1X0e-1.js} +2 -2
- package/dist/{public/sdk/signingQueue-dMFOFOP5.js → esm/sdk/signingQueue-DoUBeaCv.js} +1 -1
- package/dist/esm/sdk/{thresholdEcdsa-CqR1fFA-.js → thresholdEcdsa-BxfOZmiR.js} +1 -1
- package/dist/esm/sdk/{trace--mRP2OQc.js → trace-BnhLKxcu.js} +1 -1
- package/dist/esm/sdk/{transaction-activity-DCzHGg3b.js → transaction-activity-BXSxMp1E.js} +1 -1
- package/dist/{public/sdk/transactionState-29T9xfvL.js → esm/sdk/transactionState-G_FPe-U8.js} +1 -1
- package/dist/esm/sdk/tx-confirm-ui.js +8 -0
- package/dist/esm/sdk/{types-f7dyj5N6.js → types-A-w1cYlJ.js} +1 -1
- package/dist/esm/sdk/{unlockedEd25519ExportRootCapability-yzxQjIFd.js → unlockedEd25519ExportRootCapability-5F1egCSv.js} +1 -1
- package/dist/esm/sdk/voiceid-host.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/esm/sdk/{wallet-recovery-BZB2Vu3X.js → wallet-recovery-DXdm68_Q.js} +1 -1
- package/dist/{public/sdk/walletAuthMethodRecord-DLBB5fez.js → esm/sdk/walletAuthMethodRecord-BW-XV4fv.js} +1 -1
- package/dist/esm/sdk/{walletAuthority-BTGAuOi8.js → walletAuthority-DbGaSw7D.js} +1 -1
- package/dist/esm/sdk/{walletCapabilityBindings-D5YYB7nN.js → walletCapabilityBindings-mPx-6_r-.js} +1 -1
- package/dist/{public/sdk/walletCustodyEcdsaContinuity-C31YQ9av.js → esm/sdk/walletCustodyEcdsaContinuity-BnyL1Ryu.js} +1 -1
- package/dist/esm/sdk/{walletOwnershipGeneration-CgjCtPrV.js → walletOwnershipGeneration-BZc6UKqX.js} +1 -1
- package/dist/esm/sdk/walletRecoveryAdminProof-DdwikrW3.js +1 -0
- package/dist/esm/sdk/walletRecoveryCommit-DbAoiJp5.js +1 -0
- package/dist/{public/sdk/walletSessionAuthorizationStore-B9Vwkshr.js → esm/sdk/walletSessionAuthorizationStore-BivTUoKY.js} +1 -1
- package/dist/esm/sdk/{webauthnP256-BsQQPurm.js → webauthnP256-BGHikiNl.js} +1 -1
- package/dist/esm/shared-ts/src/auth/externalAuth.js +53 -0
- package/dist/esm/shared-ts/src/utils/index.js +2 -2
- package/dist/esm/voiceid-host.js +2 -2
- package/dist/public/headers.manifest.json +1 -1
- package/dist/public/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-BRnd5SEf.js} +1 -1
- package/dist/public/sdk/NonceCoordinator-CNXYrOoy.js +1 -0
- package/dist/{esm/sdk/SeamsWordmark-DwvPx2UA.js → public/sdk/SeamsWordmark-CeEi2RlU.js} +1 -1
- package/dist/public/sdk/accountLifecycle-B5a9SCM7.js +1 -0
- package/dist/public/sdk/{adapters-d9yh1bdC.js → adapters-B2k8y0MB.js} +1 -1
- package/dist/public/sdk/appearance-token-vars-DkF3EBbF.js +1 -0
- package/dist/public/sdk/authorization-gVWwKwav.js +1 -0
- package/dist/public/sdk/clientSessionPersistenceState-BxpITYM_.js +1 -0
- package/dist/public/sdk/{collectAuthenticationCredentialForChallengeB64u-I4wq8OGq.js → collectAuthenticationCredentialForChallengeB64u-BoFVpdRS.js} +1 -1
- package/dist/public/sdk/{commitQueue-CYruPlkm.js → commitQueue-C1wkey4q.js} +1 -1
- package/dist/public/sdk/configBuilder-DpChXfDO.js +1 -0
- package/dist/public/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
- package/dist/public/sdk/confirm-ui-Dx6c4-Rk.js +2 -0
- package/dist/public/sdk/{device-linking-DiCNt3iA.js → device-linking-_o3_fgiG.js} +1 -1
- package/dist/public/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-CObsEWBa.js} +1 -1
- package/dist/public/sdk/{display-D0EPmU4w.js → display-CUWg48tD.js} +1 -1
- package/dist/{esm/sdk/ecdsaCapabilityManifest-DAJEVjlP.js → public/sdk/ecdsaCapabilityManifest--1Ztngfx.js} +1 -1
- package/dist/{esm/sdk/ecdsaDerivationClientWasm-AYOJgTJm.js → public/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js} +1 -1
- package/dist/public/sdk/ecdsaDerivationExport-BUUUGc6o.js +1 -0
- package/dist/public/sdk/{ecdsaWalletRecords-WLyq414E.js → ecdsaWalletRecords-CKaXfsVu.js} +1 -1
- package/dist/public/sdk/ed25519OperationFingerprint-Dev4P6Og.js +1 -0
- package/dist/{esm/sdk/emailOtpEcdsaDerivationIdentity-HFQXc1Yw.js → public/sdk/emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js} +1 -1
- package/dist/public/sdk/{enrichDisplayModelWithAbi-O6Mw4i2E.js → enrichDisplayModelWithAbi-JeAcpa7r.js} +1 -1
- package/dist/public/sdk/{evmCryptoWasm-BUPb4hBH.js → evmCryptoWasm-CeH6Qeaa.js} +1 -1
- package/dist/public/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-O0OV1Oou.js} +1 -1
- package/dist/public/sdk/exportKeypairOperation-DkqY9Bpf.js +1 -0
- package/dist/public/sdk/host-BeE2dIU4.js +1 -0
- package/dist/{esm/sdk/icons-BlMXolHv.js → public/sdk/icons-pSZJ5Xrm.js} +1 -1
- package/dist/public/sdk/indexedDB-CA4tGqkr.js +1 -0
- package/dist/public/sdk/{intentDigest-HvRsBQ1z.js → intentDigest-gM3r4SVX.js} +1 -1
- package/dist/public/sdk/{lanes-BU-fGqY4.js → lanes-vBKm6yBJ.js} +1 -1
- package/dist/public/sdk/{localOnly-BATWJj78.js → localOnly-U_MucUAe.js} +1 -1
- package/dist/{esm/sdk/mountExportPrivateKeySurface-CyHU8bVc.js → public/sdk/mountExportPrivateKeySurface-C2-fnvP6.js} +1 -1
- package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-C7aglQxf.js → public/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js} +1 -1
- package/dist/public/sdk/nearEd25519YaoSigningPreparation-CnbgQfZc.js +1 -0
- package/dist/public/sdk/{nonceLaneKeys-BF_UpvIy.js → nonceLaneKeys-DtBpxubF.js} +1 -1
- package/dist/public/sdk/{normalization-Df9fZWJC.js → normalization-DmfGvZ_3.js} +1 -1
- package/dist/public/sdk/ownerNearOperation-DjNDxW3_.js +1 -0
- package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → public/sdk/pendingWalletRecoveryCodeBackup-DXFrQmO5.js} +1 -1
- package/dist/public/sdk/{presignaturePool-BbvqRWYw.js → presignaturePool-Dq4RhzXn.js} +1 -1
- package/dist/{esm/sdk/recovery-entrypoint-DJbMDC_m.js → public/sdk/recovery-entrypoint-s9OoKBcl.js} +1 -1
- package/dist/public/sdk/registration-CTtTocyo.js +1 -0
- package/dist/public/sdk/{registration-HSwOHZOo.js → registration-D3p7muCc.js} +1 -1
- package/dist/public/sdk/{registrationAccounts-4r74gX1l.js → registrationAccounts-Bso0ntMs.js} +1 -1
- package/dist/{esm/sdk/registrationIntent-Do1tD1V7.js → public/sdk/registrationIntent-C1-Kyx_-.js} +1 -1
- package/dist/public/sdk/{registrationSignerPlan-DK2b3N_p.js → registrationSignerPlan-CeMidFme.js} +1 -1
- package/dist/{esm/sdk/requireStepUpAuth-COqCGb1i.js → public/sdk/requireStepUpAuth-iVo6h_U-.js} +1 -1
- package/dist/public/sdk/resealedEnvelopeResult-DXDo-72P.js +1 -0
- package/dist/public/sdk/{routerAbNormalSigning-D-UZmCBS.js → routerAbNormalSigning-DVFFkNhJ.js} +1 -1
- package/dist/public/sdk/runtime-auth-Dsmw_dUA.js +1 -0
- package/dist/public/sdk/runtime-device-link-qmYvGep9.js +1 -0
- package/dist/public/sdk/runtime-ecdsa-tempo-Zh95TuLV.js +1 -0
- package/dist/public/sdk/runtime-email-otp-CnLuW4H1.js +1 -0
- package/dist/public/sdk/runtime-export-m8lvrXtw.js +1 -0
- package/dist/public/sdk/runtime-near-BiXzXXhH.js +1 -0
- package/dist/public/sdk/runtime-preferences-DlKHDIjb.js +1 -0
- package/dist/public/sdk/runtime-recovery-C6lS71Jp.js +1 -0
- package/dist/public/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-B033ake_.js} +1 -1
- package/dist/public/sdk/runtimeContext-RNS2E5wy.js +7 -0
- package/dist/{esm/sdk/secp256k1-CE7-q9Sn.js → public/sdk/secp256k1-DPeaOjM0.js} +1 -1
- package/dist/public/sdk/signEvmFamily-Cksw3RpU.js +1 -0
- package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-CrMIAXUe.js → signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js} +1 -1
- package/dist/public/sdk/{signEvmWithUiConfirm-CGrLtMV6.js → signEvmWithUiConfirm-B14zYdwE.js} +1 -1
- package/dist/public/sdk/signNear-D0rFEYP1.js +1 -0
- package/dist/public/sdk/{signatureUses-kSrUHSSH.js → signatureUses-BLOoPRsb.js} +1 -1
- package/dist/{esm/sdk/signingFlow-BcetvUeS.js → public/sdk/signingFlow-Bd1X0e-1.js} +2 -2
- package/dist/{esm/sdk/signingQueue-dMFOFOP5.js → public/sdk/signingQueue-DoUBeaCv.js} +1 -1
- package/dist/public/sdk/{thresholdEcdsa-CqR1fFA-.js → thresholdEcdsa-BxfOZmiR.js} +1 -1
- package/dist/public/sdk/{trace--mRP2OQc.js → trace-BnhLKxcu.js} +1 -1
- package/dist/public/sdk/{transaction-activity-DCzHGg3b.js → transaction-activity-BXSxMp1E.js} +1 -1
- package/dist/{esm/sdk/transactionState-29T9xfvL.js → public/sdk/transactionState-G_FPe-U8.js} +1 -1
- package/dist/public/sdk/tx-confirm-ui.js +8 -0
- package/dist/public/sdk/{types-f7dyj5N6.js → types-A-w1cYlJ.js} +1 -1
- package/dist/public/sdk/{unlockedEd25519ExportRootCapability-yzxQjIFd.js → unlockedEd25519ExportRootCapability-5F1egCSv.js} +1 -1
- package/dist/public/sdk/voiceid-host.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/public/sdk/{wallet-recovery-BZB2Vu3X.js → wallet-recovery-DXdm68_Q.js} +1 -1
- package/dist/{esm/sdk/walletAuthMethodRecord-DLBB5fez.js → public/sdk/walletAuthMethodRecord-BW-XV4fv.js} +1 -1
- package/dist/public/sdk/{walletAuthority-BTGAuOi8.js → walletAuthority-DbGaSw7D.js} +1 -1
- package/dist/public/sdk/{walletCapabilityBindings-D5YYB7nN.js → walletCapabilityBindings-mPx-6_r-.js} +1 -1
- package/dist/{esm/sdk/walletCustodyEcdsaContinuity-C31YQ9av.js → public/sdk/walletCustodyEcdsaContinuity-BnyL1Ryu.js} +1 -1
- package/dist/public/sdk/{walletOwnershipGeneration-CgjCtPrV.js → walletOwnershipGeneration-BZc6UKqX.js} +1 -1
- package/dist/public/sdk/walletRecoveryAdminProof-DdwikrW3.js +1 -0
- package/dist/public/sdk/walletRecoveryCommit-DbAoiJp5.js +1 -0
- package/dist/{esm/sdk/walletSessionAuthorizationStore-B9Vwkshr.js → public/sdk/walletSessionAuthorizationStore-BivTUoKY.js} +1 -1
- package/dist/public/sdk/{webauthnP256-BsQQPurm.js → webauthnP256-BGHikiNl.js} +1 -1
- package/dist/public/wallet-assets.manifest.json +262 -262
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/shared-ts/src/auth/externalAuth.d.ts +127 -0
- package/dist/types/shared-ts/src/authorization/index.d.ts +1 -1
- package/dist/types/shared-ts/src/authorization/walletOwnerOperation.d.ts +10 -0
- package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +4 -0
- package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostOwnerAuthority.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +1 -0
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +1 -0
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationPasskeyMaterial.d.ts +24 -0
- package/dist/types/wallet/src/SeamsWeb/publicApi/auth.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/createPublicApi.d.ts +1 -0
- package/dist/types/wallet/src/SeamsWeb/publicApi/nearCommands.d.ts +2 -0
- package/dist/types/wallet/src/SeamsWeb/publicApi/ownerNearOperation.d.ts +58 -0
- package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +21 -2
- package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +57 -56
- package/dist/types/wallet/src/SeamsWeb/signingSurface/nearOwnerOperation.d.ts +16 -0
- package/dist/types/wallet/src/SeamsWeb/signingSurface/nearPasskeyOperationMaterial.d.ts +72 -0
- package/dist/types/wallet/src/SeamsWeb/signingSurface/types.d.ts +3 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/ownerNearOperation.d.ts +25 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +8 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/WalletHostRuntime.d.ts +8 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createNearCommands.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createSessionCommands.d.ts +9 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/externalAuth.d.ts +31 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/externalOwnerApproval.d.ts +24 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ownerNearOperation.d.ts +12 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/sessionObserver.d.ts +1 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionState.d.ts +8 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +17 -7
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/ownerNearOperation.d.ts +51 -0
- package/dist/types/wallet/src/core/authMethods/plugins.d.ts +2 -0
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/registrationSetup.d.ts +1 -0
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/repositories.d.ts +4 -0
- package/dist/types/wallet/src/core/rpcClients/near/NearClient.d.ts +4 -0
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryRotate.d.ts +2 -2
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +1 -0
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +21 -0
- package/dist/types/wallet/src/core/types/seams.d.ts +21 -6
- package/dist/types/wallet/src/core/ui/messages.d.ts +1 -1
- package/dist/types/wallet/src/index.d.ts +3 -0
- package/dist/types/wallet/src/react/boundWallet.d.ts +21 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonView.d.ts +2 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountSettingsDialog.d.ts +10 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -2
- package/dist/types/wallet/src/react/components/AccountMenuButton/ExternalWalletSettings.d.ts +10 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -2
- package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +1 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/hooks/useProfileState.d.ts +2 -2
- package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +4 -3
- package/dist/types/wallet/src/react/context/reactLoginStateBuilders.d.ts +1 -1
- package/dist/types/wallet/src/react/hooks/useOwnerNearOperation.d.ts +4 -0
- package/dist/types/wallet/src/react/index.d.ts +3 -0
- package/dist/types/wallet/src/react/types.d.ts +13 -3
- package/dist/types/wallet/src/voiceid-host.d.ts +2 -2
- package/package.json +1 -1
- package/dist/esm/react/components/AccountMenuButton/AccountMenuModal.js +0 -66
- package/dist/esm/sdk/NonceCoordinator-3YhmDTS5.js +0 -1
- package/dist/esm/sdk/accountLifecycle-6DHYWf0v.js +0 -1
- package/dist/esm/sdk/appearance-token-vars-BJydfWT_.js +0 -1
- package/dist/esm/sdk/clientSessionPersistenceState-BCkJAYSz.js +0 -1
- package/dist/esm/sdk/configBuilder-CSwJrmcR.js +0 -1
- package/dist/esm/sdk/confirm-ui-nU6ymgiv.js +0 -2
- package/dist/esm/sdk/ecdsaDerivationExport-DJKOzDbS.js +0 -1
- package/dist/esm/sdk/exportKeypairOperation-CGE9ZU1m.js +0 -1
- package/dist/esm/sdk/host-DayrOrgm.js +0 -1
- package/dist/esm/sdk/indexedDB-C4SDsyOG.js +0 -1
- package/dist/esm/sdk/nearEd25519YaoMaterialActivation-BfXmy3Jr.js +0 -1
- package/dist/esm/sdk/nearEd25519YaoSigningPreparation-DHNk0F8e.js +0 -1
- package/dist/esm/sdk/registration-CNLUYN-p.js +0 -1
- package/dist/esm/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
- package/dist/esm/sdk/runtime-auth-BCoj7_-G.js +0 -1
- package/dist/esm/sdk/runtime-device-link-DAsq5tGT.js +0 -1
- package/dist/esm/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js +0 -1
- package/dist/esm/sdk/runtime-email-otp-BxSKK9AG.js +0 -1
- package/dist/esm/sdk/runtime-export-BWnQXMzT.js +0 -1
- package/dist/esm/sdk/runtime-near-CuzPZrDS.js +0 -1
- package/dist/esm/sdk/runtime-preferences-B-nDWlm3.js +0 -1
- package/dist/esm/sdk/runtime-recovery-DpOdEJ8N.js +0 -1
- package/dist/esm/sdk/runtimeContext-5JcewRo3.js +0 -6
- package/dist/esm/sdk/sessionObservationRevision-JOvVF4Hf.js +0 -1
- package/dist/esm/sdk/signEvmFamily-BY5jlZEG.js +0 -1
- package/dist/esm/sdk/signNear-DMpJFkwF.js +0 -1
- package/dist/esm/sdk/signer-worker-BNodGJKY.js +0 -1
- package/dist/esm/sdk/walletRecoveryAdminProof-CvSYbyg5.js +0 -1
- package/dist/esm/sdk/walletRecoveryCommit-Cc2LAkCS.js +0 -1
- package/dist/public/sdk/NonceCoordinator-3YhmDTS5.js +0 -1
- package/dist/public/sdk/accountLifecycle-6DHYWf0v.js +0 -1
- package/dist/public/sdk/appearance-token-vars-BJydfWT_.js +0 -1
- package/dist/public/sdk/clientSessionPersistenceState-BCkJAYSz.js +0 -1
- package/dist/public/sdk/configBuilder-CSwJrmcR.js +0 -1
- package/dist/public/sdk/confirm-ui-nU6ymgiv.js +0 -2
- package/dist/public/sdk/ecdsaDerivationExport-DJKOzDbS.js +0 -1
- package/dist/public/sdk/exportKeypairOperation-CGE9ZU1m.js +0 -1
- package/dist/public/sdk/host-DayrOrgm.js +0 -1
- package/dist/public/sdk/indexedDB-C4SDsyOG.js +0 -1
- package/dist/public/sdk/nearEd25519YaoMaterialActivation-BfXmy3Jr.js +0 -1
- package/dist/public/sdk/nearEd25519YaoSigningPreparation-DHNk0F8e.js +0 -1
- package/dist/public/sdk/registration-CNLUYN-p.js +0 -1
- package/dist/public/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
- package/dist/public/sdk/runtime-auth-BCoj7_-G.js +0 -1
- package/dist/public/sdk/runtime-device-link-DAsq5tGT.js +0 -1
- package/dist/public/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js +0 -1
- package/dist/public/sdk/runtime-email-otp-BxSKK9AG.js +0 -1
- package/dist/public/sdk/runtime-export-BWnQXMzT.js +0 -1
- package/dist/public/sdk/runtime-near-CuzPZrDS.js +0 -1
- package/dist/public/sdk/runtime-preferences-B-nDWlm3.js +0 -1
- package/dist/public/sdk/runtime-recovery-DpOdEJ8N.js +0 -1
- package/dist/public/sdk/runtimeContext-5JcewRo3.js +0 -6
- package/dist/public/sdk/sessionObservationRevision-JOvVF4Hf.js +0 -1
- package/dist/public/sdk/signEvmFamily-BY5jlZEG.js +0 -1
- package/dist/public/sdk/signNear-DMpJFkwF.js +0 -1
- package/dist/public/sdk/signer-worker-BNodGJKY.js +0 -1
- package/dist/public/sdk/walletRecoveryAdminProof-CvSYbyg5.js +0 -1
- package/dist/public/sdk/walletRecoveryCommit-Cc2LAkCS.js +0 -1
- package/dist/types/shared-ts/src/authorization/walletCustodyOperation.d.ts +0 -10
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuModal.d.ts +0 -9
- /package/dist/esm/sdk/{accountIds-CW2BP-d9.js → accountIds-DGWFzEnw.js} +0 -0
- /package/dist/esm/sdk/{actions-DrtSTGus.js → actions-7SvZZut1.js} +0 -0
- /package/dist/esm/sdk/{authenticatorOptions-WCDKYRux.js → authenticatorOptions-B4q62CLs.js} +0 -0
- /package/dist/esm/sdk/{confirmTypes-BvVtQs-M.js → confirmTypes-DmEPoxys.js} +0 -0
- /package/dist/esm/sdk/{csp-stylesheet-DUSqfXvZ.js → csp-stylesheet-5LU6VGKK.js} +0 -0
- /package/dist/esm/sdk/{digestEncoding-CqNXPZY9.js → digestEncoding-34kXJoJr.js} +0 -0
- /package/dist/esm/sdk/{ecdsaChainTarget-Bm5X4k-V.js → ecdsaChainTarget-BoRVQtjQ.js} +0 -0
- /package/dist/esm/sdk/{executeWorkerOperation-C9FOCCR7.js → executeWorkerOperation-CAYSt0NA.js} +0 -0
- /package/dist/esm/sdk/{helpers-Dubwo5uK.js → helpers-B7c1zc7h.js} +0 -0
- /package/dist/esm/sdk/{jsonRpc-BVDv1wfm.js → jsonRpc-DGzeiNSa.js} +0 -0
- /package/dist/esm/sdk/{keccak-mS0Mejjx.js → keccak-DGHI1G6t.js} +0 -0
- /package/dist/esm/sdk/{keyMaterialEnvelope-Dm2ZEilb.js → keyMaterialEnvelope-Czkks9Ki.js} +0 -0
- /package/dist/esm/sdk/{presignatures-BCeq56DG.js → presignatures-CkhuZ0YQ.js} +0 -0
- /package/dist/esm/sdk/{profileAccountProjection-C5sNt-s2.js → profileAccountProjection-dvLchPBo.js} +0 -0
- /package/dist/esm/sdk/{registrationAuthMethodInput-BR1WVbK3.js → registrationAuthMethodInput-C4o7yFBJ.js} +0 -0
- /package/dist/esm/sdk/{sdkSentEvents-DjOlKtdW.js → sdkSentEvents-BFwv3mBw.js} +0 -0
- /package/dist/esm/sdk/{signerDomain-BAsLT3XN.js → signerDomain-D-EUTlLK.js} +0 -0
- /package/dist/esm/sdk/{signerSlot-D2RZnb27.js → signerSlot-BlijMq8C.js} +0 -0
- /package/dist/esm/sdk/{surface-measurement-reporter-DXsvq401.js → surface-measurement-reporter-DJ_dQhBV.js} +0 -0
- /package/dist/esm/sdk/{walletCustodyOperation-DimzAbCB.js → walletOwnerOperation-CScYv2K6.js} +0 -0
- /package/dist/esm/sdk/{walletSessionAuthorizationStatus-DG7DPcgR.js → walletSessionAuthorizationStatus-GhcGvDCX.js} +0 -0
- /package/dist/public/sdk/{accountIds-CW2BP-d9.js → accountIds-DGWFzEnw.js} +0 -0
- /package/dist/public/sdk/{actions-DrtSTGus.js → actions-7SvZZut1.js} +0 -0
- /package/dist/public/sdk/{authenticatorOptions-WCDKYRux.js → authenticatorOptions-B4q62CLs.js} +0 -0
- /package/dist/public/sdk/{confirmTypes-BvVtQs-M.js → confirmTypes-DmEPoxys.js} +0 -0
- /package/dist/public/sdk/{csp-stylesheet-DUSqfXvZ.js → csp-stylesheet-5LU6VGKK.js} +0 -0
- /package/dist/public/sdk/{digestEncoding-CqNXPZY9.js → digestEncoding-34kXJoJr.js} +0 -0
- /package/dist/public/sdk/{ecdsaChainTarget-Bm5X4k-V.js → ecdsaChainTarget-BoRVQtjQ.js} +0 -0
- /package/dist/public/sdk/{executeWorkerOperation-C9FOCCR7.js → executeWorkerOperation-CAYSt0NA.js} +0 -0
- /package/dist/public/sdk/{helpers-Dubwo5uK.js → helpers-B7c1zc7h.js} +0 -0
- /package/dist/public/sdk/{jsonRpc-BVDv1wfm.js → jsonRpc-DGzeiNSa.js} +0 -0
- /package/dist/public/sdk/{keccak-mS0Mejjx.js → keccak-DGHI1G6t.js} +0 -0
- /package/dist/public/sdk/{keyMaterialEnvelope-Dm2ZEilb.js → keyMaterialEnvelope-Czkks9Ki.js} +0 -0
- /package/dist/public/sdk/{presignatures-BCeq56DG.js → presignatures-CkhuZ0YQ.js} +0 -0
- /package/dist/public/sdk/{profileAccountProjection-C5sNt-s2.js → profileAccountProjection-dvLchPBo.js} +0 -0
- /package/dist/public/sdk/{registrationAuthMethodInput-BR1WVbK3.js → registrationAuthMethodInput-C4o7yFBJ.js} +0 -0
- /package/dist/public/sdk/{sdkSentEvents-DjOlKtdW.js → sdkSentEvents-BFwv3mBw.js} +0 -0
- /package/dist/public/sdk/{signerDomain-BAsLT3XN.js → signerDomain-D-EUTlLK.js} +0 -0
- /package/dist/public/sdk/{signerSlot-D2RZnb27.js → signerSlot-BlijMq8C.js} +0 -0
- /package/dist/public/sdk/{surface-measurement-reporter-DXsvq401.js → surface-measurement-reporter-DJ_dQhBV.js} +0 -0
- /package/dist/public/sdk/{walletCustodyOperation-DimzAbCB.js → walletOwnerOperation-CScYv2K6.js} +0 -0
- /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 {
|
|
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
|
|
31
|
+
if (presentation !== "dropdown") event.stopPropagation();
|
|
32
32
|
onClose();
|
|
33
33
|
}
|
|
34
|
-
function
|
|
35
|
-
if (presentation
|
|
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
|
|
38
|
-
if (
|
|
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 ${
|
|
62
|
-
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":
|
|
67
|
-
onFocusCapture:
|
|
68
|
-
children:
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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, {
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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":
|