2026-07-03 21:04:06 +01:00

138 lines
6.6 KiB
Plaintext

@model OnboardingWizardViewModel
@using PlotLine.Models
@{
ViewData["Title"] = "Set up PlotDirector";
}
<section class="onboarding-shell" aria-labelledby="onboarding-title">
<div class="onboarding-panel">
<div class="onboarding-progress" aria-label="Setup progress">
<span>Step @Model.StepNumber of @Model.TotalSteps</span>
<div class="onboarding-progress-track">
<span style="width:@((Model.StepNumber * 100) / Model.TotalSteps)%"></span>
</div>
</div>
@if (Model.CurrentStep == OnboardingSteps.Welcome)
{
<div class="onboarding-copy">
<p class="eyebrow">Story intelligence setup</p>
<h1 id="onboarding-title">Welcome to PlotDirector</h1>
<p>Answer a few quick questions so PlotDirector can shape the first setup around the way you write.</p>
</div>
<form asp-controller="Onboarding" asp-action="Welcome" method="post" class="onboarding-actions">
<button class="btn btn-primary btn-lg" type="submit">Continue</button>
</form>
}
else if (Model.CurrentStep == OnboardingSteps.WritingJourney)
{
<div class="onboarding-copy">
<p class="eyebrow">Your starting point</p>
<h1 id="onboarding-title">Where are you in your writing journey?</h1>
</div>
<form asp-controller="Onboarding" asp-action="WritingJourney" method="post">
<div class="text-danger mb-3" asp-validation-summary="ModelOnly"></div>
<div class="onboarding-option-grid">
@foreach (var option in Model.Options)
{
<label class="onboarding-option-card">
<input type="radio" name="WritingJourney" value="@option.Value" checked="@(option.Value == Model.WritingJourney)" required />
<span>
<strong>@option.Title</strong>
<small>@option.Description</small>
</span>
</label>
}
</div>
<span class="text-danger field-validation-valid" data-valmsg-for="WritingJourney" data-valmsg-replace="true"></span>
<div class="onboarding-actions">
<button class="btn btn-outline-secondary" type="submit" formaction="/onboarding/back" formnovalidate name="currentStep" value="@OnboardingSteps.WritingJourney">Back</button>
<button class="btn btn-primary" type="submit">Continue</button>
</div>
</form>
}
else if (Model.CurrentStep == OnboardingSteps.WritingSoftware)
{
<div class="onboarding-copy">
<p class="eyebrow">Writing workflow</p>
<h1 id="onboarding-title">What software do you write in?</h1>
</div>
<form asp-controller="Onboarding" asp-action="WritingSoftware" method="post">
<div class="text-danger mb-3" asp-validation-summary="ModelOnly"></div>
<div class="onboarding-option-grid onboarding-option-grid--software">
@foreach (var option in Model.Options)
{
<label class="onboarding-option-card">
<input type="radio" name="WritingSoftware" value="@option.Value" checked="@(option.Value == Model.WritingSoftware)" required />
<span>
<strong>
@option.Title
@if (!string.IsNullOrWhiteSpace(option.Badge))
{
<em>@option.Badge</em>
}
</strong>
<small>@option.Description</small>
</span>
</label>
}
</div>
<span class="text-danger field-validation-valid" data-valmsg-for="WritingSoftware" data-valmsg-replace="true"></span>
<div class="onboarding-actions">
<button class="btn btn-outline-secondary" type="submit" formaction="/onboarding/back" formnovalidate name="currentStep" value="@OnboardingSteps.WritingSoftware">Back</button>
<button class="btn btn-primary" type="submit">Finish setup</button>
</div>
</form>
}
else
{
<div class="onboarding-copy">
<p class="eyebrow">Setup preferences</p>
<h1 id="onboarding-title">Your setup is saved</h1>
<p>PlotDirector will use these answers as later story intelligence setup is added.</p>
</div>
<dl class="onboarding-summary">
<div>
<dt>Writing journey</dt>
<dd>@DisplayJourney(Model.WritingJourney)</dd>
</div>
<div>
<dt>Writing software</dt>
<dd>@DisplaySoftware(Model.WritingSoftware)</dd>
</div>
</dl>
<div class="onboarding-actions">
<form asp-controller="Onboarding" asp-action="Back" method="post">
<button class="btn btn-outline-secondary" type="submit" name="currentStep" value="@OnboardingSteps.WritingSoftware">Update preferences</button>
</form>
<a class="btn btn-primary" asp-controller="Projects" asp-action="Index">Back to projects</a>
</div>
}
</div>
</section>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
@functions {
private static string DisplayJourney(string? value) => value switch
{
WritingJourneyValues.PlanningNewStory => "Planning a brand new story",
WritingJourneyValues.AlreadyStarted => "Already started writing",
WritingJourneyValues.ManuscriptMostlyComplete => "Manuscript largely complete",
_ => "Not set"
};
private static string DisplaySoftware(string? value) => value switch
{
WritingSoftwareValues.MicrosoftWord => "Microsoft Word",
WritingSoftwareValues.GoogleDocs => "Google Docs",
WritingSoftwareValues.Scrivener => "Scrivener",
WritingSoftwareValues.LibreOfficeOpenOffice => "LibreOffice / OpenOffice",
WritingSoftwareValues.MarkdownObsidian => "Markdown / Obsidian",
WritingSoftwareValues.Other => "Other",
_ => "Not set"
};
}