NeoBlazorUI.Primitives 2.4.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package NeoBlazorUI.Primitives --version 2.4.0
                    
NuGet\Install-Package NeoBlazorUI.Primitives -Version 2.4.0
                    
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="NeoBlazorUI.Primitives" Version="2.4.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NeoBlazorUI.Primitives" Version="2.4.0" />
                    
Directory.Packages.props
<PackageReference Include="NeoBlazorUI.Primitives" />
                    
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 NeoBlazorUI.Primitives --version 2.4.0
                    
#r "nuget: NeoBlazorUI.Primitives, 2.4.0"
                    
#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 NeoBlazorUI.Primitives@2.4.0
                    
#: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=NeoBlazorUI.Primitives&version=2.4.0
                    
Install as a Cake Addin
#tool nuget:?package=NeoBlazorUI.Primitives&version=2.4.0
                    
Install as a Cake Tool

NeoBlazorUI.Primitives

Headless, unstyled Blazor primitive components with full accessibility support. Build your own component library using these composable primitives.

✨ Features

  • 🎭 Headless & Unstyled: Complete control over styling - primitives provide behavior, accessibility, and state management without imposing any visual design
  • ♿ Accessibility First: Built-in ARIA attributes, keyboard navigation, and screen reader support following WCAG 2.1 AA standards
  • 🧩 Composition-Based: Flexible component composition patterns for building complex UIs
  • 🎯 .NET 10 Ready: Built for the latest .NET platform with full WebAssembly and Server support
  • 🔒 Type-Safe: Full C# type safety with IntelliSense support
  • 🔄 State Management: Built-in controlled and uncontrolled state patterns
  • ⌨️ Keyboard Navigation: Full keyboard support for all interactive components
  • 📦 Zero Dependencies: No CSS or JavaScript required - bring your own styling

📦 Installation

dotnet add package NeoBlazorUI.Primitives

🚀 Quick Start

Try the Live Demo - Explore all primitives and styled components with interactive examples and full documentation.

📚 Available Primitives

  • Accordion: Collapsible content sections with single or multiple item expansion
  • Checkbox: Binary selection control with indeterminate state
  • Collapsible: Expandable content area with trigger control
  • Dialog: Modal dialogs with backdrop and focus management
  • Dropdown Menu: Context menus with items, separators, and keyboard shortcuts
  • Hover Card: Rich preview cards on hover with delay control
  • Label: Accessible labels for form controls with automatic association
  • Popover: Floating panels for additional content with positioning
  • Radio Group: Mutually exclusive options with keyboard navigation
  • Select: Dropdown selection with groups and virtualization support
  • Sheet: Side panels that slide in from viewport edges
  • Switch: Toggle control for on/off states
  • Table: Data table with header, body, rows, cells, and pagination
  • Tabs: Tabbed interface with keyboard navigation
  • Tooltip: Brief informational popups with hover/focus triggers

🎨 Pre-Styled Components (75+)

Built on top of these primitives, NeoBlazorUI.Components provides production-ready components with beautiful shadcn/ui design:

Form & Input Components

Button, Button Group, Checkbox, Combobox, Date Picker, Field, Input, Input Group, Input OTP, Label, Multi Select, Native Select, Radio Group, Select, Slider, Switch, Textarea, Time Picker

Data Display Components

Avatar, Badge, Card, Data Table, Empty, Grid, Item, Kbd, Progress, Separator, Skeleton, Spinner, Typography

Accordion, Breadcrumb, Command, Context Menu, Dropdown Menu, Menubar, Navigation Menu, Pagination, Sidebar, Tabs

Overlay Components

Alert Dialog, Dialog, Hover Card, Popover, Sheet, Toast, Tooltip

Feedback Components

Alert

Layout & Display Components

Aspect Ratio, Carousel, Collapsible, Resizable, Scroll Area

Advanced Components

Chart (8 types), Grid, Markdown Editor, Motion (20+ animation presets), Rich Text Editor, Toggle, Toggle Group

Icon Libraries

