@using AIStudio.Chat <MudText Typo="Typo.h3" Class="mb-2 mr-3"> @(this.Title) </MudText> <InnerScrolling HeaderHeight="6em"> <ChildContent> <MudForm @ref="@(this.form)" @bind-IsValid="@(this.inputIsValid)" @bind-Errors="@(this.inputIssues)" Class="pr-2"> <MudText Typo="Typo.body1" Align="Align.Justify" Class="mb-6"> @(this.Description) </MudText> @if (this.Body is not null) { @(this.Body) } </MudForm> <Issues IssuesData="@(this.inputIssues)"/> @if (this.ShowDedicatedProgress && this.isProcessing) { <MudProgressLinear Color="Color.Primary" Indeterminate="true" Class="mb-6" /> } <div id="@RESULT_DIV_ID" class="mr-2 mt-3"> </div> @if (this.ShowResult && this.resultingContentBlock is not null) { <ContentBlockComponent Role="@(this.resultingContentBlock.Role)" Type="@(this.resultingContentBlock.ContentType)" Time="@(this.resultingContentBlock.Time)" Content="@(this.resultingContentBlock.Content)"/> } <div id="@AFTER_RESULT_DIV_ID" class="mt-3"> </div> </ChildContent> <FooterContent> <MudStack Row="@true" Wrap="Wrap.Wrap" Class="ma-1"> @if (!this.FooterButtons.Any(x => x.Type is ButtonTypes.SEND_TO)) { <MudMenu StartIcon="@Icons.Material.Filled.Apps" EndIcon="@Icons.Material.Filled.KeyboardArrowDown" Label="Send to ..." Variant="Variant.Filled" Color="Color.Info"> @foreach (var assistant in Enum.GetValues<Components>().OrderBy(n => n.Name().Length)) { if (assistant is Components.NONE || this.Component == assistant) continue; <MudMenuItem OnClick="() => this.SendToAssistant(assistant, new())"> @assistant.Name() </MudMenuItem> } </MudMenu> } @foreach (var button in this.FooterButtons) { switch (button) { case ButtonData buttonData when !string.IsNullOrWhiteSpace(buttonData.Tooltip): <MudTooltip Text="@buttonData.Tooltip"> <MudButton Variant="Variant.Filled" Color="@buttonData.Color" StartIcon="@GetButtonIcon(buttonData.Icon)" OnClick="async () => await buttonData.AsyncAction()"> @buttonData.Text </MudButton> </MudTooltip> break; case ButtonData buttonData: <MudButton Variant="Variant.Filled" Color="@buttonData.Color" StartIcon="@GetButtonIcon(buttonData.Icon)" OnClick="async () => await buttonData.AsyncAction()"> @buttonData.Text </MudButton> break; case SendToButton sendToButton: <MudMenu StartIcon="@Icons.Material.Filled.Apps" EndIcon="@Icons.Material.Filled.KeyboardArrowDown" Label="Send to ..." Variant="Variant.Filled" Color="Color.Info"> @foreach (var assistant in Enum.GetValues<Components>().OrderBy(n => n.Name().Length)) { if(assistant is Components.NONE || sendToButton.Self == assistant) continue; <MudMenuItem OnClick="() => this.SendToAssistant(assistant, sendToButton)"> @assistant.Name() </MudMenuItem> } </MudMenu> break; } } <MudButton Variant="Variant.Filled" StartIcon="@Icons.Material.Filled.ContentCopy" OnClick="() => this.CopyToClipboard()"> Copy result </MudButton> <MudButton Variant="Variant.Filled" Color="Color.Warning" StartIcon="@Icons.Material.Filled.Refresh" OnClick="() => this.InnerResetForm()"> Reset </MudButton> </MudStack> </FooterContent> </InnerScrolling>