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);

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 (Children set, no Route) 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 Children nest 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

  1. Create a Razor Class Library: <Project Sdk="Microsoft.NET.Sdk.Razor">.
  2. Reference this package: <PackageReference Include="B3.Blicks.Contracts" Version="x.y.z" />.
  3. Import the packaging convention so it publishes correctly: <Import Project="…/src/Blick.pack.props" /> (see src/Blick.pack.props).
  4. Implement exactly one IBlick, add routable @page components, and put static assets in wwwroot/ (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