Flare.UI
0.4.1
dotnet add package Flare.UI --version 0.4.1
NuGet\Install-Package Flare.UI -Version 0.4.1
<PackageReference Include="Flare.UI" Version="0.4.1" />
<PackageVersion Include="Flare.UI" Version="0.4.1" />
<PackageReference Include="Flare.UI" />
paket add Flare.UI --version 0.4.1
#r "nuget: Flare.UI, 0.4.1"
#:package Flare.UI@0.4.1
#addin nuget:?package=Flare.UI&version=0.4.1
#tool nuget:?package=Flare.UI&version=0.4.1
Flare.UI
Imperative Toast, Modal, Confirm, Loading Bar, and Loading Toast components for Blazor. Zero dependencies.
Install
dotnet add package Flare.UI
Setup
Register the service:
builder.Services.AddFlare();
Wrap your page (or layout) with <FlareProvider>:
@inject IFlareService Flare
<FlareProvider>
@* your content *@
</FlareProvider>
Toast
await Flare.ToastAsync("Item saved.", ToastLevel.Success);
// With options
await Flare.ToastAsync("Check your input.", new ToastOptions
{
Level = ToastLevel.Warning,
DurationMs = 10_000,
Persistent = true,
});
// Rich content
await Flare.ToastAsync("", new ToastOptions
{
Level = ToastLevel.Success,
Content = @<div><strong>Done</strong><div>3 items processed</div></div>,
});
// Dismiss programmatically
var handle = await Flare.ToastAsync("Working...", new ToastOptions { Persistent = true });
handle.Dismiss();
Confirm
var confirmed = await Flare.ConfirmAsync("Delete Item", "This cannot be undone.");
// Custom labels
var confirmed = await Flare.ConfirmAsync("Publish", "Make this visible?", new ConfirmOptions
{
ConfirmText = "Publish",
CancelText = "Keep as Draft",
});
// Destructive confirm — red button, Enter defaults to Cancel (safe UX)
var confirmed = await Flare.ConfirmAsync("Delete Item", "This cannot be undone.", new ConfirmOptions
{
Intent = ConfirmIntent.Danger,
ConfirmText = "Delete",
});
DefaultButton controls which button receives initial focus. Enter and Space both activate the focused button:
ConfirmIntent.Primary→ Confirm is focused → Enter confirmsConfirmIntent.Danger→ Cancel is focused → Enter cancels (prevents accidental destructive actions)
Tab switches focus between buttons. Override the default per-call if needed:
new ConfirmOptions { Intent = ConfirmIntent.Danger, DefaultButton = DefaultButton.Confirm }
Modal
Any Blazor component can be rendered as a modal. Use the cascading ModalContext to return data:
@* EditProfile.razor *@
<div>
<input @bind="Name" />
<button @onclick="() => Modal.Ok(Name)">Save</button>
<button @onclick="Modal.Cancel">Cancel</button>
</div>
@code {
[CascadingParameter] public ModalContext Modal { get; set; } = default!;
[Parameter] public string CurrentName { get; set; } = "";
private string Name = "";
protected override void OnInitialized() => Name = CurrentName;
}
var result = await Flare.ModalAsync<EditProfile>(new ModalOptions
{
Title = "Edit Profile",
CssClass = "my-wide-modal",
Parameters = new() { ["CurrentName"] = "Jane" },
});
if (result.Confirmed)
{
var name = result.GetData<string>();
}
Control modal sizing via CSS custom properties on CssClass:
.my-wide-modal {
--flare-modal-min-width: 32rem;
--flare-modal-width: 40rem;
--flare-modal-max-width: 90vw;
}
Loading Bar
Declarative:
<FlareLoadingBar Active="_loading" Fixed />
<FlareLoadingBar Active="_loading" Progress="_percent" />
Imperative:
using var _ = Flare.StartLoadingBar(); // shows after 1500ms delay
await SomeWork(); // bar auto-hides on dispose
using var _ = Flare.StartLoadingBar(delayMs: 0); // shows immediately
Loading Toast
// Indeterminate
using var _ = Flare.StartLoadingToast("Processing...");
await SomeWork();
// With progress
var toast = Flare.StartLoadingToast("Uploading...", delayMs: 0);
for (var i = 0; i <= 100; i += 10)
{
toast.Update(progress: i);
await Task.Delay(100);
}
toast.Dispose();
Configuration
builder.Services.AddFlare(o =>
{
o.ToastPosition = ToastPosition.BottomRight;
o.MaxToasts = 3;
o.Headless = true; // strip all default styles
// Toast defaults
o.Toast.DurationMs = 4000;
o.Toast.ShowProgress = false;
// Modal defaults
o.Modal.CloseOnBackdropClick = false;
// Confirm defaults
o.Confirm.Intent = ConfirmIntent.Primary;
o.Confirm.ConfirmText = "OK";
o.Confirm.CancelText = "Cancel";
});
Per-call options override global defaults. Unset properties fall back to the configured defaults.
License
Built with Claude Code using Claude Opus 4.6 by Anthropic
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.AspNetCore.Components.Web (>= 10.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.