angular-material-developer
Skill33 starsChanged 3 months agoMITView on GitHub
Generates Angular Material code and guidance for Angular projects using `@angular/material` with the Material 3 (M3) theming system. Covers installation, Sass-based theming via `mat.theme()` and the prebuilt palettes, density and typography customisation, component usage across all categories (form controls, buttons, overlays, layout, data display, navigation), `@angular/cdk` primitives (Overlay, Portal, Drag-Drop, Virtual Scroll, A11y), ReactiveForms / Signal Forms integration via `mat-form-field`, accessibility, and the M2 → M3 migration. Use when the user mentions Angular Material, `@angular/material`, `mat-*` components, M3 / Material 3, design tokens, OR when the Angular project's `package.json` contains `@angular/material`. Pairs with `angular-developer` for Angular fundamentals.
In this repository4 other files it gives its agents.
- ng-zorro-developerSkill
- primeng-developerSkill
- spartan-ng-developerSkill
- ui-craftSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 27
MatIconauto Material Symbols class (22.2.0): when only the Material Symbols font is loaded, <mat-icon> adds the material-symbols-* class … - Very specific: line 57
If you see @include mat.theme((...)) → M3 (v19+, default).
- Very specific: line 58
If you see mat.define-light-theme(...) or mat.define-dark-theme(...) plus @include mat.all-component-themes($theme) → M2 (legacy).
- Very specific: line 61
Components are standalone since v15: Always import the standalone class (e.g.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Angular Material Developer Guidelines
Pairs with
angular-developer, that skill provides Angular fundamentals (signals, DI, routing, forms, SSR, accessibility). This skill focuses on Angular Material specifics. Install both for the best experience.
Compatibility
- Tracks:
@angular/material@22.2.4(Angular v22), paired with@angular/cdk@22.2.4(Material peers an exact cdk version, keep the two pinned together). The v21-aligned line remains at21.2.xfor legacy projects. - Animations peer dropped (v21.2+): Material no longer declares an
@angular/animationspeer dependency and animates via native CSS.ng add @angular/materialon 21.2+/22 does not wireprovideAnimationsAsync()and does not require@angular/animations, do not add either to a fresh Material 22 app. (Earlier v21.x and all v18-20 apps still need the provider; see setup.md.) - Works for: Material v19 → v22 projects (M3 theming system landed in v19; older majors used M2 with the now-legacy
mat.define-light-theme/mat.define-dark-themeAPI). - Angular: v19 or newer required. v22 requires Node 22 or 26 and TypeScript 6. The skill assumes standalone components, control flow (
@if/@for), and signal-based APIs. - Sass: required for theming. The build pipeline must support
.scss(Angular CLI does by default). Standalone CSS-only theming is not supported by Material's theming engine. - Not supported: Material v18 and below (M2-only with
mat.define-*-theme()API), Angular v18 or below (NgModule patterns + older animations API).
v22.2 highlights (from 22.1)
Additive minor, no breaking changes. Peers are unchanged (@angular/core, forms, common, platform-browser ^22.0.0 || ^23.0.0).
MatIconauto Material Symbols class (22.2.0): when only the Material Symbols font is loaded,<mat-icon>adds thematerial-symbols-*class itself, sosetDefaultFontSetClass(...)is no longer needed for the single-font case. If both legacy Material Icons and Symbols are loaded, the old behaviour applies.MatMenuItemdisabledInteractive(22.2.0): disabled styling that stays focusable and hoverable, so a tooltip can explain why the item is disabled.MatFormFieldControlsupports Signal Forms (22.2.0) and the datepicker reports parse errors under Signal Forms (22.2.4).- CDK overlay
disposeOnNavigation: 'url-change'(22.2.1): opt in to closing on any URL change, not just back/forward. - Patch fixes worth knowing: CDK a11y treats
inertelements as non-focusable (22.2.3), chips get a touch target (22.2.3),mat-iconno longer copies event attributes (22.2.2).
v22 breaking changes (from v21)
The v21 → v22 jump has real API drift, not just an Angular version bump. Watch for:
- Combobox: legacy combobox and autocomplete promoted / removed.
SimpleComboboxpromoted toComboboxwith allsimpleCombobox*symbols renamed tocombobox*. - List:
MatListOption.checkboxPositionremoved, usetogglePositioninstead.MatListOptionCheckboxPositionrenamed toMatListOptionTogglePosition. - CDK:
injectorparameter is now required onConfigurableFocusTrapandFocusTrapconstructors.ConfigurableFocusTrapFactory.createboolean parameter replaced with a config object.DropListRef.dropevent parameter is now required.ContextMenuTrackerrenamed toMenuTracker. Removed:CDK_DESCRIBEDBY_HOST_ATTRIBUTE,CDK_DESCRIBEDBY_ID_PREFIX,MESSAGES_CONTAINER_ID. - Multiple components: input/model rename from
valuestovalueacross Combobox, Listbox, Tree, Menu, Toolbar, Select. Constructors with rest arguments removed (affects code that extends Material or CDK components). - Dialog / Overlay:
ArrowViewStateandArrowViewStateTransitiontypes removed.
Most of these have automatic ng update migrations. When in doubt, run ng update @angular/material and let the schematic do the work before hand-editing.
v22 new features worth knowing
- Signal Forms stable (was experimental in v21). Angular's signal-based form API is now safe to use in production.
mat-form-fieldcomposes with bothReactiveFormsModuleand Signal Forms. - Angular Aria stable (was preview). New accessibility primitives ship in the framework, which reduces the need to reach for CDK's a11y module for some patterns.
- Button progress indicator support inside
<button>component. - Portal directives support on
ComponentPortal. - Separate tab animation durations (per-tab enter/exit timing).
- Check the project's Material version before answering. Material's M3 theming engine was introduced in v19 (
mat.theme()mixin replacingmat.define-light-themeandmat.define-dark-theme). Code generated against M3 will silently break on M2 projects.package.jsonis the source of truth. - Detect the theming generation in
styles.scss:- If you see
@include mat.theme((...))→ M3 (v19+, default). Usemat.theme(), Material's prebuilt palettes, and CSS variable overrides. - If you see
mat.define-light-theme(...)ormat.define-dark-theme(...)plus@include mat.all-component-themes($theme)→ M2 (legacy). Recommend migrating, see migration.md. - The two systems compile and behave very differently. See theming.md.
- If you see
- Components are standalone since v15. Always import the standalone class (e.g.
MatButtonfrom'@angular/material/button'), not the legacyMatButtonModule. The modules still re-export everything for backwards compatibility but should not be added to new code. - After generating Material code, run
ng build. The most common AI mistakes are: (a) using v17-eramat.define-light-themesyntax in a v19+ project (compiles but silently emits no CSS vars); (b) on v18-v21.1, forgettingprovideAnimationsAsync(), which makes ripples, menu open/close, and dialog backdrop animations no-op (on 21.2+/22 do not add it, Material animates via native CSS); (c) missing@angular/cdkpeer dep, Material imports cascade through it; (d) usingMatTablewithout aMatSort/MatPaginatorwiring up, the column header sort UI appears but does nothing.
Material architecture: components, CDK, theming
Angular Material ships three layers:
- Components (
@angular/material/*) , the styledmat-*components themselves:MatButton,MatFormField,MatTable,MatDialog, etc. Each lives at its own import path. - CDK (
@angular/cdk/*) , unstyled primitives Material composes on top of:Overlay,Portal,A11y(FocusTrap, LiveAnnouncer, ListKeyManager),DragDrop,VirtualScroll,Stepper. Always installed as a peer dep alongside Material. Useful on its own when you need a primitive but don't want Material's styling. See cdk.md. - Theming engine (
@angular/material/_index.scss) , the Sass mixins (mat.theme(),mat.theme-overrides()) that emit CSS variables consumed by every component. Sass is required, no CSS-only theming path.
Default to importing from @angular/material/<component> (e.g. MatButton from '@angular/material/button'). Reach for @angular/cdk/<primitive> only when you need the headless primitive or are building a custom-styled component composing Material's behaviour.
Installation and theming
- Setup:
ng add @angular/material(handles the install + writes a default theme; on v18-v21.1 it also wiresprovideAnimationsAsync(), on 21.2+/22 it does not, Material animates via native CSS), or manual install. Read setup.md - Theming (M3):
mat.theme()mixin, prebuilt palettes (mat.$violet-palette,mat.$azure-palette, etc.), density and typography knobs,light darkcolor-scheme, per-component overrides viamat.<component>-overrides(). Read theming.md - M2 → M3 migration: the v19 ng-update schematic + manual fix patterns. Read migration.md
Components
Angular Material documents 40+ components grouped by category. Each category file below covers the components, their key inputs, common patterns, and gotchas.
- Form Controls: Autocomplete, Checkbox, Datepicker, FormField, Input, Radio, Select, Slider, SlideToggle. Read form-controls.md
- Buttons & Indicators: Button, ButtonToggle, Badge, Chip, Icon, ProgressBar, ProgressSpinner, Ripple. Read buttons-indicators.md
- Layout: Card, Divider, ExpansionPanel, GridList, List, Stepper, Tabs, Tree. Read layout.md
- Navigation: Menu, Sidenav, Toolbar. Read navigation.md
- Popups & Modals: BottomSheet, Dialog, Snackbar, Tooltip. Read overlays.md
- Data Table: Table, Paginator, Sort, MatTableDataSource. Read data-table.md
CDK primitives
- CDK: Overlay, Portal, A11y (FocusTrap, FocusMonitor, LiveAnnouncer, ListKeyManager), Drag-Drop, VirtualScroll, Stepper, ScrollDispatcher, Layout (
Breakpoints). Read cdk.md
Forms integration
- Forms: Wiring Material components to ReactiveForms (the canonical path) and Signal Forms (Angular v22+) via
mat-form-field,MatInput/MatSelect/MatDatepicker,ErrorStateMatcherpatterns,<mat-error>display, andControlValueAccessorfor custom controls. Read forms.md
Accessibility
- Accessibility: Material's WCAG 2.1 AA targets, FocusMonitor for keyboard-vs-mouse focus styling, LiveAnnouncer for transient announcements, RTL support, the things Material gives you free and the things you still need to do. Read accessibility.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

