B3.Blicks.Contracts 2026.6.29.2

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)
34
B3.Communication.UI.Components
Package Description
28
B3.EventSourcing.UI.Components
EventViews components include: UserDefinedEventView, UserDefinedEventsTimeline, EventTypesFilter
27
B3.Communication.UI.Components
Package Description
25
B3.UI.Components.Basic
Basic Components are based on standard HTML and ASPNETCore components. No third party libraries are used here (e.g., SyncFusion)
23
B3.Messaging.UI.Components
Components include: EditJobConfiguration, JobConfigurationsDataGrid, ManualRunHangfireJobButton, OneSaga, SagasByName
19
DocumentBuilder.UI.Components
Components include: MessageTemplateContent
19
B3.EventSourcing.UI.Components
EventViews components include: UserDefinedEventView, UserDefinedEventsTimeline, EventTypesFilter
19
B3.UI.Components
Syncfusion-backed B3 UI components: defined-list dropdowns/combo-boxes/multi-select, date pickers, and the generic record form/view/dialog.
18
B3.UI.Components.Basic
Basic Components are based on standard HTML and ASPNETCore components. No third party libraries are used here (e.g., SyncFusion)
18
B3.CRUD.UI.Components
Components include: AddOne, ChangeLogDataGrid, ColumnGroupComponent, DataGrid, DataRecordFileManager, EditOne, OneRecord
18
B3.ETL.DataLoader.UI.Components
Package Description
15
B3.Communication.UI.Components
Package Description
15
B3.CRUD.UI.Components
Components include: AddOne, ChangeLogDataGrid, ColumnGroupComponent, DataGrid, DataRecordFileManager, EditOne, OneRecord
15
B3.Search.UI.Components
Components include: SearchAndFilter,SearchBoxWithDataGrid,SearchInput,SearchInputInsideDialog,FacetFilter,IndexCreator
14
B3.UI.Components
Syncfusion-backed B3 UI components: defined-list dropdowns/combo-boxes/multi-select, date pickers, and the generic record form/view/dialog.
12
B3.DocumentApprover.UI.Components
Components include: DocumentApprovalForm, DocumentViewer, RequestApprovalForm
12
B3.Search.UI.Components
Components include: SearchAndFilter,SearchBoxWithDataGrid,SearchInput,SearchInputInsideDialog,FacetFilter,IndexCreator
11

.NET 10.0

  • No dependencies.

Version Downloads Last updated
2026.8.6.1 7 8/6/2026
2026.8.3.3 5 8/4/2026
2026.8.3.2 4 8/4/2026
2026.8.3.1 1 8/4/2026
2026.8.1.1 5 8/1/2026
2026.7.31.1 4 7/31/2026
2026.7.30.1 10 7/30/2026
2026.7.26.4 4 7/27/2026
2026.7.26.3 1 7/27/2026
2026.7.26.2 4 7/26/2026
2026.7.26.1 4 7/26/2026
2026.7.23.5 4 7/23/2026
2026.7.23.4 4 7/23/2026
2026.7.23.3 4 7/23/2026
2026.7.23.2 1 7/23/2026
2026.7.23.1 4 7/23/2026
2026.7.22.1 4 7/22/2026
2026.7.19.1 4 7/19/2026
2026.7.18.19 4 7/19/2026
2026.7.18.18 4 7/19/2026
2026.7.18.17 4 7/18/2026
2026.7.18.16 1 7/18/2026
2026.7.18.15 4 7/18/2026
2026.7.18.14 4 7/18/2026
2026.7.18.13 1 7/18/2026
2026.7.18.12 1 7/18/2026
2026.7.18.11 4 7/18/2026
2026.7.18.10 1 7/18/2026
2026.7.18.9 4 7/18/2026
2026.7.18.8 4 7/18/2026
2026.7.18.7 1 7/18/2026
2026.7.18.6 4 7/18/2026
2026.7.18.5 1 7/18/2026
2026.7.18.4 4 7/18/2026
2026.7.18.3 1 7/18/2026
2026.7.18.2 4 7/18/2026
2026.7.18.1 11 7/18/2026
2026.7.17.2 4 7/17/2026
2026.7.17.1 4 7/17/2026
2026.7.13.1 17 7/14/2026
2026.7.5.2 6 7/5/2026
2026.7.5.1 5 7/5/2026
2026.7.4.4 11 7/4/2026
2026.7.4.3 6 7/4/2026
2026.7.4.2 6 7/4/2026
2026.7.4.1 6 7/4/2026
2026.7.3.2 7 7/3/2026
2026.7.3.1 5 7/3/2026
2026.6.30.5 33 7/1/2026
2026.6.30.4 5 6/30/2026
2026.6.30.3 5 6/30/2026
2026.6.30.2 2 6/30/2026
2026.6.30.1 2 6/30/2026
2026.6.29.8 5 6/30/2026
2026.6.29.7 2 6/30/2026
2026.6.29.6 5 6/30/2026
2026.6.29.5 2 6/30/2026
2026.6.29.4 2 6/30/2026
2026.6.29.3 5 6/30/2026
2026.6.29.2 2 6/30/2026
2026.6.29.1 5 6/30/2026
2026.6.28.3 5 6/28/2026
2026.6.28.2 5 6/28/2026
2026.6.28.1 2 6/28/2026
2026.6.27.7 5 6/28/2026
2026.6.27.6 46 6/28/2026
2026.6.27.5 2 6/28/2026
2026.6.27.4 2 6/28/2026
2026.6.27.3 2 6/28/2026
2026.6.27.2 44 6/27/2026
2026.6.27.1 2 6/27/2026