Lucide Icons (1,640+), Heroicons (1,288), Feather Icons (286)

Want beautiful defaults? Check out the Components README for full documentation.

📖 Primitive API Reference

Accordion

<Accordion Type="AccordionType.Single" Collapsible="true" DefaultValue="item-1">
    <AccordionItem Value="item-1">
        <AccordionTrigger>Section 1</AccordionTrigger>
        <AccordionContent>Content 1</AccordionContent>
    </AccordionItem>
</Accordion>
Parameter Type Default Values
Type AccordionType Single Single (one item open), Multiple (many items open)
Collapsible bool false When Single, allows closing all items

Tabs

<Tabs
    DefaultValue="tab1"
    Orientation="TabsOrientation.Horizontal"
    ActivationMode="TabsActivationMode.Automatic">
    <TabsList>
        <TabsTrigger Value="tab1">Tab 1</TabsTrigger>
    </TabsList>
    <TabsContent Value="tab1">Content</TabsContent>
</Tabs>
Parameter Type Default Values
Orientation TabsOrientation Horizontal Horizontal, Vertical
ActivationMode TabsActivationMode Automatic Automatic (on focus), Manual (on click)

Sheet

<Sheet>
    <SheetTrigger>Open</SheetTrigger>
    <SheetPortal>
        <SheetOverlay />
        <SheetContent Side="SheetSide.Right">
            <SheetTitle>Title</SheetTitle>
            <SheetDescription>Description</SheetDescription>
            <SheetClose>Close</SheetClose>
        </SheetContent>
    </SheetPortal>
</Sheet>
Parameter Type Default Values
Side SheetSide Right Top, Right, Bottom, Left

Popover

<Popover>
    <PopoverTrigger>Open</PopoverTrigger>
    <PopoverContent Side="PopoverSide.Bottom" Align="PopoverAlign.Center">
        Content here
    </PopoverContent>
</Popover>
Parameter Type Default Values
Side PopoverSide Bottom Top, Right, Bottom, Left
Align PopoverAlign Center Start, Center, End
CloseOnEscape bool true Close when Escape key pressed
CloseOnClickOutside bool true Close when clicking outside

Tooltip

<Tooltip DelayDuration="400" HideDelay="0">
    <TooltipTrigger>Hover me</TooltipTrigger>
    <TooltipContent>Tooltip text</TooltipContent>
</Tooltip>
Parameter Type Default Description
DelayDuration int 400 Milliseconds before showing
HideDelay int 0 Milliseconds before hiding

HoverCard

<HoverCard OpenDelay="700" CloseDelay="300">
    <HoverCardTrigger>Hover for preview</HoverCardTrigger>
    <HoverCardContent>Rich preview content</HoverCardContent>
</HoverCard>
Parameter Type Default Description
OpenDelay int 700 Milliseconds before showing
CloseDelay int 300 Milliseconds before hiding

Checkbox

<Checkbox
    @bind-Checked="isChecked"
    Indeterminate="@isIndeterminate"
    IndeterminateChanged="HandleIndeterminateChange" />
Parameter Type Default Description
Checked bool false Checked state
Indeterminate bool false Shows partial/mixed state

Select

<Select TValue="string" @bind-Value="selected" @bind-Open="isOpen">
    <SelectTrigger>
        <SelectValue Placeholder="Choose..." />
    </SelectTrigger>
    <SelectContent>
        <SelectItem Value="@("a")">Option A</SelectItem>
        <SelectItem Value="@("b")">Option B</SelectItem>
    </SelectContent>
</Select>

Select is generic (TValue). Supports both value and open state binding.

Table

<Table TData="Person">
    <TableHeader>
        <TableRow>
            <TableHeaderCell>Name</TableHeaderCell>
            <TableHeaderCell>Email</TableHeaderCell>
        </TableRow>
    </TableHeader>
    <TableBody>
        @foreach (var person in people)
        {
            <TableRow>
                <TableCell>@person.Name</TableCell>
                <TableCell>@person.Email</TableCell>
            </TableRow>
        }
    </TableBody>
