BlazorBlueprint.Components
4.2.0
dotnet add package BlazorBlueprint.Components --version 4.2.0
NuGet\Install-Package BlazorBlueprint.Components -Version 4.2.0
<PackageReference Include="BlazorBlueprint.Components" Version="4.2.0" />
<PackageVersion Include="BlazorBlueprint.Components" Version="4.2.0" />
<PackageReference Include="BlazorBlueprint.Components" />
paket add BlazorBlueprint.Components --version 4.2.0
#r "nuget: BlazorBlueprint.Components, 4.2.0"
#:package BlazorBlueprint.Components@4.2.0
#addin nuget:?package=BlazorBlueprint.Components&version=4.2.0
#tool nuget:?package=BlazorBlueprint.Components&version=4.2.0
BlazorBlueprint.Components
Pre-styled Blazor components with shadcn/ui design. Beautiful defaults with zero configuration - no Tailwind setup required!
Features
- Zero Configuration: Pre-built CSS included - no Tailwind setup required
- shadcn/ui Design: Beautiful, modern design language inspired by shadcn/ui
- Pre-Styled Components: Production-ready components with pre-built styling
- Dark Mode: Built-in dark mode support using CSS variables
- shadcn/ui Theme Compatible: Use any theme from shadcn/ui or tweakcn.com
- Fully Customizable: Override styles with custom CSS or Tailwind classes
- Built with Accessibility in Mind: Includes ARIA attributes and keyboard support via BlazorBlueprint.Primitives
- Composable: Flexible component composition patterns
- Type-Safe: Full C# type safety with IntelliSense support
- .NET 10 minimum: v4 targets
net10.0; .NET 8 and .NET 9 are no longer supported
Installation
Retarget your application to .NET 10 or later before upgrading to v4, and keep Components and Primitives on matching v4 versions. See the repository's migration guide and changelog.
dotnet add package BlazorBlueprint.Components
This package automatically includes:
BlazorBlueprint.Primitives- Headless primitives providing behavior and accessibilityBlazorBlueprint.Icons.Lucide- Lucide icon set- Pre-built CSS - No Tailwind setup required!
Quick Start
1. Register services in Program.cs:
builder.Services.AddBlazorBlueprintComponents();
This registers all required services including portal management, focus trapping, positioning, toast notifications, and programmatic dialogs.
2. Add to your _Imports.razor:
@using BlazorBlueprint.Components
@using BlazorBlueprint.Primitives
That's it — two imports give you access to all components and their enums (ButtonVariant, InputType, AccordionType, etc.).
3. Add CSS to your App.razor:
BlazorBlueprint Components come with pre-built CSS - no Tailwind setup required!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<base href="/" />
<link rel="stylesheet" href="styles/theme.css" />
<link rel="stylesheet" href="_content/BlazorBlueprint.Components/blazorblueprint.css" />
<HeadOutlet @rendermode="InteractiveServer" />
</head>
<body>
<Routes @rendermode="InteractiveServer" />
<script src="_framework/blazor.web.js"></script>
</body>
</html>
4. Add the portal host to your root layout (MainLayout.razor):
@using BlazorBlueprint.Primitives
<BbPortalHost />
This is required for overlay components (Dialog, Sheet, Popover, Tooltip, etc.) to render correctly.
If BlazorBlueprint.Primitives is not in scope, Razor does not treat the tag as a component — it
emits a literal <bbportalhost> element, with no build error, and every overlay silently fails to
render. In v3 the host lived in BlazorBlueprint.Primitives.Services; that using no longer resolves it.
5. Start using components:
<BbButton Variant="ButtonVariant.Default">Click me</BbButton>
<BbDialog>
<BbDialogTrigger AsChild>
<BbButton>Open Dialog</BbButton>
</BbDialogTrigger>
<BbDialogContent>
<BbDialogHeader>
<BbDialogTitle>Welcome to BlazorBlueprint</BbDialogTitle>
<BbDialogDescription>
Beautiful Blazor components with zero configuration
</BbDialogDescription>
</BbDialogHeader>
<BbDialogFooter>
<BbDialogClose AsChild>
<BbButton Variant="ButtonVariant.Outline">Close</BbButton>
</BbDialogClose>
</BbDialogFooter>
</BbDialogContent>
</BbDialog>
That's it! No Tailwind installation, no build configuration needed.
Available Components
General
| Component | Description |
|---|---|
| Accordion | Collapsible content sections with smooth animations |
| Alert | Contextual feedback messages with variant support |
| Alert Dialog | Modal confirmation dialogs requiring user action |
| Aspect Ratio | Maintain consistent width-to-height ratios |
| Avatar | User profile images with fallback initials and group support |
| Badge | Labels for status, categories, and metadata |
| Barcode | Fourteen linear symbologies drawn as SVG, on encoders written in C# — Code 128/39, EAN-13/8, UPC-A, ITF, Codabar, ISBN, ISSN, MSI, Telepen, Pharmacode, POSTNET and Royal Mail 4-state |
| Breadcrumb | Navigation breadcrumb trail with separator support |
| Button | Interactive buttons with multiple variants and sizes |
| Button Group | Grouped button controls with shared styling |
| Calendar | Date selection calendar |
| Card | Content container with header, content, and footer sections |
| Carousel | Scrollable content carousel with navigation controls |
| Chart | 14 chart types (Area, Bar, Candlestick, Funnel, Gauge, Heatmap, Line, Map, Pie, Radar, Radial Bar, Rose, Sankey, Scatter) on Apache ECharts with theme integration |
| Chip | Selectable, dismissible pills, grouped with BbChipSet |
| Collapsible | Expandable content area with trigger control |
| Copy Text | Click-to-copy text with tooltip feedback and copied-state indicator |
| Dark Mode Toggle | Button that toggles light/dark mode with customizable icons and optional label |
| Empty | Empty state placeholder for no-content scenarios |
| Fab | Floating action button for a screen's one main action |
| Highlighter | Marks the parts of a text that matched a search |
| Image | Image with a fallback for a source that will not load |
| Item | List item container for menus and lists |
| Kbd | Keyboard shortcut display |
| Link | A link that sits on the text baseline |
| Notification Badge | Accessible count or dot overlay for another element |
| Pagination | Page navigation controls |
| Progress | Progress indicator bar |
| QR Code | Scannable code drawn as SVG on a from-scratch ISO/IEC 18004 encoder — all 40 versions, four error-correction levels, module shapes and a centre logo |
| Resizable | Resizable panel layout with drag handles |
| Scroll Area | Custom scrollable area with styled scrollbars |
| Scroll To Top | Floating button that appears once the page has scrolled, and returns it to the top |
| Section Header | Section heading with actions |
| Separator | Visual dividers for content sections |
| Skeleton | Loading placeholders for content and images |
| Spinner | Loading spinner indicator |
| Split Button | Button with dropdown action split |
| Stepper | Progress through a sequence, with a BbStep for each stage |
| Theme Switcher | Theme customization popover — light/dark mode, independent base and primary colors, and radius, with persistence |
| Timeline | Chronological event display |
| Toggle | Toggle button control |
| Toggle Group | Single or multi-select toggle group |
| Tree View | Hierarchical data display with selection, checkboxes, and keyboard navigation |
| Typography | Typography components for consistent text styling |
Overlays & Navigation
| Component | Description |
|---|---|
| App Bar | Top bar with title and back actions, safe-area insets and touch-sized controls |
| Bottom Nav | Safe-area bottom navigation with active links and touch-sized items |
| Command | Command palette for quick actions and navigation |
| Context Menu | Right-click context menus with items, labels, and shortcuts |
| Dialog | Modal dialogs with backdrop and focus management |
| Drawer | Slide-out drawer panels with header, footer, and items |
| Dropdown Menu | Context menus with items, separators, and shortcuts |
| Exit Prompt | Holds a navigation while there is unsaved work |
| Hover Card | Rich preview cards on hover with delay control |
| Menubar | Horizontal menu bar with dropdown menus |
| Navigation Menu | Responsive navigation menu with submenus |
| Popover | Floating panels for additional content and actions |
| Responsive Nav | Mobile-responsive navigation |
| Sheet | Side panels that slide in from viewport edges |
| Sidebar | Responsive navigation sidebar with collapsible menus |
| Tabs | Tabbed interface for organizing related content, with tabs the user can add, close, rename and reorder |
| Toast | Toast notification system with action support |
| Tooltip | Brief informational popups on hover or focus |
Data & Enterprise
| Component | Description |
|---|---|
| Dashboard Grid | Drag-and-drop, resizable widget layout for dashboards with responsive breakpoints and state persistence |
| Scheduler | Day/week/work-week scheduling with Monday/Sunday week starts, configurable slots, resource lanes, drag/resize, event editing, confirmed deletion, recurrence and optional per-event IANA time zones |
| TreeSelect | Searchable single/multiple hierarchy selection with cascading checkboxes, indeterminate states, leaf-only selection and form binding |
| Cascader | Hierarchy columns, path search, leaf/branch selection, keyboard/RTL navigation and automatic scrolling to the active level |
| FileUpload | Optional transport callback with progress, cancellation, retries and preserved browser files |
| DataGrid | Enterprise data grid with sorting, filtering, row grouping, row/cell/batch editing, isolated drafts, validation, rejected-save recovery, selection, expandable rows, virtualization, and column management |
| DataTable | Tables with sorting, filtering, pagination, and row selection |
| DataView | List and grid layouts with sorting, filtering, pagination, and infinite scroll |
| Dynamic Form | Schema-driven form rendering from JSON or code definitions |
| Filter Builder | Visual query builder for data filter expressions with AND/OR logic and nested groups |
| Form Wizard | Multi-step form wizard with progress tracking, per-step validation, and navigation controls |
| Dock | IDE-style docking layout with drag-and-drop panels, pinning, maximize, pop-out floating windows, and tab overflow |
| Event Calendar | Month, Week, and Agenda views over your own event model with per-event templates, styling, and click callbacks |
| Gantt | A plan against a timeline: task list and bars in one table, six zoom levels, summary roll-up, milestones, dependency arrows, drag/resize/progress editing, row reordering and re-parenting, and right-to-left support |
| Pivot Data Grid | Cross-tabulation with nested fields on both axes, totals worked out from the items, custom aggregates, drill-down and a field picker |
| Sortable | Pointer and keyboard sortable lists/grids, connected-list transfer, move/drop permissions, reusable handles and custom drag previews |
Form Controls
| Component | Description |
|---|---|
| Checkbox | Binary selection control with indeterminate state |
| Checkbox Group | Group of checkboxes with shared state management |
| Color Picker | Color selection input |
| Combobox | Autocomplete input with searchable dropdown |
| Currency Input | Currency-formatted number input |
| Date Input | Culture-ordered date segments with keyboard editing, calendar access and EditForm draft validation |
| Date Picker | Date selection input with calendar popup |
| Date Range Picker | Date range selection input |
| Date Time Picker | Combined date and time selection in one popover |
| Field | Form field wrapper with label, description, and error states |
| File Upload | Drag-and-drop file selection with preview and optional upload progress, cancellation and retry |
| Input | Text input fields with multiple types and sizes |
| Input Field | Integrated input with field label and description |
| Input Group | Grouped input controls with addons and buttons |
| Input OTP | One-time password input with segmented fields |
| Label | Accessible labels for form controls |
| List Box | Always-visible list of options with the full listbox keyboard pattern, search, and single, multiple or range selection |
| Masked Input | Input with mask pattern enforcement |
| Multi Select | Multi-select dropdown with tag support |
| Native Select | Native HTML select element with styling |
| Numeric Input | Number input with formatting and validation |
| Pick List | Two lists and the buttons that move options between them, with reordering, search and keyboard support |
| Quantity Stepper | Touch-sized quantity editing with bounds and remove-at-minimum action |
| Radio Group | Mutually exclusive options with keyboard navigation |
| Range Slider | Dual-handle range slider input |
| Rating | Star/icon rating input |
| Select | Dropdown selection with groups and labels |
| Signature | Signing field that captures a drawn or typed signature, with SVG, PNG and raw stroke output |
| Slider | Single-handle slider input |
| Switch | Toggle control for on/off states |
| Tag Input | Inline tag/chip input for managing string lists with suggestions and validation |
| Textarea | Multi-line text input field |
| Time Input | Segmented 12/24-hour entry with optional seconds, bounds, picker and EditForm validation |
| Time Picker | Time selection input |
Editors
| Component | Description |
|---|---|
| Markdown Editor | Markdown editor with toolbar and live preview |
| Rich Text Editor | Rich text editor with formatting toolbar |
Pre-Built Form Fields
Convenience wrappers that combine a form control with BbField for label, description, and error handling:
| Component | Description |
|---|---|
| FormFieldCascader | Cascader with integrated field wrapper |
| FormFieldCheckbox | Checkbox with integrated field wrapper |
| FormFieldCheckboxGroup | CheckboxGroup with integrated field wrapper |
| FormFieldCombobox | Combobox with integrated field wrapper |
| FormFieldCurrencyInput | CurrencyInput with integrated field wrapper |
| FormFieldDateInput | DateInput with integrated field wrapper |
| FormFieldDatePicker | DatePicker with integrated field wrapper |
| FormFieldDateRangePicker | DateRangePicker with integrated field wrapper |
| FormFieldDateTimePicker | DateTimePicker with integrated field wrapper |
| FormFieldFileUpload | FileUpload with integrated field wrapper |
| FormFieldInput | Input with integrated field wrapper |
| FormFieldInputOTP | InputOTP with integrated field wrapper |
| FormFieldMaskedInput | MaskedInput with integrated field wrapper |
| FormFieldMultiSelect | MultiSelect with integrated field wrapper |
| FormFieldNativeSelect | NativeSelect with integrated field wrapper |
| FormFieldNumericInput | NumericInput with integrated field wrapper |
| FormFieldQuantityStepper | QuantityStepper with integrated field wrapper |
| FormFieldRadioGroup | RadioGroup with integrated field wrapper |
| FormFieldSelect | Select with integrated field wrapper |
| FormFieldSwitch | Switch with integrated field wrapper |
| FormFieldTagInput | TagInput with integrated field wrapper |
| FormFieldTextarea | Textarea with integrated field wrapper |
| FormFieldTimeInput | TimeInput with integrated field wrapper |
| FormFieldTimePicker | TimePicker with integrated field wrapper |
| FormFieldTreeSelect | TreeSelect with integrated field wrapper |
Motion & Themes
| Component | Description |
|---|---|
| Height Animation | Expansion, collapse and automatic content resizing while retaining child state |
| Motion | Entrance/exit presets, custom keyframes, viewport/hover/press/manual triggers and reduced-motion handling |
| Page Transition | Incoming navigation animation with a stable first render |
| Render State Provider | Cascading prerender/interactive state |
| Screen Transition | Keyed screen animations with a stable first render |
| Selection Indicator | Animated active, hover and keyboard-focus feedback |
| Theme Scope | Scoped density, typography, surfaces and menu appearance; floating overlays inherit the scope |
Chat & AI
| Component | Description |
|---|---|
| Attachment | File attachment chips with upload states (uploading, processing, error, done), previews, and actions |
| Bubble | Message bubbles with tinted/outlined variants, reactions, and attachment slots |
| Marker | Inline status and tool-call markers with an animated shimmer effect |
| Message | Chat message rows with avatar, content, and footer, aligned per role |
Services
| Service | Description |
|---|---|
ToastService |
Toast notification state management |
DialogService |
Programmatic dialog/confirm control |
IPortalService |
Portal management for overlays (from Primitives) |
IFocusManager |
Focus trapping and restoration (from Primitives) |
IPositioningService |
Floating element positioning (from Primitives) |
IKeyboardShortcutService |
Global keyboard shortcut registration (from Primitives) |
DropdownManagerService |
Coordinates dropdown mutual exclusivity (from Primitives) |
Component API Reference
Button
<BbButton
Variant="ButtonVariant.Default"
Size="ButtonSize.Default"
Type="ButtonType.Button"
IconPosition="IconPosition.Start"
Disabled="false">
Click me
</BbButton>
| Parameter | Type | Default | Values |
|---|---|---|---|
Variant |
ButtonVariant |
Default |
Default, Destructive, Outline, Secondary, Ghost, Link |
Size |
ButtonSize |
Default |
Small, Default, Large, Icon, IconSmall, IconLarge |
Type |
ButtonType |
Button |
Button, Submit, Reset |
IconPosition |
IconPosition |
Start |
Start, End |
Input
<BbInput
Type="InputType.Email"
Placeholder="name@example.com"
Disabled="false" />
| Parameter | Type | Default | Values |
|---|---|---|---|
Type |
InputType |
Text |
Text, Email, Password, Number, Tel, Url, Search, Date, Time, File |
Avatar
<BbAvatar Size="AvatarSize.Default">
<BbAvatarImage Source="user.jpg" Alt="User" />
<BbAvatarFallback>JD</BbAvatarFallback>
</BbAvatar>
| Parameter | Type | Default | Values |
|---|---|---|---|
Size |
AvatarSize |
Default |
Small, Default, Large, ExtraLarge |
Badge
<BbBadge Variant="BadgeVariant.Default">New</BbBadge>
| Parameter | Type | Default | Values |
|---|---|---|---|
Variant |
BadgeVariant |
Default |
Default, Secondary, Destructive, Outline |
Accordion
<BbAccordion Type="AccordionType.Single" Collapsible="true">
<BbAccordionItem Value="item-1">
<BbAccordionTrigger>Section 1</BbAccordionTrigger>
<BbAccordionContent>Content 1</BbAccordionContent>
</BbAccordionItem>
</BbAccordion>
| Parameter | Type | Default | Description |
|---|---|---|---|
Type |
AccordionType |
Single |
Single (one item open) or Multiple (many items open) |
Collapsible |
bool |
false |
When Single, allows closing all items |
Tabs
<BbTabs
DefaultValue="tab1"
Orientation="TabsOrientation.Horizontal"
ActivationMode="TabsActivationMode.Automatic">
<BbTabsList>
<BbTabsTrigger Value="tab1">Tab 1</BbTabsTrigger>
<BbTabsTrigger Value="tab2">Tab 2</BbTabsTrigger>
</BbTabsList>
<BbTabsContent Value="tab1">Content 1</BbTabsContent>
<BbTabsContent Value="tab2">Content 2</BbTabsContent>
</BbTabs>
| Parameter | Type | Default | Values |
|---|---|---|---|
Orientation |
TabsOrientation |
Horizontal |
Horizontal, Vertical |
ActivationMode |
TabsActivationMode |
Automatic |
Automatic (on focus), Manual (on click) |
Sheet
<BbSheet>
<BbSheetTrigger AsChild>
<BbButton>Open Sheet</BbButton>
</BbSheetTrigger>
<BbSheetContent Side="SheetSide.Right">
<BbSheetHeader>
<BbSheetTitle>Sheet Title</BbSheetTitle>
<BbSheetDescription>Sheet description</BbSheetDescription>
</BbSheetHeader>
</BbSheetContent>
</BbSheet>
| Parameter | Type | Default | Values |
|---|---|---|---|
Side |
SheetSide |
Right |
Top, Right, Bottom, Left |
Select
<BbSelect TValue="string" @bind-Value="selectedValue">
<BbSelectTrigger>
<BbSelectValue Placeholder="Select an option" />
</BbSelectTrigger>
<BbSelectContent>
<BbSelectItem Value="@("option1")" Text="Option 1" />
<BbSelectItem Value="@("option2")" Text="Option 2" />
</BbSelectContent>
</BbSelect>
Select is a generic component. Specify TValue for type safety.
Separator
<BbSeparator Orientation="SeparatorOrientation.Horizontal" />
| Parameter | Type | Default | Values |
|---|---|---|---|
Orientation |
SeparatorOrientation |
Horizontal |
Horizontal, Vertical |
Skeleton
<BbSkeleton Shape="SkeletonShape.Rectangular" Class="w-full h-4" />
<BbSkeleton Shape="SkeletonShape.Circular" Class="w-12 h-12" />
| Parameter | Type | Default | Values |
|---|---|---|---|
Shape |
SkeletonShape |
Rectangular |
Rectangular, Circular |
DataTable
<BbDataTable TItem="User" Items="users" SelectionMode="DataTableSelectionMode.Multiple">
<BbDataTableColumn TItem="User" Field="x => x.Name" Header="Name" />
<BbDataTableColumn TItem="User" Field="x => x.Email" Header="Email" />
</BbDataTable>
| Parameter | Type | Default | Values |
|---|---|---|---|
SelectionMode |
DataTableSelectionMode |
None |
None, Single, Multiple |
Theming
BlazorBlueprint is 100% compatible with shadcn/ui themes. Customize your application's appearance using CSS variables.
Using Themes from shadcn/ui and tweakcn
You can use any theme from:
- shadcn/ui themes - Official shadcn/ui theme gallery
- tweakcn.com - Advanced theme customization tool
Simply copy the CSS variables and paste them into your wwwroot/styles/theme.css file.
Example Theme
Create wwwroot/styles/theme.css:
@layer base {
:root {
--background: oklch(1 0 0);
--foreground: oklch(0.1450 0 0);
--primary: oklch(0.2050 0 0);
--primary-foreground: oklch(0.9850 0 0);
/* ... other variables */
}
.dark {
--background: oklch(0.1450 0 0);
--foreground: oklch(0.9850 0 0);
--primary: oklch(0.9220 0 0);
--primary-foreground: oklch(0.2050 0 0);
/* ... other variables */
}
}
Reference it in your App.razor before the BlazorBlueprint CSS:
<link rel="stylesheet" href="styles/theme.css" />
<link rel="stylesheet" href="_content/BlazorBlueprint.Components/blazorblueprint.css" />
Dark Mode
Dark mode automatically activates when you add the .dark class to the <html> element. All components will switch to dark mode colors.
Usage Example
<BbDialog>
<BbDialogTrigger AsChild>
<BbButton>Open Dialog</BbButton>
</BbDialogTrigger>
<BbDialogContent>
<BbDialogHeader>
<BbDialogTitle>Confirm Action</BbDialogTitle>
<BbDialogDescription>
Are you sure you want to proceed?
</BbDialogDescription>
</BbDialogHeader>
<p>This action cannot be undone.</p>
<BbDialogFooter>
<BbDialogClose AsChild>
<BbButton Variant="ButtonVariant.Outline">Cancel</BbButton>
</BbDialogClose>
<BbButton Variant="ButtonVariant.Default">Confirm</BbButton>
</BbDialogFooter>
</BbDialogContent>
</BbDialog>
AsChild Pattern
Use AsChild on trigger components to use your own styled elements instead of the default button:
<BbDropdownMenu>
<BbDropdownMenuTrigger AsChild>
<BbButton Variant="ButtonVariant.Outline">
Actions
<BbLucideIcon Name="chevron-down" Size="16" />
</BbButton>
</BbDropdownMenuTrigger>
<BbDropdownMenuContent>
<BbDropdownMenuItem>Edit</BbDropdownMenuItem>
<BbDropdownMenuItem>Delete</BbDropdownMenuItem>
</BbDropdownMenuContent>
</BbDropdownMenu>
This is the industry-standard pattern from Radix UI/shadcn/ui. When AsChild is true, the child component (e.g., BbButton) automatically receives trigger behavior via TriggerContext.
Form Example
<div class="space-y-4">
<div>
<BbLabel For="email">Email</BbLabel>
<BbInput Id="email" Type="InputType.Email" Placeholder="name@example.com" />
</div>
<div class="flex items-center space-x-2">
<BbCheckbox Id="terms" @bind-Checked="agreedToTerms" />
<BbLabel For="terms">I agree to the terms and conditions</BbLabel>
</div>
<BbButton Disabled="@(!agreedToTerms)">Submit</BbButton>
</div>
@code {
private bool agreedToTerms = false;
}
Customizing Components
Override Default Styles
Use the Class parameter to add custom CSS classes or Tailwind classes (if you have Tailwind set up):
<BbButton Class="bg-purple-600 hover:bg-purple-700">
Custom Button
</BbButton>
<BbCard Class="border-2 border-purple-500 shadow-xl">
Custom Card Styling
</BbCard>
Note: BlazorBlueprint Components include pre-built CSS and don't require Tailwind. However, you can still use Tailwind classes for customization if you've set up Tailwind in your project.
Classes you pass through Class come from your Tailwind build, not from blazorblueprint.css. Every utility the library ships is prefixed bb: (.bb\:flex, .bb\:sm\:hidden) and kept in its own cascade layer, so your build and the library's can never emit the same class name and their load order does not matter. The library strips its prefix when merging, so Class="p-6" still replaces the component's own bb:p-4. Do not @source this package from your Tailwind input — it finds only prefixed tokens and emits nothing. If you have no Tailwind build, the prefixed classes work anywhere on the page (class="bb:flex bb:gap-4"), but the set is whatever the components use and is not a stable API.
Component Composition
Build complex UIs by composing components:
<BbCard>
<BbCardHeader>
<BbCardTitle>Settings</BbCardTitle>
<BbCardDescription>Manage your account settings</BbCardDescription>
</BbCardHeader>
<BbCardContent class="space-y-4">
<div>
<BbLabel>Email Notifications</BbLabel>
<BbSwitch @bind-Checked="emailNotifications" />
</div>
<BbSeparator />
<div>
<BbLabel>Push Notifications</BbLabel>
<BbSwitch @bind-Checked="pushNotifications" />
</div>
</BbCardContent>
<BbCardFooter>
<BbButton>Save Changes</BbButton>
</BbCardFooter>
</BbCard>
Design Philosophy
BlazorBlueprint.Components follows the shadcn/ui philosophy with zero-configuration deployment:
- Zero Configuration: Pre-built CSS included - just install and use
- shadcn/ui Compatible: Uses the same design tokens and CSS variables
- Built on Primitives: All behavior comes from BlazorBlueprint.Primitives
- Theme Tokens: Fully themeable using CSS variables
- Built with Accessibility in Mind: Includes ARIA attributes and keyboard support
- Customizable: Override with custom CSS or add Tailwind if needed
When to Use
Use BlazorBlueprint.Components when:
- Want beautiful defaults with shadcn/ui design
- Need zero-configuration setup (no build tools required)
- Want to ship quickly without building components from scratch
- Need dark mode and theming support out of the box
- Want shadcn/ui theme compatibility
Consider BlazorBlueprint.Primitives when:
- Building a completely custom design system
- Want zero opinions about styling
- Need to match a specific brand or design language
- Prefer full control over all CSS
Documentation
For full documentation, examples, and API reference, visit:
Dependencies
- BlazorBlueprint.Primitives - Headless component primitives (auto-installed)
- BlazorBlueprint.Icons.Lucide - Lucide icon set (auto-installed)
- TailwindMerge.NET, Markdig, and HtmlSanitizer (auto-installed)
- Pre-built CSS, tw-animate-css animation utilities, Apache ECharts, Quill 2, and Natural Earth world map boundaries (bundled)
Optional:
- Tailwind CSS (if you want to use Tailwind classes for customization)
License
Apache License 2.0 - see LICENSE for details.
The package includes LICENSE, NOTICE, and staticwebassets/THIRD-PARTY-NOTICES.txt. The bundled Tailwind CSS, tw-animate-css, ECharts, and Quill assets retain their upstream licenses, including the D3, ZRender, and Microsoft helper notices within ECharts. These notices are also available at _content/BlazorBlueprint.Components/THIRD-PARTY-NOTICES.txt. The world map boundaries are derived from Natural Earth, which is public domain.
Contributing
Contributions are welcome! Please see our Contributing Guide.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- BlazorBlueprint.Icons.Lucide (>= 2.0.0)
- BlazorBlueprint.Primitives (>= 4.2.0)
- HtmlSanitizer (>= 9.1.982)
- Ical.Net (>= 5.2.3)
- Markdig (>= 0.37.0)
- Microsoft.AspNetCore.Components.Web (>= 10.0.14)
- TailwindMerge.NET (>= 1.3.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on BlazorBlueprint.Components:
| Package | Downloads |
|---|---|
|
NEXCODE.Caffeine.UI
Shared Blazor UI Components — Blazor Blueprint, Plotly Charts, Localization |
|
|
BlueprintShell
Embeddable Blazor shell built on BlazorBlueprint. Spin up a themed, dockable UI on a configurable port from any .NET application. |
|
|
BlazorBlueprint.PdfViewer
A PDF viewer for Blazor, built on PDF.js: paging, zoom, fit-to-width and download, from a URL or from bytes. An add-on to BlazorBlueprint.Components, in its own package because PDF.js is over 2 MB of script and WebAssembly. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.2.0 | 282 | 11/7/2026 |
| 4.1.0 | 27,559 | 9/22/2026 |
| 4.1.0-beta.2 | 92 | 9/22/2026 |
| 4.1.0-beta.1 | 69 | 9/21/2026 |
| 4.0.1 | 2,853 | 9/19/2026 |
| 4.0.0 | 172 | 9/19/2026 |
| 4.0.0-beta.10 | 73 | 9/19/2026 |
| 4.0.0-beta.9 | 75 | 9/18/2026 |
| 4.0.0-beta.8 | 79 | 9/17/2026 |
| 4.0.0-beta.5 | 120 | 9/16/2026 |
| 4.0.0-beta.4 | 66 | 9/16/2026 |
| 4.0.0-beta.3 | 118 | 9/15/2026 |
| 4.0.0-beta.2 | 95 | 9/15/2026 |
| 4.0.0-beta.1 | 77 | 9/15/2026 |
| 3.17.0 | 5,886 | 9/13/2026 |
| 3.16.1 | 245 | 9/12/2026 |
| 3.16.0 | 6,503 | 9/4/2026 |
| 3.15.0 | 32,099 | 8/5/2026 |
| 3.14.1 | 22,805 | 7/16/2026 |
| 3.14.0 | 1,244 | 7/15/2026 |
## What's New in v4.2.0
### Breaking Changes
- **Text parameter defaults**: these parameters now default to `null` instead of English text, and fall back to `IBbLocalizer` keys, so what renders is unchanged. Code that reads them before setting them now gets `null`.
- `BbFormFieldCombobox`: `Placeholder`, `SearchPlaceholder`, `EmptyMessage`
- `BbFormFieldMultiSelect`: `Placeholder`, `SearchPlaceholder`, `EmptyMessage`, `SelectAllLabel`, `ClearLabel`, `CloseLabel`
- `BbCheckboxGroup`, `BbFormFieldCheckboxGroup`: `SelectAllLabel`
- `BbTimePicker`, `BbFormFieldTimePicker`: `Placeholder`
- `BbCommandInput.Placeholder`, `BbTreeView.SearchPlaceholder`, `BbDynamicForm.SubmitText`
- `DialogOptions.ConfirmText`/`CancelText`, `AlertDialogOptions.ButtonText`
- **Input styling**: field boxes use shadcn v4's fill (`bg-transparent dark:bg-input/30`, `shadow-xs`), so a theme's `--input` colour now shows in dark mode. Fields look slightly different in dark mode.
- **BbToastProvider**: its stacks now sit inside a polite live region (`<section aria-live="polite">`). Only destructive toasts keep `role="alert"`.
- **Text inputs** (`BbInput`, `BbTextarea`, `BbInputGroupInput`, `BbInputGroupTextarea`): with `Immediate` or `Debounced` timing, blur no longer raises `ValueChanged` a second time with the value typing already raised.
- **Dependencies**: `Microsoft.AspNetCore.Components.Web` is now 10.0.14.
### New Features
- **BlazorBlueprint.PdfViewer**: a new opt-in package with `BbPdfViewer`, a PDF.js-based viewer with paging, zoom, fit-to-width and download, loading from a URL or from bytes and streams. It is a separate package because PDF.js is over 2 MB; load `blazorblueprint-pdfviewer.css` after `blazorblueprint.css`.
- **BbDialog** and **DialogOpenOptions**:
- `Position` (`DialogPosition`, nine placements).
- Enter and exit animations: `EnterPreset`, `ExitPreset`, `EnterKeyframes`, `ExitKeyframes`, `AnimationDuration`. A closing dialog stays mounted until its exit animation ends, and reduced motion skips them.
- **BbSheetContent**: `ShowOverlay="false"` gives a non-modal sheet (no overlay, `aria-modal="false"`, no focus trap or scroll lock), and `CloseOnInteractOutside` closes it on an outside pointer-down.
- **Overlays**: Sheet, Dialog, DialogService, AlertDialog and Drawer overlays carry a `data-slot` (`sheet-overlay`, `dialog-overlay`, `alert-dialog-overlay`, `drawer-overlay`).
- **BbDataGrid**:
- `MobileLayout="Stacked"` with `MobileBreakpoint` turns rows into cards on small screens. Columns take `MobileLabel` and `HideOnMobile`.
- The expand and edit columns gain `HeaderClass` and `CellClass`.
- **Toasts**:
- `ToastService.Show<TComponent>()` shows a component in a toast. `IToastReference.DismissAsync()` lets it close itself.
- `ToastData.Icon`, `Content` and `Actions` slots.
- A toast with `Content` or `Actions` stops auto-dismissing once the user presses or moves focus inside it.
- **BbCombobox**, **BbMultiSelect**: `TriggerId`, `TriggerAttributes` and `IsInvalid`.
- **BbColorPicker**: `ActionButtons` adds Apply and Cancel.
- **BbMenubarItem**, **BbCommandDialog**: `AllowShortcutInEditable`.
- **Localization**:
- `DefaultBbLocalizer.EnglishDefaults` lists every key with its English text.
- About 90 new keys cover text that was hard-coded English: TimePicker, MarkdownEditor, RichTextEditor, Toast, Carousel, Rating, TreeView, DynamicForm, dialogs, and barcode, Gantt and form-field validation messages.
- **Theme**:
- A `surface` colour token (`--bb-surface`). Cards, dashboard widgets, popovers and hover cards declare it, so sticky DataGrid, Gantt and Scheduler surfaces match their container.
- Theme switcher radius buttons preview their corner radius.
### Bug Fixes
- **BbGauge**: `Color` and `ProgressColor` now colour the progress arc.
- **BbTreeView**: selection stays fast with thousands of siblings.
- **BbToastProvider**: toasts already showing time out after navigating to a page with another layout.
- **BbMenubar**:
- One roving Tab stop.
- Clicks in portaled submenus keep it open.
- Item shortcuts follow parameter changes.
- **Form fields**: FormFieldSelect, FormFieldCombobox and FormFieldMultiSelect labels point at the trigger, and the invalid state reaches `aria-invalid`. Combobox `aria-controls` names the list that opens.
- **Comma-decimal cultures**: TreeView indentation, Progress, context menu position, Rating, and ARIA and `data-*` numbers are written invariantly. NumericInput keeps its decimals through focus and blur.
- **BbDataGrid**: a column width is never stored as zero, and sticky surfaces no longer show a darker box in dark cards.
- **BbDataTable**: wide tables scroll inside their border.
- **BbDateRangePicker**: only the picked preset is highlighted when presets share a range.
- **BbInputGroup**: one focus ring on the group.
- **BbMultiSelect**: Escape closes only the list inside a dialog.
- **Text inputs**: `UpdateTiming` and `DebounceInterval` changes apply after the first render.
- **BbColorPicker**: the presets label spacing applies.