@mfontecchio/components
v20.2.0
Published
Enterprise-grade Angular 20 component library — 38 UI components with full theming and accessibility support
Maintainers
Readme
UI Component Suite - Components Library
A comprehensive collection of 39 themable, accessible Angular components built with Angular 20+ and signals.
Overview
This library provides production-ready UI components following modern Angular best practices:
- Standalone components - No NgModules required
- Signal-based state - Reactive and efficient
- OnPush change detection - Optimized performance
- Full accessibility - WCAG compliant with ARIA support
- Themable - Complete design system integration
- Type-safe - Full TypeScript support
Installation
pnpm add @mfontecchio/componentsComponent Categories
Form Components (11)
- Button - Multi-variant button with loading states
- Input - Text input with validation and slots
- Textarea - Auto-resizing textarea with character count
- Checkbox - Checkbox with indeterminate state
- Radio - Radio button with model-based binding
- Switch - Toggle switch for binary states
- Select - Native select with option groups
- Multi-Select - Multi-selection with tags and search
- Slider - Single and dual-handle range slider
- Date Picker - Date input with constraints
- File Upload - Drag-drop file upload with preview
Layout Components (8)
- Card - Container with multiple variants
- Modal - Dialog with backdrop
- Tabs - Tabbed interface with keyboard navigation
- Accordion - Expandable panels
- Divider - Visual separator
- Drawer - Slide-out panel (4 positions) using native
<dialog>element for built-in focus trap and screen reader support - Stack - Flexbox layout helper
- Grid - Responsive grid system
Data Display Components (10)
- Badge - Status indicators and counts
- Avatar - User avatars with fallbacks
- Tooltip - Contextual hover information
- Chip - Removable tags
- Popover - Rich contextual content
- Pagination - Page navigation
- Table - Data table with sorting and selection
- List - Ordered and unordered lists
- Code Block - Syntax-highlighted code display
- Carousel - Composition-based carousel with slide and fade transitions
Feedback Components (5)
- Alert - Notification messages
- Spinner - Loading indicator
- Progress - Progress bar
- Skeleton - Loading placeholders
- Toast - Transient notifications
Navigation Components (5)
- Breadcrumb - Navigation trail
- Menu - Dropdown menus
- Context Menu - Right-click context menu with nested submenus
- Navbar - Application navigation bar
- Stepper - Multi-step process indicator
Quick Start
Import Components
Components are standalone and can be imported directly:
import { Component, signal } from '@angular/core';
import { ButtonComponent, RadioComponent } from '@mfontecchio/components';
@Component({
selector: 'app-example',
imports: [ButtonComponent, RadioComponent],
template: `
<fui-button (clicked)="handleClick()">Click Me</fui-button>
<fui-radio name="plan" value="pro" label="Pro Plan" [(selectedValue)]="selectedPlan" />
`,
})
export class ExampleComponent {
selectedPlan = signal<string>('pro');
handleClick() {
console.log('Button clicked!');
}
}Setup Theming
Components consume CSS custom properties from @mfontecchio/theming. Use the showcase theming guide as the source of truth for applying a theme family and generated tokens in Angular applications.
nx serve showcaseThen open /getting-started/theming in the showcase for the supported Angular 20 setup path.
Angular Forms Integration
Form-oriented components expose explicit Angular bindings such as [value] with (valueChange), [checked] with (checkedChange), [(selectedValue)] for radio groups, and [(rangeValue)] for composite slider ranges.
fui-input,fui-textarea,fui-checkbox,fui-switch,fui-select,fui-date-picker, andfui-multi-selectnow implement AngularControlValueAccessorand also preserve their explicit input/output bindings.fui-sliderimplementsControlValueAccessorfor single-value mode and now exposes[(rangeValue)]as the preferred explicit contract for range mode while preservingvalueEnd/valueEndChangefor compatibility.fui-radiosupports AngularControlValueAccessorand now exposes[(selectedValue)]as the preferred explicit group contract while keeping[(modelValue)]as a backward-compatible alias.- Refer to the showcase compatibility tables for the current
ControlValueAccessor, template-driven, and reactive-forms support level of each control.
Controls that do not yet implement ControlValueAccessor still require a thin adapter directive or wrapper component when used with formControlName or ngModel.
Keyboard Navigation
All interactive components support full keyboard navigation per WAI-ARIA patterns:
| Component | Keys | Behavior |
| ------------------------- | ---------------------- | --------------------------------------------------------------------------------- |
| Tabs | Arrow keys | Navigate between tabs |
| Accordion | Enter / Space | Toggle panel |
| Drawer | Escape | Close; focus trapped inside while open (native <dialog>) |
| Modal | Escape | Close; focus trapped inside |
| Context Menu | ArrowUp / ArrowDown | Navigate items; ArrowRight opens submenu; ArrowLeft closes submenu; Escape closes |
| Stepper (horizontal) | ArrowLeft / ArrowRight | Navigate steps; Home = first; End = last |
| Stepper (vertical) | ArrowUp / ArrowDown | Navigate steps; Home = first; End = last |
| Select / Multi-Select | ArrowUp / ArrowDown | Navigate options; Enter to select |
| Date Picker | Arrow keys | Navigate calendar; Enter to select |
| Slider | ArrowLeft / ArrowRight | Adjust value; Home / End = min / max |
Component Documentation
Comprehensive documentation for all 39 documented components is available in the Showcase Application including:
- Setup & Installation - Import statements and minimal usage examples for each component
- API Reference - Complete inputs, outputs, and method documentation
- Content Projection & Passthroughs - Slot names and native attribute forwarding patterns
- Design Tokens & Theming - Complete token reference with customization examples
- Accessibility - ARIA attributes, keyboard navigation, screen reader support
- Best Practices - When and how to use each component effectively
Three-Tier Design Token System
All components are styled exclusively through CSS custom properties organized in three tiers:
- Primitive Tokens (
--primitive-*) - Raw values: colors, spacing, typography, shadows, animations - Semantic Tokens (
--semantic-*) - Purpose-driven: brand colors, surface backgrounds, text colors, states - Component Tokens (
--component-*) - Component-specific: padding, border-radius, shadows
Override tokens at any ancestor scope to customize components without modifying source code.
View Documentation
Run the showcase application to browse all component documentation with live examples:
nx serve showcase
# Opens http://localhost:4200/componentsBrowse component pages to view:
- Full API with inputs, outputs, and methods
- Passthroughs for content projection
- Design tokens and theming examples
- Accessibility details and best practices
Development
Running Unit Tests
nx test componentsRunning E2E Tests
nx e2e showcase-e2eBuilding the Library
nx build componentsArchitecture
Design Principles
- Simplicity - Components are easy to use and understand
- Flexibility - Extensive customization through inputs and theming
- Accessibility - WCAG 2.1 Level AA compliance
- Performance - OnPush detection and signal-based reactivity
- Type Safety - Full TypeScript support with strict mode
Technologies
- Angular 20+ - Latest framework features
- TypeScript 5.8+ - Type-safe development
- CSS Custom Properties - Dynamic theming
- Signals - Reactive state management
- Nx - Monorepo tooling
Contributing
Contributions are welcome! Please see the main repository README for guidelines.
License
MIT License - see LICENSE file for details
Support
- Documentation: Run
nx serve showcaseand browse the component pages and getting-started guides - Issues: Report bugs and request features on GitHub
- Discussions: Join the community discussions
Related Libraries
@mfontecchio/theming- Design system and theming@mfontecchio/theme-builder- Interactive theme builder@mfontecchio/shared- Shared utilities and services
