Atomic design system for Blazor WebAssembly and Blazor Server. 108 components across 4 tiers, 10 palette files, services, models, utilities, CSS assets, and JavaScript helpers. All styling is driven by CSS custom properties.
Design Tokens
Surfaces & Ink
tokens
--bg
Page background
--surface
Elevated surface
--card
Card / tile bg
--sidebar
Sidebar bg
--border
Default border
--border-strong
Strong border
--text
Primary text
--muted
Secondary text
--dim
Disabled / placeholder
Brand, Accent, Nav
tokens
--accent
Primary accent
--accent-hover
Accent hover
--accent-bg
Accent bg (translucent)
--nav
Navigation accent
--nav-hover
Nav hover
--on-sidebar
Sidebar fg
--on-sidebar-active
Sidebar active fg
--focus-ring
Focus ring color
--selection-bg
Selection highlight
Spacing Scale
tokens
--space-00px
--space-14px
--space-28px
--space-312px
--space-416px
--space-524px
--space-632px
--space-748px
--space-864px
Typography Scale
tokens
--text-2xl (28px) — The quick brown fox
Display / page titles
--text-xl (22px) — The quick brown fox jumps
Section headers
--text-lg (16px) — The quick brown fox jumps over the lazy dog
Large body / lead text
--text-base (14px) — The quick brown fox jumps over the lazy dog
Body text (default)
--text-sm (12px) — The quick brown fox jumps over the lazy dog
Anchor when Href is set, button when host handles download via callback. Supports download, rel="noopener noreferrer", disabled, busy, size text, Class, and Style.
Chat-specific visual primitives for message roles, agent status, timestamps, and quick prompts.
AgentStatusBadge
6 statuses
IdleThinkingWorkingWaitingErrorOfflineAgent status badge with color + text. Accepts AgentStatus: Idle, Thinking, Working, Waiting, Error, Offline.
ChatAvatar
5 roles
U
User
A
Assistant
S
System
T
Tool
G
Agent
Role-based avatars. Use ChatAvatar with ChatMessageRole and optional AuthorLabel.
MessageRoleBadge
5 roles + status
UserAssistantAssistant …Tool (error)Role label with optional streaming/error/pending suffix. Use MessageRoleBadge with ChatMessageRole and optional ChatMessageStatus.
MessageTimestamp
atom
4/30/2026 2:15 PMFormatted timestamp display. Pass pre-formatted text via the Timestamp parameter.
QuickPromptButton
atom
Single clickable quick prompt. Use QuickPromptButton with QuickPrompt model and OnClick callback.
Molecules
Composite components built from atoms — they add behavior, state, or layout patterns.
Alert
4 tones
Info: The system will undergo maintenance on Saturday at 2 AM UTC.
Success: Your changes have been saved successfully.
Warning: This action will affect 42 linked records.
Error: Unable to save. The server returned a 500 error.
ModalDialog
compact footer
Confirm Action
Are you sure you want to proceed with this action? This cannot be undone.
Drawer
size + sticky footer
Drawer Panel
Drawer content slides in from the left or right edge.
Supports focus trapping and backdrop overlay.
SearchField
molecule
🔍
Field System
Field + FormLayout
Must match your government-issued ID.
Please enter a valid email address.
Please fix the following errors:
Email is required
Phone number format is invalid
FormSection & FormActions
2 components
Personal Information
Your basic contact details.
MenuButton & Popover
2 components
Edit
Duplicate
Delete
PopoverFloating content panel with contextual information.
Pagination
molecule
Accordion
molecule
Content for section 1. Accordion sections can expand and collapse independently.
List & ListItem
2 components
List item 1Detail
List item 2 (active)Selected
List item 3 (disabled)—
RadioGroup
molecule
SortIndicator & SortableColumnHeader
tri-state + order
Name
1
Date
2
Status
Tri-state cycle: ascending, descending, none. Active multi-column sorts display one-based order numbers.
FilterBar
compact molecule
ActiveRecent17 items
EditableText
molecule
Editable content
ToastHost
molecule
✓
Changes saved
Your settings have been updated.
ThemePickerSection
molecule
Mode
Palette
ErrorRegion
molecule
⚠
Something went wrong
We could not load this data. Check your connection and try again.
Chat Molecules
Focused chat workflows: prompt entry, message rendering, history items, agent chips, and activity indicators.
PromptInput
molecule
Single-line form with submit. Supports Value, ValueChanged, OnSubmit, Disabled, and Busy states.
FileDropZone
molecule
Drop files here or
Drop files here or
Accessible upload area with native file input, browse button, drag-over state (highlighted). The shared library never uploads or reads files — it calls OnFilesSelected and OnFilesDropped with file names.
ChatFileItemView
molecule
document.pdf2.3 MB
Uploaded
image.png1.1 MB
45%
broken.doc0 KB
Upload failed
One file row with name, size, status badge, progress bar (when uploading), error text (when failed), and host-provided action buttons slot. Uses ChatFileItem model.
ChatFileList
molecule
report.pdf3.5 MB
Uploaded
archive.zip10 MB
Downloadable
Grouped <ul> list of ChatFileItemView items. Accepts Files, Label, EmptyText, and Actions slot. Shows empty text when no files.
PromptAttachmentTray
molecule
document.pdf2.3 MBimage.png1.1 MB
Compact horizontal attachment strip with file name chips and remove buttons. Suitable for placement near PromptInput. Uses ChatFileItem model and emits OnRemoveFile with the file id.
QuickPromptBar
molecule
Wrapping list of QuickPromptButton items. Uses Prompts collection with OnPromptSelected or OnPromptPopulate callbacks.
ChatMessageItem
5 roles + status
UserYou9:41 AM
Can you review the ACME merger agreement for potential risks?
Assistant …LegalBot9:41 AM
Reviewing the agreement. This may take a moment...
Tool (error)DocParser9:40 AM
Error
Renders a single ChatMessage with role badge, author, timestamp, content, and optional actions slot.
TypingIndicator
3 states
Assistant is typing
Accessible pending/streaming indicator with animated dots. Use ChatMessageStatus.Pending, Streaming, or Error.
ConversationHistoryItem
selected + unselected
ACME Merger Review
Review of the ACME merger agreement...
2:15 PMActive
3
Beta Acquisition
Due diligence checklist for Beta...
YesterdayPinned
Selectable conversation row with title, summary, timestamp, status, and unread count.
AgentActivityItemView
molecule
DocParserParsing document clausesSection 4.1 through 4.12
Working9:41 AM
One visible agent activity row with AgentStatusBadge, label, detail text, and timestamp.
SubAgentChip
selected + unselected
Selectable agent command with status badge. Uses ChatAgent model with OnClick and Selected state.
Organisms
Complex, self-contained UI sections built from molecules and atoms — often the top-level pieces of a page.
Breadcrumbs
organism
Tabs
organism
Tab panel content for "Overview".
NavList
organism
Navigation
Dashboard
Deals
Parties
Individuals
Organizations
Reports
Sidebar
organism
Omnis App
★ Dashboard
☰ Deals
⚙ Settings
Collapse
★
☰
⚙
Collapsed (56px)
Topbar
organism
Page Title
JM
PageHeader
organism
ACME Merger Agreement
ActiveCreated Jan 15, 2026
Toolbar
compact organism
DataTable<TItem>
organism
ID
Name 1
Status
Date 2
Actions
001
ACME Merger
Active
Jan 15, 2026
002
Beta Acquisition
Completed
Dec 3, 2025
003
Gamma Review
Pending
Feb 28, 2026
004
Delta Litigation
Blocked
Mar 10, 2026
StatusRegion
4 states
Default content renders unchanged inside the status region.
Loading
Fetching data from the server...
⚠
Error
Failed to load data. The server returned a 500 error.
💭No results found.
TreeView + TreeViewNode
2 components
▼ Root
▼ Documents
Document A.pdf
Document B.pdf
▶ Reports
Workflow
Step-driven workflow components: pip indicators, linear stepper, navigation row, and combined header organism.
Mid-flow — Previous enabled, Next enabled, Finish disabled
First step — Previous disabled
Last step — Next disabled, Finish enabled
WorkflowHeader
organism · workflow.css
Onboarding Workflow
Complete each step to finish setup. Step 1 of 4.
Agent Activity
Agent run status badges, expandable activity log stream, and panel gate overlays.
AgentRunStatus
atom · activity.css
RunningRunning
CompletedCompleted
ErrorError
IdleIdle
Size sm:RunningSize lg:Running
ActivityStream
molecule · activity.css
Running — with current activity, metrics, and expanded log
Processing document chunk 3 of 12...
Chunks3 / 12Elapsed11sTokens4 820
09:00:00CompletedTokenising input
09:00:02CompletedFetching embeddings
09:00:11RunningProcessing chunk 3
Completed — log collapsed
Analysis complete.
Duration95sTokens18 340
Error — with error banner
Downloading model weights
Network error: connection reset after 30 s. Retrying...
Loading state
Loading agent activity...
Empty state
Waiting for first event...
No activity recorded yet.
PanelGate
molecule · activity.css
Sample panel content
Processing. This panel will be available shortly.
Sample panel content
Waiting for your input before this panel is available.
Sample panel content
Waiting for approval before this panel is available.
Sample panel content
You do not have permission to access this panel.
Sample panel content
Waiting for a required step to complete before this panel is available.
Field Review
Assisted field review components: reviewable panel states, action bars, and proposed change banners.
ReviewableFieldPanel
molecule · field-review.css
Viewing state
Company Name
Acme Corporation
Editing state
Company Name
Dirty state — unsaved changes indicator
Website URL
Unsaved changes
https://example.com
Saving state — polite live region
Email Address
Saving...
user@example.com
Error state — error announced via role=alert
Phone Number
+1 555-0100
Failed to save: the server returned 503. Try again in a few seconds.
Proposed change state — accept or reject AI suggestion
Industry Sector
AI Suggestion
Change to: Technology & Software
Confidence
91 %
Source
Crunchbase industry data
FieldReviewActions
molecule · field-review.css
Viewing — Edit button
Editing — Save & Cancel buttons
Proposed — Accept & Reject buttons
Error — Retry button
Busy state — all buttons disabled
ProposedChangeBanner
molecule · field-review.css
Status + Text only
AI Suggestion
Company name should be: Omnis Systems Inc.
Status + Text + Detail
AI Suggestion — High Confidence
Industry: Technology & Software
Confidence
97 %
Source
LinkedIn company data
Text only (no status label)
Proposed value: London, United Kingdom
Dock & Notifications
Dock panel and notification inbox: slide-in panels with optional tabs, and a notification list with unread filtering.
DockShell
organism · dock.css
Open — Left placement (static variant, no backdrop)
Page content behind the dock
Open — Right placement (static variant, no backdrop)
Page content behind the dock
Open — Tabbed dock with badge count (active tab: Inbox)
Page content behind the tabbed dock
NotificationInbox
organism · dock.css
All tab — unread items highlighted, actions and mark-read buttons
New message from the team
You have a new message from the project team regarding the upcoming release and its deployment schedule.
Build pipeline completed
The automated build pipeline has completed successfully. All tests passed and the artifact is ready for review.
Deployment scheduled
A production deployment has been scheduled for tomorrow at 02:00 UTC.
Welcome to Omnis
Your workspace is ready. Explore the design system components and palettes.
Empty state — no notifications
No notifications
Visualization
Canvas surface, toolbar controls, diagram preview panel, and legend components for dense diagram and map views.
CanvasViewport
organism · canvas.css
Ready — with toolbar (CanvasControls) and legend slot (LegendStrip)
Node typeStart / EndProcessCompleted
Loading state — role=status spinner
Loading diagram…
Empty state — host-supplied label
No diagram data available.
Error state — role=alert
Unable to load the diagram. Please try again.
CanvasControls
molecule · canvas.css
Zoom + fullscreen + minimap — default state
Fullscreen active + minimap visible — aria-pressed=true, --active modifier
Zoom-in and zoom-out disabled (ZoomInDisabled / ZoomOutDisabled)
DiagramPreviewPanel
molecule · canvas.css
Inline — two preview panels with fullscreen expand button
Network Topology
Data Flow
Modal-open variant — fullscreen surface inside a dialog frame (static)
Network Topology — Full View
Full network topology diagram would appear here with expanded detail.
LegendStrip
molecule · canvas.css
Multiple groups — Status + Relationships — token-only swatches
StatusPendingActiveCompletedError
RelationshipsStrongWeak
Single group — Node types
Node typeStart / EndProcessCompleted
LegendPanel
molecule · canvas.css
Floating mode (default) and side mode — token-only swatches
Diagram Legend
States
Pending
Active
Completed
Error
Side Legend
States
Pending
Active
Completed
Error
Custom child content after data-driven groups
Custom Legend
Node type
Start / End
Process
Completed
* Dashed lines indicate optional paths
Selection
Single-select combobox and multi-value select with inline text filter, chip display, and listbox keyboard navigation.
Combobox
molecule · combobox.css
Closed — no selection
Open — listbox with highlighted option (Cherry) and selected option (Banana)
Apple
Banana
Cherry
Durian
Elderberry
Fig
Disabled — keyboard and mouse interaction blocked
Open — with a disabled option (Purple)
Red
Green
Blue
Purple
Orange
MultiSelect
molecule · combobox.css
Closed — two selected values shown as chips (Blazor, .NET)
Blazor.NET
Open — listbox with select-all, Blazor and .NET selected, CSS highlighted
Blazor.NET
Select all
Blazor
.NET
CSS
HTML
TypeScript
SQL
Disabled — chip removal and listbox blocked
BlazorCSS
Busy — interactions blocked while loading options
CSS
Reference & Timeline
ReferencePicker: multi-select relationship picker with chip rail, lookup listbox, select-all/unselect-all toolbar, busy and dirty states. Timeline: ordered step progression, vertical or horizontal, with interactive or informational markers.
Vertical — interactive (steps are buttons). Active step has aria-current="step". Complete step shows checkmark icon + Complete badge. Disabled step is aria-disabled.
Complete
Completed 2025-03-01
In progress
In progress since 2025-03-15
Scheduled 2025-04-01
Review
TBD
Vertical — informational (no OnStepSelected; markers are spans, not buttons). Error step uses X-in-circle icon and Error badge — not color alone.
Created
Complete
2025-01-10 09:00
Submitted
Complete
2025-01-12 14:30
Blocked
Error
Validation failed — 2025-01-13 08:00
Approved
Horizontal — interactive. Steps left-to-right. Active step (Sign up) has aria-current="step". Connector follows step state.
In progress
Chat Organisms
App-neutral chat regions: conversation view, history panel, and sub-agent panel.
ChatConversationView
organism
ACME Merger Review
User9:41 AM
Can you review the ACME merger agreement for potential risks?
Assistant9:41 AM
I have reviewed the ACME merger agreement. Here are the key risks I identified: (1) Section 4.2 contains a material adverse change clause, (2) Section 7.3 has a non-compete...
Conversation region with heading slot, message list, live region, activity slot, and composer slot. Supports MessageActionsTemplate for per-message actions.
ConversationHistoryPanel
organism
ACME Merger Review
Review of the ACME merger...
2:15 PMActive
3
Beta Acquisition
Due diligence checklist...
YesterdayPinned
Searchable history panel with conversation items, selection, and empty template. Accepts pre-filtered IReadOnlyList<ChatConversation>.
SubAgentPanel
organism
DocParserParsing document clausesSection 4.1 through 4.12
Working9:41 AM
Agent list with selection and activity display. Uses ChatAgent list, SelectedAgentId/Changed, Activities, and OnAgentClick.
AgentChatWorkspace
organism
Composed chat workspace with conversation history, message view, quick prompts, prompt input, and optional sub-agent panel. Supports single-agent and multi-agent layouts.
Single-Agent Workspace
ACME Merger ReviewAgent: All
Merger Review
2:15 PM
3
Beta Acquisition
Yesterday
User
Review the ACME merger agreement for risks.
Assistant
I found several risk areas. Section 4.2 has a material adverse change clause that needs closer review.
Multi-Agent Workspace
Beta Acquisition DDAgent: LegalBot
Beta Acquisition DD
Just now
Merger Review
2:15 PM
User
Run due diligence on Beta Corp acquisition.
LegalBot
Analyzing Beta Corp contracts. I will coordinate with DocParser on the document review.
Assistant is working...
DocParserParsing Beta Corp filings...Section 4.1 through 4.12
Deferred Features
The following chat capabilities are intentionally deferred: LLM/model API clients, conversation persistence, conversation search/filtering (host-owned), auto-scroll (manual scroll-to-bottom affordance in first pass), built-in markdown renderer (host provides ContentTemplate), voice input, citations, command palette, virtualization for long conversations, multi-line prompt expansion, and ChatWorkspaceShell template. File upload visual elements (FileDropZone, ChatFileItemView, ChatFileList, DownloadButton, PromptAttachmentTray) are implemented; upload transport is host-owned. These deferred items will be reconsidered when a concrete host workflow requires them.
Composed workspace that combines history, conversation, prompts, and sub-agents. Supports single-agent and multi-agent configurations via the Agents and Activities parameters. Optional AttachmentSlot, SearchResultsSlot, and MapSlot allow host to integrate file attachment, search results, and map components without owning workspace layout.
With Attachments + Search + Map
Full Workspace Demo
DD Review
2:15 PM
Show me due diligence documents for Beta Corp.
I found the following relevant documents:
report.pdf3.5 MBUploaded
Search Results
Context-linked search result components: links, result items, grouped/flat result panels, and detail preview.
Compact horizontal wrapping list of context links. Renders native <a> when Href is provided, <button> for callback-based selection. External links get rel="noopener noreferrer"target="_blank" and an external-link indicator. Uses ContextLink model.
ContextSearchResultItem
molecule
One search result with title, score badge, excerpt (pre-wrap, 3-line clamp), source metadata, and context links. Uses ContextSearchResult model. Includes selected state styling with aria-pressed.
ContextSearchResultsPanel (Flat)
organism
Flat result list with selected result highlighting. Uses Results (IReadOnlyList<ContextSearchResult>), SelectedResultId/SelectedResultIdChanged, OnResultClick, and OnLinkSelected. Also supports loading state with Spinner, empty state via EmptyText or EmptyTemplate.
ContextSearchResultsPanel (Grouped)
organism
Contracts
Messages
Grouped result list using Groups (IReadOnlyList<ContextSearchGroup>) parameter. Each group has a title heading and a list of ContextSearchResultItem components.
ContextResultPreview
organism
Merger Agreement Clause 4.298%
This clause covers material adverse change provisions that may affect the merger timeline and valuation. The clause requires the acquiring party to notify the target of any material changes within 5 business days.
Optional detail pane showing a selected result with larger excerpt, full metadata, and context links. Shows placeholder text when no result is selected. Uses Result (ContextSearchResult?) parameter.
Map Components
Provider-abstracted geographical information components. The shared library provides UI chrome — search, controls, marker lists, and context cards — while the host supplies the map provider via a RenderFragment slot.
Accessible control cluster with pan, zoom, reset view, fullscreen toggle, and external provider links. Each button has an aria-label. Fires OnAction with MapControlAction enum values.
MapSearchBox
molecule
Provider-neutral location search form with <input type="search"> and submit button. Supports Value/ValueChanged, OnSubmit, Disabled, Busy (with spinner), custom Placeholder, Class, and Style.
MapMarkerList
molecule
List of visible markers with selected state, context links, and status badges. Renders as a <ul> with <button> elements. Selected marker gets aria-current and aria-pressed. Supports OnMarkerClick, SelectedMarkerIdChanged, and OnContextLinkSelected.
Compact panel linking a location to chat context. Shows marker description, coordinates, status, and context links. Placeholder message when no marker is selected. Uses MapMarker and ContextLink models.
GeoMapPanel
organism
Map Provider Slot Host renders Google Maps, Leaflet, or any provider here
Composed map region with search box, map controls, provider slot (host renders their chosen provider), marker list, header/footer templates, loading/unavailable states, local fullscreen, and external provider links. All map operations emit callbacks — the host applies them to the provider.
Templates
Page-level layout shells that compose organisms into complete screen structures.
AppShell
template
★
☰
⚙
AppShell Layout
Main content area — organisms and templates render here.
Sidebar (collapsed) + Topbar + Main content. Supports expandable sidebar (240px) and responsive collapse.
PageCanvas
template
Page Title
Canvas with a configurable width.
Content area — supports PageCanvasWidth: Narrow, Normal, Wide, Full.
Client Verification Suite
Packaged verification scripts shipped with the NuGet package at tools/omnis-ui-checks/. Consuming apps must run these in their CI pipelines to enforce Omnis design rules.
Static Code Scanners
Node.js
verify-token-usage.mjs
Scans .razor, .css, .scss, .js, .ts, and .tsx for hard-coded visual colors, legacy tokens, and PreviewSwatches in Omnis component styling. Supports include/exclude globs and auditable suppression comments.
verify-static-assets.mjs
Verifies that required Omnis static assets (tokens.css, reset.css, components.css, at least one palette) are referenced in the documented order. Detects missing or duplicate references.
verify-showcase-coverage.mjs
Checks that every public Omnis component appears in the client showcase or documentation. Configurable with built-in component list, custom lists, ignore rules, and JSON output.
verify-omnis-ui.mjs
Wrapper script that invokes all scanners and Playwright checks. Single entry point for CI with options for app URL, source root, asset path, and output format.
test-scanners.mjs
Runs all scanner tests against positive failing and passing fixtures to prove the scanners detect violations and accept compliant code.
Playwright Runtime Checks
playwright
omnis-ui.spec.ts
Accepts a client app URL and verifies: required CSS assets are loaded, no visible text overlaps at desktop/mobile widths, focus is visible for keyboard users, icon-only actions have accessible names, chat surfaces remain usable with long content, map controls are keyboard reachable, file upload affordances work by keyboard, and forced-colors/reduced-motion modes are usable.
Test Fixtures
positive-failing samples
test-fixtures/hardcoded-colors.htmlPositive-failing sample: hard-coded hex colors in component styling