BlazingDev.BlazorToolkit 0.4.0

Prefix Reserved
dotnet add package BlazingDev.BlazorToolkit --version 0.4.0                
NuGet\Install-Package BlazingDev.BlazorToolkit -Version 0.4.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="BlazingDev.BlazorToolkit" Version="0.4.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BlazingDev.BlazorToolkit --version 0.4.0                
#r "nuget: BlazingDev.BlazorToolkit, 0.4.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install BlazingDev.BlazorToolkit as a Cake Addin
#addin nuget:?package=BlazingDev.BlazorToolkit&version=0.4.0

// Install BlazingDev.BlazorToolkit as a Cake Tool
#tool nuget:?package=BlazingDev.BlazorToolkit&version=0.4.0                

BlazorToolkit

Useful components and utilities for Blazor developers

BzComponentBase

Your new component base class with:

  • typed Logger instance
  • IsInitialized property to simplify your rendering logic for asynchronously initialized components!
  • Disposer object to register disposables at creation time!
  • InvokeAsyncStateHasChanged() method

and more to come!

Registration:

Per component:

@inherits BlazingDev.BlazorToolkit.Components.BzComponentBase

Globally:

Locate _Imports.razor and add the following line to set the base component for all *.razor files in the same directory and subdirectories:

@inherits BlazingDev.BlazorToolkit.Components.BzComponentBase

Example

FileStream _fileStream = null;

protected override void OnInitialized()
{
    _fileStream = GetFileStream();
    
    // BzAsyncDisposer from base class
    Disposer.Add(_fileStream);
    
    var subscription = SubscriptionService.Subscribe("important-messages", HandleImportantMessage);
    // Logger from base class
    Logger.LogInformation("Got subscription {SubscriptionId}", subscription.Id);
    Disposer.Add(subscription);
    
    SubscriptionService.ConnectionLost += HandleConnectionLost;
    Disposer.Add(() => SubscriptionService.ConnectionLost -= HandleConnectionLost);
    Disposer.Add(SayGoodbyeAsync);
}

private void HandleConnectionLost(object sender, EventArgs e)
{
    ShowReconnectOverlay = true;
    // little simplified method from base class
    InvokeAsyncStateHasChanged();
}

BzComponentTool

Provides utility methods regarding components.

GetRoute

With the following methods you can retrieve a component's route (@page "/this-is-the-route").
Useful if you want to create links to other components and you don't want to have magic strings in your code.

 // returns null for "simple" components or the first defined rounte
BzComponentTool.TryGetRoute<PotentiallyRoutableComponent>();
BzComponentTool.TryGetRoute(typeof(PotentiallyRoutableComponent));
// returns the first defined route or throws for "simple" components
BzComponentTool.GetRoute<SomePage>();
BzComponentTool.GetRoute(typeof(SomePage));
// returns zero-to-many items
BzComponentTool.TryGetRoutes<PageWithMultipleRoutes>();
BzComponentTool.TryGetRoutes(typeof(PageWithMultipleRoutes));

GetMenuItem

Use the BzMenuItemAttribute to specify menu items at component level.
For extra laziness you can use the BzComponentTool.GetAllMenuItemsFromAssembly(assembly) method 😃

@page "/about"
@attribute [BzMenuItem(Name = "About", Icon = "people", Sorting = 500)]
BzComponentTool.GetMenuItem<AboutPage>();    // requires ( @page OR [Route] ) AND [BzMenuItem]
BzComponentTool.TryGetMenuItem<AboutPage>(); // returns null if anything required is missing

// NavMenu.razor
@foreach (var item in BzComponentTool.GetAllMenuItemsFromAssembly(GetType().Assembly))
{
    <MyNavItem MenuItem="item"/>
}

BzTimerComponent

A blazor component that wraps a Timer instance.
Automatically handles:

  • Creating the Timer
  • Calling InvokeAsync()
  • Calling StateHasChanged() when using the OnElapsed EventCallback
  • OnElapsedAction when you want to manually decide if any re-rendering is needed
  • try-catch of the elapsed handlers
  • disposing the timer when the component is unmounted

And you can use ShowControls for testing purposes which let you override the Enabled and Interval setting!

<BzTimerComponent Name="PriceRefreshTimer" Interval="5000" OnElapsed="HandleUpdatePriceTimerElapsed" />

BzCssClassBuilder

A utility class to help creating CSS classes lists.

  • static Create methods to not use spaces (sometimes handy in razor files)
  • Add(className), Add(listOfClassNames), AddIf(condition, className)
  • Remove(className), RemoveIf(condition, className)
  • automatically trimes classNames
  • ignores duplicates and no-content classNames
  • use Build() or ToString() to get your final string

Usage Example:

@{
    var cssClasses = BzCssClassBuilder.Create("my-button")
        .Add("button-primary")
        .AddIf(isOutline, "button-outline")
        .Add(SomeSettings.AdditionalButtonClasses) // e.g. theme-specific
        .Build()
}
<button class="@cssClasses">...</button>

BzCssStyleBuilder

A utility class for building CSS styles conditionally and fluently.

Usage:

var style = new BzCssStyleBuilder()
    .Add("color", "red")
    .Add("font-size", UserFontSize, "em")
    .AddIf(isBold, "font-weight", "bold")
    .AddIf(concreteWidth, "width", CalculateWidthFunction, "px")
    .Add(Style) // from component parameter
    .Build();

BzRenderMode

Predefined render modes without prerender

Usage

per component, e.g. in App.razor:

<Routes @rendermode="BzRenderMode.InteractiveServerNoPrerender"/>

If you add the following line in _Imports.razor, you can omit the BzRenderMode prefix:

@using static BlazingDev.BlazorToolkit.Components.BzRenderMode
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on BlazingDev.BlazorToolkit:

Package Downloads
BlazingDev.BlazorToolkit.FluxorIntegration

Fluxor integration for BzComponentBase

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.4.0 88 1/13/2025
0.3.0 73 1/12/2025
0.2.0 79 1/10/2025
0.1.0 68 1/10/2025