{#if flow.state.error}
{flow.state.error}
{/if} {#if flow.state.step === 'welcome'}

{$_('migration.offline.welcome.title')}

{$_('migration.offline.welcome.desc')}

{$_('migration.offline.welcome.warningTitle')}

{$_('migration.offline.welcome.warningDesc')}

{$_('migration.offline.welcome.requirementsTitle')}

  • {$_('migration.offline.welcome.requirement1')}
  • {$_('migration.offline.welcome.requirement2')}
  • {$_('migration.offline.welcome.requirement3')}
{:else if flow.state.step === 'provide-did'}

{$_('migration.offline.provideDid.title')}

{$_('migration.offline.provideDid.desc')}

flow.setUserDid((e.target as HTMLInputElement).value)} />

{$_('migration.offline.provideDid.hint')}

{:else if flow.state.step === 'upload-car'}

{$_('migration.offline.uploadCar.title')}

{$_('migration.offline.uploadCar.desc')}

{#if flow.state.carNeedsReupload}
{$_('migration.offline.uploadCar.reuploadWarningTitle')}

{$_('migration.offline.uploadCar.reuploadWarning')}

{#if flow.state.carFileName}

Previous file: {flow.state.carFileName} ({(flow.state.carSizeBytes / 1024 / 1024).toFixed(2)} MB)

{/if}
{/if}
{#if flow.state.carFile && flow.state.carFileName}
{flow.state.carFileName} ({(flow.state.carSizeBytes / 1024 / 1024).toFixed(2)} MB)
{/if}

{$_('migration.offline.uploadCar.hint')}

{:else if flow.state.step === 'provide-rotation-key'}

{$_('migration.offline.rotationKey.title')}

{$_('migration.offline.rotationKey.desc')}

{$_('migration.offline.rotationKey.securityWarningTitle')}
  • {$_('migration.offline.rotationKey.securityWarning1')}
  • {$_('migration.offline.rotationKey.securityWarning2')}
  • {$_('migration.offline.rotationKey.securityWarning3')}

{$_('migration.offline.rotationKey.hint')}

{#if keyValid === true}
{$_('migration.offline.rotationKey.valid')}
{:else if keyValid === false}
{$_('migration.offline.rotationKey.invalid')}
{/if}
{:else if flow.state.step === 'choose-handle'} flow.checkHandleAvailability(h)} onHandleChange={(h) => handleInput = h} onDomainChange={(d) => selectedDomain = d} onEmailChange={(e) => flow.setTargetEmail(e)} onPasswordChange={(p) => flow.setTargetPassword(p)} onAuthMethodChange={(m) => selectedAuthMethod = m} onInviteCodeChange={(c) => flow.setInviteCode(c)} onVerificationChannelChange={(ch) => flow.updateField('verificationChannel', ch)} onDiscordChange={(v) => flow.updateField('discordUsername', v)} onTelegramChange={(v) => flow.updateField('telegramUsername', v)} onSignalChange={(v) => flow.updateField('signalUsername', v)} onBack={() => flow.setStep('provide-rotation-key')} onContinue={proceedToReview} /> {:else if flow.state.step === 'review'} flow.setStep('choose-handle')} onContinue={startMigration} > {#snippet warning()} {$_('migration.offline.review.plcWarningTitle')}

{$_('migration.offline.review.plcWarning')}

{/snippet}
{:else if flow.state.step === 'creating' || flow.state.step === 'importing'} {:else if flow.state.step === 'migrating-blobs'} 0 ? { current: flow.state.progress.blobsMigrated, total: flow.state.progress.blobsTotal } : undefined} > {#if flow.state.progress.blobsFailed.length > 0}
{$_('migration.offline.blobs.failedTitle')}

{$_('migration.offline.blobs.failedDesc', { values: { count: flow.state.progress.blobsFailed.length } })}

{/if}
{:else if flow.state.step === 'email-verify'} flow.updateField('emailVerifyToken', t)} onSubmit={submitEmailVerify} onResend={resendEmailVerify} /> {:else if flow.state.step === 'passkey-setup'} passkeyName = n} onRegister={registerPasskey} /> {:else if flow.state.step === 'app-password'} {:else if flow.state.step === 'plc-signing' || flow.state.step === 'finalizing'} {:else if flow.state.step === 'success'} {:else if flow.state.step === 'error'} {/if}