@seams/wallet 0.10.2 → 0.11.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 (173) hide show
  1. package/README.md +3 -3
  2. package/THIRD_PARTY_NOTICES.md +33 -1812
  3. package/dist/.build-inputs.sha256 +1 -1
  4. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.js +100 -0
  5. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +127 -71
  6. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +558 -0
  7. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +82 -0
  8. package/dist/esm/core/types/sdkSentEvents.js +9 -0
  9. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonMock.js +189 -0
  10. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +137 -0
  11. package/dist/esm/react/components/AccountMenuButton/AccountMenuDeviceDetails.js +39 -0
  12. package/dist/esm/react/components/AccountMenuButton/AccountMenuDialog.js +39 -13
  13. package/dist/esm/react/components/AccountMenuButton/AccountMenuMockScreens.js +247 -0
  14. package/dist/esm/react/components/AccountMenuButton/AccountMenuScreen.js +41 -0
  15. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodRow.js +79 -0
  16. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +168 -174
  17. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsView.js +19 -0
  18. package/dist/esm/react/components/AccountMenuButton/ExportKeysScreen.js +30 -0
  19. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.css +148 -87
  20. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +26 -5
  21. package/dist/esm/react/components/AccountMenuButton/MenuItem.js +28 -13
  22. package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.css +73 -69
  23. package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +56 -68
  24. package/dist/esm/react/components/AccountMenuButton/RecoveryCodeAcknowledgement.js +27 -0
  25. package/dist/esm/react/components/AccountMenuButton/RecoveryCodeActions.js +53 -0
  26. package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.css +3 -1
  27. package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +2 -8
  28. package/dist/esm/react/components/AccountMenuButton/UserAccountButton.css +1 -1
  29. package/dist/esm/react/components/AccountMenuButton/UserAccountButton.js +6 -3
  30. package/dist/esm/react/components/AccountMenuButton/WalletRegionSection.js +4 -4
  31. package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +443 -12
  32. package/dist/esm/react/components/AccountMenuButton/hooks/useProfileState.js +1 -1
  33. package/dist/esm/react/components/AccountMenuButton/icons/LayersIcon.js +8 -0
  34. package/dist/esm/react/components/AccountMenuButton/icons/LockKeyholeIcon.js +22 -0
  35. package/dist/esm/react/components/AccountMenuButton/icons/PlusIcon.js +8 -0
  36. package/dist/esm/react/components/AccountMenuButton/icons/SunIcon.js +2 -2
  37. package/dist/esm/react/components/AccountMenuButton/icons/TouchIcon.css +0 -8
  38. package/dist/esm/react/components/AccountMenuButton/index.js +135 -115
  39. package/dist/esm/react/components/QRCodeScanner.js +64 -40
  40. package/dist/esm/react/components/QRCodeScannerCamera.js +16 -0
  41. package/dist/esm/react/components/ShowQRCode.js +2 -2
  42. package/dist/esm/react/externalEvm.js +2 -2
  43. package/dist/esm/react/index.js +2 -1
  44. package/dist/esm/react/styles/styles.css +520 -91
  45. package/dist/esm/react/transactionReview/TransactionReviewHost.js +3 -3
  46. package/dist/esm/sdk/{adapters-DYPu0nK9.js → adapters-CGvNLOfZ.js} +1 -1
  47. package/dist/{public/sdk/display-DjoWrSgE.js → esm/sdk/display-DTbGoX4e.js} +1 -1
  48. package/dist/{public/sdk/exportKeypairOperation-DYCzCbqL.js → esm/sdk/exportKeypairOperation-BHXMSA3v.js} +1 -1
  49. package/dist/{public/sdk/host-D5b19B_h.js → esm/sdk/host-Bqmmy8Ts.js} +1 -1
  50. package/dist/esm/sdk/{localOnly-KvZeKkH5.js → localOnly-CUVRoMy2.js} +1 -1
  51. package/dist/esm/sdk/{mountRecoveryCodeBackupSurface-BA2ttbTM.js → mountRecoveryCodeBackupSurface-D1G-iCPI.js} +2 -2
  52. package/dist/esm/sdk/{pendingWalletRecoveryCodeBackup-BkIrbd6Q.js → pendingWalletRecoveryCodeBackup-CMCOUuA-.js} +1 -1
  53. package/dist/esm/sdk/{recovery-entrypoint-DoXswV9I.js → recovery-entrypoint-QxTiyx-o.js} +1 -1
  54. package/dist/esm/sdk/{registration-BFHEYmgh.js → registration-Drtkzrlc.js} +1 -1
  55. package/dist/esm/sdk/registration-eyzHqLHi.js +1 -0
  56. package/dist/esm/sdk/{requireStepUpAuth-C67sluoC.js → requireStepUpAuth-FqZSU021.js} +1 -1
  57. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  58. package/dist/esm/sdk/runtime-auth-CbveTM2_.js +1 -0
  59. package/dist/esm/sdk/{runtime-device-link-pf-a_-3u.js → runtime-device-link-CHsqrEQ9.js} +1 -1
  60. package/dist/esm/sdk/{runtime-ecdsa-tempo-Ddnuti6f.js → runtime-ecdsa-tempo-MgmnU9g-.js} +1 -1
  61. package/dist/esm/sdk/{runtime-email-otp-BAG8ZC1J.js → runtime-email-otp-Cj96n102.js} +1 -1
  62. package/dist/esm/sdk/{runtime-export-DxL99xfn.js → runtime-export-mcwZRxKk.js} +1 -1
  63. package/dist/esm/sdk/{runtime-near-BrWP4IxC.js → runtime-near-BMdTtu7D.js} +1 -1
  64. package/dist/esm/sdk/{runtime-preferences-BjVdHYL0.js → runtime-preferences-CBlhE8bX.js} +1 -1
  65. package/dist/esm/sdk/{runtime-recovery-codes-Dn-NccpU.js → runtime-recovery-codes-B1gixZsp.js} +1 -1
  66. package/dist/esm/sdk/{runtime-recovery-BNd_GX5q.js → runtime-recovery-mJp3MLeG.js} +1 -1
  67. package/dist/esm/sdk/sdkSentEvents-Dl8fOL50.js +1 -0
  68. package/dist/esm/sdk/shared-8Qe7Nxgg.js +6 -0
  69. package/dist/{public/sdk/signEvmFamily-DjD3tn8e.js → esm/sdk/signEvmFamily-M0trbeZe.js} +1 -1
  70. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-CwRFbaLM.js → signEvmFamilyWithUiConfirmForTempo-Bo25SwuV.js} +1 -1
  71. package/dist/esm/sdk/{signEvmWithUiConfirm-BHG0dwVG.js → signEvmWithUiConfirm-CFcqJRj3.js} +1 -1
  72. package/dist/{public/sdk/signNear-D0tlQXb9.js → esm/sdk/signNear-DGUQZ44s.js} +1 -1
  73. package/dist/esm/sdk/{signingFlow-Mym5j6aw.js → signingFlow-DZvV4AgG.js} +1 -1
  74. package/dist/esm/sdk/{transaction-activity-Cb2JyYKv.js → transaction-activity-xfeHKJoq.js} +1 -1
  75. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  76. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  77. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  78. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  79. package/dist/esm/sdk/wallet-ui.css +1 -1
  80. package/dist/{public/sdk/walletCustodyEcdsaContinuity-B8aO2NFb.js → esm/sdk/walletCustodyEcdsaContinuity-_IKoCUBO.js} +1 -1
  81. package/dist/{public/sdk/walletRecoveryCommit-C3EgMjo-.js → esm/sdk/walletRecoveryCommit-DDPa1rAJ.js} +1 -1
  82. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  83. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  84. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  85. package/dist/public/headers.manifest.json +1 -1
  86. package/dist/public/sdk/{adapters-DYPu0nK9.js → adapters-CGvNLOfZ.js} +1 -1
  87. package/dist/{esm/sdk/display-DjoWrSgE.js → public/sdk/display-DTbGoX4e.js} +1 -1
  88. package/dist/{esm/sdk/exportKeypairOperation-DYCzCbqL.js → public/sdk/exportKeypairOperation-BHXMSA3v.js} +1 -1
  89. package/dist/{esm/sdk/host-D5b19B_h.js → public/sdk/host-Bqmmy8Ts.js} +1 -1
  90. package/dist/public/sdk/{localOnly-KvZeKkH5.js → localOnly-CUVRoMy2.js} +1 -1
  91. package/dist/public/sdk/{mountRecoveryCodeBackupSurface-BA2ttbTM.js → mountRecoveryCodeBackupSurface-D1G-iCPI.js} +2 -2
  92. package/dist/public/sdk/{pendingWalletRecoveryCodeBackup-BkIrbd6Q.js → pendingWalletRecoveryCodeBackup-CMCOUuA-.js} +1 -1
  93. package/dist/public/sdk/{recovery-entrypoint-DoXswV9I.js → recovery-entrypoint-QxTiyx-o.js} +1 -1
  94. package/dist/public/sdk/{registration-BFHEYmgh.js → registration-Drtkzrlc.js} +1 -1
  95. package/dist/public/sdk/registration-eyzHqLHi.js +1 -0
  96. package/dist/public/sdk/{requireStepUpAuth-C67sluoC.js → requireStepUpAuth-FqZSU021.js} +1 -1
  97. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  98. package/dist/public/sdk/runtime-auth-CbveTM2_.js +1 -0
  99. package/dist/public/sdk/{runtime-device-link-pf-a_-3u.js → runtime-device-link-CHsqrEQ9.js} +1 -1
  100. package/dist/public/sdk/{runtime-ecdsa-tempo-Ddnuti6f.js → runtime-ecdsa-tempo-MgmnU9g-.js} +1 -1
  101. package/dist/public/sdk/{runtime-email-otp-BAG8ZC1J.js → runtime-email-otp-Cj96n102.js} +1 -1
  102. package/dist/public/sdk/{runtime-export-DxL99xfn.js → runtime-export-mcwZRxKk.js} +1 -1
  103. package/dist/public/sdk/{runtime-near-BrWP4IxC.js → runtime-near-BMdTtu7D.js} +1 -1
  104. package/dist/public/sdk/{runtime-preferences-BjVdHYL0.js → runtime-preferences-CBlhE8bX.js} +1 -1
  105. package/dist/public/sdk/{runtime-recovery-codes-Dn-NccpU.js → runtime-recovery-codes-B1gixZsp.js} +1 -1
  106. package/dist/public/sdk/{runtime-recovery-BNd_GX5q.js → runtime-recovery-mJp3MLeG.js} +1 -1
  107. package/dist/public/sdk/sdkSentEvents-Dl8fOL50.js +1 -0
  108. package/dist/public/sdk/shared-8Qe7Nxgg.js +6 -0
  109. package/dist/{esm/sdk/signEvmFamily-DjD3tn8e.js → public/sdk/signEvmFamily-M0trbeZe.js} +1 -1
  110. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-CwRFbaLM.js → signEvmFamilyWithUiConfirmForTempo-Bo25SwuV.js} +1 -1
  111. package/dist/public/sdk/{signEvmWithUiConfirm-BHG0dwVG.js → signEvmWithUiConfirm-CFcqJRj3.js} +1 -1
  112. package/dist/{esm/sdk/signNear-D0tlQXb9.js → public/sdk/signNear-DGUQZ44s.js} +1 -1
  113. package/dist/public/sdk/{signingFlow-Mym5j6aw.js → signingFlow-DZvV4AgG.js} +1 -1
  114. package/dist/public/sdk/{transaction-activity-Cb2JyYKv.js → transaction-activity-xfeHKJoq.js} +1 -1
  115. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  116. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  117. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  118. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  119. package/dist/public/sdk/wallet-ui.css +1 -1
  120. package/dist/{esm/sdk/walletCustodyEcdsaContinuity-B8aO2NFb.js → public/sdk/walletCustodyEcdsaContinuity-_IKoCUBO.js} +1 -1
  121. package/dist/{esm/sdk/walletRecoveryCommit-C3EgMjo-.js → public/sdk/walletRecoveryCommit-DDPa1rAJ.js} +1 -1
  122. package/dist/public/sdk/workers/email_otp_runtime_bg.wasm +0 -0
  123. package/dist/public/sdk/workers/evm_crypto_bg.wasm +0 -0
  124. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  125. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  126. package/dist/public/sdk/workers/shamir3pass_runtime_bg.wasm +0 -0
  127. package/dist/public/sdk/workers/tempo_signer_bg.wasm +0 -0
  128. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  129. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  130. package/dist/public/wallet-assets.manifest.json +62 -62
  131. package/dist/public/wallet-service/index.html +4 -4
  132. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +4 -0
  133. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +4 -2
  134. package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +4 -0
  135. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonMock.d.ts +17 -0
  136. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonView.d.ts +17 -0
  137. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuDeviceDetails.d.ts +13 -0
  138. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuDialog.d.ts +1 -1
  139. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuMockScreens.d.ts +43 -0
  140. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuScreen.d.ts +9 -0
  141. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodRow.d.ts +14 -0
  142. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -1
  143. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsView.d.ts +8 -0
  144. package/dist/types/wallet/src/react/components/AccountMenuButton/ExportKeysScreen.d.ts +7 -0
  145. package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -1
  146. package/dist/types/wallet/src/react/components/AccountMenuButton/ProfileDropdown.d.ts +2 -14
  147. package/dist/types/wallet/src/react/components/AccountMenuButton/RecoveryCodeAcknowledgement.d.ts +5 -0
  148. package/dist/types/wallet/src/react/components/AccountMenuButton/RecoveryCodeActions.d.ts +5 -0
  149. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LayersIcon.d.ts +2 -0
  150. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LockKeyholeIcon.d.ts +2 -0
  151. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/PlusIcon.d.ts +2 -0
  152. package/dist/types/wallet/src/react/components/AccountMenuButton/index.d.ts +2 -0
  153. package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +1 -14
  154. package/dist/types/wallet/src/react/components/QRCodeScanner.d.ts +1 -0
  155. package/dist/types/wallet/src/react/components/QRCodeScannerCamera.d.ts +5 -0
  156. package/dist/types/wallet/src/react/index.d.ts +2 -1
  157. package/dist/workers/email_otp_runtime_bg.wasm +0 -0
  158. package/dist/workers/evm_crypto_bg.wasm +0 -0
  159. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  160. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  161. package/dist/workers/shamir3pass_runtime_bg.wasm +0 -0
  162. package/dist/workers/tempo_signer_bg.wasm +0 -0
  163. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  164. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  165. package/package.json +1 -1
  166. package/dist/esm/sdk/registration-Cx_f58rb.js +0 -1
  167. package/dist/esm/sdk/runtime-auth-CKUleRYA.js +0 -1
  168. package/dist/esm/sdk/sdkSentEvents-DiQ3YVlj.js +0 -1
  169. package/dist/esm/sdk/shared-CSfgTVcf.js +0 -6
  170. package/dist/public/sdk/registration-Cx_f58rb.js +0 -1
  171. package/dist/public/sdk/runtime-auth-CKUleRYA.js +0 -1
  172. package/dist/public/sdk/sdkSentEvents-DiQ3YVlj.js +0 -1
  173. package/dist/public/sdk/shared-CSfgTVcf.js +0 -6