</Table>
Parameter Type Default Values
SelectionMode SelectionMode None None, Single, Multiple
SortDirection SortDirection None None, Ascending, Descending

MultiSelect

<MultiSelect TItem="string" @bind-SelectedItems="selected" Items="options">
    <MultiSelectTrigger>
        <MultiSelectInput Placeholder="Select items..." />
    </MultiSelectTrigger>
    <MultiSelectContent>
        <MultiSelectSelectAll>Select All</MultiSelectSelectAll>
        @foreach (var item in options)
        {
            <MultiSelectItem Value="item">@item</MultiSelectItem>
        }
    </MultiSelectContent>
</MultiSelect>
Parameter Type Description
SelectAllState SelectAllState None, Indeterminate, All

🚀 Usage Example

@using BlazorUI.Primitives.Dialog

<DialogPrimitive>
    <DialogTrigger class="my-custom-button-class">
        Open Dialog
    </DialogTrigger>
    <DialogPortal>
        <DialogOverlay class="my-overlay-styles" />
        <DialogContent class="my-custom-dialog-styles">
            <DialogTitle class="my-title-styles">
                Custom Styled Dialog
            </DialogTitle>
            <DialogDescription class="my-description-styles">
                This is a fully customizable dialog.
            </DialogDescription>
            <p class="my-content-styles">Your content here</p>
            <DialogClose class="my-close-button">Close</DialogClose>
        </DialogContent>
    </DialogPortal>
</DialogPrimitive>

🔄 Controlled vs Uncontrolled

All stateful primitives support both controlled and uncontrolled modes:

Uncontrolled (Component manages its own state)

<DialogPrimitive>
    <DialogTrigger>Open</DialogTrigger>
    <DialogContent>
        
    </DialogContent>
</DialogPrimitive>

Controlled (Parent component manages state)

<DialogPrimitive @bind-Open="isDialogOpen">
    <DialogTrigger>Open</DialogTrigger>
    <DialogContent>
        <button @onclick="() => isDialogOpen = false">Close</button>
    </DialogContent>
</DialogPrimitive>

@code {
    private bool isDialogOpen = false;
}

🏗️ Design Philosophy

BlazorUI.Primitives follows the "headless component" pattern popularized by Radix UI and Headless UI:

  1. Separation of Concerns: Primitives handle behavior and accessibility; you handle the design
  2. Composability: Build complex components by composing simple primitives
  3. No Style Opinions: Zero CSS included - bring your own design system
  4. Accessibility by Default: ARIA attributes and keyboard navigation built-in

🎯 When to Use

Use NeoBlazorUI.Primitives when:

  • Building a custom design system from scratch
  • Need complete control over component styling
  • Want to match a specific brand or design language
  • Integrating with existing CSS frameworks or design tokens

Consider NeoBlazorUI.Components when:

  • Want beautiful defaults with shadcn/ui design
  • Prefer zero-configuration setup with pre-built CSS
  • Need to ship quickly without custom styling

📖 Documentation

For full documentation, examples, and API reference, visit:

📄 License

MIT License - see LICENSE file for details

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

🙏 Acknowledgments

📊 Version Information

  • Current Version: 1.0.14
  • Target Framework: .NET 10
  • Package ID: NeoBlazorUI.Primitives
  • Assembly Name: NeoBlazorUI.Primitives

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

NuGet packages (1)

Showing the top 1 NuGet packages that depend on NeoBlazorUI.Primitives:

Package Downloads
NeoBlazorUI.Components

Over 75+ pre-styled Blazor components built with shadcn/ui design and Tailwind CSS with full .NET 10 support. Beautiful defaults that you can customize to match your brand.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.6.2 97 2/28/2026
2.6.1 140 2/22/2026
2.6.0 99 2/21/2026
2.4.0 159 2/16/2026
2.0.0 151 2/5/2026
1.0.14 197 1/23/2026
1.0.12 112 1/23/2026
1.0.7 150 1/20/2026
1.0.5 126 1/20/2026