Pixata.Blazor
5.4.0
See the version list below for details.
dotnet add package Pixata.Blazor --version 5.4.0
NuGet\Install-Package Pixata.Blazor -Version 5.4.0
<PackageReference Include="Pixata.Blazor" Version="5.4.0" />
<PackageVersion Include="Pixata.Blazor" Version="5.4.0" />
<PackageReference Include="Pixata.Blazor" />
paket add Pixata.Blazor --version 5.4.0
#r "nuget: Pixata.Blazor, 5.4.0"
#:package Pixata.Blazor@5.4.0
#addin nuget:?package=Pixata.Blazor&version=5.4.0
#tool nuget:?package=Pixata.Blazor&version=5.4.0
Pixata.Blazor 

Like many developers, I find myself writing the same Blazor components over and over again. I have gathered some of those components together in one place, and am making them available for anyone else who might find them useful.
A Nuget package is available for these components.
Version 5.4.0 lets you theme the audit viewer,
Confirm,Informand the notifications through the CSS variables in pixata.css, lets notifications show formatted messages (such as a list), and changes the notifications' default icons to ones in Font Awesome's free set. Some class names and ids have changed, so if you styled any of these yourself, see styling changes in v5.4.0 below.
Version 5.3.0 makes some changes that help when moving from Telerik's components...
PixataDropDownListhas an icon-only mode, set with the newIcon(orIconTemplate) parameter. See the drop-downs documentation- The content of a
PixataGridCommandColumnis now given the row's item, so its buttons can depend on the row. If a template inside the column also usescontext, addContext="row"to the column. See the grid documentation- Behaviour change: when you set
PixataTabStrip.ActiveTabIdone way and handleActiveTabIdChangedyourself, the tab now only changes when you setActiveTabId, as in Telerik, so you can load a tab's data before it is shown.@bind-ActiveTabIdworks as before. See the tab strip documentation- Leaving a page while a date picker, calendar or
VirtualiseWithStateis starting up no longer crashes the circuit
Version 5.2.0 adds
PixataDateRangePicker, for picking the start and end of a range of dates, and givesPixataCalendara range selection mode and theViewsparameter for showing more than one month side by side. See the date picker documentation for details.
Version 5.1.0 adds typed grid columns (
PixataTextGridColumn,PixataNumericGridColumn,PixataDateGridColumnandPixataEnumGridColumn) with short lists of filter operators, theFilterOperatorsandShowFilterCellButtonscolumn parameters, andPixataGridBoolFilter, a three-state checkbox filter forboolcolumns. See the grid documentation for details.
Version 5.0.0 adds a large set of new components:
PixataGrid(with Excel export in the separate Pixata.Blazor.Grid.Excel package), the date picker, drop-downs, tab strip, editor, file select and upload, dialogs, window, wizard and stepper, radio group, switch, charts, drop-down and split buttons, scheduler, and theFormRowDateform row. See the documentation pages below for details.
Styling changes in v5.4.0
These only affect you if you wrote CSS of your own for these components, or relied on their default look.
- Audit viewer classes. The viewer's styles have moved from a
<style>block inside the component into pixata.css, and every class now starts withpixata-blazor-audit-, followed by the old name without anyaudit-it started with. Soview-btnis nowpixata-blazor-audit-view-btn, andaudit-timelineis nowpixata-blazor-audit-timeline. The old names were global, so they could clash with your own CSS, and the block's rules (for.filters,.spinner,.userand so on) applied to the rest of your page while the viewer was on it. The colours now come from the--pixata-*variables, so the viewer follows your theme, and it uses your page's font rather than the system font. See styling the audit viewer. ConfirmandInformids. TheconfirmOverlay,confirmOverlayContent,informOverlayandinformOverlayContentids are now the classespixata-blazor-confirm-overlay,pixata-blazor-confirm-content,pixata-blazor-inform-overlayandpixata-blazor-inform-content, so you can have more than one on a page. The pop-up has a softer shadow and smaller corners, and both can be changed with variables. See Containers.- Notification icons. The default icons are now Font Awesome's solid (
fas) ones, which are in the free set, rather than the regular (far) ones, most of which are Pro only. The icon colours now come from CSS variables, soNotificationHelper.GetIcon()is obsolete. See Notifications.
I sometimes waffle on about these components in my blog. No-one reads it, but it satisfies my deeply buried desire to be a writer. If you read the blog, you'll realize why the desire is still deeply buried!
There is a complementary package, which contains additional components for those who have a subscription to Telerik.
Sample project
I have added a Blazor web project to the repository, and use that to try out and demonstrate the components. It doesn't contain samples for all the components yet, but I hope to add more over time. It is deployed at test.pixata.co.uk.
Documentation
The documentation is split over the following pages...
| Page | What's in it |
|---|---|
| Styling | The stylesheet the components ship with, how to fit it to your own theme, and what changed when the Bootstrap dependency was dropped |
| Components | VirtualiseWithState, SitePageTitle, IdentityInspector, HebrewDatePicker, ListOrGridChooser and the CommonComponentBase base class |
| Grid | PixataGrid, a data grid with paging, sorting, filtering, selection, editing, grouping, resizable, movable and frozen columns, saved state, virtual scrolling, detail rows, row dragging, CSV export, keyboard navigation, translation and right-to-left layout. Excel export is in the Pixata.Blazor.Grid.Excel package |
| Date picker | PixataDatePicker, PixataDateInput and PixataCalendar, for picking and typing dates |
| Date range picker | PixataDateRangePicker, for picking the start and end of a range of dates, and the calendar's range mode |
| Containers | HtmlRaw, Busy, Loader, Confirm, Inform, MessageView, Expander and DumpCollection |
| ApiResponseView | The container that renders an ApiResponse<T>, handling loading, errors and expired sessions for you |
| Forms | The form layout components and the complete FormRowXxx rows |
| Notifications | Toast-style notifications, and how to have API errors reported through them |
| Audit viewer | The component for browsing the audit trail recorded by Pixata.AspNetCore |
| Helpers and services | PersistentStateHelper, TemplateHelper, MessageBroker, PasswordOptionsHelper, ScrollStateService, PixataBaseClientService and TryGetQueryString() |
| Payload encryption | Client-side setup for encrypting API traffic between a WASM app and an ASP.NET Core server |
| Declarative control flow | If, Switch and ForEach, which replace the Razor @if, @switch and @foreach statements |
| Drop-downs | PixataComboBox, PixataDropDownList and PixataMultiSelect |
| Tab strip | PixataTabStrip and PixataTab |
| Editor | PixataEditor, a rich (HTML) text editor |
| File select and upload | PixataFileSelect, which hands the chosen files to your code, and PixataUpload, which posts them to an endpoint |
| Dialogs | PixataDialog, and the alert, confirm and prompt dialogs you can show from code |
| Window | PixataWindow, a floating window that can be moved, resized, minimised and maximised |
| Wizard and stepper | PixataWizard and PixataStepper |
| Radio group | PixataRadioGroup |
| Switch | PixataSwitch, a toggle switch for booleans |
| Charts | PixataChart, with column, line and pie series |
| Buttons | PixataDropDownButton and PixataSplitButton |
| Scheduler | PixataScheduler, for showing and editing appointments in day, multi-day, week, month, timeline and agenda views |
Registering dependencies
Some components in this package require services to be registered in the DI container. To make this easier, you can use the AddPixataBlazor extension method in your Program.cs file...
builder.Services.AddPixataBlazor();
This registers the following services (all from this package)...
| Service | What needs it |
|---|---|
MessageBrokerInstance |
The MessageBroker, which lets components send messages to each other without knowing about each other |
NotificationHelper |
The notifications (sample page) |
PasswordOptionsHelper |
Showing the user your Identity password requirements |
PersistentStateHelper<T> |
Avoiding hitting the database twice when a page loads. Used by the ApiResponseView, but can be used independently |
PixataDialogFactory |
The alert, confirm and prompt dialogs you show from code (sample page). It also needs <PixataDialogHost /> in your layout, as described below |
PixataDialogTexts |
The button text and tooltips used by the dialogs and windows (OK, Cancel, Close and so on). Register your own instance before calling AddPixataBlazor() to translate them |
ScrollStateService |
The VirtualiseWithState component |
TemplateHelper |
Building templates for grids and other templated components (sample page) |
PersistentStateHelper<T>does the same job as the[PersistentState]attribute added in .NET 10. This one was written around .NET 8, and is still useful for projects targetting .NET versions before 10.
It also registers Blazored.LocalStorage, which ScrollStateService needs. This package has always referenced Blazored.LocalStorage, but until v2.34.0 it left you to register it, so unless you knew to add builder.Services.AddBlazoredLocalStorage() yourself, your app fell over at startup when the container was validated. If you have already registered it (with your own options, for example), your registration is left alone.
Note that you need to do this in any Program.cs file, so if you have a mixed rendering mode (both server-side and client-side), you'll need to call AddPixataBlazor in both Program.cs files.
It is a good idea to add this line after your own service registrations, as it checks for duplicate registrations. Therefore, if you have already registered any of the services, you will see a message in your console...
A service of type TemplateHelper has already been registered
This isn't actually a problem, but removing the duplicate registration will keep the code file a bit cleaner.
The audit viewer and the payload encryption have their own registration methods, as most apps don't want them. See the pages listed above.
The dialog host
If you want to show the alert, confirm and prompt dialogs from code (with PixataDialogFactory), add the host component to your layout, inside an interactively rendered component...
@using Pixata.Blazor.Components
<PixataDialogHost />
If you ask for one of these dialogs without a host on the page, you get an exception telling you to add it. If your layout is rendered statically and only some pages are interactive, put the host in those pages instead, as it has to share a DI scope with the code that shows the dialogs. See Dialogs for more.
Styling
Don't forget to add the stylesheet, or the components will render unstyled...
<link rel="stylesheet" href="_content/Pixata.Blazor/pixata.css" />
See Styling for what's in it, and how to fit it to your own theme.
| Product | Versions 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. 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
- Blazored.FluentValidation (>= 2.2.0)
- Blazored.LocalStorage (>= 4.5.0)
- Microsoft.AspNetCore.Components.Authorization (>= 10.0.0)
- Microsoft.AspNetCore.Components.Web (>= 10.0.0)
- Microsoft.AspNetCore.WebUtilities (>= 10.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Identity.Core (>= 10.0.0)
- Newtonsoft.Json.Bson (>= 1.0.3)
- Pixata.Extensions (>= 2.21.0)
-
net8.0
- Blazored.FluentValidation (>= 2.2.0)
- Blazored.LocalStorage (>= 4.5.0)
- Microsoft.AspNetCore.Components.Authorization (>= 8.0.22)
- Microsoft.AspNetCore.Components.Web (>= 8.0.22)
- Microsoft.AspNetCore.WebUtilities (>= 8.0.22)
- Microsoft.Extensions.Configuration.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Http (>= 8.0.0)
- Microsoft.Extensions.Identity.Core (>= 8.0.22)
- Newtonsoft.Json.Bson (>= 1.0.3)
- Pixata.Extensions (>= 2.21.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Pixata.Blazor:
| Package | Downloads |
|---|---|
|
Pixata.Blazor.LanguageExtComponents
A set of reusable Blazor components related to the LanguageExt Nuget package |
|
|
Pixata.Blazor.Grid.Excel
Excel export for the PixataGrid component in Pixata.Blazor, using ClosedXML. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 5.12.1 | 0 | 10/26/2026 |
| 5.12.0 | 0 | 10/26/2026 |
| 5.11.1 | 0 | 10/26/2026 |
| 5.11.0 | 36 | 10/25/2026 |
| 5.10.0 | 40 | 10/22/2026 |
| 5.9.1 | 44 | 10/22/2026 |
| 5.9.0 | 45 | 10/22/2026 |
| 5.8.0 | 45 | 10/21/2026 |
| 5.7.0 | 48 | 10/21/2026 |
| 5.6.0 | 52 | 10/21/2026 |
| 5.5.0 | 93 | 10/19/2026 |
| 5.4.0 | 85 | 10/19/2026 |
| 5.1.0 | 85 | 10/18/2026 |
| 5.0.0 | 114 | 10/15/2026 |
| 4.5.0 | 245 | 10/6/2026 |
| 4.4.0 | 390 | 9/22/2026 |
| 4.3.0 | 122 | 9/8/2026 |
| 4.2.0 | 133 | 9/3/2026 |
| 3.0.0 | 155 | 8/25/2026 |
| 2.33.0 | 125 | 8/18/2026 |