@@ -1,77 +1,65 @@
1
1
  import { MenuItem } from "./MenuItem.js";
2
2
  import { LockMenuItem } from "./LockMenuItem.js";
3
- import { TransactionSettingsSection } from "./TransactionSettingsSection.js";
4
- import { AccountsSection } from "./AccountsSection.js";
5
- import { ExportKeysSection } from "./ExportKeysSection.js";
6
- import { PROFILE_MENU_ITEM_IDS } from "./types.js";
7
- import { Fragment, forwardRef, useMemo } from "react";
3
+ import "react";
8
4
  import { jsx, jsxs } from "react/jsx-runtime";
9
5
  import "./ProfileDropdown.css";
10
6
  //#region src/react/components/AccountMenuButton/ProfileDropdown.tsx
11
- const ProfileDropdown = forwardRef(({ isOpen, menuItems, onLock, onClose, menuItemsRef, currentConfirmConfig, onSetUiMode, onToggleShowDetails, onToggleSkipClick, onSetDelay, transactionSettingsOpen = false, accountsRows, accountsOpen = false, exportKeysOpen = false, exportLoadingChain = null, canExportNearKey, canExportEvmKeys, onExportChain, theme = "dark", highlightedMenuItemId }, ref) => {
12
- const hasTransactionSettings = transactionSettingsOpen && currentConfirmConfig && onToggleShowDetails && onToggleSkipClick && onSetDelay;
13
- menuItemsRef.current.length = menuItems.length;
14
- const highlightedIndex = useMemo(() => {
15
- if (!highlightedMenuItemId) return -1;
16
- return menuItems.findIndex((item) => item.id === highlightedMenuItemId || item.label === highlightedMenuItemId);
17
- }, [highlightedMenuItemId, menuItems]);
18
- return /* @__PURE__ */ jsx("div", {
19
- ref,
20
- className: `seams-profile-dropdown-morphed ${theme}`,
21
- "data-state": isOpen ? "open" : "closed",
22
- children: /* @__PURE__ */ jsxs("div", {
23
- className: "seams-profile-dropdown-menu",
24
- children: [
25
- menuItems.map((item, index) => {
26
- const refCallback = (el) => {
27
- if (menuItemsRef.current) menuItemsRef.current[index] = el;
28
- };
29
- const isHighlighted = index === highlightedIndex;
30
- const isAccountsItem = item.id === PROFILE_MENU_ITEM_IDS.ACCOUNTS;
31
- const isExportKeysItem = item.id === PROFILE_MENU_ITEM_IDS.EXPORT_KEYS;
32
- return /* @__PURE__ */ jsxs(Fragment, { children: [
33
- /* @__PURE__ */ jsx(MenuItem, {
34
- ref: refCallback,
35
- item,
36
- onClose,
37
- className: "",
38
- isHighlighted,
39
- style: { ["--stagger-item-n"]: index }
40
- }),
41
- isAccountsItem && accountsRows && accountsRows.length > 0 && /* @__PURE__ */ jsx(AccountsSection, {
42
- rows: accountsRows,
43
- isOpen: accountsOpen,
44
- style: { ["--stagger-item-n"]: index }
45
- }),
46
- isExportKeysItem && onExportChain && /* @__PURE__ */ jsx(ExportKeysSection, {
47
- isOpen: exportKeysOpen,
48
- loadingChain: exportLoadingChain,
49
- canExportNearKey,
50
- canExportEvmKeys,
51
- onSelectChain: onExportChain,
52
- style: { ["--stagger-item-n"]: index }
53
- })
54
- ] }, item.id ?? index);
55
- }),
56
- currentConfirmConfig && (onSetUiMode || onToggleShowDetails) && onToggleSkipClick && onSetDelay && /* @__PURE__ */ jsx(TransactionSettingsSection, {
57
- currentConfirmConfig,
58
- onSetUiMode,
59
- onToggleShowDetails,
60
- onToggleSkipClick,
61
- onSetDelay,
62
- isOpen: transactionSettingsOpen,
63
- theme,
64
- style: { ["--stagger-item-n"]: menuItems.length }
65
- }),
66
- /* @__PURE__ */ jsx(LockMenuItem, {
67
- onLock,
68
- className: "seams-lock-menu-item",
69
- style: { ["--stagger-item-n"]: hasTransactionSettings ? menuItems.length + 1 : menuItems.length }
70
- })
71
- ]
72
- })
7
+ const SECURITY_ITEMS = [
8
+ "authentication-methods",
9
+ "scan-link-device",
10
+ "linked-devices",
11
+ "recovery-codes"
12
+ ];
13
+ function isSecurityItem(item) {
14
+ return SECURITY_ITEMS.includes(item.id ?? "");
15
+ }
16
+ function compareSecurityItems(a, b) {
17
+ return SECURITY_ITEMS.indexOf(a.id ?? "") - SECURITY_ITEMS.indexOf(b.id ?? "");
18
+ }
19
+ function isAccountItem(item) {
20
+ return !isSecurityItem(item);
21
+ }
22
+ function storeMenuRef(refs, index, element) {
23
+ refs.current[index] = element;
24
+ }
25
+ function MenuGroup({ label, items, props }) {
26
+ return /* @__PURE__ */ jsxs("section", {
27
+ className: "seams-account-menu-group",
28
+ "aria-label": label,
29
+ children: [/* @__PURE__ */ jsx("h3", { children: label }), items.map(renderItem.bind(null, props))]
73
30
  });
74
- });
31
+ }
32
+ function renderItem(props, item) {
33
+ const index = props.menuItems.indexOf(item);
34
+ return /* @__PURE__ */ jsx(MenuItem, {
35
+ ref: storeMenuRef.bind(null, props.menuItemsRef, index),
36
+ item,
37
+ onClose: props.onClose,
38
+ isHighlighted: item.id === props.highlightedMenuItemId
39
+ }, item.id);
40
+ }
41
+ function ProfileDropdown(props) {
42
+ props.menuItemsRef.current.length = props.menuItems.length;
43
+ return /* @__PURE__ */ jsxs("div", {
44
+ className: "seams-profile-dropdown-menu",
45
+ children: [
46
+ /* @__PURE__ */ jsx(MenuGroup, {
47
+ label: "Addresses",
48
+ items: props.menuItems.filter(isAccountItem),
49
+ props
50
+ }),
51
+ /* @__PURE__ */ jsx(MenuGroup, {
52
+ label: "Security & devices",
53
+ items: props.menuItems.filter(isSecurityItem).sort(compareSecurityItems),
54
+ props
55
+ }),
56
+ /* @__PURE__ */ jsx(LockMenuItem, {
57
+ onLock: props.onLock,
58
+ className: "seams-lock-menu-item"
59
+ })
60
+ ]
61
+ });
62
+ }
75
63
  //#endregion
76
64
  export { ProfileDropdown };
77
65
 
@@ -0,0 +1,27 @@
1
+ import { useState } from "react";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/react/components/AccountMenuButton/RecoveryCodeAcknowledgement.tsx
4
+ function updateAcknowledgement(setAcknowledged, event) {
5
+ setAcknowledged(event.currentTarget.checked);
6
+ }
7
+ function RecoveryCodeAcknowledgement({ onDone }) {
8
+ const [acknowledged, setAcknowledged] = useState(false);
9
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("label", {
10
+ className: "seams-account-recovery-acknowledgement",
11
+ children: [/* @__PURE__ */ jsx("input", {
12
+ type: "checkbox",
13
+ checked: acknowledged,
14
+ onChange: updateAcknowledgement.bind(null, setAcknowledged)
15
+ }), /* @__PURE__ */ jsx("span", { children: "I’ve saved these codes. They won’t be shown again." })]
16
+ }), /* @__PURE__ */ jsx("button", {
17
+ type: "button",
18
+ className: "seams-account-action primary",
19
+ disabled: !acknowledged,
20
+ onClick: onDone,
21
+ children: "Done"
22
+ })] });
23
+ }
24
+ //#endregion
25
+ export { RecoveryCodeAcknowledgement };
26
+
27
+ //# sourceMappingURL=RecoveryCodeAcknowledgement.js.map
@@ -0,0 +1,53 @@
1
+ import { useState } from "react";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/react/components/AccountMenuButton/RecoveryCodeActions.tsx
4
+ async function copyCodes(codes, feedback) {
5
+ try {
6
+ await navigator.clipboard.writeText(`${codes.join("\n")}\n`);
7
+ feedback("Copied all codes.");
8
+ } catch {
9
+ feedback("Unable to copy. Download the codes instead.");
10
+ }
11
+ }
12
+ function downloadCodes(codes, feedback) {
13
+ try {
14
+ const url = URL.createObjectURL(new Blob([`${codes.join("\n")}\n`], { type: "text/plain;charset=utf-8" }));
15
+ const anchor = document.createElement("a");
16
+ anchor.href = url;
17
+ anchor.download = "seams-recovery-codes.txt";
18
+ try {
19
+ anchor.click();
20
+ } finally {
21
+ setTimeout(URL.revokeObjectURL.bind(URL, url), 0);
22
+ }
23
+ feedback("Downloaded all codes.");
24
+ } catch {
25
+ feedback("Unable to download. Copy the codes instead.");
26
+ }
27
+ }
28
+ function RecoveryCodeActions({ codes }) {
29
+ const [feedback, setFeedback] = useState("");
30
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
31
+ className: "seams-recovery-code-actions",
32
+ children: [/* @__PURE__ */ jsx("button", {
33
+ type: "button",
34
+ className: "seams-account-action",
35
+ onClick: copyCodes.bind(null, codes, setFeedback),
36
+ children: "Copy all"
37
+ }), /* @__PURE__ */ jsx("button", {
38
+ type: "button",
39
+ className: "seams-account-action",
40
+ onClick: downloadCodes.bind(null, codes, setFeedback),
41
+ children: "Download all"
42
+ })]
43
+ }), /* @__PURE__ */ jsx("p", {
44
+ className: "seams-recovery-code-action-status",
45
+ role: "status",
46
+ "aria-live": "polite",
47
+ children: feedback
48
+ })] });
49
+ }
50
+ //#endregion
51
+ export { RecoveryCodeActions };
52
+
53
+ //# sourceMappingURL=RecoveryCodeActions.js.map
@@ -44,12 +44,14 @@
44
44
  }
