diff options
| author | Adam Soltys <[email protected]> | 2026-09-21 12:04:25 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-09-21 12:04:25 -0700 |
| commit | 9b4fa70a978e3685c9bb2b9a68f855626ac6f39e (patch) | |
| tree | f7c16a131908eed0dc1f7a0571471a7e8b6c125e | |
| parent | 56fdf34caeba569e05b70e81a62e5aad16b8d751 (diff) | |
| download | coinosv3-9b4fa70a978e3685c9bb2b9a68f855626ac6f39e.tar.gz coinosv3-9b4fa70a978e3685c9bb2b9a68f855626ac6f39e.zip | |
First run: "Create a new wallet" shows the twelve words at once.
No create/import tabs and no Generate button inside the wizard: the words
appear the moment the button is tapped. Underneath, "Have an existing seed
or entropy to import?" swaps to the import pane (which has its own entropy
door), and "Create a new wallet instead" swaps back with fresh words. The
create/import card elsewhere (adding an account) keeps its tabs. Tests
that entered through the old tab go through the new line.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Tmfg8k5f3TbNJS34qiqHAp
| -rw-r--r-- | src/app.js | 20 | ||||
| -rw-r--r-- | src/i18n.js | 2 | ||||
| -rw-r--r-- | tools/avatar-thumb-test.js | 2 | ||||
| -rw-r--r-- | tools/boot-balance-test.js | 2 | ||||
| -rw-r--r-- | tools/boot-signin-flash-test.js | 2 | ||||
| -rw-r--r-- | tools/compose-preview-test.js | 2 | ||||
| -rw-r--r-- | tools/feed-custom-test.js | 2 | ||||
| -rw-r--r-- | tools/feed-follow-test.js | 2 | ||||
| -rw-r--r-- | tools/feed-live-test.js | 2 | ||||
| -rw-r--r-- | tools/markdown-note-test.js | 2 | ||||
| -rw-r--r-- | tools/post-actions-test.js | 2 | ||||
| -rw-r--r-- | tools/profile-batch-test.js | 2 | ||||
| -rw-r--r-- | tools/profile-open-test.js | 2 | ||||
| -rw-r--r-- | tools/push-unavailable-test.js | 2 | ||||
| -rw-r--r-- | tools/quote-card-test.js | 2 | ||||
| -rw-r--r-- | tools/unifiedpush-test.js | 2 | ||||
| -rw-r--r-- | tools/youtube-embed-test.js | 2 | ||||
| -rw-r--r-- | tools/zap-tally-cache-test.js | 2 |
18 files changed, 36 insertions, 18 deletions
@@ -935,17 +935,30 @@ function unlockCard() { // The entropy page takes the card over entirely — seed words, tabs and // other controls step aside until Submit or Back. if (ui.entropyPage) return h('div', { class: 'card col' }, entropyPage()); + // Inside the first-run wizard the words are already on screen: no tabs, + // just a line underneath for whoever brought their own seed (and one back). + const wizard = ui.screen === 'unlock' && ui.onb && ui.onb.step === 'seed'; + const swap = wizard ? h('button', { + class: 'linklike small', style: 'align-self:center', + onClick: () => { + clearSeedDrafts(); ui.unlockError = ''; + if (ui.unlockTab === 'create') ui.unlockTab = 'import'; + else { ui.unlockTab = 'create'; ui.createStep = 'gen'; ui.draftRandom = ui.draftMnemonic = newMnemonic(); } + render(); + }, + }, ui.unlockTab === 'create' ? t('onbHaveSeed') : t('onbCreateInstead')) : null; return h( 'div', { class: 'card col' }, - h( + wizard ? null : h( 'div', { class: 'tabs' }, tabBtn(t('createNew'), ui.unlockTab === 'create', () => { clearSeedDrafts(); ui.unlockTab = 'create'; ui.unlockError = ''; render(); }), tabBtn(t('importExisting'), ui.unlockTab === 'import', () => { clearSeedDrafts(); ui.unlockTab = 'import'; ui.unlockError = ''; render(); }) ), ui.unlockTab === 'create' ? createPane() : importPane(), - ui.unlockError && h('div', { class: 'notice err' }, ui.unlockError) + ui.unlockError && h('div', { class: 'notice err' }, ui.unlockError), + swap ); } @@ -3361,6 +3374,9 @@ function onboardScreen() { class: 'btn-primary btn-block', style: 'font-size:17px;padding:14px', onClick: () => { ui.unlockTab = 'create'; ui.unlockError = ''; + ui.createStep = 'gen'; + // the words are the wallet: show them at once, no Generate to tap + if (!ui.draftMnemonic) ui.draftRandom = ui.draftMnemonic = newMnemonic(); o.step = 'seed'; render(); } }, t('onbStart')), diff --git a/src/i18n.js b/src/i18n.js index b6f7b93..c3fa08b 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -841,6 +841,8 @@ const STR = { onbStart: 'Create a new wallet', onbStartHint: "Takes a minute: write down twelve words and it's yours", onbOrSignIn: 'or', + onbHaveSeed: 'Have an existing seed or entropy to import?', + onbCreateInstead: 'Create a new wallet instead', onbBackupTitle: 'Write down your recovery phrase', onbBackupBody: "Signing in was the easy part — but the sign-in isn't your wallet. These twelve words are. They're the only way back in if you lose access to that account, and nobody can reissue them for you.", onbBackupDone: "I've written it down", diff --git a/tools/avatar-thumb-test.js b/tools/avatar-thumb-test.js index c776179..413a92b 100644 --- a/tools/avatar-thumb-test.js +++ b/tools/avatar-thumb-test.js @@ -74,7 +74,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mnemonic = generateMnemonic(wordlist); await page.type('textarea', mnemonic); diff --git a/tools/boot-balance-test.js b/tools/boot-balance-test.js index c34712b..482149b 100644 --- a/tools/boot-balance-test.js +++ b/tools/boot-balance-test.js @@ -29,7 +29,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); await page.type('textarea', generateMnemonic(wordlist)); await click('open wallet'); diff --git a/tools/boot-signin-flash-test.js b/tools/boot-signin-flash-test.js index b29bc63..b3460ca 100644 --- a/tools/boot-signin-flash-test.js +++ b/tools/boot-signin-flash-test.js @@ -28,7 +28,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); await page.type('textarea', generateMnemonic(wordlist)); await click('open wallet'); diff --git a/tools/compose-preview-test.js b/tools/compose-preview-test.js index aac7941..08a94e3 100644 --- a/tools/compose-preview-test.js +++ b/tools/compose-preview-test.js @@ -42,7 +42,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/feed-custom-test.js b/tools/feed-custom-test.js index af2401f..b989d87 100644 --- a/tools/feed-custom-test.js +++ b/tools/feed-custom-test.js @@ -86,7 +86,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/feed-follow-test.js b/tools/feed-follow-test.js index 9537e9c..50a572b 100644 --- a/tools/feed-follow-test.js +++ b/tools/feed-follow-test.js @@ -32,7 +32,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mnemonic = generateMnemonic(wordlist); await page.type('textarea', mnemonic); diff --git a/tools/feed-live-test.js b/tools/feed-live-test.js index 51cd415..c4807f1 100644 --- a/tools/feed-live-test.js +++ b/tools/feed-live-test.js @@ -92,7 +92,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/markdown-note-test.js b/tools/markdown-note-test.js index d585fb6..2c5a539 100644 --- a/tools/markdown-note-test.js +++ b/tools/markdown-note-test.js @@ -51,7 +51,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/post-actions-test.js b/tools/post-actions-test.js index b72c22e..22347b6 100644 --- a/tools/post-actions-test.js +++ b/tools/post-actions-test.js @@ -39,7 +39,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/profile-batch-test.js b/tools/profile-batch-test.js index 8f8250c..4a993a5 100644 --- a/tools/profile-batch-test.js +++ b/tools/profile-batch-test.js @@ -69,7 +69,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/profile-open-test.js b/tools/profile-open-test.js index da90af5..e2fcb3a 100644 --- a/tools/profile-open-test.js +++ b/tools/profile-open-test.js @@ -63,7 +63,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/push-unavailable-test.js b/tools/push-unavailable-test.js index 4808501..32fddff 100644 --- a/tools/push-unavailable-test.js +++ b/tools/push-unavailable-test.js @@ -39,7 +39,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/quote-card-test.js b/tools/quote-card-test.js index 695ee93..27a1b22 100644 --- a/tools/quote-card-test.js +++ b/tools/quote-card-test.js @@ -39,7 +39,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/unifiedpush-test.js b/tools/unifiedpush-test.js index 6a3819c..9bdb4cb 100644 --- a/tools/unifiedpush-test.js +++ b/tools/unifiedpush-test.js @@ -56,7 +56,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/youtube-embed-test.js b/tools/youtube-embed-test.js index a70272c..b32eb98 100644 --- a/tools/youtube-embed-test.js +++ b/tools/youtube-embed-test.js @@ -23,7 +23,7 @@ await page.evaluate(() => { localStorage.setItem('btc-wallet-network', 'regtest' await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); -await click('import existing'); await sleep(400); +await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mn = generateMnemonic(wordlist); await page.type('textarea', mn); diff --git a/tools/zap-tally-cache-test.js b/tools/zap-tally-cache-test.js index 4e91260..b1e37b6 100644 --- a/tools/zap-tally-cache-test.js +++ b/tools/zap-tally-cache-test.js @@ -25,7 +25,7 @@ try { await page.reload({ waitUntil: 'domcontentloaded' }); await sleep(400); await click('create a new wallet'); await sleep(500); - await click('import existing'); await sleep(400); + await click('to import'); await sleep(400); await page.waitForSelector('textarea'); const mnemonic = generateMnemonic(wordlist); await page.type('textarea', mnemonic); |
