Kiwicodes.Beacon.HelpCenter.Blazor 1.2.5

dotnet add package Kiwicodes.Beacon.HelpCenter.Blazor --version 1.2.5
                    
NuGet\Install-Package Kiwicodes.Beacon.HelpCenter.Blazor -Version 1.2.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Kiwicodes.Beacon.HelpCenter.Blazor" Version="1.2.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Kiwicodes.Beacon.HelpCenter.Blazor" Version="1.2.5" />
                    
Directory.Packages.props
<PackageReference Include="Kiwicodes.Beacon.HelpCenter.Blazor" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Kiwicodes.Beacon.HelpCenter.Blazor --version 1.2.5
                    
#r "nuget: Kiwicodes.Beacon.HelpCenter.Blazor, 1.2.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Kiwicodes.Beacon.HelpCenter.Blazor@1.2.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Kiwicodes.Beacon.HelpCenter.Blazor&version=1.2.5
                    
Install as a Cake Addin
#tool nuget:?package=Kiwicodes.Beacon.HelpCenter.Blazor&version=1.2.5
                    
Install as a Cake Tool

Beacon Help Center (Blazor)

A drop-in, themeable customer help center component for Blazor — the same Client Help Center used in Beacon, packaged as a Razor Class Library you can embed in your own app. It renders the knowledge base, the request form and the ticket tracker from a single component. Point it at your Beacon API and your app's portal key, set a brand colour, and you're done.

