Skip to content

Angular 20

Choose a tag to compare

@almothafar almothafar released this 04 Jun 18:22
· 101 commits to master since this release
64c764b

[20.0.0] — 2026-06-04

⚠️ BREAKING CHANGES

  • Requires Angular 20. peerDependencies now require @angular/common and @angular/core
    ^20.0.0. Angular 19 and older projects must stay on @ngui/auto-complete@19.
  • Removed the unprefixed [auto-complete] directive selector. Use [ngui-auto-complete] instead
    (the directive now matches [ngui-auto-complete] only). Update any templates using the bare
    auto-complete attribute: <input auto-complete …><input ngui-auto-complete …>.

Added

  • itemTemplate and headerTemplate inputs (Angular ng-templates) on the component and directive to
    customize dropdown rows and the header row, as a typed alternative to the string-based list-formatter
    / header-item-template. The item template receives the item as $implicit and the row index; the
    string formatters remain supported and the templates take precedence when provided (fixes #357).
  • open-direction input (auto | up | down) on the directive and component to control whether the
    dropdown opens above or below the input. up/down force the direction; auto (default) keeps the
    previous behaviour of opening above only when the input is near the bottom of the viewport (fixes #386).

Changed

  • Upgraded to Angular 20 (@angular/* 20.3.x, @angular/material + @angular/cdk 20.2.x).
    Install @ngui/auto-complete@20 for Angular 20 projects.
  • Standalone components. NguiAutoCompleteComponent and NguiAutoCompleteDirective are now
    standalone. NguiAutoCompleteModule is retained and re-exports both, so existing
    imports: [NguiAutoCompleteModule] consumers keep working unchanged — you can now alternatively
    import the standalone component/directive directly. (Full NgModule removal is planned for Angular 21.)
  • inject() DI. Constructor parameter injection across the library was migrated to the inject()
    function (no public API change).

Internal (development tooling only — no impact on consumers)

  • ng update to Angular 20: @angular/cli + @angular-devkit/build-angular 20.3.x,
    ng-packagr 20.3.2, angular-eslint 20.7.0. Workspace migrations applied (schematic type
    defaults in angular.json, tsconfig moduleResolutionbundler).
  • Bumped @cypress/schematic 4.3 → 5 (now requires Angular 20).
  • Re-enabled the @angular-eslint/prefer-standalone lint rule (deferred in 19.0.0).
  • The demo app was migrated to a standalone bootstrapApplication setup (AppModule and the routing
    NgModule removed in favour of provideRouter + app.routes.ts).
  • Hardened the library component spec so its focus-triggered dropdown reload resolves against a local
    source array (Angular 20 / zone.js surfaces the previously-swallowed async error).

Notes

  • ESLint 10 remains deferred: angular-eslint 20 still peers on ESLint ^8.57 || ^9. It is planned for
    the Angular 21 release alongside full NgModule removal.

What's Changed

Full Changelog: 19.0.0...20.0.0