From 759a073021e5781a7b92453ced8f60f6d614c961 Mon Sep 17 00:00:00 2001 From: Sabrina-devops Date: Thu, 18 Dec 2025 15:00:27 +0100 Subject: [PATCH] Added possibility to view file attachments in chat (#594) Co-authored-by: Thorsten Sommer --- .../Assistants/I18N/allTexts.lua | 36 +++++-- .../Chat/ContentBlockComponent.razor | 3 +- .../Chat/ContentBlockComponent.razor.cs | 6 ++ .../Components/AttachDocuments.razor | 43 ++++++--- .../Components/AttachDocuments.razor.cs | 32 ++++++- .../Dialogs/ReviewAttachmentsDialog.razor | 96 +++++++++++++++++++ .../Dialogs/ReviewAttachmentsDialog.razor.cs | 44 +++++++++ .../plugin.lua | 36 +++++-- .../plugin.lua | 36 +++++-- 9 files changed, 299 insertions(+), 33 deletions(-) create mode 100644 app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor create mode 100644 app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor.cs diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index 478e95ba..9b8fd6b4 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -1522,24 +1522,30 @@ UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T349928509"] = "The ima -- Open Settings UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ASSISTANTBLOCK::T1172211894"] = "Open Settings" +-- Click the paperclip to attach files, or click the number to see your attached files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1358313858"] = "Click the paperclip to attach files, or click the number to see your attached files." + +-- Drop files here to attach them. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T143112277"] = "Drop files here to attach them." + +-- Click here to attach files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1875575968"] = "Click here to attach files." + -- Drag and drop files into the marked area or click here to attach documents: UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T230755331"] = "Drag and drop files into the marked area or click here to attach documents:" +-- Select files to attach +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2495931372"] = "Select files to attach" + -- Document Preview UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T285154968"] = "Document Preview" --- Click to attach files -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3521845090"] = "Click to attach files" - -- Clear file list UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3759696136"] = "Clear file list" -- Add file UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4014053962"] = "Add file" --- Select a file to attach -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T595772870"] = "Select a file to attach" - -- Changelog UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHANGELOG::T3017574265"] = "Changelog" @@ -3424,6 +3430,24 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T900713019"] = "Canc -- Embeddings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T951463987"] = "Embeddings" +-- Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T1746160064"] = "Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon." + +-- There aren't any file attachments available right now. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T2111340711"] = "There aren't any file attachments available right now." + +-- The file was deleted, renamed, or moved. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3083729256"] = "The file was deleted, renamed, or moved." + +-- Your attached file. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3154198222"] = "Your attached file." + +-- Your attached files +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3909191077"] = "Your attached files" + +-- Remove this attachment. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3933470258"] = "Remove this attachment." + -- There is no social event UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGAGENDA::T1222800281"] = "There is no social event" diff --git a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor index 4f222b92..7c09ae78 100644 --- a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor +++ b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor @@ -20,7 +20,8 @@ { - + } diff --git a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs index efa9c31b..e29a016d 100644 --- a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs +++ b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs @@ -1,4 +1,5 @@ using AIStudio.Components; +using AIStudio.Dialogs; using AIStudio.Tools.Services; using Microsoft.AspNetCore.Components; @@ -188,4 +189,9 @@ public partial class ContentBlockComponent : MSGComponentBase await this.EditLastUserBlockFunc(this.Content); } + private async Task OpenAttachmentsDialog() + { + var result = await ReviewAttachmentsDialog.OpenDialogAsync(this.DialogService, this.Content.FileAttachments.ToHashSet()); + this.Content.FileAttachments = result.ToList(); + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/AttachDocuments.razor b/app/MindWork AI Studio/Components/AttachDocuments.razor index 37e5deea..bcc3f9d7 100644 --- a/app/MindWork AI Studio/Components/AttachDocuments.razor +++ b/app/MindWork AI Studio/Components/AttachDocuments.razor @@ -3,28 +3,49 @@ @if (this.UseSmallForm) {
- @{ - var fileInfos = this.DocumentPaths.Select(file => new FileInfo(file)).ToList(); - } - @if (fileInfos.Any()) + @if (this.isDraggingOver) { - + Overlap="true" + Class="cursor-pointer" + OnClick="@this.OpenAttachmentsDialog"> + + + } + else if (this.DocumentPaths.Any()) + { + + + + + + } else { - + + OnClick="@this.AddFilesManually"/> }
diff --git a/app/MindWork AI Studio/Components/AttachDocuments.razor.cs b/app/MindWork AI Studio/Components/AttachDocuments.razor.cs index c178d610..ac29b190 100644 --- a/app/MindWork AI Studio/Components/AttachDocuments.razor.cs +++ b/app/MindWork AI Studio/Components/AttachDocuments.razor.cs @@ -1,4 +1,5 @@ using AIStudio.Dialogs; +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; using AIStudio.Tools.Services; using AIStudio.Tools.Validation; @@ -11,6 +12,8 @@ using DialogOptions = Dialogs.DialogOptions; public partial class AttachDocuments : MSGComponentBase { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AttachDocuments).Namespace, nameof(AttachDocuments)); + [Parameter] public string Name { get; set; } = string.Empty; @@ -45,6 +48,10 @@ public partial class AttachDocuments : MSGComponentBase private PandocAvailabilityService PandocAvailabilityService { get; init; } = null!; private const Placement TOOLBAR_TOOLTIP_PLACEMENT = Placement.Top; + private static readonly string DROP_FILES_HERE_TEXT = TB("Drop files here to attach them."); + + private bool isComponentHovered; + private bool isDraggingOver; #region Overrides of MSGComponentBase @@ -65,10 +72,23 @@ public partial class AttachDocuments : MSGComponentBase return; } + this.isDraggingOver = true; this.SetDragClass(); this.StateHasChanged(); break; + case Event.TAURI_EVENT_RECEIVED when data is TauriEvent { EventType: TauriEventType.FILE_DROP_CANCELED }: + this.isDraggingOver = false; + this.StateHasChanged(); + break; + + case Event.TAURI_EVENT_RECEIVED when data is TauriEvent { EventType: TauriEventType.WINDOW_NOT_FOCUSED }: + this.isDraggingOver = false; + this.isComponentHovered = false; + this.ClearDragClass(); + this.StateHasChanged(); + break; + case Event.TAURI_EVENT_RECEIVED when data is TauriEvent { EventType: TauriEventType.FILE_DROP_DROPPED, Payload: var paths }: if(!this.isComponentHovered && !this.CatchAllDocuments) { @@ -85,6 +105,7 @@ public partial class AttachDocuments : MSGComponentBase if (!pandocState.IsAvailable) { this.Logger.LogWarning("The user cancelled the Pandoc installation or Pandoc is not available. Aborting file drop."); + this.isDraggingOver = false; this.ClearDragClass(); this.StateHasChanged(); return; @@ -100,6 +121,8 @@ public partial class AttachDocuments : MSGComponentBase await this.DocumentPathsChanged.InvokeAsync(this.DocumentPaths); await this.OnChange(this.DocumentPaths); + this.isDraggingOver = false; + this.ClearDragClass(); this.StateHasChanged(); break; } @@ -111,8 +134,6 @@ public partial class AttachDocuments : MSGComponentBase private string dragClass = DEFAULT_DRAG_CLASS; - private bool isComponentHovered; - private async Task AddFilesManually() { // Ensure that Pandoc is installed and ready: @@ -127,7 +148,7 @@ public partial class AttachDocuments : MSGComponentBase return; } - var selectFiles = await this.RustService.SelectFiles(T("Select a file to attach")); + var selectFiles = await this.RustService.SelectFiles(T("Select files to attach")); if (selectFiles.UserCancelled) return; @@ -145,6 +166,11 @@ public partial class AttachDocuments : MSGComponentBase await this.DocumentPathsChanged.InvokeAsync(this.DocumentPaths); await this.OnChange(this.DocumentPaths); } + + private async Task OpenAttachmentsDialog() + { + this.DocumentPaths = await ReviewAttachmentsDialog.OpenDialogAsync(this.DialogService, this.DocumentPaths); + } private async Task ClearAllFiles() { diff --git a/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor new file mode 100644 index 00000000..5bde0562 --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor @@ -0,0 +1,96 @@ +@inherits MSGComponentBase + + + + + @T("Your attached files") + + + + + @T("Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon.") + + + + +
+ @if (!this.DocumentPaths.Any()) + { + + @T("There aren't any file attachments available right now.") + + } + + @{ + var currentFolder = string.Empty; + foreach (var filePath in this.DocumentPaths) + { + var folderPath = Path.GetDirectoryName(filePath); + if (folderPath != currentFolder) + { + currentFolder = folderPath; + + + + @folderPath: + + + } + + @if (File.Exists(filePath)) + { + +
+ + + + + @Path.GetFileName(filePath) + + + +
+ + + + +
+ + } + else + { + +
+ + + + + @Path.GetFileName(filePath) + + + +
+ + + + +
+ } + } + } +
+
+ + + Close + + +
\ No newline at end of file diff --git a/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor.cs new file mode 100644 index 00000000..ee5fc592 --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor.cs @@ -0,0 +1,44 @@ +using AIStudio.Components; +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Dialogs; + +public partial class ReviewAttachmentsDialog : MSGComponentBase +{ + [CascadingParameter] + private IMudDialogInstance MudDialog { get; set; } = null!; + + [Parameter] + public HashSet DocumentPaths { get; set; } = new(); + + [Inject] + private IDialogService DialogService { get; set; } = null!; + + private void Close() => this.MudDialog.Close(DialogResult.Ok(this.DocumentPaths)); + + public static async Task> OpenDialogAsync(IDialogService dialogService, params HashSet documentPaths) + { + var dialogParameters = new DialogParameters + { + { x => x.DocumentPaths, documentPaths } + }; + + var dialogReference = await dialogService.ShowAsync("Your attached documents", dialogParameters, DialogOptions.FULLSCREEN); + var dialogResult = await dialogReference.Result; + if (dialogResult is null || dialogResult.Canceled) + return documentPaths; + + if (dialogResult.Data is null) + return documentPaths; + + return dialogResult.Data as HashSet ?? documentPaths; + } + + private void DeleteAttachment(string filePath) + { + if (this.DocumentPaths.Remove(filePath)) + { + this.StateHasChanged(); + } + } +} \ No newline at end of file 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 ada2fbbb..5f5baf5f 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 @@ -1524,24 +1524,30 @@ UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T349928509"] = "Das Bil -- Open Settings UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ASSISTANTBLOCK::T1172211894"] = "Einstellungen öffnen" +-- Click the paperclip to attach files, or click the number to see your attached files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1358313858"] = "Klicken Sie auf die Büroklammer, um Dateien anzuhängen, oder klicken Sie auf die Zahl, um Ihre angehängten Dateien anzuzeigen." + +-- Drop files here to attach them. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T143112277"] = "Dateien hier ablegen, um sie anzuhängen." + +-- Click here to attach files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1875575968"] = "Klicken Sie hier, um Dateien anzuhängen." + -- Drag and drop files into the marked area or click here to attach documents: UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T230755331"] = "Ziehen Sie Dateien in den markierten Bereich oder klicken Sie hier, um Dokumente anzuhängen:" +-- Select files to attach +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2495931372"] = "Dateien zum Anhängen auswählen" + -- Document Preview UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T285154968"] = "Dokumentenvorschau" --- Click to attach files -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3521845090"] = "Klicken, um Dateien anzuhängen" - -- Clear file list UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3759696136"] = "Dateiliste löschen" -- Add file UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4014053962"] = "Datei hinzufügen" --- Select a file to attach -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T595772870"] = "Datei zum Anhängen auswählen" - -- Changelog UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHANGELOG::T3017574265"] = "Änderungsprotokoll" @@ -3426,6 +3432,24 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T900713019"] = "Abbr -- Embeddings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T951463987"] = "Einbettungen" +-- Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T1746160064"] = "Hier sehen Sie alle angehängten Dateien. Dateien, die nicht mehr gefunden werden können (gelöscht, umbenannt oder verschoben), sind mit einem Warnsymbol und einem durchgestrichenen Namen markiert. Sie können jeden Anhang über das Papierkorbsymbol entfernen." + +-- There aren't any file attachments available right now. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T2111340711"] = "Derzeit sind keine Dateianhänge verfügbar." + +-- The file was deleted, renamed, or moved. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3083729256"] = "Die Datei wurde gelöscht, umbenannt oder verschoben." + +-- Your attached file. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3154198222"] = "Ihre angehängte Datei." + +-- Your attached files +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3909191077"] = "Ihre angehängten Dateien" + +-- Remove this attachment. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3933470258"] = "Diesen Anhang entfernen." + -- There is no social event UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGAGENDA::T1222800281"] = "Es gibt keine gesellschaftliche Veranstaltung." 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 8bba7106..1a2e0d0e 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 @@ -1524,24 +1524,30 @@ UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T349928509"] = "The ima -- Open Settings UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ASSISTANTBLOCK::T1172211894"] = "Open Settings" +-- Click the paperclip to attach files, or click the number to see your attached files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1358313858"] = "Click the paperclip to attach files, or click the number to see your attached files." + +-- Drop files here to attach them. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T143112277"] = "Drop files here to attach them." + +-- Click here to attach files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1875575968"] = "Click here to attach files." + -- Drag and drop files into the marked area or click here to attach documents: UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T230755331"] = "Drag and drop files into the marked area or click here to attach documents:" +-- Select files to attach +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2495931372"] = "Select files to attach" + -- Document Preview UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T285154968"] = "Document Preview" --- Click to attach files -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3521845090"] = "Click to attach files" - -- Clear file list UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3759696136"] = "Clear file list" -- Add file UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4014053962"] = "Add file" --- Select a file to attach -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T595772870"] = "Select a file to attach" - -- Changelog UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHANGELOG::T3017574265"] = "Changelog" @@ -3426,6 +3432,24 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T900713019"] = "Canc -- Embeddings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T951463987"] = "Embeddings" +-- Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T1746160064"] = "Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon." + +-- There aren't any file attachments available right now. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T2111340711"] = "There aren't any file attachments available right now." + +-- The file was deleted, renamed, or moved. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3083729256"] = "The file was deleted, renamed, or moved." + +-- Your attached file. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3154198222"] = "Your attached file." + +-- Your attached files +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3909191077"] = "Your attached files" + +-- Remove this attachment. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3933470258"] = "Remove this attachment." + -- There is no social event UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGAGENDA::T1222800281"] = "There is no social event"