NeoUI.Blazor.Primitives 3.3.0

dotnet add package NeoUI.Blazor.Primitives --version 3.3.0
                    
NuGet\Install-Package NeoUI.Blazor.Primitives -Version 3.3.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="NeoUI.Blazor.Primitives" Version="3.3.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NeoUI.Blazor.Primitives" Version="3.3.0" />
                    
Directory.Packages.props
<PackageReference Include="NeoUI.Blazor.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 NeoUI.Blazor.Primitives --version 3.3.0
                    
#r "nuget: NeoUI.Blazor.Primitives, 3.3.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 NeoUI.Blazor.Primitives@3.3.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=NeoUI.Blazor.Primitives&version=3.3.0
                    
Install as a Cake Addin
#tool nuget:?package=NeoUI.Blazor.Primitives&version=3.3.0
                    
Install as a Cake Tool

NeoUI.Blazor.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 NeoUI.Blazor.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, NeoUI.Blazor 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

<AccordionPrimitive Type="AccordionType.Single" Collapsible="true" DefaultValue="item-1">
    <AccordionItemPrimitive Value="item-1">
        <AccordionTriggerPrimitive>Section 1</AccordionTriggerPrimitive>
        <AccordionContentPrimitive>Content 1</AccordionContentPrimitive>
    </AccordionItemPrimitive>
</AccordionPrimitive>
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

<TabsPrimitive
    DefaultValue="tab1"
    Orientation="TabsOrientation.Horizontal"
    ActivationMode="TabsActivationMode.Automatic">
    <TabsListPrimitive>
        <TabsTriggerPrimitive Value="tab1">Tab 1</TabsTriggerPrimitive>
    </TabsListPrimitive>
    <TabsContentPrimitive Value="tab1">Content</TabsContentPrimitive>
</TabsPrimitive>
Parameter Type Default Values
Orientation TabsOrientation Horizontal Horizontal, Vertical
ActivationMode TabsActivationMode Automatic Automatic (on focus), Manual (on click)

Sheet

<SheetPrimitive>
    <SheetTriggerPrimitive>Open</SheetTriggerPrimitive>
    <SheetPortal>
        <SheetOverlay />
        <SheetContentPrimitive Side="SheetSide.Right">
            <SheetTitlePrimitive>Title</SheetTitlePrimitive>
            <SheetDescriptionPrimitive>Description</SheetDescriptionPrimitive>
            <SheetClosePrimitive>Close</SheetClosePrimitive>
        </SheetContentPrimitive>
    </SheetPortal>
</SheetPrimitive>
Parameter Type Default Values
Side SheetSide Right Top, Right, Bottom, Left

Popover

<PopoverPrimitive>
    <PopoverTriggerPrimitive>Open</PopoverTriggerPrimitive>
    <PopoverContentPrimitive Side="PopoverSide.Bottom" Align="PopoverAlign.Center">
        Content here
    </PopoverContentPrimitive>
</PopoverPrimitive>
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

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

HoverCard

<HoverCardPrimitive OpenDelay="700" CloseDelay="300">
    <HoverCardTriggerPrimitive>Hover for preview</HoverCardTriggerPrimitive>
    <HoverCardContentPrimitive>Rich preview content</HoverCardContentPrimitive>
</HoverCardPrimitive>
Parameter Type Default Description
OpenDelay int 700 Milliseconds before showing
CloseDelay int 300 Milliseconds before hiding

Checkbox

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

Select

<SelectPrimitive TValue="string" @bind-Value="selected" @bind-Open="isOpen">
    <SelectTriggerPrimitive>
        Choose an option...
    </SelectTriggerPrimitive>
    <SelectContentPrimitive>
        <SelectItemPrimitive Value="@("a")">Option A</SelectItemPrimitive>
        <SelectItemPrimitive Value="@("b")">Option B</SelectItemPrimitive>
    </SelectContentPrimitive>
</SelectPrimitive>

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 NeoUI.Blazor.Primitives

<DialogPrimitive>
    <DialogTriggerPrimitive class="my-custom-button-class">
        Open Dialog
    </DialogTriggerPrimitive>
    <DialogPortal>
        <DialogOverlay class="my-overlay-styles" />
        <DialogContentPrimitive class="my-custom-dialog-styles">
            <DialogTitlePrimitive class="my-title-styles">
                Custom Styled Dialog
            </DialogTitlePrimitive>
            <DialogDescriptionPrimitive class="my-description-styles">
                This is a fully customizable dialog.
            </DialogDescriptionPrimitive>
            <p class="my-content-styles">Your content here</p>
            <DialogClosePrimitive class="my-close-button">Close</DialogClosePrimitive>
        </DialogContentPrimitive>
    </DialogPortal>
</DialogPrimitive>

🔄 Controlled vs Uncontrolled

All stateful primitives support both controlled and uncontrolled modes:

Uncontrolled (Component manages its own state)

<DialogPrimitive>
    <DialogTriggerPrimitive>Open</DialogTriggerPrimitive>
    <DialogPortal>
        <DialogOverlay />
        <DialogContentPrimitive>
            
        </DialogContentPrimitive>
    </DialogPortal>
</DialogPrimitive>

Controlled (Parent component manages state)

<DialogPrimitive @bind-Open="isDialogOpen">
    <DialogTriggerPrimitive>Open</DialogTriggerPrimitive>
    <DialogPortal>
        <DialogOverlay />
        <DialogContentPrimitive>
            <button @onclick="() => isDialogOpen = false">Close</button>
        </DialogContentPrimitive>
    </DialogPortal>
</DialogPrimitive>

@code {
    private bool isDialogOpen = false;
}

🏗️ Design Philosophy

NeoUI.Blazor.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 NeoUI.Blazor.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 NeoUI.Blazor 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: NeoUI.Blazor.Primitives
  • Assembly Name: NeoUI.Blazor.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 NeoUI.Blazor.Primitives:

Package Downloads
NeoUI.Blazor

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
3.3.0 0 3/5/2026
3.2.0 101 3/2/2026
3.0.0 114 2/28/2026
3.0.0-rc.1 66 2/25/2026