From 4ef2df0e6b609369e7cfb1439291da705464b3aa Mon Sep 17 00:00:00 2001 From: nilsk Date: Mon, 23 Mar 2026 17:28:07 +0100 Subject: [PATCH] make ButtonGroup a named component --- app/MindWork AI Studio/Plugins/assistants/README.md | 5 ++++- app/MindWork AI Studio/Plugins/assistants/plugin.lua | 1 + .../Assistants/DataModel/AssistantButtonGroup.cs | 2 +- .../PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/MindWork AI Studio/Plugins/assistants/README.md b/app/MindWork AI Studio/Plugins/assistants/README.md index eb80e279..82c1c2a7 100644 --- a/app/MindWork AI Studio/Plugins/assistants/README.md +++ b/app/MindWork AI Studio/Plugins/assistants/README.md @@ -94,7 +94,7 @@ ASSISTANT = { - `TEXT_AREA`: user input field based on `MudTextField`; requires `Name`, `Label`, and may include `HelperText`, `HelperTextOnFocus`, `Adornment`, `AdornmentIcon`, `AdornmentText`, `AdornmentColor`, `Counter`, `MaxLength`, `IsImmediate`, `UserPrompt`, `PrefillText`, `IsSingleLine`, `ReadOnly`, `Class`, `Style`. - `DROPDOWN`: selects between variants; `Props` must include `Name`, `Label`, `Default`, `Items`, and optionally `ValueType` plus `UserPrompt`. - `BUTTON`: invokes a Lua callback; `Props` must include `Name`, `Text`, `Action`, and may include `IsIconButton`, `Variant`, `Color`, `IsFullWidth`, `Size`, `StartIcon`, `EndIcon`, `IconColor`, `IconSize`, `Class`, `Style`. Use this for stateless actions, including icon-only action buttons. -- `BUTTON_GROUP`: groups multiple `BUTTON` children in a `MudButtonGroup`; `Children` must contain only `BUTTON` components and `Props` may include `Variant`, `Color`, `Size`, `OverrideStyles`, `Vertical`, `DropShadow`, `Class`, `Style`. +- `BUTTON_GROUP`: groups multiple `BUTTON` children in a `MudButtonGroup`;`Props` must include `Name`, `Children` must contain only `BUTTON` components and `Props` may include `Variant`, `Color`, `Size`, `OverrideStyles`, `Vertical`, `DropShadow`, `Class`, `Style`. - `LAYOUT_GRID`: renders a `MudGrid`; `Children` must contain only `LAYOUT_ITEM` components and `Props` may include `Justify`, `Spacing`, `Class`, `Style`. - `LAYOUT_ITEM`: renders a `MudItem`; use it inside `LAYOUT_GRID` and configure breakpoints with `Xs`, `Sm`, `Md`, `Lg`, `Xl`, `Xxl`, plus optional `Class`, `Style`. - `LAYOUT_PAPER`: renders a `MudPaper`; may include `Elevation`, `Height`, `MaxHeight`, `MinHeight`, `Width`, `MaxWidth`, `MinWidth`, `IsOutlined`, `IsSquare`, `Class`, `Style`. @@ -119,6 +119,7 @@ Images referenced via the `plugin://` scheme must exist in the plugin directory | `TEXT_AREA` | `Name`, `Label` | `HelperText`, `HelperTextOnFocus`, `Adornment`, `AdornmentIcon`, `AdornmentText`, `AdornmentColor`, `Counter`, `MaxLength`, `IsImmediate`, `UserPrompt`, `PrefillText`, `IsSingleLine`, `ReadOnly`, `Class`, `Style` | [MudTextField](https://www.mudblazor.com/components/textfield) | | `DROPDOWN` | `Name`, `Label`, `Default`, `Items` | `IsMultiselect`, `HasSelectAll`, `SelectAllText`, `HelperText`, `OpenIcon`, `CloseIcon`, `IconColor`, `IconPositon`, `Variant`, `ValueType`, `UserPrompt` | [MudSelect](https://www.mudblazor.com/components/select) | | `BUTTON` | `Name`, `Text`, `Action` | `IsIconButton`, `Variant`, `Color`, `IsFullWidth`, `Size`, `StartIcon`, `EndIcon`, `IconColor`, `IconSize`, `Class`, `Style` | [MudButton](https://www.mudblazor.com/components/button) / [MudIconButton](https://www.mudblazor.com/components/button#icon-button) | +| `BUTTON_GROUP` | `Name`, `Children` | `Variant`, `Color`, `Size`, `OverrideStyles`, `Vertical`, `DropShadow`, `Class`, `Style` | [MudButton](https://www.mudblazor.com/components/button) / [MudIconButton](https://www.mudblazor.com/components/button#icon-button) | | `SWITCH` | `Name`, `Label`, `Value` | `OnChanged`, `Disabled`, `UserPrompt`, `LabelOn`, `LabelOff`, `LabelPlacement`, `Icon`, `IconColor`, `CheckedColor`, `UncheckedColor`, `Class`, `Style` | [MudSwitch](https://www.mudblazor.com/components/switch) | | `PROVIDER_SELECTION` | `None` | `None` | [`internal`](https://github.com/MindWorkAI/AI-Studio/blob/main/app/MindWork%20AI%20Studio/Components/ProviderSelection.razor) | | `PROFILE_SELECTION` | `None` | `None` | [`internal`](https://github.com/MindWorkAI/AI-Studio/blob/main/app/MindWork%20AI%20Studio/Components/ProfileSelection.razor) | @@ -354,6 +355,7 @@ More information on rendered components can be found [here](https://www.mudblazo ### `BUTTON_GROUP` reference - Use `Type = "BUTTON_GROUP"` to render multiple `BUTTON` children as a single MudBlazor button group. - Required structure: + - `Name`: unique state key used in prompt assembly and `BuildPrompt(input)`. - `Children`: array of `BUTTON` component tables. Other child component types are ignored. - Optional props: - `Variant`: one of the MudBlazor `Variant` enum names such as `Filled`, `Outlined`, `Text`; omitted values fall back to `Filled`. @@ -1076,6 +1078,7 @@ LogInfo(dt.day .. "." .. dt.month .. "." .. dt.year) ## Useful Resources - [plugin.lua - Lua Manifest](https://github.com/MindWorkAI/AI-Studio/tree/main/app/MindWork%20AI%20Studio/Plugins/assistants/plugin.lua) +- [Supported Icons](https://www.mudblazor.com/features/icons#icons) - [AI Studio Repository](https://github.com/MindWorkAI/AI-Studio/) - [Lua 5.2 Reference Manual](https://www.lua.org/manual/5.2/manual.html) - [MudBlazor Documentation](https://www.mudblazor.com/docs/overview) diff --git a/app/MindWork AI Studio/Plugins/assistants/plugin.lua b/app/MindWork AI Studio/Plugins/assistants/plugin.lua index 2f97b61f..36d22016 100644 --- a/app/MindWork AI Studio/Plugins/assistants/plugin.lua +++ b/app/MindWork AI Studio/Plugins/assistants/plugin.lua @@ -170,6 +170,7 @@ ASSISTANT = { { ["Type"] = "BUTTON_GROUP", ["Props"] = { + ["Name"] = "buttonGroup", ["Variant"] = "", -- display variation of the group. Defaults to Filled ["Color"] = "", -- color of the group. Defaults to Default ["Size"] = "", -- size of the group. Defaults to Medium diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButtonGroup.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButtonGroup.cs index 668cd841..95004b44 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButtonGroup.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantButtonGroup.cs @@ -1,6 +1,6 @@ namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; -public sealed class AssistantButtonGroup : AssistantComponentBase +public sealed class AssistantButtonGroup : NamedAssistantComponentBase { public override AssistantComponentType Type => AssistantComponentType.BUTTON_GROUP; public override Dictionary Props { get; set; } = new(); 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 b38add0a..3ea9ad0f 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs @@ -28,7 +28,7 @@ public static class ComponentPropSpecs nonWriteable: ["Name", "Class", "Style" ] ), [AssistantComponentType.BUTTON_GROUP] = new( - required: [], + required: ["Name"], optional: ["Variant", "Color", "Size", "OverrideStyles", "Vertical", "DropShadow", "Class", "Style"], nonWriteable: ["Class", "Style" ]