aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-09-21 12:04:25 -0700
committerAdam Soltys <[email protected]>2026-09-21 12:04:25 -0700
commit9b4fa70a978e3685c9bb2b9a68f855626ac6f39e (patch)
treef7c16a131908eed0dc1f7a0571471a7e8b6c125e
parent56fdf34caeba569e05b70e81a62e5aad16b8d751 (diff)
downloadcoinosv3-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.js20
-rw-r--r--src/i18n.js2
-rw-r--r--tools/avatar-thumb-test.js2
-rw-r--r--tools/boot-balance-test.js2
-rw-r--r--tools/boot-signin-flash-test.js2
-rw-r--r--tools/compose-preview-test.js2
-rw-r--r--tools/feed-custom-test.js2
-rw-r--r--tools/feed-follow-test.js2
-rw-r--r--tools/feed-live-test.js2
-rw-r--r--tools/markdown-note-test.js2
-rw-r--r--tools/post-actions-test.js2
-rw-r--r--tools/profile-batch-test.js2
-rw-r--r--tools/profile-open-test.js2
-rw-r--r--tools/push-unavailable-test.js2
-rw-r--r--tools/quote-card-test.js2
-rw-r--r--tools/unifiedpush-test.js2
-rw-r--r--tools/youtube-embed-test.js2
-rw-r--r--tools/zap-tally-cache-test.js2
18 files changed, 36 insertions, 18 deletions
diff --git a/src/app.js b/src/app.js
index 58e026d..8190bf9 100644
--- a/src/app.js
+++ b/src/app.js
@@ -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);