B3.Blicks.Contracts 2026.8.6.1
B3.Blicks.Contracts
The Blick contract — the seam between a B3 app shell and the runtime-loaded Blicks it composes.
This assembly is shared: it is loaded into the shell's default AssemblyLoadContext and referenced
by every Blick, so a single type identity for IBlick holds across the shell and all Blicks. Keep it
tiny and stable — churning it ripples to every Blick.
The contract
public interface IBlick
{
string Name { get; }
string Version { get; }
void ConfigureServices(IServiceCollection services); // runs during startup, BEFORE the host is built
IEnumerable<BlickNavItem> GetNavItems(); // menu entries
IEnumerable<BlickWidget> GetWidgets(); // embeddable components (e.g. dashboard tiles)
}
public record BlickNavItem(string Label, string? Route = null, string? Icon = null, IReadOnlyList<BlickNavItem>? Children = null);
public record BlickWidget(string Title, Type ComponentType);
Navigation: one tree, any layout
GetNavItems() returns the top-level entries; each may carry Children, so navigation is a tree.
The shell maps that one tree onto whichever layout it uses:
- Left-nav with section headers — a top-level group (
Childrenset, noRoute) renders as a section header; its children render as links. - Multi-level top ("fat") menu — the same group renders as a menu with a fly-out; deeper
Childrennest further.
A Blick declares its navigation once and it renders in either shell style.
GetNavItems() => new[]
{
new BlickNavItem("Dashboard", "/"), // leaf -> link
new BlickNavItem("Reports", Icon: "bi-graph-up", Children: new[] // group -> section / parent
{
new BlickNavItem("Daily", "/reports/daily"),
new BlickNavItem("Monthly", "/reports/monthly"),
}),
};
Making an RCL a Blick
- Create a Razor Class Library:
<Project Sdk="Microsoft.NET.Sdk.Razor">. - Reference this package:
<PackageReference Include="B3.Blicks.Contracts" Version="x.y.z" />. - Import the packaging convention so it publishes correctly:
<Import Project="…/src/Blick.pack.props" />(seesrc/Blick.pack.props). - Implement exactly one
IBlick, add routable@pagecomponents, and put static assets inwwwroot/(they ship in the package and the resolver serves them at_content/{AssemblyName}/).
dotnet pack then produces a Blick package for the BlickServer registry (API at api.blicks.b3soft.net, the
proprietary HTTP+JSON registry that serves the bytes). See docs/USAGE.md for the full authoring + publish flow and
B3.Blicks.Resolver's README for how the shell loads it.
Showing the top 20 packages that depend on B3.Blicks.Contracts.
| Packages | Downloads |
|---|---|
|
B3.UI.Components.Basic
Basic Components are based on standard HTML and ASPNETCore components. No third party libraries are used here (e.g., SyncFusion)
|
371 |
|
B3.Communication.UI.Components
Package Description
|
273 |
|
B3.CRUD.UI.Components
Components include: AddOne, ChangeLogDataGrid, ColumnGroupComponent, DataGrid, DataRecordFileManager, EditOne, OneRecord
|
273 |
|
DocumentBuilder.UI.Components
Components include: MessageTemplateContent
|
272 |
|
B3.Search.UI.Components
Components include: SearchAndFilter,SearchBoxWithDataGrid,SearchInput,SearchInputInsideDialog,FacetFilter,IndexCreator
|
269 |
|
B3.EventSourcing.UI.Components
EventViews components include: UserDefinedEventView, UserDefinedEventsTimeline, EventTypesFilter
|
236 |
|
B3.CRUD.UI.Components
Components include: AddOne, ChangeLogDataGrid, ColumnGroupComponent, DataGrid, DataRecordFileManager, EditOne, OneRecord
|
222 |
|
B3.UI.Components
Syncfusion-backed B3 UI components: defined-list dropdowns/combo-boxes/multi-select, date pickers, and the generic record form/view/dialog.
|
201 |
|
B3.Identity.UI.BlazorComponents
Components include: AddUserDialog, DeleteConfirmationDialog, SetPasswordDialog, Users, LoginComponent, RegisterComponent, SignUpCompletedComponent, SignupComponent, PasswordEntry
|
197 |
|
B3.UI.Components.Basic
Basic Components are based on standard HTML and ASPNETCore components. No third party libraries are used here (e.g., SyncFusion)
|
195 |
|
B3.CRUD.UI.Components
Components include: AddOne, ChangeLogDataGrid, ColumnGroupComponent, DataGrid, DataRecordFileManager, EditOne, OneRecord
|
184 |
|
B3.Blicks.Resolver
B3 Blick delivery: resolves selected versions against a NuGet feed, verifies content hashes, and loads each Blick into its own isolated AssemblyLoadContext for an app shell.
|
183 |
|
B3.CRUD.UI.Components
Components include: AddOne, ChangeLogDataGrid, ColumnGroupComponent, DataGrid, DataRecordFileManager, EditOne, OneRecord
|
171 |
|
B3.EventSourcing.UI.Components
EventViews components include: UserDefinedEventView, UserDefinedEventsTimeline, EventTypesFilter
|
149 |
|
B3.UI.Components
Syncfusion-backed B3 UI components: defined-list dropdowns/combo-boxes/multi-select, date pickers, and the generic record form/view/dialog.
|
147 |
|
B3.DocumentApprover.UI.Components
Components include: DocumentApprovalForm, DocumentViewer, RequestApprovalForm
|
140 |
|
B3.UI.Components
Syncfusion-backed B3 UI components: defined-list dropdowns/combo-boxes/multi-select, date pickers, and the generic record form/view/dialog.
|
132 |
|
B3.UI.Components.Basic
Basic Components are based on standard HTML and ASPNETCore components. No third party libraries are used here (e.g., SyncFusion)
|
130 |
|
B3.UI.Components.Basic
Basic Components are based on standard HTML and ASPNETCore components. No third party libraries are used here (e.g., SyncFusion)
|
119 |
|
B3.CRUD.UI.Components
Components include: AddOne, ChangeLogDataGrid, ColumnGroupComponent, DataGrid, DataRecordFileManager, EditOne, OneRecord
|
111 |
.NET 10.0
- No dependencies.
| Version | Downloads | Last updated |
|---|---|---|
| 2026.8.6.1 | 491 | 8/6/2026 |
| 2026.8.3.3 | 7 | 8/4/2026 |
| 2026.8.3.2 | 6 | 8/4/2026 |
| 2026.8.3.1 | 3 | 8/4/2026 |
| 2026.8.1.1 | 10 | 8/1/2026 |
| 2026.7.31.1 | 6 | 7/31/2026 |
| 2026.7.30.1 | 12 | 7/30/2026 |
| 2026.7.26.4 | 5 | 7/27/2026 |
| 2026.7.26.3 | 3 | 7/27/2026 |
| 2026.7.26.2 | 6 | 7/26/2026 |
| 2026.7.26.1 | 6 | 7/26/2026 |
| 2026.7.23.5 | 7 | 7/23/2026 |
| 2026.7.23.4 | 7 | 7/23/2026 |
| 2026.7.23.3 | 7 | 7/23/2026 |
| 2026.7.23.2 | 4 | 7/23/2026 |
| 2026.7.23.1 | 7 | 7/23/2026 |
| 2026.7.22.1 | 7 | 7/22/2026 |
| 2026.7.19.1 | 7 | 7/19/2026 |
| 2026.7.18.19 | 7 | 7/19/2026 |
| 2026.7.18.18 | 7 | 7/19/2026 |
| 2026.7.18.17 | 7 | 7/18/2026 |
| 2026.7.18.16 | 4 | 7/18/2026 |
| 2026.7.18.15 | 7 | 7/18/2026 |
| 2026.7.18.14 | 7 | 7/18/2026 |
| 2026.7.18.13 | 4 | 7/18/2026 |
| 2026.7.18.12 | 4 | 7/18/2026 |
| 2026.7.18.11 | 7 | 7/18/2026 |
| 2026.7.18.10 | 4 | 7/18/2026 |
| 2026.7.18.9 | 7 | 7/18/2026 |
| 2026.7.18.8 | 7 | 7/18/2026 |
| 2026.7.18.7 | 4 | 7/18/2026 |
| 2026.7.18.6 | 7 | 7/18/2026 |
| 2026.7.18.5 | 4 | 7/18/2026 |
| 2026.7.18.4 | 7 | 7/18/2026 |
| 2026.7.18.3 | 4 | 7/18/2026 |
| 2026.7.18.2 | 7 | 7/18/2026 |
| 2026.7.18.1 | 14 | 7/18/2026 |
| 2026.7.17.2 | 7 | 7/17/2026 |
| 2026.7.17.1 | 7 | 7/17/2026 |
| 2026.7.13.1 | 75 | 7/14/2026 |
| 2026.7.5.2 | 8 | 7/5/2026 |
| 2026.7.5.1 | 7 | 7/5/2026 |
| 2026.7.4.4 | 13 | 7/4/2026 |
| 2026.7.4.3 | 8 | 7/4/2026 |
| 2026.7.4.2 | 8 | 7/4/2026 |
| 2026.7.4.1 | 8 | 7/4/2026 |
| 2026.7.3.2 | 8 | 7/3/2026 |
| 2026.7.3.1 | 7 | 7/3/2026 |
| 2026.6.30.5 | 220 | 7/1/2026 |
| 2026.6.30.4 | 7 | 6/30/2026 |
| 2026.6.30.3 | 7 | 6/30/2026 |
| 2026.6.30.2 | 4 | 6/30/2026 |
| 2026.6.30.1 | 4 | 6/30/2026 |
| 2026.6.29.8 | 7 | 6/30/2026 |
| 2026.6.29.7 | 4 | 6/30/2026 |
| 2026.6.29.6 | 7 | 6/30/2026 |
| 2026.6.29.5 | 4 | 6/30/2026 |
| 2026.6.29.4 | 4 | 6/30/2026 |
| 2026.6.29.3 | 7 | 6/30/2026 |
| 2026.6.29.2 | 4 | 6/30/2026 |
| 2026.6.29.1 | 7 | 6/30/2026 |
| 2026.6.28.3 | 7 | 6/28/2026 |
| 2026.6.28.2 | 7 | 6/28/2026 |
| 2026.6.28.1 | 4 | 6/28/2026 |
| 2026.6.27.7 | 7 | 6/28/2026 |
| 2026.6.27.6 | 349 | 6/28/2026 |
| 2026.6.27.5 | 4 | 6/28/2026 |
| 2026.6.27.4 | 4 | 6/28/2026 |
| 2026.6.27.3 | 4 | 6/28/2026 |
| 2026.6.27.2 | 237 | 6/27/2026 |
| 2026.6.27.1 | 4 | 6/27/2026 |