From 6eeb37625e09c9d5ae49510244370780726bad2d Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sat, 1 Aug 2026 11:08:26 +0200 Subject: [PATCH] Fixed form validation --- .../Assistants/I18N/allTexts.lua | 18 ++ .../VisualBriefingAssistant.razor | 282 +++++++++--------- .../VisualBriefingAssistant.razor.Projects.cs | 7 + ...isualBriefingAssistant.razor.Validation.cs | 82 +++++ .../VisualBriefingAssistant.razor.cs | 18 ++ .../plugin.lua | 18 ++ .../plugin.lua | 18 ++ 7 files changed, 306 insertions(+), 137 deletions(-) create mode 100644 app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Validation.cs diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index 768c4435..ad6aac89 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -2299,6 +2299,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- The visual briefing settings could not be saved. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T131371789"] = "The visual briefing settings could not be saved." +-- Please provide a custom target language. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1330607941"] = "Please provide a custom target language." + -- AI Studio cannot read this visual briefing. Its files may be incompatible or damaged. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T138425430"] = "AI Studio cannot read this visual briefing. Its files may be incompatible or damaged." @@ -2338,6 +2341,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- This briefing revision was already imported. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1732858483"] = "This briefing revision was already imported." +-- Please select a provider. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1809312323"] = "Please select a provider." + -- Cannot be opened UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1981873292"] = "Cannot be opened" @@ -2452,6 +2458,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Export visual briefing UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3261790455"] = "Export visual briefing" +-- The source '{0}' is no longer reachable. Restore or relink it. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3270802829"] = "The source '{0}' is no longer reachable. Restore or relink it." + -- Could not open the visual briefing project folder. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Could not open the visual briefing project folder." @@ -2518,6 +2527,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Actions UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3865031940"] = "Actions" +-- The transcript for '{0}' is missing or outdated. Transcribe the media source again. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3882911085"] = "The transcript for '{0}' is missing or outdated. Transcribe the media source again." + -- Export UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3898821075"] = "Export" @@ -2623,6 +2635,12 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Visual briefing preview UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T740269027"] = "Visual briefing preview" +-- Please provide a custom protection level. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T799692129"] = "Please provide a custom protection level." + +-- Please provide a briefing name. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Please provide a briefing name." + -- Build progress UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T909046610"] = "Build progress" diff --git a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor index fa083093..d31026c8 100644 --- a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor +++ b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor @@ -78,152 +78,160 @@ } else { - - @this.projectName - - @T("Rename") - @T("Delete") + + + @this.projectName + + @T("Rename") + @T("Delete") + - - - - - + + + + + + + + + + + + + + + + + + @T("Source material") + @T("Documents, spreadsheets, images, audio, and video are considered as source context.") + + - - + + + @T("Visual assets") + @T("PNG, JPEG, and WebP assets are analyzed and must appear visibly in the briefing.") + + - - - - - - - - @T("Source material") - @T("Documents, spreadsheets, images, audio, and video are considered as source context.") - - - - - - @T("Visual assets") - @T("PNG, JPEG, and WebP assets are analyzed and must appear visibly in the briefing.") - - - - - - @if (this.selectedBriefing.Sources.Count > 0) - { - - - @T("Linked sources") - @T("Refresh status") - - - - @T("File") - @T("Kind") - @T("Status") - @T("Actions") - - - @Path.GetFileName(context.Path) - @context.Kind - - @this.SourceStatusName(context.Status) - - - - - - @if (context.IsMedia && context.Status is VisualBriefingSourceStatus.TRANSCRIPT_OUTDATED) - { - - + @if (this.selectedBriefing.Sources.Count > 0) + { + + + @T("Linked sources") + @T("Refresh status") + + + + @T("File") + @T("Kind") + @T("Status") + @T("Actions") + + + @Path.GetFileName(context.Path) + @context.Kind + + @this.SourceStatusName(context.Status) + + + + - } - - - - - - + @if (context.IsMedia && context.Status is VisualBriefingSourceStatus.TRANSCRIPT_OUTDATED) + { + + + + } + + + + + + + + } + + + @T("Briefing settings") + + + + + + + + @T("Show source references") + @T("Optimize large visual assets") - } - - @T("Briefing settings") - - - - - - - - @T("Show source references") - @T("Optimize large visual assets") - + + @if (this.selectedBriefing.Versions.Count == 0) + { + @T("Create briefing") + } + else + { + + + @T("Change design") + + + + + @T("Update content") + + + + + @T("Recompile briefing") + + + + + @T("Rebuild briefing") + + + } + + - - @if (this.selectedBriefing.Versions.Count == 0) - { - @T("Create briefing") - } - else - { - - - @T("Change design") - - - - - @T("Update content") - - - - - @T("Recompile briefing") - - - - - @T("Rebuild briefing") - - - } - + @if (this.latestBuild is not null) { @@ -294,7 +302,7 @@ Color="Color.Warning" StartIcon="@Icons.Material.Filled.Refresh" OnClick="@(() => this.GenerateAsync(VisualBriefingEditMode.REBUILD, reusableBuildId))" - Disabled="@this.IsCurrentBusy"> + Disabled="@this.CannotGenerate(VisualBriefingEditMode.REBUILD)"> @T("Continue as rebuild") diff --git a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Projects.cs b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Projects.cs index 1c6ee3e4..e64fccec 100644 --- a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Projects.cs +++ b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Projects.cs @@ -295,6 +295,9 @@ public partial class VisualBriefingAssistant } this.lastPersistedState = this.BuildPersistenceFingerprint(); + this.formIssues = []; + this.formIsValid = false; + this.formValidationPending = true; } /// @@ -328,6 +331,10 @@ public partial class VisualBriefingAssistant this.lastBuildDiagnostics = null; this.reusableContentBuildId = null; this.lastPersistedState = string.Empty; + this.formIssues = []; + this.formIsValid = false; + this.formValidationPending = false; + this.visualBriefingForm?.ResetValidation(); } /// diff --git a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Validation.cs b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Validation.cs new file mode 100644 index 00000000..4178854f --- /dev/null +++ b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Validation.cs @@ -0,0 +1,82 @@ +using AIStudio.Provider; + +using ProviderSettings = AIStudio.Settings.Provider; + +namespace AIStudio.Assistants.VisualBriefing; + +public partial class VisualBriefingAssistant +{ + /// Gets all current field, source, and revision issues shown below the actions. + private IReadOnlyList ValidationIssues + { + get + { + List issues = [.. this.formIssues]; + + AddIssue(issues, this.ValidateProjectName(this.projectName)); + AddIssue(issues, this.ValidateProvider(this.provider)); + AddIssue(issues, this.ValidateCustomTargetLanguage(this.customTargetLanguage)); + AddIssue(issues, this.ValidateCustomProtectionLevel(this.customProtectionLevel)); + + if (this.selectedBriefing is not null) + { + foreach (var source in this.selectedBriefing.Sources) + { + var fileName = Path.GetFileName(source.Path); + switch (source.Status) + { + case VisualBriefingSourceStatus.UNREACHABLE: + issues.Add(string.Format(T("The source '{0}' is no longer reachable. Restore or relink it."), fileName)); + break; + + case VisualBriefingSourceStatus.TRANSCRIPT_OUTDATED: + issues.Add(string.Format(T("The transcript for '{0}' is missing or outdated. Transcribe the media source again."), fileName)); + break; + } + } + + if (this.selectedBriefing.Versions.Count > 0 && !this.SelectedVersionSupportsEdits) + issues.Add(T("This version has no compatible semantic artifacts. Rebuild the briefing instead.")); + } + + return [.. issues.Where(issue => !string.IsNullOrWhiteSpace(issue)).Distinct(StringComparer.Ordinal)]; + } + } + + /// Validates the briefing name. + private string? ValidateProjectName(string name) => string.IsNullOrWhiteSpace(name) ? T("Please provide a briefing name.") : null; + + /// Validates the selected generation provider. + private string? ValidateProvider(ProviderSettings value) => + value == ProviderSettings.NONE || value.UsedLLMProvider is LLMProviders.NONE + ? T("Please select a provider.") + : null; + + /// Validates the free-form target language when Other is selected. + private string? ValidateCustomTargetLanguage(string language) => + this.targetLanguage is CommonLanguages.OTHER && string.IsNullOrWhiteSpace(language) + ? T("Please provide a custom target language.") + : null; + + /// Validates the free-form protection level when Other is selected. + private string? ValidateCustomProtectionLevel(string level) => + this.protectionLevel is VisualBriefingProtectionLevel.OTHER && string.IsNullOrWhiteSpace(level) + ? T("Please provide a custom protection level.") + : null; + + /// Revalidates after a conditional Other field has been added or removed. + private Task ScheduleFormValidation() + { + this.formValidationPending = true; + this.StateHasChanged(); + + return Task.CompletedTask; + } + + /// Adds one optional validation message. + private static void AddIssue(ICollection issues, string? issue) + { + if (!string.IsNullOrWhiteSpace(issue)) + issues.Add(issue); + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.cs b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.cs index 73075d4e..6248ffc7 100644 --- a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.cs +++ b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.cs @@ -178,6 +178,18 @@ public partial class VisualBriefingAssistant : MSGComponentBase /// Stores incompatible validated content offered for rebuild continuation. private Guid? reusableContentBuildId; + /// Owns MudBlazor validation for the selected briefing editor. + private MudForm? visualBriefingForm; + + /// Stores whether all MudBlazor fields in the editor are currently valid. + private bool formIsValid; + + /// Stores the current MudBlazor validation messages. + private string[] formIssues = []; + + /// Requests validation after conditional form controls have rendered. + private bool formValidationPending; + /// /// Defines IsCurrentBusy for the visual briefing feature. /// @@ -240,6 +252,12 @@ public partial class VisualBriefingAssistant : MSGComponentBase protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); + if (this.formValidationPending && this.visualBriefingForm is not null) + { + this.formValidationPending = false; + await this.visualBriefingForm.Validate(); + } + if (this.selectedBriefing is null || this.IsCurrentBusy) return; diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua index df84faec..7abca7f8 100644 --- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua @@ -2301,6 +2301,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- The visual briefing settings could not be saved. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T131371789"] = "Die Einstellungen für das visuelle Briefing konnten nicht gespeichert werden." +-- Please provide a custom target language. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1330607941"] = "Bitte geben Sie eine benutzerdefinierte Zielsprache an." + -- AI Studio cannot read this visual briefing. Its files may be incompatible or damaged. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T138425430"] = "AI Studio kann dieses visuelle Briefing nicht lesen. Die Dateien sind möglicherweise inkompatibel oder beschädigt." @@ -2340,6 +2343,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- This briefing revision was already imported. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1732858483"] = "Diese Briefing-Revision wurde bereits importiert." +-- Please select a provider. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1809312323"] = "Bitte wählen Sie einen Anbieter aus." + -- Cannot be opened UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1981873292"] = "Kann nicht geöffnet werden" @@ -2454,6 +2460,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Export visual briefing UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3261790455"] = "Visuelles Briefing exportieren" +-- The source '{0}' is no longer reachable. Restore or relink it. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3270802829"] = "Die Quelle „{0}“ ist nicht mehr erreichbar. Stelle sie wieder her oder verknüpfe sie erneut." + -- Could not open the visual briefing project folder. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Der Projektordner für das visuelle Briefing konnte nicht geöffnet werden." @@ -2520,6 +2529,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Actions UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3865031940"] = "Aktionen" +-- The transcript for '{0}' is missing or outdated. Transcribe the media source again. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3882911085"] = "Das Transkript für „{0}“ fehlt oder ist nicht mehr aktuell. Transkribieren Sie die Medienquelle erneut." + -- Export UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3898821075"] = "Exportieren" @@ -2625,6 +2637,12 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Visual briefing preview UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T740269027"] = "Vorschau des visuellen Briefings" +-- Please provide a custom protection level. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T799692129"] = "Bitte geben Sie eine benutzerdefinierte Schutzstufe an." + +-- Please provide a briefing name. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Bitte geben Sie einen Namen für das Briefing ein." + -- Build progress UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T909046610"] = "Erstellungsfortschritt" diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua index 1bdb9d24..edf3c54c 100644 --- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua @@ -2301,6 +2301,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- The visual briefing settings could not be saved. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T131371789"] = "The visual briefing settings could not be saved." +-- Please provide a custom target language. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1330607941"] = "Please provide a custom target language." + -- AI Studio cannot read this visual briefing. Its files may be incompatible or damaged. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T138425430"] = "AI Studio cannot read this visual briefing. Its files may be incompatible or damaged." @@ -2340,6 +2343,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- This briefing revision was already imported. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1732858483"] = "This briefing revision was already imported." +-- Please select a provider. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1809312323"] = "Please select a provider." + -- Cannot be opened UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1981873292"] = "Cannot be opened" @@ -2454,6 +2460,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Export visual briefing UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3261790455"] = "Export visual briefing" +-- The source '{0}' is no longer reachable. Restore or relink it. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3270802829"] = "The source '{0}' is no longer reachable. Restore or relink it." + -- Could not open the visual briefing project folder. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3290777125"] = "Could not open the visual briefing project folder." @@ -2520,6 +2529,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Actions UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3865031940"] = "Actions" +-- The transcript for '{0}' is missing or outdated. Transcribe the media source again. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3882911085"] = "The transcript for '{0}' is missing or outdated. Transcribe the media source again." + -- Export UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T3898821075"] = "Export" @@ -2625,6 +2637,12 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Visual briefing preview UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T740269027"] = "Visual briefing preview" +-- Please provide a custom protection level. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T799692129"] = "Please provide a custom protection level." + +-- Please provide a briefing name. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T902674552"] = "Please provide a briefing name." + -- Build progress UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T909046610"] = "Build progress"