From 5b263bf2348f25278d6b8f9a2331373884840a53 Mon Sep 17 00:00:00 2001 From: Shephard Tseisi Date: Sun, 18 Oct 2026 12:55:06 +0200 Subject: [PATCH 1/6] fix: pass the RadioGroup template to its items so clicking an item selects it --- .../Templates/RadioGroupTemplate.cs | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/ShellUI.Templates/Templates/RadioGroupTemplate.cs b/src/ShellUI.Templates/Templates/RadioGroupTemplate.cs index e91896b..4eabb9a 100644 --- a/src/ShellUI.Templates/Templates/RadioGroupTemplate.cs +++ b/src/ShellUI.Templates/Templates/RadioGroupTemplate.cs @@ -18,27 +18,19 @@ public class RadioGroupTemplate public static string Content => @"@namespace YourProjectNamespace.Components.UI -
- @ChildContent +
+ + @ChildContent +
@code { - [Parameter] - public string? Value { get; set; } - - [Parameter] - public EventCallback ValueChanged { get; set; } - - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string? Class { get; set; } - + [Parameter] public string? Value { get; set; } + [Parameter] public EventCallback ValueChanged { get; set; } + [Parameter] public RenderFragment? ChildContent { get; set; } + [Parameter] public string? Class { get; set; } // Deprecated: use Class. - [Parameter] - public string ClassName { get; set; } = """"; - + [Parameter] public string ClassName { get; set; } = """"; [Parameter(CaptureUnmatchedValues = true)] public Dictionary? AdditionalAttributes { get; set; } @@ -48,6 +40,7 @@ public async Task SetValue(string value) { Value = value; await ValueChanged.InvokeAsync(value); + StateHasChanged(); } } } From 62f980737f5a73544ac5b6fc6e47999136e3980f Mon Sep 17 00:00:00 2001 From: Shephard Tseisi Date: Sun, 18 Oct 2026 12:55:06 +0200 Subject: [PATCH 2/6] fix: apply Class and extra attributes in the EmptyState template --- src/ShellUI.Templates/Templates/EmptyStateTemplate.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ShellUI.Templates/Templates/EmptyStateTemplate.cs b/src/ShellUI.Templates/Templates/EmptyStateTemplate.cs index 1d30fa6..4bd4446 100644 --- a/src/ShellUI.Templates/Templates/EmptyStateTemplate.cs +++ b/src/ShellUI.Templates/Templates/EmptyStateTemplate.cs @@ -16,10 +16,10 @@ public static class EmptyStateTemplate }; public const string Content = """ -
+
@if (!string.IsNullOrEmpty(Icon)) { -
+
@((MarkupString)Icon)
} @@ -55,7 +55,9 @@ public static class EmptyStateTemplate [Parameter] public string? Description { get; set; } [Parameter] public RenderFragment? Action { get; set; } [Parameter] public RenderFragment? ChildContent { get; set; } - [Parameter] public string Class { get; set; } = string.Empty; + [Parameter] public string? Class { get; set; } + [Parameter(CaptureUnmatchedValues = true)] + public Dictionary? AdditionalAttributes { get; set; } } """; } From 9ec0f7fe9e7e2d64e797a73e3e42fd764d403535 Mon Sep 17 00:00:00 2001 From: Shephard Tseisi Date: Sun, 18 Oct 2026 12:55:07 +0200 Subject: [PATCH 3/6] fix: add Disabled to the RadioGroupItem template and close the DateRangePicker template on an outside click --- .../Templates/DateRangePickerTemplate.cs | 57 ++++++++----------- .../Templates/RadioGroupItemTemplate.cs | 28 ++++----- 2 files changed, 34 insertions(+), 51 deletions(-) diff --git a/src/ShellUI.Templates/Templates/DateRangePickerTemplate.cs b/src/ShellUI.Templates/Templates/DateRangePickerTemplate.cs index 2940337..a66e29a 100644 --- a/src/ShellUI.Templates/Templates/DateRangePickerTemplate.cs +++ b/src/ShellUI.Templates/Templates/DateRangePickerTemplate.cs @@ -20,11 +20,11 @@ @using Microsoft.JSInterop @implements IAsyncDisposable @inject IJSRuntime JS -
+
-@code { - [Parameter] - public DateTime? StartDate { get; set; } - - [Parameter] - public EventCallback StartDateChanged { get; set; } - - [Parameter] - public DateTime? EndDate { get; set; } - - [Parameter] - public EventCallback EndDateChanged { get; set; } - - [Parameter] - public string Placeholder { get; set; } = ""Pick a date range""; - - [Parameter] - public bool AllowClear { get; set; } = true; - - [Parameter] - public bool Disabled { get; set; } +@if (_isOpen) +{ +
+} +@code { + [Parameter] public DateTime? StartDate { get; set; } + [Parameter] public EventCallback StartDateChanged { get; set; } + [Parameter] public DateTime? EndDate { get; set; } + [Parameter] public EventCallback EndDateChanged { get; set; } + [Parameter] public string Placeholder { get; set; } = ""Pick a date range""; + [Parameter] public bool AllowClear { get; set; } = true; + [Parameter] public bool Disabled { get; set; } /// Close the calendar when the page scrolls; set false to keep it open. - [Parameter] - public bool CloseOnScroll { get; set; } - - [Parameter] - public string? Class { get; set; } - + [Parameter] public bool CloseOnScroll { get; set; } + [Parameter] public string? Class { get; set; } // Deprecated: use Class. - [Parameter] - public string ClassName { get; set; } = """"; - + [Parameter] public string ClassName { get; set; } = """"; [Parameter(CaptureUnmatchedValues = true)] public Dictionary? AdditionalAttributes { get; set; } @@ -253,13 +238,19 @@ private async Task ClearRange() var firstDay = new DateTime(_currentMonth.Year, _currentMonth.Month, 1); var lastDay = firstDay.AddMonths(1).AddDays(-1); var startDayOfWeek = (int)firstDay.DayOfWeek; - + for (int i = 0; i < startDayOfWeek; i++) days.Add(null); for (int day = 1; day <= lastDay.Day; day++) days.Add(new DateTime(_currentMonth.Year, _currentMonth.Month, day)); return days; } + private async Task CloseBackdrop() + { + _isOpen = false; + await UnregisterDismissAsync(); + } + public async ValueTask DisposeAsync() { await UnregisterDismissAsync(); diff --git a/src/ShellUI.Templates/Templates/RadioGroupItemTemplate.cs b/src/ShellUI.Templates/Templates/RadioGroupItemTemplate.cs index 4346564..b76648d 100644 --- a/src/ShellUI.Templates/Templates/RadioGroupItemTemplate.cs +++ b/src/ShellUI.Templates/Templates/RadioGroupItemTemplate.cs @@ -17,12 +17,13 @@ public class RadioGroupItemTemplate public static string Content => @"@namespace YourProjectNamespace.Components.UI -
+
@code { - [CascadingParameter] - private RadioGroup? RadioGroup { get; set; } - - [Parameter] - public string Value { get; set; } = """"; - - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string? Class { get; set; } - + [CascadingParameter] private RadioGroup? RadioGroup { get; set; } + [Parameter] public string Value { get; set; } = """"; + [Parameter] public RenderFragment? ChildContent { get; set; } + [Parameter] public string? Class { get; set; } // Deprecated: use Class. - [Parameter] - public string ClassName { get; set; } = """"; - + [Parameter] public string ClassName { get; set; } = """"; + [Parameter] public bool Disabled { get; set; } [Parameter(CaptureUnmatchedValues = true)] public Dictionary? AdditionalAttributes { get; set; } @@ -64,7 +56,7 @@ public class RadioGroupItemTemplate private async Task OnClick() { - if (RadioGroup != null) + if (RadioGroup != null && !Disabled) { await RadioGroup.SetValue(Value); } From 229b75d962d88d3b7eb10b4dcb36cde832068d23 Mon Sep 17 00:00:00 2001 From: Shephard Tseisi Date: Sun, 18 Oct 2026 12:55:07 +0200 Subject: [PATCH 4/6] fix: match the package in the Table, Separator, Slider, Navbar, Checkbox, Switch and Tooltip templates --- .../Templates/CheckboxTemplate.cs | 28 +++++++-------- .../Templates/NavbarTemplate.cs | 14 +++----- .../Templates/SeparatorTemplate.cs | 14 +++----- .../Templates/SliderTemplate.cs | 34 +++++------------- .../Templates/SwitchTemplate.cs | 35 ++++++++++--------- .../Templates/TableBodyTemplate.cs | 14 +++----- .../Templates/TableCellTemplate.cs | 14 +++----- .../Templates/TableHeadTemplate.cs | 14 +++----- .../Templates/TableHeaderTemplate.cs | 14 +++----- .../Templates/TableRowTemplate.cs | 14 +++----- .../Templates/TableTemplate.cs | 14 +++----- .../Templates/TooltipTemplate.cs | 32 ++++++++--------- 12 files changed, 86 insertions(+), 155 deletions(-) diff --git a/src/ShellUI.Templates/Templates/CheckboxTemplate.cs b/src/ShellUI.Templates/Templates/CheckboxTemplate.cs index 2562e57..c6bc54c 100644 --- a/src/ShellUI.Templates/Templates/CheckboxTemplate.cs +++ b/src/ShellUI.Templates/Templates/CheckboxTemplate.cs @@ -23,7 +23,7 @@ public static class CheckboxTemplate aria-checked=""@Checked"" @onclick=""HandleClick"" disabled=""@Disabled"" - class=""peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 @(Checked ? ""bg-primary text-primary-foreground"" : ""bg-background"") @ClassName @Class"" + class=""@ComputedClass"" @attributes=""AdditionalAttributes""> @if (Checked) { @@ -34,25 +34,21 @@ public static class CheckboxTemplate @code { - [Parameter] - public bool Checked { get; set; } - - [Parameter] - public EventCallback CheckedChanged { get; set; } - - [Parameter] - public bool Disabled { get; set; } - - [Parameter] - public string? Class { get; set; } - + [Parameter] public bool Checked { get; set; } + [Parameter] public EventCallback CheckedChanged { get; set; } + [Parameter] public bool Disabled { get; set; } + [Parameter] public string? Class { get; set; } // Deprecated: use Class. - [Parameter] - public string ClassName { get; set; } = """"; - + [Parameter] public string ClassName { get; set; } = """"; [Parameter(CaptureUnmatchedValues = true)] public Dictionary? AdditionalAttributes { get; set; } + private string ComputedClass => Shell.Cn( + ""peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"", + Checked ? ""bg-primary text-primary-foreground"" : ""bg-background"", + ClassName, Class + ); + private async Task HandleClick() { if (!Disabled) diff --git a/src/ShellUI.Templates/Templates/NavbarTemplate.cs b/src/ShellUI.Templates/Templates/NavbarTemplate.cs index f570b42..d541fe5 100644 --- a/src/ShellUI.Templates/Templates/NavbarTemplate.cs +++ b/src/ShellUI.Templates/Templates/NavbarTemplate.cs @@ -17,23 +17,17 @@ public static class NavbarTemplate public static string Content => @"@namespace YourProjectNamespace.Components.UI -