diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor index 158a72a0..325a6f39 100644 --- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor +++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor @@ -12,7 +12,7 @@ if (component is AssistantTextArea textArea) { var lines = textArea.IsSingleLine ? 1 : 6; - + } break; case AssistantComponentType.IMAGE: @@ -23,7 +23,7 @@ { var image = assistantImage;
- + @if (!string.IsNullOrWhiteSpace(image.Caption)) { @image.Caption @@ -39,13 +39,17 @@ ProviderSettings="@this.providerSettings" @bind-AgentIsRunning="@webState.AgentIsRunning" @bind-Preselect="@webState.Preselect" - @bind-PreselectContentCleanerAgent="@webState.PreselectContentCleanerAgent" /> + @bind-PreselectContentCleanerAgent="@webState.PreselectContentCleanerAgent" + Class="@webContent.Class" + Style="@webContent.Style" /> } break; case AssistantComponentType.FILE_CONTENT_READER: if (component is AssistantFileContentReader fileContent && this.fileContentFields.TryGetValue(fileContent.Name, out var fileState)) { - + } break; @@ -56,26 +60,34 @@ @bind-Value="@this.dropdownFields[assistantDropdown.Name]" Default="@assistantDropdown.Default" Label="@assistantDropdown.Label" - Icon="@Icons.Material.Filled.Translate"/> + Icon="@Icons.Material.Filled.Translate" + Class="@assistantDropdown.Class" + Style="@assistantDropdown.Style"/> } break; case AssistantComponentType.PROVIDER_SELECTION: if (component is AssistantProviderSelection providerSelection) { - + } break; case AssistantComponentType.PROFILE_SELECTION: if (component is AssistantProfileSelection profileSelection) { var selection = profileSelection; - + } break; case AssistantComponentType.SWITCH: if (component is AssistantSwitch assistantSwitch) { - + } break; case AssistantComponentType.HEADING: @@ -85,16 +97,16 @@ @switch (assistantHeading.Level) { case 1: - @heading.Text + @heading.Text break; case 2: - @heading.Text + @heading.Text break; case 3: - @heading.Text + @heading.Text break; default: - @heading.Text + @heading.Text break; } } @@ -103,14 +115,14 @@ if (component is AssistantText assistantText) { var text = assistantText; - @text.Content + @text.Content } break; case AssistantComponentType.LIST: if (component is AssistantList assistantList) { var list = assistantList; - + @foreach (var item in list.Items) { @if (item.Type == "LINK") diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs index c1d93359..7fbb79cb 100644 --- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs +++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs @@ -307,6 +307,21 @@ public partial class AssistantDynamic : AssistantBaseCore return prompt; } + + private static string MergeClass(string customClass, string fallback) + { + var trimmedCustom = customClass?.Trim() ?? string.Empty; + var trimmedFallback = fallback?.Trim() ?? string.Empty; + if (string.IsNullOrEmpty(trimmedCustom)) + return trimmedFallback; + + if (string.IsNullOrEmpty(trimmedFallback)) + return trimmedCustom; + + return $"{trimmedCustom} {trimmedFallback}"; + } + + private string? GetOptionalStyle(string? style) => string.IsNullOrWhiteSpace(style) ? null : style; private string? ValidateProfileSelection(AssistantProfileSelection profileSelection, Profile profile) { diff --git a/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor b/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor index 647bc2ca..0c209c11 100644 --- a/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor +++ b/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor @@ -1,4 +1,4 @@ - + } - \ No newline at end of file + diff --git a/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor.cs b/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor.cs index 5ecc5a1a..cde6cdfd 100644 --- a/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor.cs +++ b/app/MindWork AI Studio/Components/DynamicAssistantDropdown.razor.cs @@ -9,27 +9,24 @@ namespace AIStudio.Components { public partial class DynamicAssistantDropdown : ComponentBase { - [Parameter] - public List Items { get; set; } = new(); - - [Parameter] - public AssistantDropdownItem Default { get; set; } = new(); + [Parameter] public List Items { get; set; } = new(); - [Parameter] - public string Value { get; set; } = string.Empty; + [Parameter] public AssistantDropdownItem Default { get; set; } = new(); - [Parameter] - public EventCallback ValueChanged { get; set; } + [Parameter] public string Value { get; set; } = string.Empty; - [Parameter] - public string Label { get; set; } = string.Empty; + [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] - public Func ValidateSelection { get; set; } = _ => null; + [Parameter] public string Label { get; set; } = string.Empty; + + [Parameter] public Func ValidateSelection { get; set; } = _ => null; + + [Parameter] public string Icon { get; set; } = Icons.Material.Filled.ArrowDropDown; + + [Parameter] public string Class { get; set; } = string.Empty; + + [Parameter] public string Style { get; set; } = string.Empty; - [Parameter] - public string Icon { get; set; } = Icons.Material.Filled.ArrowDropDown; - private async Task OnValueChanged(string newValue) { if (this.Value != newValue) @@ -38,5 +35,18 @@ namespace AIStudio.Components await this.ValueChanged.InvokeAsync(newValue); } } + + internal string MergeClasses(string custom, string fallback) + { + var trimmedCustom = custom?.Trim() ?? string.Empty; + var trimmedFallback = fallback?.Trim() ?? string.Empty; + if (string.IsNullOrEmpty(trimmedCustom)) + return trimmedFallback; + + if (string.IsNullOrEmpty(trimmedFallback)) + return trimmedCustom; + + return $"{trimmedCustom} {trimmedFallback}"; + } } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButton.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButton.cs index 00d134fc..65dc0301 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButton.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButton.cs @@ -1,6 +1,6 @@ namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantButton : AssistantComponentBase +internal sealed class AssistantButton : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.BUTTON; public Dictionary Props { get; set; } = new(); @@ -8,23 +8,30 @@ public class AssistantButton : AssistantComponentBase public string Name { - get => this.Props.TryGetValue(nameof(this.Name), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Name)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Name)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Name), value); } public string Text { - get => this.Props.TryGetValue(nameof(this.Text), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Text)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Text)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Text), value); } + public string Action { - get => this.Props.TryGetValue(nameof(this.Action), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Action)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Action)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Action), value); } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantComponentPropHelper.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantComponentPropHelper.cs new file mode 100644 index 00000000..dff3dd18 --- /dev/null +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantComponentPropHelper.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; + +namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; + +internal static class AssistantComponentPropHelper +{ + public static string ReadString(Dictionary props, string key) + { + if (props.TryGetValue(key, out var value)) + { + return value?.ToString() ?? string.Empty; + } + + return string.Empty; + } + + public static void WriteString(Dictionary props, string key, string value) + { + props[key] = value ?? string.Empty; + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantDropdown.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantDropdown.cs index ef3483f2..0357efa8 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantDropdown.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantDropdown.cs @@ -1,34 +1,31 @@ -namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; +using System.Collections.Generic; -public class AssistantDropdown : AssistantComponentBase +namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; + +internal sealed class AssistantDropdown : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.DROPDOWN; public Dictionary Props { get; set; } = new(); public List Children { get; set; } = new(); - + public string Name { - get => this.Props.TryGetValue(nameof(this.Name), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Name)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Name)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Name), value); } + public string Label { - get => this.Props.TryGetValue(nameof(this.Label), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Label)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Label)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Label), value); } - + public string UserPrompt { - get => this.Props.TryGetValue(nameof(this.UserPrompt), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.UserPrompt)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.UserPrompt)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.UserPrompt), value); } - + public AssistantDropdownItem Default { get @@ -40,15 +37,15 @@ public class AssistantDropdown : AssistantComponentBase } set => this.Props[nameof(this.Default)] = value; } - + public List Items { - get => this.Props.TryGetValue(nameof(this.Items), out var v) && v is List list - ? list + get => this.Props.TryGetValue(nameof(this.Items), out var v) && v is List list + ? list : []; set => this.Props[nameof(this.Items)] = value; } - + public string ValueType { get => this.Props.TryGetValue(nameof(this.ValueType), out var v) @@ -56,7 +53,7 @@ public class AssistantDropdown : AssistantComponentBase : "string"; set => this.Props[nameof(this.ValueType)] = value; } - + public IEnumerable GetParsedDropdownValues() { foreach (var item in this.Items) @@ -78,4 +75,16 @@ public class AssistantDropdown : AssistantComponentBase } } } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantFileContentReader.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantFileContentReader.cs index 9ca37341..5b99b13b 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantFileContentReader.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantFileContentReader.cs @@ -1,6 +1,6 @@ namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantFileContentReader : AssistantComponentBase +internal sealed class AssistantFileContentReader : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.FILE_CONTENT_READER; public Dictionary Props { get; set; } = new(); @@ -8,17 +8,25 @@ public class AssistantFileContentReader : AssistantComponentBase public string Name { - get => this.Props.TryGetValue(nameof(this.Name), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Name)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Name)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Name), value); } public string UserPrompt { - get => this.Props.TryGetValue(nameof(this.UserPrompt), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.UserPrompt)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.UserPrompt)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.UserPrompt), value); + } + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); } } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantHeading.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantHeading.cs index 78a16d83..970de353 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantHeading.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantHeading.cs @@ -1,19 +1,17 @@ +using System.Collections.Generic; + namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantHeading : AssistantComponentBase +internal sealed class AssistantHeading : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.HEADING; - public Dictionary Props { get; set; } = new(); - public List Children { get; set; } = new(); - + public string Text { - get => this.Props.TryGetValue(nameof(this.Text), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Text)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Text)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Text), value); } public int Level @@ -21,7 +19,19 @@ public class AssistantHeading : AssistantComponentBase get => this.Props.TryGetValue(nameof(this.Level), out var v) && int.TryParse(v.ToString(), out var i) ? i - : 2; + : 2; set => this.Props[nameof(this.Level)] = value; } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantImage.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantImage.cs index a929c370..82eedc79 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantImage.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantImage.cs @@ -1,6 +1,8 @@ +using System.Collections.Generic; + namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantImage : AssistantComponentBase +internal sealed class AssistantImage : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.IMAGE; public Dictionary Props { get; set; } = new(); @@ -8,25 +10,31 @@ public class AssistantImage : AssistantComponentBase public string Src { - get => this.Props.TryGetValue(nameof(this.Src), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Src)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Src)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Src), value); } public string Alt { - get => this.Props.TryGetValue(nameof(this.Alt), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Alt)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Alt)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Alt), value); } public string Caption { - get => this.Props.TryGetValue(nameof(this.Caption), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Caption)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Caption)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Caption), value); + } + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); } } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantList.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantList.cs index a3f7c5ce..fe69372b 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantList.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantList.cs @@ -1,18 +1,30 @@ +using System.Collections.Generic; + namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantList : AssistantComponentBase +internal sealed class AssistantList : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.LIST; - public Dictionary Props { get; set; } = new(); - public List Children { get; set; } = new(); - + public List Items { - get => this.Props.TryGetValue(nameof(this.Items), out var v) && v is List list - ? list + get => this.Props.TryGetValue(nameof(this.Items), out var v) && v is List list + ? list : []; set => this.Props[nameof(this.Items)] = value; } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProfileSelection.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProfileSelection.cs index dfbc7362..362e03cb 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProfileSelection.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProfileSelection.cs @@ -1,8 +1,8 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantProfileSelection : AssistantComponentBase +internal sealed class AssistantProfileSelection : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.PROFILE_SELECTION; public Dictionary Props { get; set; } = new(); @@ -10,9 +10,19 @@ public class AssistantProfileSelection : AssistantComponentBase public string ValidationMessage { - get => this.Props.TryGetValue(nameof(this.ValidationMessage), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.ValidationMessage)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.ValidationMessage)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.ValidationMessage), value); + } + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); } } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProviderSelection.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProviderSelection.cs index b98dae38..56515413 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProviderSelection.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantProviderSelection.cs @@ -1,6 +1,8 @@ -namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; +using System.Collections.Generic; -public class AssistantProviderSelection : AssistantComponentBase +namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; + +internal sealed class AssistantProviderSelection : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.PROVIDER_SELECTION; public Dictionary Props { get; set; } = new(); @@ -8,16 +10,25 @@ public class AssistantProviderSelection : AssistantComponentBase public string Name { - get => this.Props.TryGetValue(nameof(this.Name), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Name)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Name)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Name), value); } + public string Label { - get => this.Props.TryGetValue(nameof(this.Label), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Label)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Label)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Label), value); } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs index 5de760c2..204cd9db 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs @@ -1,6 +1,8 @@ -namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; +using System.Collections.Generic; -public class AssistantSwitch : AssistantComponentBase +namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; + +internal sealed class AssistantSwitch : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.SWITCH; public Dictionary Props { get; set; } = new(); @@ -8,47 +10,49 @@ public class AssistantSwitch : AssistantComponentBase public string Name { - get => this.Props.TryGetValue(nameof(this.Name), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Name)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Name)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Name), value); } - + public string Label { - get => this.Props.TryGetValue(nameof(this.Label), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Label)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Label)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Label), value); } - + public bool Value { get => this.Props.TryGetValue(nameof(this.Value), out var val) && val is true; set => this.Props[nameof(this.Value)] = value; } - + public string UserPrompt { - get => this.Props.TryGetValue(nameof(this.UserPrompt), out var val) - ? val.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.UserPrompt)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.UserPrompt)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.UserPrompt), value); } - + public string LabelOn { - get => this.Props.TryGetValue(nameof(this.LabelOn), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.LabelOn)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.LabelOn)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.LabelOn), value); } - + public string LabelOff { - get => this.Props.TryGetValue(nameof(this.LabelOff), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.LabelOff)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.LabelOff)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.LabelOff), value); } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantText.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantText.cs index d32c5749..de625d20 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantText.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantText.cs @@ -1,6 +1,8 @@ +using System.Collections.Generic; + namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantText : AssistantComponentBase +internal sealed class AssistantText : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.TEXT; @@ -10,9 +12,19 @@ public class AssistantText : AssistantComponentBase public string Content { - get => this.Props.TryGetValue(nameof(this.Content), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Content)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Content)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Content), value); } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantTextArea.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantTextArea.cs index 92c78334..372d4aca 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantTextArea.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantTextArea.cs @@ -1,52 +1,58 @@ -namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; +using System.Collections.Generic; -public class AssistantTextArea : AssistantComponentBase +namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; + +internal sealed class AssistantTextArea : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.TEXT_AREA; public Dictionary Props { get; set; } = new(); public List Children { get; set; } = new(); - + public string Name { - get => this.Props.TryGetValue(nameof(this.Name), out var val) - ? val.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Name)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Name)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Name), value); } - + public string Label { - get => this.Props.TryGetValue(nameof(this.Label), out var val) - ? val.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Label)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Label)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Label), value); } - + public string UserPrompt { - get => this.Props.TryGetValue(nameof(this.UserPrompt), out var val) - ? val.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.UserPrompt)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.UserPrompt)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.UserPrompt), value); } - + public string PrefillText { - get => this.Props.TryGetValue(nameof(this.PrefillText), out var val) - ? val.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.PrefillText)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.PrefillText)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.PrefillText), value); } - + public bool IsSingleLine { get => this.Props.TryGetValue(nameof(this.IsSingleLine), out var val) && val is true; set => this.Props[nameof(this.IsSingleLine)] = value; } - + public bool ReadOnly { get => this.Props.TryGetValue(nameof(this.ReadOnly), out var val) && val is true; set => this.Props[nameof(this.ReadOnly)] = value; } -} \ No newline at end of file + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantWebContentReader.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantWebContentReader.cs index 426aad48..4f3080f2 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantWebContentReader.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantWebContentReader.cs @@ -1,6 +1,8 @@ +using System.Collections.Generic; + namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public class AssistantWebContentReader : AssistantComponentBase +internal sealed class AssistantWebContentReader : AssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.WEB_CONTENT_READER; public Dictionary Props { get; set; } = new(); @@ -8,18 +10,14 @@ public class AssistantWebContentReader : AssistantComponentBase public string Name { - get => this.Props.TryGetValue(nameof(this.Name), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.Name)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Name)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Name), value); } public string UserPrompt { - get => this.Props.TryGetValue(nameof(this.UserPrompt), out var v) - ? v.ToString() ?? string.Empty - : string.Empty; - set => this.Props[nameof(this.UserPrompt)] = value; + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.UserPrompt)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.UserPrompt), value); } public bool Preselect @@ -33,4 +31,16 @@ public class AssistantWebContentReader : AssistantComponentBase get => this.Props.TryGetValue(nameof(this.PreselectContentCleanerAgent), out var v) && v is true; set => this.Props[nameof(this.PreselectContentCleanerAgent)] = value; } + + public string Class + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Class)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Class), value); + } + + public string Style + { + get => AssistantComponentPropHelper.ReadString(this.Props, nameof(this.Style)); + set => AssistantComponentPropHelper.WriteString(this.Props, nameof(this.Style), value); + } } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs index 0ef9d66f..b41a81f7 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs @@ -7,55 +7,55 @@ public static class ComponentPropSpecs { [AssistantComponentType.FORM] = new( required: ["Children"], - optional: [] + optional: ["Class", "Style"] ), [AssistantComponentType.TEXT_AREA] = new( required: ["Name", "Label"], - optional: ["UserPrompt", "PrefillText", "ReadOnly", "IsSingleLine"] + optional: ["UserPrompt", "PrefillText", "ReadOnly", "IsSingleLine", "Class", "Style"] ), [AssistantComponentType.BUTTON] = new( required: ["Name", "Text", "Action"], - optional: [] + optional: ["Class", "Style"] ), [AssistantComponentType.DROPDOWN] = new( required: ["Name", "Label", "Default", "Items"], - optional: ["UserPrompt"] + optional: ["UserPrompt", "Class", "Style"] ), [AssistantComponentType.PROVIDER_SELECTION] = new( required: ["Name", "Label"], - optional: [] + optional: ["Class", "Style"] ), [AssistantComponentType.PROFILE_SELECTION] = new( required: [], - optional: ["ValidationMessage"] + optional: ["ValidationMessage", "Class", "Style"] ), [AssistantComponentType.SWITCH] = new( required: ["Name", "Label", "LabelOn", "LabelOff", "Value"], - optional: ["UserPrompt"] + optional: ["UserPrompt", "Class", "Style"] ), [AssistantComponentType.HEADING] = new( required: ["Text", "Level"], - optional: [] + optional: ["Class", "Style"] ), [AssistantComponentType.TEXT] = new( required: ["Content"], - optional: [] + optional: ["Class", "Style"] ), [AssistantComponentType.LIST] = new( required: ["Items"], - optional: [] + optional: ["Class", "Style"] ), [AssistantComponentType.WEB_CONTENT_READER] = new( required: ["Name"], - optional: ["UserPrompt", "Preselect", "PreselectContentCleanerAgent"] + optional: ["UserPrompt", "Preselect", "PreselectContentCleanerAgent", "Class", "Style"] ), [AssistantComponentType.FILE_CONTENT_READER] = new( required: ["Name"], - optional: ["UserPrompt"] + optional: ["UserPrompt", "Class", "Style"] ), [AssistantComponentType.IMAGE] = new( required: ["Src"], - optional: ["Alt", "Caption"] + optional: ["Alt", "Caption", "Class", "Style"] ), }; }