It's built on Kiwicodes.Beacon.Sdk's BeaconPublicClient, so all calls go through the same public (/public/*) endpoints — no admin credentials, no HMAC signing required on the client.

The knowledge base opens on a category list (each with a book icon and an article count). It's a two-level accordion: clicking a category expands it to show any articles that sit directly under it, plus its folders (folder icon); clicking a folder expands its articles (document icon). Folders are a single level deep and optional — articles with no folder appear right under their category, and articles with no known category are grouped under General. Typing in the search box lists matching articles across everything.

Install

dotnet add package Kiwicodes.Beacon.HelpCenter

This pulls in Kiwicodes.Beacon.Sdk automatically.

.NET MAUI Blazor Hybrid

In a MAUI Blazor Hybrid solution, add the package reference to the MAUI host project, not only to the shared Razor class library where you use the component. The BlazorWebView loads assemblies from the host app's package, so a reference that lives solely in the shared RCL compiles fine but the DLL never ships — you'll hit Could not load file or assembly 'Beacon.HelpCenter' at render time. The same applies to its dependency Kiwicodes.Beacon.Sdk, which rides along automatically once the host references this package.

Quick start (no DI)

The component is fully self-contained — it manages its own navigation between the article list, an article, the request form and the ticket tracker. Drop it on any page:

@using Beacon.HelpCenter

<BeaconHelpCenter BaseUrl="https://your-beacon/api/"
                  PortalKey="pk_live_xxxxxxxx"
                  PrimaryColor="#e8590c" />
  • BaseUrl — your Beacon API base, including the route prefix (e.g. .../api/).
  • PortalKey — your app's portal key (the public key from Beacon's Settings → API Keys). This is what scopes the help center to your app's articles and tickets.
  • PrimaryColor — your brand colour. The header gradient, buttons, links and accent tints are all derived from it.

With dependency injection (optional)

If you'd rather not repeat BaseUrl on every instance, register a client once:

// Program.cs
builder.Services.AddBeaconHelpCenter("https://your-beacon/api/");
<BeaconHelpCenter PortalKey="pk_live_xxxxxxxx" PrimaryColor="#e8590c" />

The component resolves its data source in this order: an explicit Client parameter → a BeaconPublicClient registered in DI → a client built from BaseUrl.

Verified users

If your app already knows who the user is, pass their name and email. The request form then pre-fills both fields, makes them read-only, and shows a Verified user badge — so signed-in users don't retype (or mistype) their details:

<BeaconHelpCenter BaseUrl="https://your-beacon/api/"
                  PortalKey="pk_live_xxxxxxxx"
                  VerifiedUserName="@user.DisplayName"
                  VerifiedUserEmail="@user.Email" />

Verified mode switches on as soon as VerifiedUserEmail is non-empty. Leave these unset for anonymous portals and the fields stay editable as normal.

Attachments & camera

Customers can attach files/images to a new request (up to 10 MB each by default). Attachments upload after the ticket is created and appear on the ticket view.

<BeaconHelpCenter BaseUrl="https://your-beacon/api/"
                  PortalKey="pk_live_xxxxxxxx"
                  AllowAttachments="true"
                  MaxAttachmentBytes="10485760" />

Set IsMaui="true" when hosting in a .NET MAUI Blazor Hybrid app to add a Take a photo option that opens the device camera (alongside the normal file picker):

<BeaconHelpCenter ... IsMaui="true" />

The camera/file pickers use the platform's native picker through the BlazorWebView, so the MAUI host must declare the relevant permissions — NSCameraUsageDescription/NSPhotoLibraryUsageDescription on iOS and CAMERA/READ_MEDIA_IMAGES on Android — and request them at runtime. No MAUI dependency is added to your project by this library.

Set AllowAttachments="false" to hide attachments entirely.

Theming

For most apps, PrimaryColor is all you need. For full control, pass a HelpCenterTheme — anything you leave unset keeps its default (or is derived from the primary colour):

@using Beacon.HelpCenter.Theming

<BeaconHelpCenter BaseUrl="https://your-beacon/api/"
                  PortalKey="pk_live_xxxxxxxx"
                  Theme="_theme" />

@code {
    private readonly HelpCenterTheme _theme = new()
    {
        PrimaryColor   = "#0d9488",
        PageBackground = "#f7faf9",
        GradientAngle  = 135,
        CardRadius     = "18px",
        FontFamily     = "'Inter', sans-serif",
    };
}
Property Default Notes
PrimaryColor #4d56ec Brand colour; drives buttons, links, gradient, tints
OnPrimaryColor white Text/icons on primary surfaces
GradientStart / GradientMid / GradientEnd derived from primary Header gradient stops
GradientAngle 158 Header gradient angle (degrees)
PageBackground #f6f5f2 Page background behind cards
SurfaceColor white Card background
TextColor / MutedTextColor / FaintTextColor warm greys Text hierarchy
BorderColor #e3ddd4 Inputs and dividers
SuccessColor / DangerColor green / red Confirmations and validation
CardRadius / ControlRadius 14px / 10px Corner radii
FontFamily system UI stack Font for the whole help center

Every theme value is emitted as a CSS custom property (--bk-*) on the component's root element, so derivation only applies to hex inputs — you can pass any valid CSS colour (rgb(...), named colours, etc.).

Component parameters

Parameter Type Description
PortalKey (required) string Your app's portal/public key
BaseUrl string? Beacon API base; used when no Client/DI client is available
Client BeaconPublicClient? Supply a pre-configured client instead of BaseUrl
PrimaryColor string? Brand colour shortcut (ignored when Theme is set)
Theme HelpCenterTheme? Full theme object
Heading string Big header text (default "How can we help?")
Subheading string? Eyebrow label (default "{App} Help Center")
VerifiedUserName string? Pre-fills the requester name (read-only) when verified mode is on
VerifiedUserEmail string? Pre-fills the requester email; supplying it enables verified mode + badge
AllowAttachments bool Show the file/image attachment UI on the request form (default true)
IsMaui bool Add a device-camera "Take a photo" option for MAUI Blazor Hybrid hosts (default false)
MaxAttachmentBytes long Per-file size limit in bytes (default 10 MB)
TicketLinkFormat string? Template for a shareable tracking link, e.g. https://app.me/portal/ticket/{id}?token={token}
InitialArticleId string? Open directly on an article (deep link)
InitialTicketId / InitialTicketToken string? Open directly on a ticket (deep link)

The component navigates internally and needs no router. If you want real URLs (e.g. so a confirmation email can link straight to a ticket), give it a page in your host app and forward the route/query values:

@page "/help/ticket/{Id}"

<BeaconHelpCenter BaseUrl="https://your-beacon/api/"
                  PortalKey="pk_live_xxxxxxxx"
                  InitialTicketId="@Id"
                  InitialTicketToken="@Token" />

@code {
    [Parameter] public string Id { get; set; } = "";
    [SupplyParameterFromQuery] public string? Token { get; set; }
}

Pair this with TicketLinkFormat="https://app.me/help/ticket/{id}?token={token}" so the success screen shows the customer a link they can save.

What it talks to

All requests are anonymous, public endpoints — safe to expose to end users:

  • GET /public/portal/{portalKey} — resolve the portal / app name
  • GET /public/kb/categories — knowledge-base categories
  • GET /public/kb/folders — knowledge-base folders (one level under categories)
  • GET /public/kb/articles and /public/kb/articles/{id} — knowledge base
  • POST /public/kb/articles/{id}/feedback — article helpful/not-helpful
  • POST /public/tickets — submit a request
  • GET|POST /public/tickets/{id}… — track, reply, rate (token-gated)

License

MIT.

Product 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.5 0 7/7/2026