A comprehensive Angular library providing enhanced Material Design components, complete page layouts, and advanced UI patterns. This project includes both a distributable library and a comprehensive demo application showcasing all capabilities.
Complete documentation is available in the docs/ folder.
- Implementation Guide - Step-by-step guide for implementing this library in another Angular app (ideal for AI assistants)
- Library API Reference - Complete API documentation
- Quick Start for AI Assistants - Essential context for AI assistants working on this library
- Complete Documentation Index - Full documentation overview
- Project Overview - High-level project description
- Development Workflow - How to develop, build, and test
# Install dependencies
npm install
# Start demo app (runs on port 4201 for debugging)
npm start
# Build library
npm run build:lib
# Build demo app
npm run build:demoThe library is organized into four main areas:
- Controls (
/controls) - Enhanced wrappers of Angular Material controls with additional functionality - Components (
/components) - Complex UI components combining multiple controls - Pages (
/pages) - Complete page layouts and common page patterns - Styling (
/styling) - Theme management and Material Design 3 implementation
src/
├── library/ # Library source code (amw- prefix)
│ ├── src/
│ │ ├── controls/ # Enhanced Material control wrappers
│ │ │ ├── components/ # 20+ control components
│ │ │ ├── interfaces/ # Type definitions
│ │ │ └── services/ # Control-specific services
│ │ ├── components/ # Complex UI components
│ │ │ ├── components/ # 10+ complex components
│ │ │ ├── directives/ # Custom directives
│ │ │ ├── interfaces/ # Component interfaces
│ │ │ └── services/ # Component services
│ │ ├── pages/ # Complete page layouts
│ │ │ ├── components/ # 6 page stereotype components
│ │ │ └── interfaces/ # Page configuration interfaces
│ │ ├── styling/ # Theme and Material Design 3
│ │ │ ├── components/ # Theme management components
│ │ │ ├── interfaces/ # Theme configuration
│ │ │ └── services/ # Theme service
│ │ ├── directives/ # Global directives
│ │ ├── pipes/ # Utility pipes
│ │ ├── services/ # Global services
│ │ └── public-api.ts # Public API exports
│ ├── package.json
│ ├── ng-package.json
│ └── tsconfig.*.json
└── demo/ # Demo application (amw-demo- prefix)
├── app/ # Demo app components
│ ├── components/ # Individual component demos
│ ├── pages/ # Page layout demos
│ └── shared/ # Shared demo components
├── main.ts
├── index.html
├── styles.scss
└── tsconfig.*.json
npm start- Start demo app (default, port 4201)npm run start:demo- Start demo appnpm run watch- Watch library changesnpm run watch:demo- Watch demo changes
npm run build:lib- Build the librarynpm run build:demo- Build the demo appnpm run build- Build library (default)
npm run test:lib- Test the librarynpm run test:demo- Test the demo appnpm test- Test library (default)
- Library components:
amw-*prefix (e.g.,amw-button,amw-data-table) - Demo components:
amw-demo-*prefix (e.g.,amw-demo-root) - SCSS classes: BEM methodology with
amw-prefix - Interfaces: Descriptive names (e.g.,
ButtonConfig,ListPageData)
- Form Controls: Button, Input, Select, Checkbox, Radio, Radio Group, Switch, Toggle, Slider, Range Slider, Textarea
- Advanced Controls: Autocomplete, Chips, Color Picker, Datepicker, Timepicker, File Input
- Validation: Form Validation component
- Layout: Card, Dialog, Popover, Sidenav, Stepper, Tabs, Tab, Accordion, Accordion Panel
- Navigation: Menu, Menu Item, Toolbar
- Display: Icon, Divider, Progress Bar, Progress Spinner
- Calendar: Calendar Full, Calendar Mini, Calendar Picker, Calendar Item Dialog, Calendar Item Editor
- Data: Data Table with sorting, filtering, pagination
- Material Design 3: Complete M3 implementation
- Theme Management: Dynamic theme switching and customization
- SCSS Architecture: BEM methodology with consistent naming
All components use Angular's modern signal-based API:
// Signal inputs
appearance = input<ButtonStyle>('filled');
loading = input<boolean>(false);
// Signal outputs
buttonClick = output<MouseEvent>();
// Two-way binding with model()
value = model<string>('');Example usage:
<!-- Button with M3 styles -->
<amw-button appearance="outlined" icon="save">Save</amw-button>
<!-- FAB button -->
<amw-button [fab]="true" icon="add"></amw-button>
<!-- Input with validation -->
<amw-input
label="Email"
type="email"
[required]="true"
[clearable]="true"
[(value)]="email">
</amw-input>- Library build output:
dist/angular-material-wrap/ - Demo app build output:
dist/angular-material-wrap-demo/
- Angular: 21.x
- Angular Material: 21.x
- TypeScript: 5.8+
- SCSS: For styling with BEM methodology
- ng-packagr: For library building
- Angular CLI: For development and building
- Cypress: For E2E testing