45
45
 
46
46
  .seams-account-seg {
47
+ box-sizing: border-box;
48
+ min-width: 0;
47
49
  position: relative;
48
50
  min-height: 54px;
49
51
  overflow: hidden;
50
52
  padding: 5px;
51
53
  border: none;
52
- background: var(--seams-colors-surface2);
54
+ background: color-mix(in srgb, var(--seams-colors-textPrimary) 6%, var(--seams-colors-surface2));
53
55
  border-radius: var(--seams-border-radius-xl);
54
56
  }
55
57
 
@@ -91,10 +91,7 @@ const TransactionSettingsSection = ({ currentConfirmConfig, onSetUiMode, onToggl
91
91
  activeBg: TRANSACTION_SETTINGS_ACTIVE_BACKGROUND,
92
92
  height: 40,
93
93
  buttonFontSize: 12,
94
- containerStyle: {
95
- background: "var(--seams-colors-surface2)",
96
- width: "100%"
97
- },
94
+ containerStyle: { width: "100%" },
98
95
  buttonStyle: {
99
96
  display: "grid",
100
97
  placeItems: "center",
@@ -133,10 +130,7 @@ const TransactionSettingsSection = ({ currentConfirmConfig, onSetUiMode, onToggl
133
130
  activeBg: TRANSACTION_SETTINGS_ACTIVE_BACKGROUND,
134
131
  height: 40,
135
132
  buttonFontSize: 12,
136
- containerStyle: {
137
- background: "var(--seams-colors-surface2)",
138
- width: "100%"
139
- },
133
+ containerStyle: { width: "100%" },
140
134
  buttonStyle: {
141
135
  display: "grid",
142
136
  placeItems: "center",
@@ -136,7 +136,7 @@
136
136
  width: 40px;
137
137
  height: 40px;
138
138
  margin-right: 4px;
139
- background: var(--seams-colors-surface);
139
+ background: var(--seams-colors-surface2);
140
140
  border-radius: 50%;
141
141
  display: flex;
142
142
  align-items: center;
@@ -2,7 +2,7 @@ import TouchIcon from "./icons/TouchIcon.js";
2
2
  import "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/react/components/AccountMenuButton/UserAccountButton.tsx
5
- const UserAccountButton = ({ username, hideUsername, fullAccountId, emailAddress, isOpen, onClick, onMouseEnter, onMouseLeave, theme = "dark", menuId, triggerId }) => {
5
+ const UserAccountButton = ({ label = "Settings", username, hideUsername, fullAccountId, emailAddress, isOpen, onClick, onMouseEnter, onMouseLeave, theme = "dark", menuId, triggerId }) => {
6
6
  const onKeyDown = (e) => {
7
7
  if (e.key === "Enter" || e.key === " ") {
8
8
  e.preventDefault();
@@ -33,6 +33,7 @@ const UserAccountButton = ({ username, hideUsername, fullAccountId, emailAddress
33
33
  strokeWidth: 1.4
34
34
  })
35
35
  }), !hideWhenClosed && /* @__PURE__ */ jsx(UserAccountId, {
36
+ label,
36
37
  username,
37
38
  fullAccountId,
38
39
  emailAddress,
@@ -43,21 +44,23 @@ const UserAccountButton = ({ username, hideUsername, fullAccountId, emailAddress
43
44
  })
44
45
  });
45
46
  };
46
- const UserAccountId = ({ username, fullAccountId, emailAddress, isOpen }) => {
47
+ const UserAccountId = ({ label, username, fullAccountId, emailAddress, isOpen }) => {
47
48
  const displayAccountId = (fullAccountId || username || "").trim();
48
49
  return /* @__PURE__ */ jsxs("div", {
49
50
  className: "seams-user-account--user-details",
50
51
  children: [
51
52
  /* @__PURE__ */ jsx("p", {
52
53
  className: "seams-user-account--username",
53
- children: "Settings"
54
+ children: label
54
55
  }),
55
56
  /* @__PURE__ */ jsx("span", {
57
+ "aria-hidden": !isOpen,
56
58
  title: displayAccountId || void 0,
57
59
  className: `seams-user-account--account-id ${isOpen ? "visible" : "hidden"}`,
58
60
  children: displayAccountId
59
61
  }),
60
62
  emailAddress && /* @__PURE__ */ jsx("span", {
63
+ "aria-hidden": !isOpen,
61
64
  title: emailAddress,
62
65
  className: `seams-user-account--email ${isOpen ? "visible" : "hidden"}`,
63
66
  children: emailAddress
@@ -1,7 +1,7 @@
1
1
  import { base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
2
2
  import { parseWalletMoveId } from "../../../SeamsWeb/publicApi/placement.js";
3
3
  import { Component } from "react";
4
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/react/components/AccountMenuButton/WalletRegionSection.tsx
6
6
  const REGIONS = [
7
7
  {
@@ -248,7 +248,7 @@ var WalletRegionSection = class extends Component {
248
248
  switch (state.kind) {
249
249
  case "loading":
250
250
  case "submitting": return /* @__PURE__ */ jsx("p", { children: "You can lock this wallet. An accepted move continues on the server." });
251
- case "unavailable": return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
251
+ case "unavailable": return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
252
252
  role: "alert",
253
253
  children: state.message
254
254
  }), /* @__PURE__ */ jsx("button", {
@@ -257,7 +257,7 @@ var WalletRegionSection = class extends Component {
257
257
  onClick: this.load,
258
258
  children: "Check again"
259
259
  })] });
260
- case "uncertain": return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
260
+ case "uncertain": return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
261
261
  role: "alert",
262
262
  children: state.message
263
263
  }), /* @__PURE__ */ jsx("button", {
@@ -267,7 +267,7 @@ var WalletRegionSection = class extends Component {
267
267
  children: "Retry same move"
268
268
  })] });
269
269
  case "progress": return /* @__PURE__ */ jsx("p", { children: state.status.state === "completed" || state.status.move.progress.availability === "active" ? "Your wallet is active in the new region. Another move must wait until cleanup completes." : "Signing and wallet changes are paused. Closing or locking this wallet does not cancel the move." });
270
- case "ready": return /* @__PURE__ */ jsxs(Fragment$1, { children: [
270
+ case "ready": return /* @__PURE__ */ jsxs(Fragment, { children: [
271
271
  /* @__PURE__ */ jsxs("p", { children: ["Current region: ", /* @__PURE__ */ jsx("strong", { children: regionName(state.placement.region) })] }),
272
272
  /* @__PURE__ */ jsxs("label", { children: [
273
273
  "Destination region",