--- name: angular-material-19 description: > Angular Material 19 components, Material 3 theming, CDK with 2D drag-drop, timepicker, custom form controls, and dark mode. Trigger: When using Material components, creating custom controls, working with CDK, or theming. license: MIT metadata: author: aurora version: '3.0' material_version: '19.x' auto_invoke: 'Material components, CDK, ControlValueAccessor, MatFormFieldControl, dialogs, tables, theming, timepicker' allowed-tools: Read, Edit, Write, Glob, Grep, Bash, WebFetch, WebSearch, Task --- ## When to Use - Using Angular Material 19 components - Creating custom form controls with signal-based patterns - Implementing Material 3 theming with CSS variables - Setting up dark/light mode switching - Using CDK features (2D Drag & Drop, Overlay, A11y) - Working with the new timepicker component **Reference files** (loaded on demand): - [timepicker.md](timepicker.md) — Timepicker usage, intervals, validation - [theming.md](theming.md) — M3 theming, dark mode, override mixins, theme service - [cdk-patterns.md](cdk-patterns.md) — 2D drag-drop, tab reorder, overlay, selection - [custom-controls.md](custom-controls.md) — ControlValueAccessor, MatFormFieldControl with signals --- ## Angular Material 19 Key Changes ### Material 3 (M3) is Stable Material 3 is now the default design system. Key features: - **Design tokens as CSS variables** — All styling via `--mat-*` variables - **`light-dark()` function** — Native CSS for theme switching - **Component override mixins** — Granular customization without specificity wars - **New "Styling" tab** — Each component's docs now shows override API ### New Components in v19 - **Timepicker** (`mat-timepicker`) — Native time selection → see [timepicker.md](timepicker.md) - **2D Drag & Drop** — Mixed orientation support in CDK → see [cdk-patterns.md](cdk-patterns.md) - **Tab reordering** — Draggable tabs with CDK --- ## Quick Reference: Common Imports ```typescript // Forms import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatTimepickerModule } from '@angular/material/timepicker'; // NEW v19 import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; // Buttons & Icons import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; // Layout import { MatCardModule } from '@angular/material/card'; import { MatTabsModule } from '@angular/material/tabs'; import { MatExpansionModule } from '@angular/material/expansion'; // Data Display import { MatTableModule } from '@angular/material/table'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatSortModule } from '@angular/material/sort'; import { MatChipsModule } from '@angular/material/chips'; import { MatTooltipModule } from '@angular/material/tooltip'; // Feedback import { MatDialogModule } from '@angular/material/dialog'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; // CDK import { DragDropModule } from '@angular/cdk/drag-drop'; import { OverlayModule } from '@angular/cdk/overlay'; ``` --- ## Material Dialog Pattern ```typescript import { Component, inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog'; import { MatButtonModule } from '@angular/material/button'; @Component({ selector: 'confirm-dialog', imports: [MatDialogModule, MatButtonModule], template: `
{{ data.message }}