Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
34 lines
2.8 KiB
Plaintext
34 lines
2.8 KiB
Plaintext
{:else if kind === "setup"}
|
|
<!-- the first run: one sheet, two cards, and a foot that closes
|
|
it. Every row here is a row that exists somewhere else —
|
|
the folder picker is You's, the sign-in is Community's —
|
|
because the tour's job is to say WHICH two things matter,
|
|
not to become a third place they can be changed. -->
|
|
<div class="setup">
|
|
<div class="sheet-title">{setup.reason === "preview" ? "Set up this phone" : "Welcome to SoulStream"}</div>
|
|
<div class="sec-note">Your library, the catalog and the network, in one place. Two things make the rest of it work — neither is required now, and both live on a screen you can come back to.</div>
|
|
|
|
<div class="sheet-sec">Where your music lives</div>
|
|
<div class="sec-note">One folder is the library: everything saved or downloaded lands in it, and everything in it is in the library. Until you pick one it is a folder inside the app that nothing else on this phone can see.</div>
|
|
<div class="setup-path">{setup.folder || "—"}</div>
|
|
<div class="sheet-rows">
|
|
{@render row("folder", setup.picking ? "Picking…" : needsFolder() ? "Choose a folder" : "Choose a different folder", needsFolder() ? "somewhere on this phone's own storage" : "this one is yours", () => void chooseFolder())}
|
|
{#if !needsFolder() && setup.access === false}
|
|
{@render row("alert", "Allow all files access", "a folder on the phone's storage needs it — the system screen opens, come back after", () => void requestAccess())}
|
|
{/if}
|
|
</div>
|
|
|
|
<div class="sheet-sec">Soulseek</div>
|
|
<div class="sec-note">Anything the library does not hold comes off the network: what Search finds, a song played from someone's copy, Save. The card asks for a username and a password and keeps them on this phone — nothing here does.</div>
|
|
{#if needsAccount()}
|
|
<div class="sheet-rows">
|
|
{@render row("users", "Sign in on Community", "the card is on the Community tab", act(() => go("community")))}
|
|
</div>
|
|
{:else}
|
|
<div class="sheet-info"><div class="kv"><span class="k">Signed in</span><span class="v">{slsk.username || slsk.savedUser}</span></div></div>
|
|
{/if}
|
|
|
|
<div class="setup-foot"><button class="btn btn-fill wide" onclick={() => void finishSetup()}>Start listening</button></div>
|
|
<div class="sec-note" style="padding-bottom:16px">Nothing above is required. You → Set up this phone again opens it back up.</div>
|
|
</div>
|