DEV Community

wlucha
wlucha

Posted on β€’ Edited on

2 2 1 1

🌍 Angular Material Country Autocomplete

Hey everyone! I'm super excited to introduce ng-country-select – a high-performance, multilingual country autocomplete built on Angular and Angular Material. If you’ve ever needed a quick and elegant way to select countries in your apps (complete with flags, codes, and translations), look no further!

✨ Why ng-country-select?

  1. πŸš€ Angular 16+ Ready – Fully compatible with Angular 16, 17, 18, and 19.
  2. 🌐 Multi-Language Magic – English, German, French, Spanish and Italian out of the box, and super easy to add more.
  3. 🎌 Automatic Flag Emojis – Zero image dependencies! Relying on ISO codes for the magic.
  4. πŸ” Intelligent Search – Match by local name, English name, alpha2/3 codes, or any available translation.
  5. 🎨 Material Design – Seamless integration with Angular Material for a polished UI.
  6. ⚑ Performance – RxJS-based searching with debouncing and optional virtual scrolling.
  7. 🧩 Standalone – Import the component directly, no extra boilerplate needed.

πŸ“Ί Live Demo

Try it out in our Live Demo and see it in action!

🌍 Angular Compatibility

Angular Version Supported?
Angular 16 βœ… Yes
Angular 17 βœ… Yes
Angular 18 βœ… Yes
Angular 19 βœ… Yes

πŸ› οΈ Setup in 60 Seconds

1. Install Dependencies

npm install --save @angular/material @angular/cdk @angular/animations @wlucha/ng-country-select
Enter fullscreen mode Exit fullscreen mode

2. Import Component

import { CountrySelectComponent } from '@wlucha/ng-country-select';

@NgModule({
  imports: [
    CountrySelectComponent,
    // ... other imports
  ]
})
Enter fullscreen mode Exit fullscreen mode

3. Add Basic Usage

<ng-country-select
  [lang]="'en'"
  (countrySelected)="handleSelection($event)"
></ng-country-select>
Enter fullscreen mode Exit fullscreen mode

πŸŽ›οΈ Parameters

🎚️ Inputs

Parameter Type Default Description
defaultCountry `Country \ null` null
selectedCountry `Country \ null` -
lang string 'en' Language for displaying country names (e.g., en, de, fr)
searchAllLanguages boolean false If true, searching will match in all available translations
placeholder string 'Search country' Placeholder text for the input field
debounceTime number 100 Debounce time in milliseconds for the search input
disabled boolean false Disables the component if true
appearance `'fill' \ 'outline'` 'fill'
required boolean false Marks the field as required if true
showCodes boolean false If true, shows alpha2/alpha3 codes in the autocomplete results
color ThemePalette 'primary' Angular Material color palette to use ('primary', 'accent', 'warn')

🚨 Outputs

Event Output Description
countrySelected Country Full country object on selection
inputChanged string Live search term updates
closed void When dropdown closes

πŸ’» Power User Setup

<ng-country-select
  [lang]="'en'"
  [searchAllLanguages]="true"
  [showCodes]="true"
  [debounceTime]="200"
  [appearance]="'outline'"
  [placeholder]="'Search country'"
  (countrySelected)="onCountrySelect($event)"
  (inputChanged)="trackSearchTerm($event)"
></ng-country-select>
Enter fullscreen mode Exit fullscreen mode

🌟 Support the Project

Love this component? Here's how you can help:

  1. ⭐ Star the repo (you're awesome!)
  2. πŸ› Report bugs here
  3. πŸ’‘ Suggest features
  4. πŸ“’ Share with your network
# Your star fuels development! ⭐
# Clone and explore:
git clone https://github.com/wlucha/ng-country-select.git
Enter fullscreen mode Exit fullscreen mode

https://github.com/wlucha/ng-country-select

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay