From 185c276a6434a718899ec6b70bc8e1e35f372282 Mon Sep 17 00:00:00 2001 From: Lucas Harskamp Date: Wed, 29 May 2024 11:27:36 +0200 Subject: [PATCH 01/25] Bugfix for charts larger than most; Set collection properties for chart settings to IReadOnly to allow programmers to enter any valid stack. Added options for Charts to allow for more styling options build into ChartJs --- blazorbootstrap/BlazorBootstrap.csproj | 1 + .../Components/Accordion/Accordion.razor.cs | 4 +- .../Components/Alert/Alert.razor.cs | 2 +- .../Components/Button/Button.razor.cs | 2 +- .../Components/Card/CardLink.razor.cs | 2 +- .../Components/Charts/BarChart.razor | 2 +- .../Components/Charts/BarChart.razor.cs | 2 +- .../Components/Charts/BlazorBootstrapChart.cs | 2 +- .../Components/Charts/DoughnutChart.razor | 2 +- .../Components/Charts/DoughnutChart.razor.cs | 2 +- .../Components/Charts/LineChart.razor | 2 +- .../Components/Charts/LineChart.razor.cs | 14 +- .../Components/Charts/PieChart.razor | 2 +- .../Components/Charts/PieChart.razor.cs | 2 +- .../Core/BlazorBootstrapComponentBase.cs | 4 +- .../Components/Dropdown/Dropdown.razor.cs | 4 +- .../Components/Dropdown/DropdownItem.razor.cs | 2 +- .../Dropdown/DropdownToggleButton.razor.cs | 2 +- .../Form/CurrencyInput/CurrencyInput.razor.cs | 6 +- .../Form/DateInput/DateInput.razor.cs | 4 +- .../Form/NumberInput/NumberInput.razor.cs | 6 +- .../Form/TimeInput/TimeInput.razor.cs | 4 +- .../Components/Grid/GridColumn.razor.cs | 2 +- .../Components/Modals/Modal.razor.cs | 6 +- .../Components/Offcanvas/Offcanvas.razor.cs | 4 +- .../Components/Ribbon/Ribbon.razor.cs | 2 +- .../Components/Toasts/SimpleToast.razor.cs | 2 +- .../Components/Toasts/Toast.razor.cs | 2 +- .../Components/Toasts/Toasts.razor.cs | 2 +- blazorbootstrap/Extensions/ColorExtensions.cs | 8 +- .../Charts/ChartDataset/ChartDataset.cs | 10 +- .../Charts/ChartDataset/LineChartDataset.cs | 28 +-- .../Charts/ChartOptions/ChartOptions.cs | 238 +++++++++++++++++- .../Charts/ChartPlugins/ChartPlugins.cs | 167 +++++++++++- blazorbootstrap/Utilities/ColorBuilder.cs | 4 +- 35 files changed, 455 insertions(+), 93 deletions(-) diff --git a/blazorbootstrap/BlazorBootstrap.csproj b/blazorbootstrap/BlazorBootstrap.csproj index 72a3818dc..edaf804fc 100644 --- a/blazorbootstrap/BlazorBootstrap.csproj +++ b/blazorbootstrap/BlazorBootstrap.csproj @@ -26,6 +26,7 @@ README.md git https://github.com/vikramlearning/blazorbootstrap/releases + True diff --git a/blazorbootstrap/Components/Accordion/Accordion.razor.cs b/blazorbootstrap/Components/Accordion/Accordion.razor.cs index 5cb22783f..38f3fe919 100644 --- a/blazorbootstrap/Components/Accordion/Accordion.razor.cs +++ b/blazorbootstrap/Components/Accordion/Accordion.razor.cs @@ -179,7 +179,7 @@ internal void Add(AccordionItem accordionItem) .Build(); /// - /// If true, accordion items stay open when another item is opened. + /// If , accordion items stay open when another item is opened. /// /// /// Default value is false. @@ -198,7 +198,7 @@ internal void Add(AccordionItem accordionItem) public RenderFragment ChildContent { get; set; } = default!; /// - /// If true, removes borders and rounded corners to render accordions edge-to-edge with their parent container. + /// If , removes borders and rounded corners to render accordions edge-to-edge with their parent container. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Alert/Alert.razor.cs b/blazorbootstrap/Components/Alert/Alert.razor.cs index fe89f7035..563ead7c2 100644 --- a/blazorbootstrap/Components/Alert/Alert.razor.cs +++ b/blazorbootstrap/Components/Alert/Alert.razor.cs @@ -87,7 +87,7 @@ protected override async Task OnInitializedAsync() public AlertColor Color { get; set; } = AlertColor.None; /// - /// If true, shows an inline close button. + /// If , shows an inline close button. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Button/Button.razor.cs b/blazorbootstrap/Components/Button/Button.razor.cs index 4c88103c6..c1bce3306 100644 --- a/blazorbootstrap/Components/Button/Button.razor.cs +++ b/blazorbootstrap/Components/Button/Button.razor.cs @@ -343,7 +343,7 @@ private void SetAttributes() public bool Disabled { get; set; } /// - /// If true, shows the loading spinner or a . + /// If , shows the loading spinner or a . /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Card/CardLink.razor.cs b/blazorbootstrap/Components/Card/CardLink.razor.cs index e1466d91d..c19c3eb7f 100644 --- a/blazorbootstrap/Components/Card/CardLink.razor.cs +++ b/blazorbootstrap/Components/Card/CardLink.razor.cs @@ -119,7 +119,7 @@ private void SetAttributes() public RenderFragment ChildContent { get; set; } = default!; /// - /// If true, disables the card link. + /// If , disables the card link. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Charts/BarChart.razor b/blazorbootstrap/Components/Charts/BarChart.razor index aa9beab4a..e23194b61 100644 --- a/blazorbootstrap/Components/Charts/BarChart.razor +++ b/blazorbootstrap/Components/Charts/BarChart.razor @@ -2,5 +2,5 @@ @inherits BlazorBootstrapChart
- +
diff --git a/blazorbootstrap/Components/Charts/BarChart.razor.cs b/blazorbootstrap/Components/Charts/BarChart.razor.cs index ba8e5f05e..212c0303d 100644 --- a/blazorbootstrap/Components/Charts/BarChart.razor.cs +++ b/blazorbootstrap/Components/Charts/BarChart.razor.cs @@ -34,7 +34,7 @@ public override async Task AddDataAsync(ChartData chartData, string d return chartData; } - public override async Task AddDataAsync(ChartData chartData, string dataLabel, List data) + public override async Task AddDataAsync(ChartData chartData, string dataLabel, IReadOnlyCollection data) { if (chartData is null) throw new ArgumentNullException(nameof(chartData)); diff --git a/blazorbootstrap/Components/Charts/BlazorBootstrapChart.cs b/blazorbootstrap/Components/Charts/BlazorBootstrapChart.cs index 99d89dd6c..7d0575ad9 100644 --- a/blazorbootstrap/Components/Charts/BlazorBootstrapChart.cs +++ b/blazorbootstrap/Components/Charts/BlazorBootstrapChart.cs @@ -18,7 +18,7 @@ public class BlazorBootstrapChart : BlazorBootstrapComponentBase, IDisposable, I public virtual async Task AddDataAsync(ChartData chartData, string dataLabel, IChartDatasetData data) => await Task.FromResult(chartData); - public virtual async Task AddDataAsync(ChartData chartData, string dataLabel, List data) => await Task.FromResult(chartData); + public virtual async Task AddDataAsync(ChartData chartData, string dataLabel, IReadOnlyCollection data) => await Task.FromResult(chartData); public virtual async Task AddDatasetAsync(ChartData chartData, IChartDataset chartDataset, IChartOptions chartOptions) => await Task.FromResult(chartData); diff --git a/blazorbootstrap/Components/Charts/DoughnutChart.razor b/blazorbootstrap/Components/Charts/DoughnutChart.razor index aa9beab4a..e23194b61 100644 --- a/blazorbootstrap/Components/Charts/DoughnutChart.razor +++ b/blazorbootstrap/Components/Charts/DoughnutChart.razor @@ -2,5 +2,5 @@ @inherits BlazorBootstrapChart
- +
diff --git a/blazorbootstrap/Components/Charts/DoughnutChart.razor.cs b/blazorbootstrap/Components/Charts/DoughnutChart.razor.cs index afd3eaa33..1c7c21b8b 100644 --- a/blazorbootstrap/Components/Charts/DoughnutChart.razor.cs +++ b/blazorbootstrap/Components/Charts/DoughnutChart.razor.cs @@ -37,7 +37,7 @@ public override async Task AddDataAsync(ChartData chartData, string d return chartData; } - public override async Task AddDataAsync(ChartData chartData, string dataLabel, List data) + public override async Task AddDataAsync(ChartData chartData, string dataLabel, IReadOnlyCollection data) { if (chartData is null) throw new ArgumentNullException(nameof(chartData)); diff --git a/blazorbootstrap/Components/Charts/LineChart.razor b/blazorbootstrap/Components/Charts/LineChart.razor index aa9beab4a..89df1396a 100644 --- a/blazorbootstrap/Components/Charts/LineChart.razor +++ b/blazorbootstrap/Components/Charts/LineChart.razor @@ -2,5 +2,5 @@ @inherits BlazorBootstrapChart
- +
diff --git a/blazorbootstrap/Components/Charts/LineChart.razor.cs b/blazorbootstrap/Components/Charts/LineChart.razor.cs index 8ac045ef5..74c2ebb54 100644 --- a/blazorbootstrap/Components/Charts/LineChart.razor.cs +++ b/blazorbootstrap/Components/Charts/LineChart.razor.cs @@ -34,16 +34,16 @@ public override async Task AddDataAsync(ChartData chartData, string d return chartData; } - public override async Task AddDataAsync(ChartData chartData, string dataLabel, List data) + public override async Task AddDataAsync(ChartData chartData, string dataLabel, IReadOnlyCollection data) { if (chartData is null) throw new ArgumentNullException(nameof(chartData)); if (chartData.Datasets is null) - throw new ArgumentNullException(nameof(chartData.Datasets)); + throw new ArgumentException("chartData.Datasets must not be null", nameof(chartData)); if (chartData.Labels is null) - throw new ArgumentNullException(nameof(chartData.Labels)); + throw new ArgumentException("chartData.Labels must not be null", nameof(chartData)); if (dataLabel is null) throw new ArgumentNullException(nameof(dataLabel)); @@ -55,7 +55,7 @@ public override async Task AddDataAsync(ChartData chartData, string d throw new ArgumentNullException(nameof(data)); if (!data.Any()) - throw new Exception($"{nameof(data)} cannot be empty."); + throw new ArgumentException($"{nameof(data)} cannot be empty.", nameof(data)); if (chartData.Datasets.Count != data.Count) throw new InvalidDataException("The chart dataset count and the new data points count do not match."); @@ -85,7 +85,7 @@ public override async Task AddDatasetAsync(ChartData chartData, IChar throw new ArgumentNullException(nameof(chartData)); if (chartData.Datasets is null) - throw new ArgumentNullException(nameof(chartData.Datasets)); + throw new ArgumentException("chartData.Datasets must not be null", nameof(chartData)); if (chartDataset is null) throw new ArgumentNullException(nameof(chartDataset)); @@ -105,7 +105,7 @@ public override async Task InitializeAsync(ChartData chartData, IChartOptions ch throw new ArgumentNullException(nameof(chartData)); if (chartData.Datasets is null) - throw new ArgumentNullException(nameof(chartData.Datasets)); + throw new ArgumentException("chartData.Datasets must not be null", nameof(chartData)); if (chartOptions is null) throw new ArgumentNullException(nameof(chartOptions)); @@ -121,7 +121,7 @@ public override async Task UpdateAsync(ChartData chartData, IChartOptions chartO throw new ArgumentNullException(nameof(chartData)); if (chartData.Datasets is null) - throw new ArgumentNullException(nameof(chartData.Datasets)); + throw new ArgumentException("chartData.Datasets must not be null", nameof(chartData)); if (chartOptions is null) throw new ArgumentNullException(nameof(chartOptions)); diff --git a/blazorbootstrap/Components/Charts/PieChart.razor b/blazorbootstrap/Components/Charts/PieChart.razor index aa9beab4a..e23194b61 100644 --- a/blazorbootstrap/Components/Charts/PieChart.razor +++ b/blazorbootstrap/Components/Charts/PieChart.razor @@ -2,5 +2,5 @@ @inherits BlazorBootstrapChart
- +
diff --git a/blazorbootstrap/Components/Charts/PieChart.razor.cs b/blazorbootstrap/Components/Charts/PieChart.razor.cs index 96968217d..495e8f279 100644 --- a/blazorbootstrap/Components/Charts/PieChart.razor.cs +++ b/blazorbootstrap/Components/Charts/PieChart.razor.cs @@ -37,7 +37,7 @@ public override async Task AddDataAsync(ChartData chartData, string d return chartData; } - public override async Task AddDataAsync(ChartData chartData, string dataLabel, List data) + public override async Task AddDataAsync(ChartData chartData, string dataLabel, IReadOnlyCollection data) { if (chartData is null) throw new ArgumentNullException(nameof(chartData)); diff --git a/blazorbootstrap/Components/Core/BlazorBootstrapComponentBase.cs b/blazorbootstrap/Components/Core/BlazorBootstrapComponentBase.cs index f84ff7ba9..aada72c6a 100644 --- a/blazorbootstrap/Components/Core/BlazorBootstrapComponentBase.cs +++ b/blazorbootstrap/Components/Core/BlazorBootstrapComponentBase.cs @@ -29,7 +29,7 @@ protected override void OnInitialized() } /// - /// + /// public void Dispose() { Dispose(true); @@ -38,7 +38,7 @@ public void Dispose() /// /// + /// href="https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-disposeasync#implement-both-dispose-and-async-dispose-patterns" /> public async ValueTask DisposeAsync() { await DisposeAsyncCore(true).ConfigureAwait(false); diff --git a/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs b/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs index 50f37496d..769311315 100644 --- a/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs +++ b/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs @@ -93,7 +93,7 @@ protected override void OnInitialized() .Build(); /// - /// If true, enables the auto close. + /// If , enables the auto close. /// /// /// Default value is true. @@ -138,7 +138,7 @@ protected override void OnInitialized() public DropdownDirection Direction { get; set; } = DropdownDirection.Dropdown; /// - /// If true, dropdown will be disabled. + /// If , dropdown will be disabled. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Dropdown/DropdownItem.razor.cs b/blazorbootstrap/Components/Dropdown/DropdownItem.razor.cs index a1c99eb1a..c55a9bfb0 100644 --- a/blazorbootstrap/Components/Dropdown/DropdownItem.razor.cs +++ b/blazorbootstrap/Components/Dropdown/DropdownItem.razor.cs @@ -189,7 +189,7 @@ private void SetAttributes() public RenderFragment ChildContent { get; set; } = default!; /// - /// If true, dropdown item will be disabled. + /// If , dropdown item will be disabled. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Dropdown/DropdownToggleButton.razor.cs b/blazorbootstrap/Components/Dropdown/DropdownToggleButton.razor.cs index faaa6b74f..1df6d14d3 100644 --- a/blazorbootstrap/Components/Dropdown/DropdownToggleButton.razor.cs +++ b/blazorbootstrap/Components/Dropdown/DropdownToggleButton.razor.cs @@ -50,7 +50,7 @@ protected override void OnInitialized() .Build(); /// - /// If true, enables the auto close. + /// If , enables the auto close. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs b/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs index e107479e4..7a823ead1 100644 --- a/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs +++ b/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs @@ -401,7 +401,7 @@ private bool TryParseValue(object value, out TValue newValue) .Build(); /// - /// If true, allows negative numbers. + /// If , allows negative numbers. /// /// /// Default value is false. @@ -412,7 +412,7 @@ private bool TryParseValue(object value, out TValue newValue) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If true, CurrencyInput can complete the values automatically by the browser. + /// If , CurrencyInput can complete the values automatically by the browser. /// /// /// Default value is false. @@ -442,7 +442,7 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Determines whether to restrict the user input to Min and Max range. - /// If true, restricts the user input between the Min and Max range. Else accepts the user input. + /// If , restricts the user input between the Min and Max range. Else accepts the user input. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs b/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs index 2fb172dc8..69e87b9c8 100644 --- a/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs +++ b/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs @@ -288,7 +288,7 @@ private bool TryParseValue(object value, out TValue newValue) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If true, DateInput can complete the values automatically by the browser. + /// If , DateInput can complete the values automatically by the browser. /// /// /// Default value is false. @@ -309,7 +309,7 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Determines whether to restrict the user input to Min and Max range. - /// If true, restricts the user input between the Min and Max range. Else accepts the user input. + /// If , restricts the user input between the Min and Max range. Else accepts the user input. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs b/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs index 16d1b1c6b..1bf08e2f3 100644 --- a/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs +++ b/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs @@ -352,7 +352,7 @@ private bool TryParseValue(object value, out TValue newValue) .Build(); /// - /// If true, allows negative numbers. + /// If , allows negative numbers. /// /// /// Default value is false. @@ -363,7 +363,7 @@ private bool TryParseValue(object value, out TValue newValue) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If true, NumberInput can complete the values automatically by the browser. + /// If , NumberInput can complete the values automatically by the browser. /// /// /// Default value is false. @@ -384,7 +384,7 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Determines whether to restrict the user input to Min and Max range. - /// If true, restricts the user input between the Min and Max range. Else accepts the user input. + /// If , restricts the user input between the Min and Max range. Else accepts the user input. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs b/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs index 4942848ee..83169c0d3 100644 --- a/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs +++ b/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs @@ -253,7 +253,7 @@ private bool TryParseValue(object value, out TValue newValue) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If true, DateInput can complete the values automatically by the browser. + /// If , DateInput can complete the values automatically by the browser. /// /// /// Default value is false. @@ -274,7 +274,7 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Determines whether to restrict the user input to Min and Max range. - /// If true, restricts the user input between the Min and Max range. Else accepts the user input. + /// If , restricts the user input between the Min and Max range. Else accepts the user input. /// /// /// Default value is false. diff --git a/blazorbootstrap/Components/Grid/GridColumn.razor.cs b/blazorbootstrap/Components/Grid/GridColumn.razor.cs index 7d255a4dd..84d8c0fc2 100644 --- a/blazorbootstrap/Components/Grid/GridColumn.razor.cs +++ b/blazorbootstrap/Components/Grid/GridColumn.razor.cs @@ -203,7 +203,7 @@ private async Task OnSortClickAsync() public Func? ColumnClass { get; set; } /// - /// If true, filter is enabled. + /// If , filter is enabled. /// The filter is enabled or disabled based on the grid `AllowFiltering` parameter. /// /// diff --git a/blazorbootstrap/Components/Modals/Modal.razor.cs b/blazorbootstrap/Components/Modals/Modal.razor.cs index 9833bfdf6..71c651f04 100644 --- a/blazorbootstrap/Components/Modals/Modal.razor.cs +++ b/blazorbootstrap/Components/Modals/Modal.razor.cs @@ -258,7 +258,7 @@ private async Task ShowAsync(string? title, string? message, Type? type, Diction public RenderFragment HeaderTemplate { get; set; } = default!; /// - /// If true, scroll will be enabled on the modal body. + /// If , scroll will be enabled on the modal body. /// /// /// Default value is false. @@ -276,7 +276,7 @@ private async Task ShowAsync(string? title, string? message, Type? type, Diction public bool IsServiceModal { get; set; } /// - /// If true, shows the modal vertically in the center. + /// If , shows the modal vertically in the center. /// /// /// Default value is false. @@ -344,7 +344,7 @@ private async Task ShowAsync(string? title, string? message, Type? type, Diction private string scrollable => IsScrollable ? "modal-dialog-scrollable" : ""; /// - /// If true, close button will be visible in the modal header. + /// If , close button will be visible in the modal header. /// /// /// Default value is true. diff --git a/blazorbootstrap/Components/Offcanvas/Offcanvas.razor.cs b/blazorbootstrap/Components/Offcanvas/Offcanvas.razor.cs index 02dba661a..ff71f5150 100644 --- a/blazorbootstrap/Components/Offcanvas/Offcanvas.razor.cs +++ b/blazorbootstrap/Components/Offcanvas/Offcanvas.razor.cs @@ -125,7 +125,7 @@ private async Task ShowAsync(string? title, Type? type, Dictionary - /// If true, offcanvas closes when escape key is pressed. + /// If , offcanvas closes when escape key is pressed. /// /// /// Default value is true. @@ -214,7 +214,7 @@ private async Task ShowAsync(string? title, Type? type, Dictionary - /// If true, modal shows close button in the header. + /// If , modal shows close button in the header. /// /// /// Default value is true. diff --git a/blazorbootstrap/Components/Ribbon/Ribbon.razor.cs b/blazorbootstrap/Components/Ribbon/Ribbon.razor.cs index 81a0e3197..f4869a079 100644 --- a/blazorbootstrap/Components/Ribbon/Ribbon.razor.cs +++ b/blazorbootstrap/Components/Ribbon/Ribbon.razor.cs @@ -296,7 +296,7 @@ private async Task ShowTabAsync(RibbonTab tab) public bool EnableFadeEffect { get; set; } /// - /// If true, Ribbon will be rendered vertically. + /// If , Ribbon will be rendered vertically. /// private bool IsVertical => NavStyle == NavStyle.Vertical diff --git a/blazorbootstrap/Components/Toasts/SimpleToast.razor.cs b/blazorbootstrap/Components/Toasts/SimpleToast.razor.cs index 5f9659429..2358861a4 100644 --- a/blazorbootstrap/Components/Toasts/SimpleToast.razor.cs +++ b/blazorbootstrap/Components/Toasts/SimpleToast.razor.cs @@ -103,7 +103,7 @@ protected override async Task OnInitializedAsync() public EventCallback Hiding { get; set; } /// - /// If true, shows the close button. + /// If , shows the close button. /// /// /// Default value is true. diff --git a/blazorbootstrap/Components/Toasts/Toast.razor.cs b/blazorbootstrap/Components/Toasts/Toast.razor.cs index 07f2ebf09..d2f1cc933 100644 --- a/blazorbootstrap/Components/Toasts/Toast.razor.cs +++ b/blazorbootstrap/Components/Toasts/Toast.razor.cs @@ -191,7 +191,7 @@ private IconName GetToastIconName() => private ProgressColor progressColor => GetProgressColor(); /// - /// If true, shows the close button. + /// If , shows the close button. /// /// /// Default value is true. diff --git a/blazorbootstrap/Components/Toasts/Toasts.razor.cs b/blazorbootstrap/Components/Toasts/Toasts.razor.cs index ce2886b9a..deec375b0 100644 --- a/blazorbootstrap/Components/Toasts/Toasts.razor.cs +++ b/blazorbootstrap/Components/Toasts/Toasts.razor.cs @@ -125,7 +125,7 @@ private async Task OnToastShownAsync(ToastEventArgs args) public ToastsPlacement Placement { get; set; } = ToastsPlacement.TopRight; /// - /// If true, shows the close button. + /// If , shows the close button. /// /// /// Default value is true. diff --git a/blazorbootstrap/Extensions/ColorExtensions.cs b/blazorbootstrap/Extensions/ColorExtensions.cs index c442de307..0abf31be2 100644 --- a/blazorbootstrap/Extensions/ColorExtensions.cs +++ b/blazorbootstrap/Extensions/ColorExtensions.cs @@ -13,7 +13,7 @@ public static class ColorExtensions /// /// Converts System.Drawing.Color to #RRGGBBAA format string. - /// + /// /// /// /// #RRGGBBAA format string @@ -21,7 +21,7 @@ public static class ColorExtensions /// /// Converts System.Drawing.Color to #RRGGBB format string. - /// + /// /// /// /// #RRGGBB format string @@ -29,7 +29,7 @@ public static class ColorExtensions /// /// Converts System.Drawing.Color to RGBA(R, G, B, A) format string. - /// + /// /// /// System.Drawing.Color /// The alpha parameter is a number between 0.0 (fully transparent) and 1.0 (fully opaque). @@ -38,7 +38,7 @@ public static class ColorExtensions /// /// Converts System.Drawing.Color to RGB(R, G, B) format string. - /// + /// /// /// /// RGB(R, G, B) format string diff --git a/blazorbootstrap/Models/Charts/ChartDataset/ChartDataset.cs b/blazorbootstrap/Models/Charts/ChartDataset/ChartDataset.cs index f1acee96e..cffa70ad8 100644 --- a/blazorbootstrap/Models/Charts/ChartDataset/ChartDataset.cs +++ b/blazorbootstrap/Models/Charts/ChartDataset/ChartDataset.cs @@ -25,13 +25,13 @@ public ChartDataset() /// Get or sets the BorderColor. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? BorderColor { get; set; } + public IReadOnlyCollection? BorderColor { get; set; } /// /// Get or sets the BorderWidth. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? BorderWidth { get; set; } + public IReadOnlyCollection? BorderWidth { get; set; } /// /// How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside @@ -55,19 +55,19 @@ public ChartDataset() /// Get or sets the HoverBackgroundColor. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? HoverBackgroundColor { get; set; } + public IReadOnlyCollection? HoverBackgroundColor { get; set; } /// /// Get or sets the HoverBorderColor. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? HoverBorderColor { get; set; } + public IReadOnlyCollection? HoverBorderColor { get; set; } /// /// Get or sets the HoverBorderWidth. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? HoverBorderWidth { get; set; } + public IReadOnlyCollection? HoverBorderWidth { get; set; } /// /// Get unique object id. diff --git a/blazorbootstrap/Models/Charts/ChartDataset/LineChartDataset.cs b/blazorbootstrap/Models/Charts/ChartDataset/LineChartDataset.cs index 791f77b3e..c2fcda62f 100644 --- a/blazorbootstrap/Models/Charts/ChartDataset/LineChartDataset.cs +++ b/blazorbootstrap/Models/Charts/ChartDataset/LineChartDataset.cs @@ -34,7 +34,7 @@ public class LineChartDataset : ChartDataset /// Hover line dash. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? HoverBorderDash { get; set; } + public IReadOnlyCollection? HoverBorderDash { get; set; } /// /// The label for the dataset which appears in the legend and tooltips. @@ -46,67 +46,67 @@ public class LineChartDataset : ChartDataset /// The fill color for points. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List PointBackgroundColor { get; set; } = new() { "rgba(0, 0, 0, 0.1)" }; + public IReadOnlyCollection PointBackgroundColor { get; set; } = new[] { "rgba(0, 0, 0, 0.1)" }; /// /// The border color for points. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List PointBorderColor { get; set; } = new() { "rgba(0, 0, 0, 0.1)" }; + public IReadOnlyCollection PointBorderColor { get; set; } = new[] { "rgba(0, 0, 0, 0.1)" }; /// /// The width of the point border in pixels. /// - public List PointBorderWidth { get; set; } = new() { 1 }; + public IReadOnlyCollection PointBorderWidth { get; set; } = new[] { 1d }; /// /// The pixel size of the non-displayed point that reacts to mouse events. /// - public List PointHitRadius { get; set; } = new() { 1 }; + public IReadOnlyCollection PointHitRadius { get; set; } = new[] { 1d }; /// /// Point background color when hovered. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? PointHoverBackgroundColor { get; set; } + public IReadOnlyCollection? PointHoverBackgroundColor { get; set; } /// /// Point border color when hovered. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List? PointHoverBorderColor { get; set; } + public IReadOnlyCollection? PointHoverBorderColor { get; set; } /// /// Border width of point when hovered. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List PointHoverBorderWidth { get; set; } = new() { 1 }; + public IReadOnlyCollection PointHoverBorderWidth { get; set; } = new[] { 1d }; /// /// The radius of the point when hovered. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List PointHoverRadius { get; set; } = new() { 1 }; // Default: 4 + public IReadOnlyCollection PointHoverRadius { get; set; } = new[] { 1 }; // Default: 4 /// /// The radius of the point shape. If set to 0, the point is not rendered. /// Default: 3 /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List PointRadius { get; set; } = new() { 1 }; // Default: 3 + public IReadOnlyCollection PointRadius { get; set; } = new[] { 1 }; // Default: 3 /// /// The rotation of the point in degrees. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public List PointRotation { get; set; } = new() { 0 }; + public IReadOnlyCollection PointRotation { get; set; } = new[] { 0 }; /// /// Style of the point. /// Use 'circle', 'cross', 'crossRot', 'dash', 'line', 'rect', 'rectRounded', 'rectRot', 'star', and 'triangle' to style /// the point. /// - public List PointStyle { get; set; } = new() { "circle" }; + public IReadOnlyCollection PointStyle { get; set; } = new[] { "circle" }; // Segment // https://www.chartjs.org/docs/latest/api/interfaces/LineControllerDatasetOptions.html#segment @@ -117,7 +117,7 @@ public class LineChartDataset : ChartDataset public bool ShowLine { get; set; } = true; /// - /// If true, lines will be drawn between points with no or null data. + /// If , lines will be drawn between points with no or null data. /// If false, points with null data will create a break in the line. /// Can also be a number specifying the maximum gap length to span. /// The unit of the value depends on the scale used. @@ -125,7 +125,7 @@ public class LineChartDataset : ChartDataset public bool SpanGaps { get; set; } /// - /// true to show the line as a stepped line (tension will be ignored). + /// to show the line as a stepped line (tension will be ignored). /// public bool Stepped { get; set; } diff --git a/blazorbootstrap/Models/Charts/ChartOptions/ChartOptions.cs b/blazorbootstrap/Models/Charts/ChartOptions/ChartOptions.cs index dd9d5be1e..226186ef4 100644 --- a/blazorbootstrap/Models/Charts/ChartOptions/ChartOptions.cs +++ b/blazorbootstrap/Models/Charts/ChartOptions/ChartOptions.cs @@ -3,7 +3,7 @@ public interface IChartOptions { } /// -/// +/// /// public class ChartOptions : IChartOptions { @@ -18,13 +18,13 @@ public class ChartOptions : IChartOptions /// /// Gets or sets the MaintainAspectRatio of the chart. - /// + /// /// public bool MaintainAspectRatio { get; set; } = true; /// /// Gets or set the responsive. - /// + /// /// public bool Responsive { get; set; } @@ -92,7 +92,7 @@ private void SetMode(InteractionMode interactionMode) => public string ChartInteractionMode { get; private set; } /// - /// if true, the interaction mode only applies when the mouse position intersects an item on the chart. + /// if , the interaction mode only applies when the mouse position intersects an item on the chart. /// public bool Intersect { get; set; } @@ -130,6 +130,7 @@ public class Scales [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public ChartAxes? X { get; set; } = new(); [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public ChartAxes? Y { get; set; } = new(); + #endregion } @@ -137,10 +138,22 @@ public class Scales public class ChartAxes { #region Properties, Indexers - + // Stacked public bool BeginAtZero { get; set; } = true; + /// + /// Define options for the border that run perpendicular to the axis. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartAxesBorder? Border { get; set; } + + /// + /// Grid settings + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartAxesGrid? Grid { get; set; } + /// /// User defined maximum number for the scale, overrides maximum value from data. /// @@ -173,15 +186,220 @@ public class ChartAxes [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public double? SuggestedMin { get; set; } + /// + /// Tick settings + /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public ChartAxesTitle? Title { get; set; } = new(); + public ChartAxesTicks? Ticks { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartAxesTitle? Title { get; set; } #endregion } + +/// +/// Define options for the border that run perpendicular to the axis. +/// +/// +public class ChartAxesBorder +{ + + /// + /// The color of the border line. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? Color { get; set; } + + /// + /// Length and spacing of dashes on grid lines + /// + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public IReadOnlyCollection? Dash { get; set; } + + /// + /// Offset for line dashes. + /// + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? DashOffset { get; set; } + + /// + /// If , draw a border at the edge between the axis and the chart area. + /// + public bool Display { get; set; } = true; + + /// + /// The width of the border line. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? Width { get; set; } + + /// + /// z-index of the border layer. Values <= 0 are drawn under datasets, > 0 on top. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? Z { get; set; } +} + +/// +/// Defines options for the grid lines that run perpendicular to the axis. +/// +/// +public class ChartAxesGrid +{ + /// + /// If , gridlines are circular (on radar and polar area charts only). + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public bool? Circular { get; set; } + + /// + /// Color of the grid axis lines. Here one can write a CSS method or even a JavaScript method for a dynamic color. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? Color { get; set; } + + /// + /// If false, do not display grid lines for this axis. + /// + public bool Display { get; set; } = true; + + /// + /// If , draw lines on the chart area inside the axis lines. This is useful when there are multiple axes and you need to control which grid lines are drawn. + /// + public bool DrawOnChartArea { get; set; } = true; + + /// + /// If , draw lines beside the ticks in the axis area beside the chart. + /// + public bool DrawTicks { get; set; } = true; + + /// + /// Stroke width of grid lines. + /// + public int LineWidth { get; set; } = 1; + + /// + /// If , grid lines will be shifted to be between labels. This is set to true for a bar chart by default. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public bool? Offset { get; set; } = false; + + /// + /// Length and spacing of the tick mark line. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public IReadOnlyCollection? TickBorderDash { get; set; } + + /// + /// Offset for the line dash of the tick mark. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? TickBorderDashOffset { get; set; } + + /// + /// Color of the tick line. If unset, defaults to the grid line color. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? TickColor { get; set; } + + /// + /// Length in pixels that the grid lines will draw into the axis area. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? TickLength { get; set; } + + + /// + /// Width of the tick mark in pixels. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? TickWidth { get; set; } + + /// + /// z-index of the gridline layer. Values <= 0 are drawn under datasets, > 0 on top. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? Z { get; set; } +} + +/// +/// Chart axes tick styling +/// +/// +public class ChartAxesTicks +{ + /// + /// Color of label backdrops + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? BackdropColor { get; set; } + + /// + /// Padding of label backdrop + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? BackdropPadding { get; set; } + + /// + /// Color of ticks + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? Color { get; set; } + + /// + /// If , show tick labels. + /// + public bool Display { get; set; } = true; + + /// + /// defines options for the major tick marks that are generated by the axis. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartAxesTicksMajor? Major { get; set; } + + /// + /// Sets the offset of the tick labels from the axis + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? Padding { get; set; } + + /// + /// If , draw a background behind the tick labels. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public bool? ShowLabelBackdrop { get; set; } + + /// + /// The color of the stroke around the text. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? TextStrokeColor { get; set; } + + /// + /// Stroke width around the text. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? TextStrokeWidth { get; set; } +} + +/// +/// Defines options for the major tick marks that are generated by the axis. +/// +public class ChartAxesTicksMajor +{ + /// + /// If , major ticks are generated. A major tick will affect autoskipping and major will be defined on ticks in the scriptable options context. + /// + public bool Enabled { get; set; } = false; +} + /// /// The chart title defines text to draw at the top of the chart. -/// +/// /// public class ChartAxesTitle { @@ -217,7 +435,7 @@ public class ChartAxesTitle } /// -/// +/// /// public class ChartFont { @@ -232,7 +450,7 @@ public class ChartFont /// /// Height of an individual line of text - /// + /// /// public double LineHeight { get; set; } = 1.2; @@ -250,7 +468,7 @@ public class ChartFont /// /// Default font weight (boldness). - /// + /// /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? Weight { get; set; } = "bold"; diff --git a/blazorbootstrap/Models/Charts/ChartPlugins/ChartPlugins.cs b/blazorbootstrap/Models/Charts/ChartPlugins/ChartPlugins.cs index 7981f2ef7..f7cf17976 100644 --- a/blazorbootstrap/Models/Charts/ChartPlugins/ChartPlugins.cs +++ b/blazorbootstrap/Models/Charts/ChartPlugins/ChartPlugins.cs @@ -11,12 +11,19 @@ public class ChartPlugins /// /// The chart title defines text to draw at the top of the chart. + /// /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public ChartPluginsTitle? Title { get; set; } = new(); + /// + /// Tooltip for the element. + /// + /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public ChartPluginsTooltip? Tooltip { get; set; } + + #endregion } @@ -28,24 +35,160 @@ public class ChartPluginsLegend /// /// Alignment of the legend. Default values is 'center'. Other possible values 'start' and 'end'. /// - public string? Align { get; set; } = "center"; + public string Align { get; set; } = "center"; /// /// Is the legend shown? Default value is 'true'. /// public bool Display { get; set; } = true; + /// + /// If , Marks that this box should take the full width/height of the canvas (moving other boxes). This is unlikely to need to be changed in day-to-day use. + /// + public bool FullSize { get; set; } = true; + + /// + /// Label settings for the legend. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartPluginsLegendLabels? Labels { get; set; } + + /// + /// Maximum height of the legend, in pixels. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? MaxHeight { get; set; } + + /// + /// Maximum width of the legend, in pixels. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? MaxWidth { get; set; } + /// /// Position of the legend. Default value is 'top'. Other possible value is 'bottom'. /// - public string? Position { get; set; } = "top"; + public string Position { get; set; } = "top"; + + /// + /// If , the Legend will show datasets in reverse order. + /// + public bool Reverse { get; set; } = false; + + /// + /// If , for rendering of the legends will go from right to left. + /// + public bool Rtl { get; set; } = false; + + /// + /// This will force the text direction 'rtl' or 'ltr' on the canvas for rendering the legend, regardless of the css specified on the canvas + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? TextDirection { get; set; } + + /// + /// Title object + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartPluginsLegendTitle? Title { get; set; } #endregion } + + +public class ChartPluginsLegendTitle +{ + /// + /// Color of the legend. Default value is 'black'. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? Color { get; set; } + + /// + /// Is the legend title displayed. + /// + public bool Display { get; set; } = true; + + /// + /// Padding around the title. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? Padding { get; set; } + + /// + /// The string title + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? Text { get; set; } +} + +/// +/// The chart label settings +/// +/// +public class ChartPluginsLegendLabels +{ + /// + /// Width of coloured box. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? BoxWidth { get; set; } + + /// + /// Height of the coloured box + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? BoxHeight { get; set; } + + /// + /// Override the borderRadius to use. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? BorderRadius { get; set; } + + /// + /// Color of label and the strikethrough. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? Color { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartFont? Font { get; set; } + + /// + /// Padding between rows of colored boxes. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? Padding { get; set; } + + /// + /// If specified, this style of point is used for the legend. Only used if > is true. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? PointStyle { get; set; } + + /// + /// If is , the width of the point style used for the legend. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? PointStyleWidth { get; set; } + + /// + /// Label borderRadius will match corresponding . + /// + public bool UseBorderRadius { get; set; } = false; + + /// + /// If , Label style will match corresponding point style (size is based on pointStyleWidth or the minimum value between and -> Size). + /// + public bool UsePointStyle { get; set; } = false; + +} + /// /// The chart title defines text to draw at the top of the chart. -/// +/// /// public class ChartPluginsTitle { @@ -56,20 +199,20 @@ public class ChartPluginsTitle /// Options are: 'start', 'center', and 'end' /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? Align { get; set; } = "center"; - + public string? Align { get; set; } /// /// Color of text. /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? Color { get; set; } = "black"; + public string? Color { get; set; } /// /// Is the title shown? /// public bool Display { get; set; } - public ChartFont? Font { get; set; } = new(); + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ChartFont? Font { get; set; } //fullSize //padding @@ -83,7 +226,7 @@ public class ChartPluginsTitle /// /// Tooltip for bubble, doughnut, pie, polar area, and scatter charts -/// +/// /// public class ChartPluginsTooltip { @@ -123,7 +266,7 @@ public class ChartPluginsTooltip public int CaretSize { get; set; } = 5; /// - /// If true, color boxes are shown in the tooltip. + /// If , color boxes are shown in the tooltip. /// public bool DisplayColors { get; set; } = true; @@ -190,7 +333,7 @@ public class ChartPluginsTooltip } /// -/// +/// /// public class ChartPluginsTooltipFont { @@ -205,7 +348,7 @@ public class ChartPluginsTooltipFont /// /// Height of an individual line of text - /// + /// /// public double LineHeight { get; set; } = 1.2; @@ -223,7 +366,7 @@ public class ChartPluginsTooltipFont /// /// Default font weight (boldness). - /// + /// /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? Weight { get; set; } = "bold"; diff --git a/blazorbootstrap/Utilities/ColorBuilder.cs b/blazorbootstrap/Utilities/ColorBuilder.cs index c0831b1c2..b64ff5d09 100644 --- a/blazorbootstrap/Utilities/ColorBuilder.cs +++ b/blazorbootstrap/Utilities/ColorBuilder.cs @@ -6,13 +6,13 @@ public static class ColorBuilder /// /// Returns 6 categorical colors in the format #RRGGBB. - /// + /// /// public static string[] CategoricalSixColors => new[] { "#0fb5ae", "#4046ca", "#f68511", "#de3d82", "#7e84fa", "#72e06a", "#147af3", "#7326d3", "#e8c600", "#e8c600", "#e8c600", "#e8c600" }; /// /// Returns 12 categorical colors in the format #RRGGBB. - /// + /// /// public static string[] CategoricalTwelveColors => new[] { "#0fb5ae", "#4046ca", "#f68511", "#de3d82", "#7e84fa", "#72e06a", "#147af3", "#7326d3", "#e8c600", "#cb5d00", "#008f5d", "#bce931" }; From 21d914bf460527c26e9d28d591e8bae9579cb27c Mon Sep 17 00:00:00 2001 From: Lucas Harskamp Date: Mon, 3 Jun 2024 09:50:50 +0200 Subject: [PATCH 02/25] Coding rework for readability, performance and preventing bugs. --- .../Components/Layout/MainLayout.razor.cs | 6 +- .../Components/Layout/MainLayoutBase.cs | 70 +++--- ..._Show_Hide_Individual_AccordionItems.razor | 24 +- .../Alerts/Alert_Demo_05_Dismissing_B.razor | 3 +- .../BarCharts/BarChart_Demo_01_Examples.razor | 10 +- .../DoughnutChart_Demo_01_Examples.razor | 9 +- .../DoughnutChart_Demo_02_Datalabels.razor | 4 +- .../LineChart_Demo_01_A_Examples.razor | 13 +- .../PieCharts/PieChart_Demo_01_Examples.razor | 9 +- .../PieChart_Demo_02_Datalabels.razor | 4 +- ...Chart_Demo_03_Change_Legend_Position.razor | 12 +- .../Collapse/Collapse_Demo_01_Examples.razor | 12 +- .../Collapse_Demo_02_Horizontal.razor | 12 +- .../Collapse/Collapse_Demo_03_Events.razor | 14 +- .../Dropdowns/Dropdown_Demo_14_Methods.razor | 12 +- .../CurrencyInputDocumentation.razor | 2 +- .../NumberInputDocumentation.razor | 2 +- ...d_On_The_Entry_In_Another_Time_Field.razor | 2 +- ...nt_Side_Filtering_Paging_And_Sorting.razor | 4 +- ...Grid_Demo_01_A_Client_Side_Filtering.razor | 4 +- ...ide_Filtering_With_StringComparision.razor | 4 +- .../Grid_Demo_05_Set_Default_Filter.razor | 4 +- ...mo_06_Disable_Specific_Column_Filter.razor | 4 +- ...emo_06_Increase_Filter_Textbox_Width.razor | 4 +- .../Grid_Demo_35_Enum_Filters.razor | 8 +- .../Grid_Demo_36_Guid_Filters.razor | 4 +- .../Grid_Demo_02_Client_Side_Paging.razor | 4 +- .../Grid_Demo_25_Dynamic_Page_Size.razor | 4 +- .../Grid_Demo_26_Page_Size_Selection.razor | 4 +- .../Grid_Demo_34_AutoHide_Paging.razor | 4 +- .../Grid_Demo_03_Client_Side_Sorting.razor | 4 +- .../Grid_Demo_08_Default_Sorting.razor | 4 +- ...o_09_Disable_Specific_Column_Sorting.razor | 4 +- .../06-selection/Grid_Demo_22_Selection.razor | 8 +- .../Grid_Demo_23_Multiple_Selection.razor | 4 +- .../Grid_Demo_24_Disable_Selection.razor | 4 +- .../Grid_Demo_10_Header_Text_Alignment.razor | 4 +- .../Grid_Demo_11_Grid_Cell_Alignment.razor | 4 +- ..._Demo_16_Save_And_Load_Grid_Settings.razor | 4 +- ...rid_Demo_18_Specify_Custom_Row_Class.razor | 6 +- ..._Demo_19_Specify_Custom_Column_Class.razor | 4 +- .../Grid_Demo_20_Column_Css_Class.razor | 4 +- .../Grid_Demo_27_Header_Row_CSS_Class.razor | 8 +- .../Grid_Demo_28_Filters_Row_CSS_Class.razor | 4 +- .../10-events/Grid_Demo_29_Row_Click.razor | 4 +- .../Grid_Demo_30_Row_Double_Click.razor | 4 +- .../Grid_Demo_31_Translations.razor | 6 +- .../Grid_Demo_32_Fixed_Header_A.razor | 10 +- .../Grid_Demo_12_Grid_Cell_Formating.razor | 4 +- .../Grid_Demo_13_Grid_Cell_Nowrap.razor | 4 +- ...Demo_21_Specify_Custom_Column_Header.razor | 4 +- .../Layout/server/Layout_Server_Demo_01.razor | 8 +- .../Layout_WebAssembly_Demo_01.razor | 8 +- .../Offcanvas_Demo_01_Examples.razor | 6 +- .../Offcanvas_Demo_04_Static_Backdrop.razor | 2 +- .../Offcanvas_Demo_05_Sizes_A_Small.razor | 2 +- .../Offcanvas_Demo_05_Sizes_B_Large.razor | 2 +- .../Offcanvas/Offcanvas_Demo_06_Events.razor | 14 +- .../PdfViewer_Demo_03_Base64String.razor | 2 +- ...s_Demo_03_Set_Width_Programmatically.razor | 6 +- .../Sidebar/Sidebar_Demo_01_Basic_Usage.razor | 8 +- ...Sidebar_Demo_02_Two_level_navigation.razor | 8 +- .../Sidebar_Demo_03_Change_Icons_Color.razor | 8 +- ...bar_Demo_04_Full_layout_with_sidebar.razor | 8 +- ...05_Toggle_Sidebar_to_Show_Icons_Only.razor | 8 +- .../Sidebar/Sidebar_Demo_06_Show_Badge.razor | 8 +- .../Sidebar_Demo_07_Custom_Brand_Icon.razor | 8 +- ...bar_Demo_08_Show_Image_as_Brand_Logo.razor | 8 +- .../Sidebar_Demo_09_Customize_Sidebar.razor | 8 +- ...10_Apply_Custom_CSS_Class_to_NavItem.razor | 8 +- .../Sidebar2_Demo_01_Basic_Usage.razor | 8 +- .../Sidebar2_Demo_02_More_Nested_Levels.razor | 8 +- .../Sidebar2_Demo_03_Change_Icons_Color.razor | 8 +- ...ar2_Demo_04_Full_layout_with_sidebar.razor | 8 +- .../Sidebar2_Demo_07_Custom_Brand_Icon.razor | 8 +- ...ar2_Demo_08_Show_Image_as_Brand_Logo.razor | 8 +- ...abs_Demo_08_Activate_Individual_Tabs.razor | 12 +- .../Components/Shared/Demo.razor | 6 +- .../Components/Shared/Demo.razor.cs | 2 +- .../Services/CustomerService.cs | 44 ++-- .../Services/ICustomerService.cs | 4 +- blazorbootstrap.sln.DotSettings | 2 + blazorbootstrap/BlazorBootstrap.csproj | 15 +- .../Components/Accordion/Accordion.razor.cs | 20 +- .../Components/Accordion/AccordionItem.razor | 2 +- .../Accordion/AccordionItem.razor.cs | 30 ++- .../Components/Alert/Alert.razor.cs | 27 ++- .../Components/Badge/Badge.razor.cs | 9 +- .../Components/Breadcrumb/Breadcrumb.razor.cs | 21 +- .../Components/Button/Button.razor | 4 +- .../Components/Button/Button.razor.cs | 108 ++++----- .../Components/Callout/Callout.razor | 4 +- .../Components/Callout/Callout.razor.cs | 16 +- blazorbootstrap/Components/Card/Card.razor.cs | 9 +- .../Components/Card/CardBody.razor.cs | 6 +- .../Components/Card/CardFooter.razor.cs | 7 +- .../Components/Card/CardGroup.razor.cs | 3 +- .../Components/Card/CardHeader.razor.cs | 5 + .../Components/Card/CardLink.razor.cs | 13 +- .../Components/Card/CardSubTitle.razor.cs | 5 + .../Components/Card/CardText.razor.cs | 5 + .../Components/Card/CardTitle.razor.cs | 5 + .../Components/Charts/BarChart.razor.cs | 42 ++-- .../Components/Charts/BlazorBootstrapChart.cs | 125 ++++++---- .../Components/Charts/DoughnutChart.razor.cs | 44 ++-- .../Components/Charts/LineChart.razor.cs | 31 ++- .../Components/Charts/PieChart.razor.cs | 42 ++-- .../Components/Collapse/Collapse.razor.cs | 33 ++- .../ConfirmDialog/ConfirmDialog.razor.cs | 12 +- .../Core/BlazorBootstrapComponentBase.cs | 95 +++++--- .../Components/Dropdown/Dropdown.razor.cs | 50 ++-- .../Dropdown/DropdownActionButton.razor.cs | 8 +- .../Dropdown/DropdownDivider.razor.cs | 6 +- .../Dropdown/DropdownHeader.razor.cs | 1 + .../Components/Dropdown/DropdownItem.razor.cs | 43 ++-- .../Components/Dropdown/DropdownMenu.razor.cs | 3 +- .../Dropdown/DropdownToggleButton.razor.cs | 10 +- .../Form/AutoComplete/AutoComplete.razor | 2 +- .../Form/AutoComplete/AutoComplete.razor.cs | 50 ++-- .../Form/CurrencyInput/CurrencyInput.razor | 4 +- .../Form/CurrencyInput/CurrencyInput.razor.cs | 75 +++--- .../Components/Form/DateInput/DateInput.razor | 4 +- .../Form/DateInput/DateInput.razor.cs | 43 ++-- .../Form/NumberInput/NumberInput.razor | 4 +- .../Form/NumberInput/NumberInput.razor.cs | 72 +++--- .../Form/RangeInput/RangeInput.razor | 6 +- .../Form/RangeInput/RangeInput.razor.cs | 92 ++++---- .../Components/Form/Switch/Switch.razor.cs | 22 +- .../Components/Form/TimeInput/TimeInput.razor | 4 +- .../Form/TimeInput/TimeInput.razor.cs | 39 +-- blazorbootstrap/Components/Grid/Grid.razor | 18 +- blazorbootstrap/Components/Grid/Grid.razor.cs | 223 +++++++++--------- .../Components/Grid/GridColumn.razor.cs | 86 ++++--- .../Components/Grid/GridColumnFilter.razor | 18 +- .../Components/Grid/GridColumnFilter.razor.cs | 24 +- blazorbootstrap/Components/Icon/Icon.razor.cs | 9 +- blazorbootstrap/Components/Modals/Modal.razor | 8 +- .../Components/Modals/Modal.razor.cs | 93 ++++---- .../Components/Offcanvas/Offcanvas.razor.cs | 62 ++--- .../Components/Pagination/Pagination.razor | 18 +- .../Components/Pagination/Pagination.razor.cs | 38 ++- .../Pagination/PaginationItem.razor.cs | 10 +- .../Pagination/PaginationLink.razor.cs | 6 +- .../Components/PdfViewer/PdfViewer.razor.cs | 36 +-- .../Placeholders/Placeholder.razor.cs | 3 + .../PlaceholderContainer.razor.cs | 2 +- .../Components/Preload/Preload.razor.cs | 3 + .../Components/Progress/Progress.razor.cs | 6 +- .../Components/Progress/ProgressBar.razor.cs | 76 ++++-- .../Components/Ribbon/Ribbon.razor.cs | 40 ++-- .../Components/Ribbon/RibbonItem.razor.cs | 12 +- .../Ribbon/RibbonItemGroup.razor.cs | 2 +- .../Components/Ribbon/RibbonTab.razor.cs | 12 +- .../ScriptLoader/ScriptLoader.razor.cs | 4 +- .../Components/Sidebar/Sidebar.razor | 2 +- .../Components/Sidebar/Sidebar.razor.cs | 38 +-- .../Components/Sidebar/SidebarItem.razor | 10 +- .../Components/Sidebar/SidebarItem.razor.cs | 14 +- .../Sidebar/SidebarItemGroup.razor.cs | 2 +- .../Components/Sidebar2/Sidebar2.razor | 2 +- .../Components/Sidebar2/Sidebar2.razor.cs | 49 ++-- .../Components/Sidebar2/Sidebar2Item.razor | 6 +- .../Components/Sidebar2/Sidebar2Item.razor.cs | 16 +- .../Sidebar2/Sidebar2ItemGroup.razor.cs | 3 +- .../SortableList/SortableList.razor.cs | 31 +-- .../Components/Spinner/Spinner.razor.cs | 12 +- blazorbootstrap/Components/Tabs/Tab.razor.cs | 17 +- blazorbootstrap/Components/Tabs/Tabs.razor.cs | 56 +++-- .../Components/Toasts/SimpleToast.razor.cs | 32 +-- blazorbootstrap/Components/Toasts/Toast.razor | 6 +- .../Components/Toasts/Toast.razor.cs | 30 ++- .../Components/Toasts/Toasts.razor.cs | 18 +- .../Components/Tooltip/Tooltip.razor | 4 +- .../Components/Tooltip/Tooltip.razor.cs | 24 +- blazorbootstrap/Enums/IconName.cs | 26 +- blazorbootstrap/Enums/IconSize.cs | 3 + .../EventArguments/GridRowEventArgs.cs | 7 +- blazorbootstrap/Extensions/EnumExtensions.cs | 8 +- .../Extensions/ExpressionExtensions.cs | 50 ++-- .../Models/AutoCompleteDataProviderResult.cs | 2 +- .../Charts/ChartDataset/BarChartDataset.cs | 8 +- .../Charts/ChartDataset/BubbleChartDataset.cs | 2 +- .../Charts/ChartDataset/LineChartDataset.cs | 6 +- .../Charts/ChartOptions/ChartOptions.cs | 4 +- .../Charts/ChartPlugins/ChartPlugins.cs | 8 +- blazorbootstrap/Models/Charts/ChartRGB.cs | 2 +- blazorbootstrap/Models/Charts/ChartRGBA.cs | 2 +- blazorbootstrap/Models/FilterItem.cs | 32 +-- .../Models/GridDataProviderRequest.cs | 26 +- .../Models/GridDataProviderResult.cs | 6 +- .../Models/GridFiltersTranslationDelegate.cs | 2 +- blazorbootstrap/Models/GridSettings.cs | 2 +- .../Models/GridSettingsProviderDelegate.cs | 2 +- blazorbootstrap/Models/GridState.cs | 6 +- blazorbootstrap/Models/ModalOption.cs | 2 +- .../Models/Sidebar2DataProviderDelegate.cs | 2 +- .../Models/Sidebar2DataProviderRequest.cs | 12 +- .../Models/SidebarDataProviderDelegate.cs | 2 +- .../Models/SidebarDataProviderRequest.cs | 16 +- .../Models/SidebarDataProviderResult.cs | 2 +- blazorbootstrap/Services/BreadcrumbService.cs | 4 +- .../Utilities/BootstrapIconProvider.cs | 34 +-- blazorbootstrap/Utilities/CssClassBuilder.cs | 4 +- blazorbootstrap/Utilities/CssStyleBuilder.cs | 4 +- .../Utilities/FilterOperatorHelper.cs | 57 +++-- blazorbootstrap/Utilities/IdGenerator.cs | 8 +- 206 files changed, 1867 insertions(+), 1563 deletions(-) create mode 100644 blazorbootstrap.sln.DotSettings diff --git a/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayout.razor.cs b/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayout.razor.cs index c9d56a3c5..fd7ad7753 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayout.razor.cs +++ b/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayout.razor.cs @@ -2,9 +2,9 @@ public partial class MainLayout : MainLayoutBase { - internal override IEnumerable GetNavItems() + internal override IReadOnlyCollection GetNavItems() { - navItems ??= new List + NavItems ??= new List { new (){ Id = "1", Text = "Getting Started", Href = "/getting-started", IconName = IconName.HouseDoorFill }, @@ -84,6 +84,6 @@ internal override IEnumerable GetNavItems() new (){ Id = "700", Text = "Modal Service", Href = "/modal-service", IconName = IconName.WindowStack, ParentId = "7" }, }; - return navItems; + return NavItems; } } diff --git a/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayoutBase.cs b/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayoutBase.cs index 2c7a5d8db..34a8d19b4 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayoutBase.cs +++ b/BlazorBootstrap.Demo.RCL/Components/Layout/MainLayoutBase.cs @@ -2,55 +2,49 @@ public class MainLayoutBase : LayoutComponentBase { - private string version = default!; - private string docsUrl = default!; - private string blogUrl = default!; - private string githubUrl = default!; - private string twitterUrl = default!; - private string linkedInUrl = default!; - private string openCollectiveUrl = default!; - private string githubIssuesUrl = default!; - private string githubDiscussionsUrl = default!; - private string stackoverflowUrl = default!; - internal Sidebar2 sidebar2 = default!; - internal IEnumerable navItems = default!; + internal IReadOnlyCollection? NavItems; [Inject] public IConfiguration Configuration { get; set; } = default!; protected override void OnInitialized() { - version = $"v{Configuration["version"]}"; // example: v0.6.1 - docsUrl = $"{Configuration["urls:docs"]}"; - blogUrl = $"{Configuration["urls:blog"]}"; - githubUrl = $"{Configuration["urls:github"]}"; - twitterUrl = $"{Configuration["urls:twitter"]}"; - linkedInUrl = $"{Configuration["urls:linkedin"]}"; - openCollectiveUrl = $"{Configuration["urls:opencollective"]}"; - githubIssuesUrl = $"{Configuration["urls:github_issues"]}"; - githubDiscussionsUrl = $"{Configuration["urls:github_discussions"]}"; - stackoverflowUrl = $"{Configuration["urls:stackoverflow"]}"; + Version = $"v{Configuration["version"]}"; // example: v0.6.1 + DocsUrl = $"{Configuration["urls:docs"]}"; + BlogUrl = $"{Configuration["urls:blog"]}"; + GithubUrl = $"{Configuration["urls:github"]}"; + TwitterUrl = $"{Configuration["urls:twitter"]}"; + LinkedInUrl = $"{Configuration["urls:linkedin"]}"; + OpenCollectiveUrl = $"{Configuration["urls:opencollective"]}"; + GithubIssuesUrl = $"{Configuration["urls:github_issues"]}"; + GithubDiscussionsUrl = $"{Configuration["urls:github_discussions"]}"; + StackoverflowUrl = $"{Configuration["urls:stackoverflow"]}"; base.OnInitialized(); } - internal virtual async Task Sidebar2DataProvider(Sidebar2DataProviderRequest request) + internal virtual Task Sidebar2DataProvider() { - if (navItems is null) - navItems = GetNavItems(); - - return await Task.FromResult(request.ApplyTo(navItems)); + return Task.FromResult(Sidebar2DataProviderRequest.ApplyTo(NavItems)); } - internal virtual IEnumerable GetNavItems() => new List(); - public string Version => version; - public string DocsUrl => docsUrl; - public string BlogUrl => blogUrl; - public string GithubUrl => githubUrl; - public string TwitterUrl => twitterUrl; - public string LinkedInUrl => linkedInUrl; - public string OpenCollectiveUrl => openCollectiveUrl; - public string GithubIssuesUrl => githubIssuesUrl; - public string GithubDiscussionsUrl => githubDiscussionsUrl; - public string StackoverflowUrl => stackoverflowUrl; + public string Version { get; private set; } = default!; + + public string DocsUrl { get; private set; } = default!; + + public string BlogUrl { get; private set; } = default!; + + public string GithubUrl { get; private set; } = default!; + + public string TwitterUrl { get; private set; } = default!; + + public string LinkedInUrl { get; private set; } = default!; + + public string OpenCollectiveUrl { get; private set; } = default!; + + public string GithubIssuesUrl { get; private set; } = default!; + + public string GithubDiscussionsUrl { get; private set; } = default!; + + public string StackoverflowUrl { get; private set; } = default!; } diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Accordion/Accordion_Demo_06_Show_Hide_Individual_AccordionItems.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Accordion/Accordion_Demo_06_Show_Hide_Individual_AccordionItems.razor index 4af9addc6..87ac42718 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Accordion/Accordion_Demo_06_Show_Hide_Individual_AccordionItems.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Accordion/Accordion_Demo_06_Show_Hide_Individual_AccordionItems.razor @@ -52,16 +52,16 @@ @code { private Accordion accordion1 = default!; - private async Task ShowFirstAccordionItemAsync() => await accordion1.ShowFirstAccordionItemAsync(); - private async Task ShowSecondAccordionItemAsync() => await accordion1.ShowAccordionItemByIndexAsync(1); - private async Task ShowThirdAccordionItemAsync() => await accordion1.ShowAccordionItemByIndexAsync(2); - private async Task ShowProductsAccordionItemAsync() => await accordion1.ShowAccordionItemByNameAsync("Products"); - private async Task ShowFaqsAccordionItemAsync() => await accordion1.ShowAccordionItemByNameAsync("FAQ"); - private async Task ShowLastAccordionItemAsync() => await accordion1.ShowLastAccordionItemAsync(); - private async Task HideFirstAccordionItemAsync() => await accordion1.HideFirstAccordionItemAsync(); - private async Task HideSecondAccordionItemAsync() => await accordion1.HideAccordionItemByIndexAsync(1); - private async Task HideThirdAccordionItemAsync() => await accordion1.HideAccordionItemByIndexAsync(2); - private async Task HideProductsAccordionItemAsync() => await accordion1.HideAccordionItemByNameAsync("Products"); - private async Task HideFaqsAccordionItemAsync() => await accordion1.HideAccordionItemByNameAsync("FAQ"); - private async Task HideLastAccordionItemAsync() => await accordion1.HideLastAccordionItemAsync(); + private Task ShowFirstAccordionItemAsync() => accordion1.ShowFirstAccordionItemAsync(); + private Task ShowSecondAccordionItemAsync() => accordion1.ShowAccordionItemByIndexAsync(1); + private Task ShowThirdAccordionItemAsync() => accordion1.ShowAccordionItemByIndexAsync(2); + private Task ShowProductsAccordionItemAsync() => accordion1.ShowAccordionItemByNameAsync("Products"); + private Task ShowFaqsAccordionItemAsync() => accordion1.ShowAccordionItemByNameAsync("FAQ"); + private Task ShowLastAccordionItemAsync() => accordion1.ShowLastAccordionItemAsync(); + private Task HideFirstAccordionItemAsync() => accordion1.HideFirstAccordionItemAsync(); + private Task HideSecondAccordionItemAsync() => accordion1.HideAccordionItemByIndexAsync(1); + private Task HideThirdAccordionItemAsync() => accordion1.HideAccordionItemByIndexAsync(2); + private Task HideProductsAccordionItemAsync() => accordion1.HideAccordionItemByNameAsync("Products"); + private Task HideFaqsAccordionItemAsync() => accordion1.HideAccordionItemByNameAsync("FAQ"); + private Task HideLastAccordionItemAsync() => accordion1.HideLastAccordionItemAsync(); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Alerts/Alert_Demo_05_Dismissing_B.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Alerts/Alert_Demo_05_Dismissing_B.razor index a3b750be8..429e2c5cb 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Alerts/Alert_Demo_05_Dismissing_B.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Alerts/Alert_Demo_05_Dismissing_B.razor @@ -1,8 +1,7 @@  - Holy guacamole! You should check in on some of those fields below. + Holy guacamole! You should check in on some of those fields below. @code { Alert warningAlert = default!; - private async Task CloseAlert() => await warningAlert.CloseAsync(); } diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/BarCharts/BarChart_Demo_01_Examples.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/BarCharts/BarChart_Demo_01_Examples.razor index f8c2e7bfe..7964e81e8 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/BarCharts/BarChart_Demo_01_Examples.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/BarCharts/BarChart_Demo_01_Examples.razor @@ -1,10 +1,10 @@  - - - - - + + + + + @code { private BarChart barChart = default!; diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_01_Examples.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_01_Examples.razor index c1e1efea6..52c9a2032 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_01_Examples.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_01_Examples.razor @@ -1,8 +1,8 @@  - - - + + + @code { private DoughnutChart doughnutChart = default!; @@ -44,8 +44,7 @@ foreach (var dataset in chartData.Datasets) { if (dataset is DoughnutChartDataset doughnutChartDataset - && doughnutChartDataset is not null - && doughnutChartDataset.Data is not null) + && doughnutChartDataset?.Data != null) { var count = doughnutChartDataset.Data.Count; diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_02_Datalabels.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_02_Datalabels.razor index a1cb4478e..c8aa9d443 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_02_Datalabels.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/DoughnutCharts/DoughnutChart_Demo_02_Datalabels.razor @@ -1,7 +1,7 @@  - - + + @code { private DoughnutChart doughnutChart = default!; diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/LineCharts/LineChart_Demo_01_A_Examples.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/LineCharts/LineChart_Demo_01_A_Examples.razor index 02cacdcd2..2146f2f3f 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/LineCharts/LineChart_Demo_01_A_Examples.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/LineCharts/LineChart_Demo_01_A_Examples.razor @@ -1,10 +1,10 @@  - - - - - + + + + + @code { private LineChart lineChart = default!; @@ -40,8 +40,7 @@ foreach (var dataset in chartData.Datasets) { if (dataset is LineChartDataset lineChartDataset - && lineChartDataset is not null - && lineChartDataset.Data is not null) + && lineChartDataset?.Data != null) { var count = lineChartDataset.Data.Count; diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_01_Examples.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_01_Examples.razor index af629a501..4f8b1ab34 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_01_Examples.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_01_Examples.razor @@ -1,8 +1,8 @@  - - - + + + @code { private PieChart pieChart = default!; @@ -44,8 +44,7 @@ foreach (var dataset in chartData.Datasets) { if (dataset is PieChartDataset pieChartDataset - && pieChartDataset is not null - && pieChartDataset.Data is not null) + && pieChartDataset?.Data != null) { var count = pieChartDataset.Data.Count; diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_02_Datalabels.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_02_Datalabels.razor index a6e9e59c1..8fccaa107 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_02_Datalabels.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_02_Datalabels.razor @@ -1,7 +1,7 @@  - - + + @code { private PieChart pieChart = default!; diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_03_Change_Legend_Position.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_03_Change_Legend_Position.razor index 086fa2f61..3f61b50f7 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_03_Change_Legend_Position.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Charts/PieCharts/PieChart_Demo_03_Change_Legend_Position.razor @@ -38,15 +38,15 @@ await base.OnAfterRenderAsync(firstRender); } - private async Task PositionTopAsync() => await UpdatePositionAsync("top"); - private async Task PositionRightAsync() => await UpdatePositionAsync("right"); - private async Task PositionBottomAsync() => await UpdatePositionAsync("bottom"); - private async Task PositionLeftAsync() => await UpdatePositionAsync("left"); + private Task PositionTopAsync() => UpdatePositionAsync("top"); + private Task PositionRightAsync() => UpdatePositionAsync("right"); + private Task PositionBottomAsync() => UpdatePositionAsync("bottom"); + private Task PositionLeftAsync() => UpdatePositionAsync("left"); - private async Task UpdatePositionAsync(string position) + private Task UpdatePositionAsync(string position) { pieChartOptions.Plugins.Legend.Position = position; - await pieChart.UpdateAsync(chartData, pieChartOptions); + return pieChart.UpdateAsync(chartData, pieChartOptions); } #region Data Preparation diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_01_Examples.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_01_Examples.razor index 9c6fc0184..ed8fdba87 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_01_Examples.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_01_Examples.razor @@ -1,6 +1,6 @@ - - - + + + @@ -13,7 +13,7 @@ @code { Collapse collapse1 = default!; - private async Task ShowContentAsync() => await collapse1.ShowAsync(); - private async Task HideContentAsync() => await collapse1.HideAsync(); - private async Task ToggleContentAsync() => await collapse1.ToggleAsync(); + private ValueTask ShowContentAsync() => collapse1.ShowAsync(); + private ValueTask HideContentAsync() => collapse1.HideAsync(); + private ValueTask ToggleContentAsync() => collapse1.ToggleAsync(); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_02_Horizontal.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_02_Horizontal.razor index d5d7be886..8f76125cf 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_02_Horizontal.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_02_Horizontal.razor @@ -1,6 +1,6 @@ - - - + + + @@ -13,7 +13,7 @@ @code { Collapse collapse1 = default!; - private async Task ShowContentAsync() => await collapse1.ShowAsync(); - private async Task HideContentAsync() => await collapse1.HideAsync(); - private async Task ToggleContentAsync() => await collapse1.ToggleAsync(); + private ValueTask ShowContentAsync() => collapse1.ShowAsync(); + private ValueTask HideContentAsync() => collapse1.HideAsync(); + private ValueTask ToggleContentAsync() => collapse1.ToggleAsync(); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_03_Events.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_03_Events.razor index da71c0c9c..d7ab05e34 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_03_Events.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Collapse/Collapse_Demo_03_Events.razor @@ -1,6 +1,6 @@ - - - + + + messages = new List(); + List messages = new(); - private async Task ShowContentAsync() => await collapse1.ShowAsync(); - private async Task HideContentAsync() => await collapse1.HideAsync(); - private async Task ToggleContentAsync() => await collapse1.ToggleAsync(); + private ValueTask ShowContentAsync() => collapse1.ShowAsync(); + private ValueTask HideContentAsync() => collapse1.HideAsync(); + private ValueTask ToggleContentAsync() => collapse1.ToggleAsync(); private void OnCollapseShowingAsync() => messages.Add($"Event: OnShowing called {DateTime.Now.ToLocalTime()}"); diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Dropdowns/Dropdown_Demo_14_Methods.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Dropdowns/Dropdown_Demo_14_Methods.razor index 85d7034b6..afbce21ec 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Dropdowns/Dropdown_Demo_14_Methods.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Dropdowns/Dropdown_Demo_14_Methods.razor @@ -7,14 +7,14 @@ - - - + + + @code{ private Dropdown dropdown1 = default!; - private async Task ShowAsync() => await dropdown1.ShowAsync(); - private async Task HideAsync() => await dropdown1.HideAsync(); - private async Task ToggleAsync() => await dropdown1.ToggleAsync(); + private ValueTask ShowAsync() => dropdown1.ShowAsync(); + private ValueTask HideAsync() => dropdown1.HideAsync(); + private ValueTask ToggleAsync() => dropdown1.ToggleAsync(); } diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Form/CurrencyInput/CurrencyInputDocumentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Form/CurrencyInput/CurrencyInputDocumentation.razor index ec53dcc37..6dfabdbef 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Form/CurrencyInput/CurrencyInputDocumentation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Form/CurrencyInput/CurrencyInputDocumentation.razor @@ -54,7 +54,7 @@ -
By default, negative numbers are not allowed. Set the AllowNegativeNumbers parameter to true to allow the negative numbers.
+
By default, negative numbers are not allowed. Set the AllowNegativeNumbers parameter to true to allow the negative numbers.
diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Form/NumberInput/NumberInputDocumentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Form/NumberInput/NumberInputDocumentation.razor index 7ed206b6c..be1b91d6a 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Form/NumberInput/NumberInputDocumentation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Form/NumberInput/NumberInputDocumentation.razor @@ -39,7 +39,7 @@ -
By default, negative numbers are not allowed. Set the AllowNegativeNumbers parameter to true to allow the negative numbers.
+
By default, negative numbers are not allowed. Set the AllowNegativeNumbers parameter to true to allow the negative numbers.
diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Form/TimeInput/TimeInput_Demo_07_Restrict_The_Time_Field_Based_On_The_Entry_In_Another_Time_Field.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Form/TimeInput/TimeInput_Demo_07_Restrict_The_Time_Field_Based_On_The_Entry_In_Another_Time_Field.razor index 9a97fff3f..54eca6dd0 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Form/TimeInput/TimeInput_Demo_07_Restrict_The_Time_Field_Based_On_The_Entry_In_Another_Time_Field.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Form/TimeInput/TimeInput_Demo_07_Restrict_The_Time_Field_Based_On_The_Entry_In_Another_Time_Field.razor @@ -69,7 +69,7 @@ private void DepartureTimeChanged(TimeOnly? departureTime) { - if (departureTime is null || !departureTime.HasValue) + if (!departureTime.HasValue) { flightForm.DepartureTime = null; flightForm.ArrivalTime = null; diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/01-Overview/Grid_Demo_04_Client_Side_Filtering_Paging_And_Sorting.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/01-Overview/Grid_Demo_04_Client_Side_Filtering_Paging_And_Sorting.razor index 270142cdd..1b186037a 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/01-Overview/Grid_Demo_04_Client_Side_Filtering_Paging_And_Sorting.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/01-Overview/Grid_Demo_04_Client_Side_Filtering_Paging_And_Sorting.razor @@ -43,7 +43,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private HashSet selectedEmployees = new(); @@ -55,7 +55,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_A_Client_Side_Filtering.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_A_Client_Side_Filtering.razor index b503b28fc..cb22db9eb 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_A_Client_Side_Filtering.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_A_Client_Side_Filtering.razor @@ -25,7 +25,7 @@ @code { BlazorBootstrap.Grid grid = default!; - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -40,7 +40,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_B_Client_Side_Filtering_With_StringComparision.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_B_Client_Side_Filtering_With_StringComparision.razor index 9c52df07c..3fdbc80e0 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_B_Client_Side_Filtering_With_StringComparision.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_01_B_Client_Side_Filtering_With_StringComparision.razor @@ -17,7 +17,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -27,7 +27,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_05_Set_Default_Filter.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_05_Set_Default_Filter.razor index e9e5f1509..8cd303ae7 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_05_Set_Default_Filter.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_05_Set_Default_Filter.razor @@ -23,7 +23,7 @@ Class="table table-hover table-bordered table-striped" @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -33,7 +33,7 @@ Class="table table-hover table-bordered table-striped" return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Disable_Specific_Column_Filter.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Disable_Specific_Column_Filter.razor index 3835c706b..cf2fe7eb3 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Disable_Specific_Column_Filter.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Disable_Specific_Column_Filter.razor @@ -17,7 +17,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -27,7 +27,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Increase_Filter_Textbox_Width.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Increase_Filter_Textbox_Width.razor index 731c950da..05e6a07c3 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Increase_Filter_Textbox_Width.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_06_Increase_Filter_Textbox_Width.razor @@ -29,7 +29,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -39,7 +39,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_35_Enum_Filters.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_35_Enum_Filters.razor index d37795b09..f3a66e8d5 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_35_Enum_Filters.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_35_Enum_Filters.razor @@ -1,5 +1,4 @@ - @code { - BlazorBootstrap.Grid grid = default!; - private IEnumerable users = default!; + private IReadOnlyCollection users = default!; protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -37,7 +35,7 @@ return await Task.FromResult(request.ApplyTo(users)); } - private IEnumerable GetUsers() + private IReadOnlyCollection GetUsers() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_36_Guid_Filters.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_36_Guid_Filters.razor index 013d92d84..bfaee0b37 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_36_Guid_Filters.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/03-filters/Grid_Demo_36_Guid_Filters.razor @@ -25,7 +25,7 @@ @code { BlazorBootstrap.Grid grid = default!; - private IEnumerable users = default!; + private IReadOnlyCollection users = default!; protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -40,7 +40,7 @@ return await Task.FromResult(request.ApplyTo(users)); } - private IEnumerable GetUsers() + private IReadOnlyCollection GetUsers() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_02_Client_Side_Paging.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_02_Client_Side_Paging.razor index a34fdaf62..145e73733 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_02_Client_Side_Paging.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_02_Client_Side_Paging.razor @@ -24,7 +24,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -34,7 +34,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_25_Dynamic_Page_Size.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_25_Dynamic_Page_Size.razor index 82bf6e755..fb85c9642 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_25_Dynamic_Page_Size.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_25_Dynamic_Page_Size.razor @@ -29,7 +29,7 @@ @code { private int pageSize = 5; - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -39,7 +39,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_26_Page_Size_Selection.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_26_Page_Size_Selection.razor index d0404960b..a99a768e9 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_26_Page_Size_Selection.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_26_Page_Size_Selection.razor @@ -26,7 +26,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -36,7 +36,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_34_AutoHide_Paging.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_34_AutoHide_Paging.razor index 69b8d79a9..61b6cf70b 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_34_AutoHide_Paging.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/04-paging/Grid_Demo_34_AutoHide_Paging.razor @@ -29,7 +29,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -39,7 +39,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_03_Client_Side_Sorting.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_03_Client_Side_Sorting.razor index e6ee6c7f8..03010ebbc 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_03_Client_Side_Sorting.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_03_Client_Side_Sorting.razor @@ -28,7 +28,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -38,7 +38,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_08_Default_Sorting.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_08_Default_Sorting.razor index e842cb6e5..b484837c3 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_08_Default_Sorting.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_08_Default_Sorting.razor @@ -17,7 +17,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -27,7 +27,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_09_Disable_Specific_Column_Sorting.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_09_Disable_Specific_Column_Sorting.razor index 9363a3ae1..908865dbc 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_09_Disable_Specific_Column_Sorting.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/05-sorting/Grid_Demo_09_Disable_Specific_Column_Sorting.razor @@ -17,7 +17,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -27,7 +27,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_22_Selection.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_22_Selection.razor index 18e3193b1..b44861f84 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_22_Selection.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_22_Selection.razor @@ -38,21 +38,21 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private HashSet selectedEmployees = new(); - private async Task> EmployeesDataProvider(GridDataProviderRequest request) + private async Task> EmployeesDataProvider(GridDataProviderRequest result) { Console.WriteLine("EmployeesDataProvider called..."); if (employees is null) // pull employees only one time for client-side filtering, sorting, and paging employees = GetEmployees(); // call a service or an API to pull the employees - return await Task.FromResult(request.ApplyTo(employees)); + return await Task.FromResult(result.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_23_Multiple_Selection.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_23_Multiple_Selection.razor index 35534401f..95c5ea1f2 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_23_Multiple_Selection.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_23_Multiple_Selection.razor @@ -40,7 +40,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private HashSet selectedEmployees = new(); @@ -54,7 +54,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_24_Disable_Selection.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_24_Disable_Selection.razor index f1b741ea6..237674093 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_24_Disable_Selection.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_24_Disable_Selection.razor @@ -41,7 +41,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private HashSet selectedEmployees = new(); @@ -53,7 +53,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_10_Header_Text_Alignment.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_10_Header_Text_Alignment.razor index 2f3627c9a..bfa7ece66 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_10_Header_Text_Alignment.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_10_Header_Text_Alignment.razor @@ -17,7 +17,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -27,7 +27,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_11_Grid_Cell_Alignment.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_11_Grid_Cell_Alignment.razor index f03c99094..969fff9b8 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_11_Grid_Cell_Alignment.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/07-alignment/Grid_Demo_11_Grid_Cell_Alignment.razor @@ -17,7 +17,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -27,7 +27,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/08-grid-settings/Grid_Demo_16_Save_And_Load_Grid_Settings.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/08-grid-settings/Grid_Demo_16_Save_And_Load_Grid_Settings.razor index 485ba28ca..42a6c4112 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/08-grid-settings/Grid_Demo_16_Save_And_Load_Grid_Settings.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/08-grid-settings/Grid_Demo_16_Save_And_Load_Grid_Settings.razor @@ -26,7 +26,7 @@ @code { BlazorBootstrap.Grid grid = default!; - private IEnumerable? employees; + private IReadOnlyCollection? employees; [Inject] public IJSRuntime JS { get; set; } = default!; @@ -63,7 +63,7 @@ return settings; } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_18_Specify_Custom_Row_Class.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_18_Specify_Custom_Row_Class.razor index 059e0f3c8..d1d722251 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_18_Specify_Custom_Row_Class.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_18_Specify_Custom_Row_Class.razor @@ -27,7 +27,7 @@ Class="table table-hover table-bordered" @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -41,13 +41,13 @@ Class="table table-hover table-bordered" { if (!emp.IsActive) return "table-danger"; - else if (emp.Designation == "Architect") + if (emp.Designation == "Architect") return "table-success"; return string.Empty; } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_19_Specify_Custom_Column_Class.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_19_Specify_Custom_Column_Class.razor index 2afe8c090..bf0d7feaa 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_19_Specify_Custom_Column_Class.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_19_Specify_Custom_Column_Class.razor @@ -30,7 +30,7 @@ Class="table table-hover table-bordered" @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -40,7 +40,7 @@ Class="table table-hover table-bordered" return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_20_Column_Css_Class.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_20_Column_Css_Class.razor index 4e66f13b0..911ea3285 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_20_Column_Css_Class.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_20_Column_Css_Class.razor @@ -26,7 +26,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -36,7 +36,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_27_Header_Row_CSS_Class.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_27_Header_Row_CSS_Class.razor index c5d74a52b..a88eab43e 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_27_Header_Row_CSS_Class.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_27_Header_Row_CSS_Class.razor @@ -115,17 +115,17 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; - private async Task> EmployeesDataProvider(GridDataProviderRequest request) + private async Task> EmployeesDataProvider(GridDataProviderRequest result) { if (employees is null) // pull employees only one time for client-side filtering, sorting, and paging employees = GetEmployees(); // call a service or an API to pull the employees - return await Task.FromResult(request.ApplyTo(employees)); + return await Task.FromResult(result.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_28_Filters_Row_CSS_Class.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_28_Filters_Row_CSS_Class.razor index fa9934914..f9f92b32e 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_28_Filters_Row_CSS_Class.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/09-custom-css-class/Grid_Demo_28_Filters_Row_CSS_Class.razor @@ -216,7 +216,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -226,7 +226,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_29_Row_Click.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_29_Row_Click.razor index d19691dee..4eef7374c 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_29_Row_Click.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_29_Row_Click.razor @@ -32,7 +32,7 @@ @code { [Inject] ModalService ModalService { get; set; } = default!; - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -42,7 +42,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_30_Row_Double_Click.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_30_Row_Double_Click.razor index 75e2780aa..c18ab4533 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_30_Row_Double_Click.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/10-events/Grid_Demo_30_Row_Double_Click.razor @@ -32,7 +32,7 @@ @code { [Inject] ModalService ModalService { get; set; } = default!; - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -42,7 +42,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/11-translations/Grid_Demo_31_Translations.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/11-translations/Grid_Demo_31_Translations.razor index 7329ae0a7..1d202c937 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/11-translations/Grid_Demo_31_Translations.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/11-translations/Grid_Demo_31_Translations.razor @@ -33,9 +33,9 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; - private async Task> GridFiltersTranslationProvider() + private async Task> GridFiltersTranslationProvider() { var filtersTranslation = new List(); @@ -66,7 +66,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/12-fixed-header/Grid_Demo_32_Fixed_Header_A.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/12-fixed-header/Grid_Demo_32_Fixed_Header_A.razor index be584c5a0..5a7088b82 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/12-fixed-header/Grid_Demo_32_Fixed_Header_A.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/12-fixed-header/Grid_Demo_32_Fixed_Header_A.razor @@ -1,5 +1,4 @@ - -@code { - BlazorBootstrap.Grid grid = default!; - private IEnumerable employees = default!; +@code { + private IReadOnlyCollection employees = default!; protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -63,7 +61,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_12_Grid_Cell_Formating.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_12_Grid_Cell_Formating.razor index f7c6dc719..d92ad48a2 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_12_Grid_Cell_Formating.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_12_Grid_Cell_Formating.razor @@ -17,7 +17,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -27,7 +27,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_13_Grid_Cell_Nowrap.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_13_Grid_Cell_Nowrap.razor index d589f3c51..41ca5e000 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_13_Grid_Cell_Nowrap.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_13_Grid_Cell_Nowrap.razor @@ -29,7 +29,7 @@ @code { - private IEnumerable? employees; + private IReadOnlyCollection? employees; private async Task> EmployeesDataProvider(GridDataProviderRequest request) { @@ -39,7 +39,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_21_Specify_Custom_Column_Header.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_21_Specify_Custom_Column_Header.razor index 4a8f294e4..0cdddd141 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_21_Specify_Custom_Column_Header.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Grid/14-other/Grid_Demo_21_Specify_Custom_Column_Header.razor @@ -31,7 +31,7 @@ @code { - private IEnumerable employees = default!; + private IReadOnlyCollection employees = default!; private bool IsAllChecked { @@ -49,7 +49,7 @@ return await Task.FromResult(request.ApplyTo(employees)); } - private IEnumerable GetEmployees() + private IReadOnlyCollection GetEmployees() { return new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/Layout_Server_Demo_01.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/Layout_Server_Demo_01.razor index 9ea046b01..9ca0aecb9 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/Layout_Server_Demo_01.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/server/Layout_Server_Demo_01.razor @@ -23,17 +23,17 @@ @code { private Sidebar sidebar = default!; - private IEnumerable navItems = default!; + private IReadOnlyCollection navItems = default!; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/Layout_WebAssembly_Demo_01.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/Layout_WebAssembly_Demo_01.razor index 9ea046b01..9ca0aecb9 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/Layout_WebAssembly_Demo_01.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Layout/webassembly/Layout_WebAssembly_Demo_01.razor @@ -23,17 +23,17 @@ @code { private Sidebar sidebar = default!; - private IEnumerable navItems = default!; + private IReadOnlyCollection navItems = default!; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_01_Examples.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_01_Examples.razor index 49946f0a7..a0c3bbb21 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_01_Examples.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_01_Examples.razor @@ -11,7 +11,7 @@
- +
@@ -21,7 +21,7 @@ @code { private Offcanvas offcanvas = default!; - private async Task OnShowOffcanvasClick() => await offcanvas.ShowAsync(); + private Task OnShowOffcanvasClick() => offcanvas.ShowAsync(); - private async Task OnHideOffcanvasClick() => await offcanvas.HideAsync(); + private ValueTask OnHideOffcanvasClick() => offcanvas.HideAsync(); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_04_Static_Backdrop.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_04_Static_Backdrop.razor index f3479871c..a884e6875 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_04_Static_Backdrop.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_04_Static_Backdrop.razor @@ -15,5 +15,5 @@ @code { private Offcanvas offcanvas = default!; - private async Task OnShowOffcanvasClick() => await offcanvas.ShowAsync(); + private Task OnShowOffcanvasClick() => offcanvas.ShowAsync(); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_A_Small.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_A_Small.razor index e0152fa6f..dd1481cf8 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_A_Small.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_A_Small.razor @@ -15,5 +15,5 @@ @code { private Offcanvas offcanvas = default!; - private async Task OnShowOffcanvasClick() => await offcanvas.ShowAsync(); + private Task OnShowOffcanvasClick() => offcanvas.ShowAsync(); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_B_Large.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_B_Large.razor index b369e5cc2..b8edd432f 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_B_Large.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_05_Sizes_B_Large.razor @@ -15,5 +15,5 @@ @code { private Offcanvas offcanvas = default!; - private async Task OnShowOffcanvasClick() => await offcanvas.ShowAsync(); + private Task OnShowOffcanvasClick() => offcanvas.ShowAsync(); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_06_Events.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_06_Events.razor index fb50735e8..1cc11eaea 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_06_Events.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Offcanvas/Offcanvas_Demo_06_Events.razor @@ -10,7 +10,7 @@ - + @@ -19,10 +19,10 @@ @code { private Offcanvas offcanvas = default!; - private async Task OnShowOffcanvasClick() => await offcanvas.ShowAsync(); - private async Task OnHideOffcanvasClick() => await offcanvas.HideAsync(); - private async Task OnOffcanvasShowingAsync() => await Task.Run(() => { Console.WriteLine("Event: Showing"); }); - private async Task OnOffcanvasShownAsync() => await Task.Run(() => { Console.WriteLine("Event: Shown"); }); - private async Task OnOffcanvasHidingAsync() => await Task.Run(() => { Console.WriteLine("Event: Hiding"); }); - private async Task OnOffcanvasHiddenAsync() => await Task.Run(() => { Console.WriteLine("Event: Hidden"); }); + private Task OnShowOffcanvasClick() => offcanvas.ShowAsync(); + private ValueTask OnHideOffcanvasClick() => offcanvas.HideAsync(); + private Task OnOffcanvasShowingAsync() => Task.Run(() => { Console.WriteLine("Event: Showing"); }); + private Task OnOffcanvasShownAsync() => Task.Run(() => { Console.WriteLine("Event: Shown"); }); + private Task OnOffcanvasHidingAsync() => Task.Run(() => { Console.WriteLine("Event: Hiding"); }); + private Task OnOffcanvasHiddenAsync() => Task.Run(() => { Console.WriteLine("Event: Hidden"); }); } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/PdfViewer/PdfViewer_Demo_03_Base64String.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/PdfViewer/PdfViewer_Demo_03_Base64String.razor index 4092d0106..1867abd1f 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/PdfViewer/PdfViewer_Demo_03_Base64String.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/PdfViewer/PdfViewer_Demo_03_Base64String.razor @@ -7,7 +7,7 @@ @code { private string eventLog { get; set; } = $"Last event: ..., CurrentPage: 0, TotalPages: 0"; - private string pdfBase64String; + private string pdfBase64String = default!; protected override void OnInitialized() { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Progress/Progress_Demo_03_Set_Width_Programmatically.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Progress/Progress_Demo_03_Set_Width_Programmatically.razor index 2a7195386..1bf17f7ff 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Progress/Progress_Demo_03_Set_Width_Programmatically.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Progress/Progress_Demo_03_Set_Width_Programmatically.razor @@ -12,18 +12,18 @@ private void IncreaseProgressBar() { progressBar.IncreaseWidth(10); - progressBar.SetLabel($"{progressBar.GetWidth()}%"); + progressBar.SetLabel($"{progressBar.Width}%"); } private void DecreaseProgressBar() { progressBar.DecreaseWidth(10); - progressBar.SetLabel($"{progressBar.GetWidth()}%"); + progressBar.SetLabel($"{progressBar.Width}%"); } private void ResetProgressBar() { progressBar.SetWidth(0); - progressBar.SetLabel($"{progressBar.GetWidth()}%"); + progressBar.SetLabel($"{progressBar.Width}%"); } } diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_01_Basic_Usage.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_01_Basic_Usage.razor index da8cde40d..fa18a2452 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_01_Basic_Usage.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_01_Basic_Usage.razor @@ -4,17 +4,17 @@ DataProvider="SidebarDataProvider" /> @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_02_Two_level_navigation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_02_Two_level_navigation.razor index d7dc759e8..021ef43fb 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_02_Two_level_navigation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_02_Two_level_navigation.razor @@ -4,17 +4,17 @@ DataProvider="SidebarDataProvider" /> @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_03_Change_Icons_Color.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_03_Change_Icons_Color.razor index f6ff1512a..83a2ba789 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_03_Change_Icons_Color.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_03_Change_Icons_Color.razor @@ -4,17 +4,17 @@ DataProvider="SidebarDataProvider" /> @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_04_Full_layout_with_sidebar.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_04_Full_layout_with_sidebar.razor index 2d4c9a64b..cff7132c0 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_04_Full_layout_with_sidebar.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_04_Full_layout_with_sidebar.razor @@ -18,17 +18,17 @@ @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_05_Toggle_Sidebar_to_Show_Icons_Only.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_05_Toggle_Sidebar_to_Show_Icons_Only.razor index 5c333d2fa..a098e917e 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_05_Toggle_Sidebar_to_Show_Icons_Only.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_05_Toggle_Sidebar_to_Show_Icons_Only.razor @@ -21,17 +21,17 @@ @code { Sidebar sidebar = default!; - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_06_Show_Badge.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_06_Show_Badge.razor index 7a9626707..d2c4e5249 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_06_Show_Badge.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_06_Show_Badge.razor @@ -22,17 +22,17 @@ @code { Sidebar sidebar = default!; - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_07_Custom_Brand_Icon.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_07_Custom_Brand_Icon.razor index 361edea8f..a170440e5 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_07_Custom_Brand_Icon.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_07_Custom_Brand_Icon.razor @@ -22,17 +22,17 @@ @code { Sidebar sidebar = default!; - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_08_Show_Image_as_Brand_Logo.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_08_Show_Image_as_Brand_Logo.razor index d354267ab..039b16b7b 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_08_Show_Image_as_Brand_Logo.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_08_Show_Image_as_Brand_Logo.razor @@ -22,17 +22,17 @@ @code { Sidebar sidebar = default!; - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_09_Customize_Sidebar.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_09_Customize_Sidebar.razor index cd765a9da..70b464555 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_09_Customize_Sidebar.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_09_Customize_Sidebar.razor @@ -22,17 +22,17 @@ @code { bool applyPurpleStyle = false; - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_10_Apply_Custom_CSS_Class_to_NavItem.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_10_Apply_Custom_CSS_Class_to_NavItem.razor index f32fa48fa..d74349bad 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_10_Apply_Custom_CSS_Class_to_NavItem.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar/Sidebar_Demo_10_Apply_Custom_CSS_Class_to_NavItem.razor @@ -4,17 +4,17 @@ DataProvider="SidebarDataProvider" /> @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task SidebarDataProvider(SidebarDataProviderRequest request) + private async Task SidebarDataProvider() { if (navItems is null) navItems = GetNavItems(); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(SidebarDataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_01_Basic_Usage.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_01_Basic_Usage.razor index cdf3f8aed..d54b70cc3 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_01_Basic_Usage.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_01_Basic_Usage.razor @@ -5,19 +5,19 @@ DataProvider="Sidebar2DataProvider" /> @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task Sidebar2DataProvider(Sidebar2DataProviderRequest request) + private async Task Sidebar2DataProvider() { if (navItems is null) navItems = GetNavItems(); await Task.Delay(2000); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(Sidebar2DataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_02_More_Nested_Levels.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_02_More_Nested_Levels.razor index 9ed8f494f..4d7fedb78 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_02_More_Nested_Levels.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_02_More_Nested_Levels.razor @@ -5,19 +5,19 @@ DataProvider="Sidebar2DataProvider" /> @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task Sidebar2DataProvider(Sidebar2DataProviderRequest request) + private async Task Sidebar2DataProvider() { if (navItems is null) navItems = GetNavItems(); await Task.Delay(2000); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(Sidebar2DataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_03_Change_Icons_Color.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_03_Change_Icons_Color.razor index ceba2d892..1b3ae2743 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_03_Change_Icons_Color.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_03_Change_Icons_Color.razor @@ -5,19 +5,19 @@ DataProvider="Sidebar2DataProvider" /> @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task Sidebar2DataProvider(Sidebar2DataProviderRequest request) + private async Task Sidebar2DataProvider() { if (navItems is null) navItems = GetNavItems(); await Task.Delay(2000); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(Sidebar2DataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_04_Full_layout_with_sidebar.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_04_Full_layout_with_sidebar.razor index f6c78ac81..68b36cad0 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_04_Full_layout_with_sidebar.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_04_Full_layout_with_sidebar.razor @@ -19,19 +19,19 @@ @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task Sidebar2DataProvider(Sidebar2DataProviderRequest request) + private async Task Sidebar2DataProvider() { if (navItems is null) navItems = GetNavItems(); await Task.Delay(2000); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(Sidebar2DataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_07_Custom_Brand_Icon.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_07_Custom_Brand_Icon.razor index 1e75b2d99..fac8b45e1 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_07_Custom_Brand_Icon.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_07_Custom_Brand_Icon.razor @@ -19,19 +19,19 @@ @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task Sidebar2DataProvider(Sidebar2DataProviderRequest request) + private async Task Sidebar2DataProvider() { if (navItems is null) navItems = GetNavItems(); await Task.Delay(2000); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(Sidebar2DataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_08_Show_Image_as_Brand_Logo.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_08_Show_Image_as_Brand_Logo.razor index a70c472a2..00d589722 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_08_Show_Image_as_Brand_Logo.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Sidebar2/Sidebar2_Demo_08_Show_Image_as_Brand_Logo.razor @@ -19,19 +19,19 @@ @code { - IEnumerable? navItems; + IReadOnlyCollection? navItems; - private async Task Sidebar2DataProvider(Sidebar2DataProviderRequest request) + private async Task Sidebar2DataProvider() { if (navItems is null) navItems = GetNavItems(); await Task.Delay(2000); - return await Task.FromResult(request.ApplyTo(navItems)); + return await Task.FromResult(Sidebar2DataProviderRequest.ApplyTo(navItems)); } - private IEnumerable GetNavItems() + private IReadOnlyCollection GetNavItems() { navItems = new List { diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Tabs/Tabs_Demo_08_Activate_Individual_Tabs.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Tabs/Tabs_Demo_08_Activate_Individual_Tabs.razor index a0560057e..91b74cdd4 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Tabs/Tabs_Demo_08_Activate_Individual_Tabs.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Tabs/Tabs_Demo_08_Activate_Individual_Tabs.razor @@ -41,10 +41,10 @@ @code{ Tabs tabs = default!; - private async Task ShowFirstTabAsync() => await tabs.ShowFirstTabAsync(); - private async Task ShowSecondTabAsync() => await tabs.ShowTabByIndexAsync(1); - private async Task ShowThirdTabAsync() => await tabs.ShowTabByIndexAsync(2); - private async Task ShowProductsTabAsync() => await tabs.ShowTabByNameAsync("Products"); - private async Task ShowFaqsAsync() => await tabs.ShowTabByNameAsync("FAQ"); - private async Task ShowLastTabAsync() => await tabs.ShowLastTabAsync(); + private Task ShowFirstTabAsync() => tabs.ShowFirstTabAsync(); + private Task ShowSecondTabAsync() => tabs.ShowTabByIndexAsync(1); + private Task ShowThirdTabAsync() => tabs.ShowTabByIndexAsync(2); + private Task ShowProductsTabAsync() => tabs.ShowTabByNameAsync("Products"); + private Task ShowFaqsAsync() => tabs.ShowTabByNameAsync("FAQ"); + private Task ShowLastTabAsync() => tabs.ShowLastTabAsync(); } diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor index 5ea662816..80ce779a2 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor @@ -8,7 +8,7 @@
razor
- +
@@ -34,7 +34,7 @@ else if (!Tabs)
razor
- +
@@ -70,7 +70,7 @@ else // Tabs = true
- +
diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs index 3eb6f756b..ccf6a3d52 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs +++ b/BlazorBootstrap.Demo.RCL/Components/Shared/Demo.razor.cs @@ -97,7 +97,7 @@ public void ResetCopyStatusJS() StateHasChanged(); } - private async Task CopyToClipboardAsync() => await JS.InvokeVoidAsync("copyToClipboard", codeSnippet, objRef); + private ValueTask CopyToClipboardAsync() => JS.InvokeVoidAsync("copyToClipboard", codeSnippet, objRef); #endregion diff --git a/BlazorBootstrap.Demo.RCL/Services/CustomerService.cs b/BlazorBootstrap.Demo.RCL/Services/CustomerService.cs index 1a08c47aa..b0eec8c81 100644 --- a/BlazorBootstrap.Demo.RCL/Services/CustomerService.cs +++ b/BlazorBootstrap.Demo.RCL/Services/CustomerService.cs @@ -9,22 +9,22 @@ public CustomerService(HttpClient httpClient) _httpClient = httpClient; } - public async Task> GetCustomersAsync(FilterItem filter, CancellationToken cancellationToken = default) + public async Task> GetCustomersAsync(FilterItem filter, CancellationToken cancellationToken = default) { var customers = await _httpClient.GetFromJsonAsync("sample-data/customer/customer.json", cancellationToken); if (customers is null) - return Enumerable.Empty(); + return Array.Empty(); var parameterExpression = Expression.Parameter(typeof(Customer2)); // second param optional var lambda = ExpressionExtensions.GetExpressionDelegate(parameterExpression, filter); - return customers.Where(lambda!.Compile()).OrderBy(customer => customer.CustomerName); + return customers.Where(lambda!.Compile()).OrderBy(customer => customer.CustomerName).ToArray(); } - public async Task, int>> GetCustomersAsync(IEnumerable filters, int pageNumber, int pageSize, string sortKey, SortDirection sortDirection, CancellationToken cancellationToken = default) + public async Task, int>> GetCustomersAsync(IEnumerable filters, int pageNumber, int pageSize, string sortKey, SortDirection sortDirection, CancellationToken cancellationToken = default) { var customers = await _httpClient.GetFromJsonAsync>("sample-data/customer/customer.json", cancellationToken); if (customers is null) - return new(Enumerable.Empty(), 0); + return new(Array.Empty(), 0); // apply filters if (filters is not null && filters.Any()) @@ -45,60 +45,60 @@ public async Task, int>> GetCustomersAsync(IEnumera // apply sorting then paging if (string.IsNullOrEmpty(sortKey) || sortDirection == SortDirection.None) { - return new(customers.Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else if (sortKey == "CustomerId") { if (sortDirection == SortDirection.Ascending) - return new(customers.OrderBy(e => e.CustomerId).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderBy(e => e.CustomerId).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); else if (sortDirection == SortDirection.Descending) - return new(customers.OrderByDescending(e => e.CustomerId).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderByDescending(e => e.CustomerId).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else if (sortKey == "CustomerName") { if (sortDirection == SortDirection.Ascending) - return new(customers.OrderBy(e => e.CustomerName).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderBy(e => e.CustomerName).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); else if (sortDirection == SortDirection.Descending) - return new(customers.OrderByDescending(e => e.CustomerName).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderByDescending(e => e.CustomerName).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else if (sortKey == "Phone") { if (sortDirection == SortDirection.Ascending) - return new(customers.OrderBy(e => e.Phone).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderBy(e => e.Phone).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); else if (sortDirection == SortDirection.Descending) - return new(customers.OrderByDescending(e => e.Phone).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderByDescending(e => e.Phone).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else if (sortKey == "Email") { if (sortDirection == SortDirection.Ascending) - return new(customers.OrderBy(e => e.Email).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderBy(e => e.Email).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); else if (sortDirection == SortDirection.Descending) - return new(customers.OrderByDescending(e => e.Email).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderByDescending(e => e.Email).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else if (sortKey == "Address") { if (sortDirection == SortDirection.Ascending) - return new(customers.OrderBy(e => e.Address).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderBy(e => e.Address).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); else if (sortDirection == SortDirection.Descending) - return new(customers.OrderByDescending(e => e.Address).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderByDescending(e => e.Address).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else if (sortKey == "PostalZip") { if (sortDirection == SortDirection.Ascending) - return new(customers.OrderBy(e => e.PostalZip).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderBy(e => e.PostalZip).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); else if (sortDirection == SortDirection.Descending) - return new(customers.OrderByDescending(e => e.PostalZip).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderByDescending(e => e.PostalZip).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else if (sortKey == "Country") { if (sortDirection == SortDirection.Ascending) - return new(customers.OrderBy(e => e.Country).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderBy(e => e.Country).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); else if (sortDirection == SortDirection.Descending) - return new(customers.OrderByDescending(e => e.Country).Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.OrderByDescending(e => e.Country).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); } else - return new(customers.Skip((pageNumber - 1) * pageSize).Take(pageSize), customers.Count()); + return new(customers.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray(), customers.Count()); - return new(customers, customers.Count()); + return new(customers.ToArray(), customers.Count()); } } diff --git a/BlazorBootstrap.Demo.RCL/Services/ICustomerService.cs b/BlazorBootstrap.Demo.RCL/Services/ICustomerService.cs index 27b29ab52..aa87bc7dc 100644 --- a/BlazorBootstrap.Demo.RCL/Services/ICustomerService.cs +++ b/BlazorBootstrap.Demo.RCL/Services/ICustomerService.cs @@ -2,6 +2,6 @@ public interface ICustomerService { - public Task> GetCustomersAsync(FilterItem filter, CancellationToken cancellationToken = default); - public Task, int>> GetCustomersAsync(IEnumerable filters, int pageNumber, int pageSize, string sortKey, SortDirection sortDirection, CancellationToken cancellationToken = default); + public Task> GetCustomersAsync(FilterItem filter, CancellationToken cancellationToken = default); + public Task, int>> GetCustomersAsync(IEnumerable filters, int pageNumber, int pageSize, string sortKey, SortDirection sortDirection, CancellationToken cancellationToken = default); } diff --git a/blazorbootstrap.sln.DotSettings b/blazorbootstrap.sln.DotSettings new file mode 100644 index 000000000..48fab8354 --- /dev/null +++ b/blazorbootstrap.sln.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/blazorbootstrap/BlazorBootstrap.csproj b/blazorbootstrap/BlazorBootstrap.csproj index edaf804fc..11cf1736f 100644 --- a/blazorbootstrap/BlazorBootstrap.csproj +++ b/blazorbootstrap/BlazorBootstrap.csproj @@ -16,18 +16,19 @@ Copyright © 2024 Blazor Bootstrap - net6.0;net8.0 + net6.0;net7.0;net8.0 enable enable Library true - 10.0 128X128.png README.md git https://github.com/vikramlearning/blazorbootstrap/releases True - + 10.0 + 11.0 + 11.0 @@ -46,11 +47,15 @@ - + + + + + - + \ No newline at end of file diff --git a/blazorbootstrap/Components/Accordion/Accordion.razor.cs b/blazorbootstrap/Components/Accordion/Accordion.razor.cs index 38f3fe919..7e24e5be1 100644 --- a/blazorbootstrap/Components/Accordion/Accordion.razor.cs +++ b/blazorbootstrap/Components/Accordion/Accordion.razor.cs @@ -1,5 +1,9 @@ namespace BlazorBootstrap; +/// +/// Build vertically collapsing accordions in combination with our > component.
+/// The accordion is based on the Bootstrap Accordion component. +///
public partial class Accordion : BlazorBootstrapComponentBase { #region Fields and Constants @@ -117,7 +121,7 @@ public async Task ShowAccordionItemByNameAsync(string accordionItemName) } /// - /// Shows all instances if AlwaysOpen is true. + /// Shows all instances if > is . /// public async Task ShowAllAccordionItemsAsync() { @@ -161,17 +165,15 @@ public async Task ShowLastAccordionItemAsync() /// The AccordionItem to add. internal void Add(AccordionItem accordionItem) { - if (items is null) - items = new List(); - - if (accordionItem is not null) - items.Add(accordionItem); + items ??= new List(); + items.Add(accordionItem); } #endregion #region Properties, Indexers + /// protected override string? ClassNames => new CssClassBuilder(Class) .AddClass(BootstrapClass.Accordion) @@ -182,7 +184,7 @@ internal void Add(AccordionItem accordionItem) /// If , accordion items stay open when another item is opened. /// /// - /// Default value is false. + /// Default value is . /// [Parameter] public bool AlwaysOpen { get; set; } @@ -191,7 +193,7 @@ internal void Add(AccordionItem accordionItem) /// Gets or sets the content to be rendered within the component. /// /// - /// Default value is null. + /// Default value is . /// [Parameter] [EditorRequired] @@ -201,7 +203,7 @@ internal void Add(AccordionItem accordionItem) /// If , removes borders and rounded corners to render accordions edge-to-edge with their parent container. /// /// - /// Default value is false. + /// Default value is . /// [Parameter] public bool Flush { get; set; } diff --git a/blazorbootstrap/Components/Accordion/AccordionItem.razor b/blazorbootstrap/Components/Accordion/AccordionItem.razor index a28a54dde..f01fe9f51 100644 --- a/blazorbootstrap/Components/Accordion/AccordionItem.razor +++ b/blazorbootstrap/Components/Accordion/AccordionItem.razor @@ -3,7 +3,7 @@

-