
Angular Cdk
- 184 installs
- 6 repo stars
- Updated April 4, 2026
- oguzhan18/angular-ecosystem-skills
Use Angular CDK for overlays, drag-drop, accessibility primitives, and virtual scroll instead of reinventing low-level UI behavior.
About
Documents Angular CDK usage from oguzhan18/angular-ecosystem-skills for overlays, portals, drag-drop, virtual scrolling, and accessibility primitives so Claude builds accessible, complex Angular UIs without custom low-level implementations.
- Overlay and portal patterns
- Drag-drop and virtual scroll
- Accessibility primitives
- CDK module integration
- Reusable behavior layers
Angular Cdk by the numbers
- 184 all-time installs (skills.sh)
- +2 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #886 of 2,245 Frontend Development skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-cdkAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 184 |
|---|---|
| repo stars | ★ 6 |
| Last updated | April 4, 2026 |
| Repository | oguzhan18/angular-ecosystem-skills ↗ |
What it does
Use Angular CDK for overlays, drag-drop, accessibility primitives, and virtual scroll instead of reinventing low-level UI behavior.
Files
@angular/cdk (Component Dev Kit)
Version: 21.0.3 (Feb 2026) Tags: Accessibility, Drag & Drop, Overlay, Virtual Scroll, Portal
References: Docs — official CDK documentation • GitHub • API
API Changes
This section documents recent version-specific API changes.
- NEW: CDK overlays now use browser's built-in popovers for improved accessibility source
- NEW: Angular 19 signal-based APIs — Modern signal integration for CDK components
- NEW: Improved focus management — Better
cdkTrapFocusandcdkFocusRegionsupport
- NEW: Drag & Drop improvements — Enhanced item copying between lists
- DEPRECATED: Legacy overlay strategies — Prefer scroll strategy configuration over deprecated approaches
Best Practices
- Use CDK for custom UI components — Build your own components without Material styling
import { OverlayModule } from '@angular/cdk/overlay';
import { PortalModule } from '@angular/cdk/portal';
@Component({
standalone: true,
imports: [OverlayModule, PortalModule],
// ...
})
export class CustomDropdownComponent {}- Use Overlay for floating panels — Tooltips, dropdowns, modals
import { OverlayRef, Overlay } from '@angular/cdk/overlay';
export class TooltipService {
private overlayRef: OverlayRef;
constructor(private overlay: Overlay) {
this.overlayRef = this.overlay.create({
hasBackdrop: true,
positionStrategy: this.overlay.position()
.connectedTo(origin, { originX: 'center', originY: 'bottom' })
.withOffsetX(0)
.withOffsetY(8)
});
}
}- Use Drag & Drop for sortable lists
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
drop(event: CdkDragDrop<string[]>) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}- Use Virtual Scroll for large lists
import { ScrollingModule } from '@angular/cdk/scrolling';
@Component({
standalone: true,
imports: [ScrollingModule],
template: `
<cdk-virtual-scroll-viewport itemSize="50" class="viewport">
<div *cdkVirtualFor="let item of items">{{item.name}}</div>
</cdk-virtual-scroll-viewport>
`
})
export class ListComponent {}- Use Portal for dynamic content
import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
@Component({ template: `<ng-template #dialogTemplate>Content</ng-template>` })
export class DialogComponent {
@ViewChild('dialogTemplate') dialogTemplate!: TemplatePortal;
attach() {
const portalOutlet = new DomPortalOutlet(this.document.body);
portalOutlet.attach(this.dialogTemplate);
}
}- Use A11y utilities for accessibility
import { A11yModule, CdkTrapFocus, LiveAnnouncer } from '@angular/cdk/a11y';
@Component({
standalone: true,
imports: [A11yModule],
template: `
<div cdkTrapFocus>
<button cdkFocusInitial>First</button>
<button>Second</button>
</div>
`
})
export class AccessibleComponent {
constructor(private liveAnnouncer: LiveAnnouncer) {
this.liveAnnouncer.announce('Message for screen readers');
}
}- Use Layout for responsive breakpoints
import { LayoutModule } from '@angular/cdk/layout';
@Component({
standalone: true,
imports: [LayoutModule],
template: `
<div *ngIf="isHandset$ | async">
Mobile content
</div>
`
})
export class ResponsiveComponent {
isHandset$ = this.breakpointObserver.observe('(max-width: 599px)');
}Docs Reference Index
Official Documentation
- Angular CDK - Main documentation
- CDK API Reference
- Overlay Guide
- Drag Drop Guide
- Scrolling Guide
- Portal Guide
- A11y Guide