@attribute [Route(Routes.ASSISTANT_BEYOND_FACTS_LAB)] @inherits MSGComponentBase @* The lab does not inherit AssistantBase, so it sets up the inner scrolling itself, the way the Visual Briefing assistant does, and is a drop area of its own: a document dropped anywhere on the page lands in the material of the open preparation. *@ @T("BeyondFacts Lab") @* How to work with the lab opens by itself while there is no preparation yet. *@ @TA("Your preparations") @if (this.projects.Count == 0) { @TA("You have no preparations yet. Create one for the event you want to prepare for.") } else { @foreach (var project in this.projects) { @this.ProjectDisplayName(project) @this.ProjectCaption(project) @if (this.projectsWithMissingDetails.Contains(project.ProjectId)) { @T("Details missing") } @if (!project.IsAvailable) { @this.ProjectStatusName(project.Status) } } } @T("New preparation") @if (this.selectedProject is { IsAvailable: false } unavailableProject) { @this.ProjectDisplayName(unavailableProject) @this.ProjectRecoveryMessage(unavailableProject.Status) @T("AI Studio has left the files of this preparation unchanged. A future update may make it accessible again.") @T("Preparation ID"): @unavailableProject.ProjectId.ToString("D") @T("Delete") } else if (this.selectedProject?.Project is { } project) { @* Stays at the top while the person scrolls, like the header of the workspaces: the preparation, its provider, and the steps remain in view, and only the list of preparations scrolls away. The empty anchor before it marks where the header sits in the flow, to scroll back there for another step. Its background is that of the page, which lies on the paper of MainLayout: the background of the palette is darker in the dark mode. *@
@project.Name @if (project.HappenedAtUtc is { } happenedAtUtc) { @string.Format(Culture, T("Marked on {0}."), happenedAtUtc.ToLocalTime().ToString("d", Culture)) } @T("The event has taken place") @T("Rename") @T("Delete") @* The steps have no content of their own: only the navigation of the stepper stays in view, and the step shown follows below. *@ @foreach (var step in BflStep.All) { }
@* The material stands beside the step, as it applies to all steps, and below it on a narrow window. It stays out of the key of the step, so that reading a document goes on when the person picks another step. Beside the step, it stays in view below the header, see the scoped CSS of this page. *@
@* It checks the test folder anew for every step, as the key of the step recreates it: *@ @this.activeStep.Title @this.activeStep.Description @TA("Your details") @if (this.forms.TryGetValue(this.activeStep, out var form)) { var step = this.activeStep; } else { @TA("AI Studio cannot open your details for this step. Their file may be damaged, or a newer version of AI Studio stored it. AI Studio leaves the file unchanged.") }
} else { @TA("Create a preparation to begin.") }