Skip to content

๐ŸŒ A smart, multilingual country search with flags and codes made with Angular

License

Notifications You must be signed in to change notification settings

wlucha/ng-country-select

Repository files navigation

๐ŸŒ Angular Material Country Autocomplete

A smart, multilingual country search with flags and codes made with Angular
โœจ Enhance your Angular forms with this elegant, high-performance autocomplete โœจ

GitHub Stars Angular Version License: MIT

๐Ÿ“ข Features

  • ๐Ÿ…ฐ๏ธ Fully Compatible with Angular 16-19
    This library is designed to work seamlessly with the latest Angular versions (16, 17, 18, and 19).
    It leverages modern Angular features while maintaining backward compatibility.

  • ๐ŸŒ Multi-language Magic
    Supports English, French, Spanish, Italian, German, Arabic, Chinese, Hindi, Bengali, Portuguese and Russian + easily extendable to any language

  • ๐ŸŽŒ Flag Images ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡ฉ๐Ÿ‡ช ๐Ÿ‡ซ๐Ÿ‡ท ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ‡ฎ๐Ÿ‡น
    OS & Browser independent flag images

  • โšก Optimized Performance
    RxJS-powered search with debounce & virtual scrolling

  • ๐Ÿ” Smart Search
    Search countries by: โœ“ Localized name โœ“ Any translation โœ“ Alpha2/3 codes

  • ๐ŸŽจ Material Design Excellence
    Seamless integration with Angular Material components

  • ๐Ÿงฉ Standalone Component
    Zero boilerplate integration

๐Ÿš€ Demo

Live Demo: https://wlucha.github.io/ng-country-select

Stackblitz: https://stackblitz.com/~/github.com/wlucha/ng-country-select

๐ŸŒ Compatibility

Angular Version โœ… Supported
Angular 16 โœ… Yes
Angular 17 โœ… Yes
Angular 18 โœ… Yes
Angular 19 โœ… Yes

๐Ÿ› ๏ธ Setup in 60 Seconds

1. Install Dependencies

Quick Installation (ng add)

ng add @wlucha/ng-country-select

This command will install the @wlucha/ng-country-select library + all required dependencies.

(Alternative) Install Dependencies manually & update Angular.json styles

# Install dependencies
npm install --save @angular/material @angular/cdk @angular/animations flag-icons @wlucha/ng-country-select

# Add the flag icon styles to Angular.json "styles" array
"architect": {
   "build": {
      "options": {
        ...,
        "styles": [
          ...,
          "flag-icons/css/flag-icons.min.css"
        ]
      }
    }
  }
}    

2. Import Component

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

@NgModule({
  imports: [
    CountrySelectComponent,
    // ... other imports
  ]
})

3. Add Basic Usage

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

๐ŸŽ›๏ธ Parameters Worth Exploring

๐ŸŽš๏ธ Inputs

Parameter Type Default Description
defaultCountry Country | null null Sets an initial preselected country
formControl FormControl<Country | null> null Sets an initial preselected country (FormControl)
selectedCountry Country | null - Sets a country programmatically (after init)
lang string 'en' Language for displaying country names (e.g., en, de, fr, es, it)
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' Appearance style of the form field
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')
includeCountries string[] [] List of country codes to include in the dropdown (e.g., ['US', 'DE', 'FR'])
excludeCountries string[] [] List of country codes to exclude from the dropdown (e.g., ['US', 'DE', 'FR'])
alpha2Only boolean false Show only alpha2 codes in the results
alpha3Only boolean false Show only alpha3 codes in the results
showFlag boolean true Whether the flag should be displayed

๐Ÿšจ 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'"
  [formControl]="countryControl"
  [searchAllLanguages]="true"
  [showCodes]="true"
  [debounceTime]="200"
  [required]="true"
  [disabled]="false"
  [appearance]="'outline'"
  [placeholder]="'Search country'"
  [color]="primary"
  [alpha2Only]="false"
  [alpha3Only]="false"
  [showFlag]="true"
  [excludeCountries]="['US', 'DE', 'FR']"
  (countrySelected)="onCountrySelect($event)"
  (inputChanged)="trackSearchTerm($event)"
></ng-country-select>

๐ŸŒŸ 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

๐Ÿ“„ License: MIT
๐Ÿ‘จ๐Ÿ’ป Maintainer: Wilfried Lucha

Made with โค๏ธ & โ˜• by Open Source Contributors

TODO

  • more languages
  • custom option template
  • semantic release