├── projects ├── demo │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── app.component.scss │ │ │ ├── app.module.ts │ │ │ ├── app.component.spec.ts │ │ │ └── app.component.ts │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── main.ts │ │ ├── styles.scss │ │ ├── index.html │ │ ├── test.ts │ │ └── polyfills.ts │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── .browserslistrc │ └── karma.conf.js └── lib │ ├── src │ ├── lib │ │ ├── interface │ │ │ ├── country.interface.ts │ │ │ ├── country-locale.interface.ts │ │ │ └── country-code.interface.ts │ │ ├── pipe │ │ │ └── country.pipe.ts │ │ ├── module.ts │ │ ├── component │ │ │ └── int-phone-prefix │ │ │ │ ├── int-phone-prefix.component.html │ │ │ │ ├── int-phone-prefix.component.ts │ │ │ │ └── int-phone-prefix.component.scss │ │ ├── directive │ │ │ └── only-number.directive.ts │ │ └── service │ │ │ ├── locale.service.ts │ │ │ └── country.service.ts │ ├── public-api.ts │ └── test.ts │ ├── ng-package.json │ ├── tsconfig.lib.prod.json │ ├── tsconfig.spec.json │ ├── tsconfig.lib.json │ ├── .browserslistrc │ ├── package.json │ ├── karma.conf.js │ └── README.md ├── .vscode ├── extensions.json ├── launch.json └── tasks.json ├── .editorconfig ├── .gitignore ├── tsconfig.json ├── package.json ├── README.md └── angular.json /projects/demo/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects/demo/src/app/app.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects/demo/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /projects/demo/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kondi0/ng4-intl-phone/HEAD/projects/demo/src/favicon.ico -------------------------------------------------------------------------------- /projects/lib/src/lib/interface/country.interface.ts: -------------------------------------------------------------------------------- 1 | export interface Country { 2 | name: string, 3 | dialCode: string 4 | countryCode: string, 5 | } 6 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template"] 4 | } 5 | -------------------------------------------------------------------------------- /projects/lib/src/lib/interface/country-locale.interface.ts: -------------------------------------------------------------------------------- 1 | import {CountryCode} from "./country-code.interface"; 2 | export class CountryLocale { 3 | [lang: string]: CountryCode 4 | } 5 | -------------------------------------------------------------------------------- /projects/lib/src/public-api.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of lib 3 | */ 4 | 5 | export * from './lib/component/int-phone-prefix/int-phone-prefix.component'; 6 | export * from './lib/module'; 7 | -------------------------------------------------------------------------------- /projects/lib/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../dist/lib", 4 | "lib": { 5 | "entryFile": "src/public-api.ts" 6 | } 7 | } -------------------------------------------------------------------------------- /projects/lib/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.lib.json", 4 | "compilerOptions": { 5 | "declarationMap": false 6 | }, 7 | "angularCompilerOptions": { 8 | "compilationMode": "partial" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /projects/demo/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../../tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": [ 9 | "src/main.ts", 10 | "src/polyfills.ts" 11 | ], 12 | "include": [ 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /projects/lib/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../../tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts" 12 | ], 13 | "include": [ 14 | "**/*.spec.ts", 15 | "**/*.d.ts" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /projects/lib/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../../tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/lib", 6 | "declaration": true, 7 | "declarationMap": true, 8 | "inlineSources": true, 9 | "types": [] 10 | }, 11 | "exclude": [ 12 | "src/test.ts", 13 | "**/*.spec.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /projects/demo/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /projects/demo/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../../tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /projects/demo/src/styles.scss: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | h1 { 3 | color: #369; 4 | font-family: Arial, Helvetica, sans-serif; 5 | font-size: 250%; 6 | } 7 | 8 | .mc { 9 | padding: 100px; 10 | } 11 | 12 | .mt { 13 | margin-top: 10px; 14 | } 15 | 16 | .card { 17 | box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); 18 | transition: 0.3s; 19 | border-radius: 5px; 20 | padding: 20px; 21 | } 22 | -------------------------------------------------------------------------------- /projects/demo/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Demo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /projects/lib/src/lib/pipe/country.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | import {Country} from "../interface/country.interface"; 3 | 4 | @Pipe({ 5 | name: 'country' 6 | }) 7 | export class CountryPipe implements PipeTransform { 8 | 9 | transform(value: Country[], args?: string): any { 10 | let searchText = new RegExp(args, 'ig'); 11 | 12 | if (value) { 13 | return value.filter((country: Country) => country.name.search(searchText) !== -1); 14 | } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 3 | "version": "0.2.0", 4 | "configurations": [ 5 | { 6 | "name": "ng serve", 7 | "type": "pwa-chrome", 8 | "request": "launch", 9 | "preLaunchTask": "npm: start", 10 | "url": "http://localhost:4200/" 11 | }, 12 | { 13 | "name": "ng test", 14 | "type": "chrome", 15 | "request": "launch", 16 | "preLaunchTask": "npm: test", 17 | "url": "http://localhost:9876/debug.html" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /projects/demo/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app.component'; 5 | import {InternationalPhoneModule} from '../../../lib/src/lib/module'; 6 | import {FormsModule, ReactiveFormsModule} from '@angular/forms'; 7 | 8 | @NgModule({ 9 | declarations: [ 10 | AppComponent 11 | ], 12 | imports: [ 13 | BrowserModule, 14 | InternationalPhoneModule, 15 | FormsModule, 16 | ReactiveFormsModule 17 | ], 18 | providers: [], 19 | bootstrap: [AppComponent] 20 | }) 21 | export class AppModule { } 22 | -------------------------------------------------------------------------------- /projects/demo/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | -------------------------------------------------------------------------------- /projects/lib/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # Compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | /bazel-out 8 | 9 | # Node 10 | /node_modules 11 | npm-debug.log 12 | yarn-error.log 13 | 14 | # IDEs and editors 15 | .idea/ 16 | .project 17 | .classpath 18 | .c9/ 19 | *.launch 20 | .settings/ 21 | *.sublime-workspace 22 | 23 | # Visual Studio Code 24 | .vscode/* 25 | !.vscode/settings.json 26 | !.vscode/tasks.json 27 | !.vscode/launch.json 28 | !.vscode/extensions.json 29 | .history/* 30 | 31 | # Miscellaneous 32 | /.angular/cache 33 | .sass-cache/ 34 | /connect.lock 35 | /coverage 36 | /libpeerconnection.log 37 | testem.log 38 | /typings 39 | 40 | # System files 41 | .DS_Store 42 | Thumbs.db 43 | -------------------------------------------------------------------------------- /projects/demo/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /projects/lib/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ng4-intl-phone", 3 | "version": "14.0.1", 4 | "description": "International phone prefix library for Angular", 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/kondi0/ng4-intl-phone.git" 8 | }, 9 | "author": "kondi0", 10 | "license": "MIT", 11 | "peerDependencies": { 12 | "@angular/animations": "~14.2.4", 13 | "@angular/common": "~14.2.4", 14 | "@angular/compiler": "~14.2.4", 15 | "@angular/core": "~14.2.4", 16 | "@angular/forms": "~14.2.4", 17 | "@angular/platform-browser": "~14.2.4", 18 | "@angular/platform-browser-dynamic": "~14.2.4", 19 | "@angular/router": "~14.2.4", 20 | "rxjs": "~7.5.0", 21 | "tslib": "^2.3.0", 22 | "zone.js": "~0.11.4" 23 | }, 24 | "dependencies": { 25 | "tslib": "^2.3.0" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /projects/demo/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | (id: string): T; 13 | keys(): string[]; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting(), 21 | ); 22 | 23 | // Then we find all the tests. 24 | const context = require.context('./', true, /\.spec\.ts$/); 25 | // And load the modules. 26 | context.keys().map(context); 27 | -------------------------------------------------------------------------------- /projects/lib/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js'; 4 | import 'zone.js/testing'; 5 | import { getTestBed } from '@angular/core/testing'; 6 | import { 7 | BrowserDynamicTestingModule, 8 | platformBrowserDynamicTesting 9 | } from '@angular/platform-browser-dynamic/testing'; 10 | 11 | declare const require: { 12 | context(path: string, deep?: boolean, filter?: RegExp): { 13 | (id: string): T; 14 | keys(): string[]; 15 | }; 16 | }; 17 | 18 | // First, initialize the Angular testing environment. 19 | getTestBed().initTestEnvironment( 20 | BrowserDynamicTestingModule, 21 | platformBrowserDynamicTesting(), 22 | ); 23 | 24 | // Then we find all the tests. 25 | const context = require.context('./', true, /\.spec\.ts$/); 26 | // And load the modules. 27 | context.keys().map(context); 28 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "baseUrl": "./", 6 | "outDir": "./dist/out-tsc", 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": false, 9 | "noImplicitOverride": true, 10 | "noPropertyAccessFromIndexSignature": true, 11 | "paths": { 12 | "ng4-intl-phone": [ 13 | "dist/lib/lib", 14 | "dist/lib" 15 | ] 16 | }, 17 | "noImplicitReturns": true, 18 | "noFallthroughCasesInSwitch": true, 19 | "sourceMap": true, 20 | "declaration": false, 21 | "downlevelIteration": true, 22 | "experimentalDecorators": true, 23 | "moduleResolution": "node", 24 | "importHelpers": true, 25 | "target": "es2017", 26 | "module": "es2020", 27 | "lib": [ 28 | "es2020", 29 | "dom" 30 | ] 31 | }, 32 | } 33 | -------------------------------------------------------------------------------- /projects/lib/src/lib/module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import {FormsModule, ReactiveFormsModule} from '@angular/forms'; 4 | import {IntPhonePrefixComponent} from "./component/int-phone-prefix/int-phone-prefix.component"; 5 | import {OnlyNumberDirective} from "./directive/only-number.directive"; 6 | import {CountryPipe} from "./pipe/country.pipe"; 7 | import {CountryService} from "./service/country.service"; 8 | import {LocaleService} from "./service/locale.service"; 9 | 10 | 11 | 12 | @NgModule({ 13 | imports: [ 14 | CommonModule, 15 | FormsModule, 16 | ReactiveFormsModule 17 | ], 18 | declarations: [ 19 | IntPhonePrefixComponent, 20 | OnlyNumberDirective, 21 | CountryPipe 22 | ], 23 | exports: [ 24 | IntPhonePrefixComponent 25 | ], 26 | providers: [CountryService, LocaleService] 27 | }) 28 | export class InternationalPhoneModule {} 29 | -------------------------------------------------------------------------------- /projects/demo/src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | import { AppComponent } from './app.component'; 3 | 4 | describe('AppComponent', () => { 5 | beforeEach(async () => { 6 | await TestBed.configureTestingModule({ 7 | declarations: [ 8 | AppComponent 9 | ], 10 | }).compileComponents(); 11 | }); 12 | 13 | it('should create the app', () => { 14 | const fixture = TestBed.createComponent(AppComponent); 15 | const app = fixture.componentInstance; 16 | expect(app).toBeTruthy(); 17 | }); 18 | 19 | it(`should have as title 'demo'`, () => { 20 | const fixture = TestBed.createComponent(AppComponent); 21 | const app = fixture.componentInstance; 22 | expect(app.title).toEqual('demo'); 23 | }); 24 | 25 | it('should render title', () => { 26 | const fixture = TestBed.createComponent(AppComponent); 27 | fixture.detectChanges(); 28 | const compiled = fixture.nativeElement as HTMLElement; 29 | expect(compiled.querySelector('.content span')?.textContent).toContain('demo app is running!'); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 3 | "version": "2.0.0", 4 | "tasks": [ 5 | { 6 | "type": "npm", 7 | "script": "start", 8 | "isBackground": true, 9 | "problemMatcher": { 10 | "owner": "typescript", 11 | "pattern": "$tsc", 12 | "background": { 13 | "activeOnStart": true, 14 | "beginsPattern": { 15 | "regexp": "(.*?)" 16 | }, 17 | "endsPattern": { 18 | "regexp": "bundle generation complete" 19 | } 20 | } 21 | } 22 | }, 23 | { 24 | "type": "npm", 25 | "script": "test", 26 | "isBackground": true, 27 | "problemMatcher": { 28 | "owner": "typescript", 29 | "pattern": "$tsc", 30 | "background": { 31 | "activeOnStart": true, 32 | "beginsPattern": { 33 | "regexp": "(.*?)" 34 | }, 35 | "endsPattern": { 36 | "regexp": "bundle generation complete" 37 | } 38 | } 39 | } 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /projects/lib/src/lib/component/int-phone-prefix/int-phone-prefix.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 19 | 20 | 26 |
27 | 28 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ng4-intl-phone", 3 | "version": "14.0.0", 4 | "description": "International phone prefix library for Angular", 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/kondi0/ng4-intl-phone.git" 8 | }, 9 | "author": "kondi0", 10 | "license": "MIT", 11 | "scripts": { 12 | "ng": "ng", 13 | "start": "ng serve", 14 | "build": "ng build", 15 | "watch": "ng build --watch --configuration development", 16 | "test": "ng test" 17 | }, 18 | "dependencies": { 19 | "@angular/animations": "~14.2.4", 20 | "@angular/common": "~14.2.4", 21 | "@angular/compiler": "~14.2.4", 22 | "@angular/core": "~14.2.4", 23 | "@angular/forms": "~14.2.4", 24 | "@angular/platform-browser": "~14.2.4", 25 | "@angular/platform-browser-dynamic": "~14.2.4", 26 | "@angular/router": "~14.2.4", 27 | "rxjs": "~7.5.0", 28 | "tslib": "^2.3.0", 29 | "zone.js": "~0.11.4" 30 | }, 31 | "devDependencies": { 32 | "@angular-devkit/build-angular": "~14.2.4", 33 | "@angular/cli": "~14.2.4", 34 | "@angular/compiler-cli": "~14.2.4", 35 | "@types/jasmine": "~3.10.0", 36 | "@types/node": "^12.11.1", 37 | "jasmine-core": "~4.0.0", 38 | "karma": "~6.3.0", 39 | "karma-chrome-launcher": "~3.1.0", 40 | "karma-coverage": "~2.1.0", 41 | "karma-jasmine": "~4.0.0", 42 | "karma-jasmine-html-reporter": "~1.7.0", 43 | "ng-packagr": "^14.2.1", 44 | "typescript": "~4.6.2" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /projects/demo/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | jasmine: { 17 | // you can add configuration options for Jasmine here 18 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html 19 | // for example, you can disable the random execution with `random: false` 20 | // or set a specific seed with `seed: 4321` 21 | }, 22 | clearContext: false // leave Jasmine Spec Runner output visible in browser 23 | }, 24 | jasmineHtmlReporter: { 25 | suppressAll: true // removes the duplicated traces 26 | }, 27 | coverageReporter: { 28 | dir: require('path').join(__dirname, '../../coverage/demo'), 29 | subdir: '.', 30 | reporters: [ 31 | { type: 'html' }, 32 | { type: 'text-summary' } 33 | ] 34 | }, 35 | reporters: ['progress', 'kjhtml'], 36 | port: 9876, 37 | colors: true, 38 | logLevel: config.LOG_INFO, 39 | autoWatch: true, 40 | browsers: ['Chrome'], 41 | singleRun: false, 42 | restartOnFileChange: true 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /projects/lib/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | jasmine: { 17 | // you can add configuration options for Jasmine here 18 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html 19 | // for example, you can disable the random execution with `random: false` 20 | // or set a specific seed with `seed: 4321` 21 | }, 22 | clearContext: false // leave Jasmine Spec Runner output visible in browser 23 | }, 24 | jasmineHtmlReporter: { 25 | suppressAll: true // removes the duplicated traces 26 | }, 27 | coverageReporter: { 28 | dir: require('path').join(__dirname, '../../coverage/lib'), 29 | subdir: '.', 30 | reporters: [ 31 | { type: 'html' }, 32 | { type: 'text-summary' } 33 | ] 34 | }, 35 | reporters: ['progress', 'kjhtml'], 36 | port: 9876, 37 | colors: true, 38 | logLevel: config.LOG_INFO, 39 | autoWatch: true, 40 | browsers: ['Chrome'], 41 | singleRun: false, 42 | restartOnFileChange: true 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /projects/lib/src/lib/directive/only-number.directive.ts: -------------------------------------------------------------------------------- 1 | import {Directive, ElementRef, HostListener, Input} from '@angular/core'; 2 | 3 | @Directive({ 4 | selector: '[onlyNumber]' 5 | }) 6 | export class OnlyNumberDirective { 7 | 8 | @Input() 9 | onlyNumber: boolean; 10 | 11 | regexStr = '^[0-9]*$'; 12 | 13 | constructor(private el: ElementRef) { 14 | } 15 | 16 | @HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) { 17 | let e = event; 18 | if (this.onlyNumber) { 19 | if ( 20 | [46, 8, 9, 27, 13, 110, 190, 171].indexOf(e.keyCode) !== -1 || 21 | // Allow: Ctrl+A 22 | (e.keyCode === 65 && e.ctrlKey === true) || 23 | // Allow: Ctrl+C 24 | (e.keyCode === 67 && e.ctrlKey === true) || 25 | // Allow: Ctrl+V 26 | (e.keyCode === 86 && e.ctrlKey === true) || 27 | // Allow: Ctrl+X 28 | (e.keyCode === 88 && e.ctrlKey === true) || 29 | // Allow: home, end, left, right 30 | (e.keyCode >= 35 && e.keyCode <= 39) || 31 | // Allow plus button 32 | (e.keyCode === 107) || (e.keyCode === 187)) { 33 | // let it happen, don't do anything 34 | return; 35 | } 36 | let ch = String.fromCharCode(e.keyCode); 37 | let regEx = new RegExp(this.regexStr); 38 | if (regEx.test(ch)) { 39 | return; 40 | } else if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 41 | e.preventDefault(); 42 | } 43 | } else { 44 | return; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /projects/demo/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, OnInit} from '@angular/core'; 2 | import {FormBuilder, FormGroup, Validators} from '@angular/forms'; 3 | import {CountryService} from '../../../lib/src/lib/service/country.service'; 4 | 5 | @Component({ 6 | selector: 'app-root', 7 | template: ` 8 |
9 |
10 |
11 |
12 | 14 |
15 |
16 | The phone number is: {{phoneValue}} 17 |
18 |
19 |
20 |
21 |
22 | 24 |
25 |
26 | 27 |
28 |
29 |
30 |
31 | 33 |
34 |
35 |
36 |
37 | `, 38 | }) 39 | export class AppComponent implements OnInit { 40 | phoneValue: string; 41 | myForm: FormGroup; 42 | 43 | constructor(libService: CountryService, 44 | private formBuilder: FormBuilder) { 45 | this.phoneValue = '123345456'; 46 | } 47 | 48 | 49 | ngOnInit() { 50 | this.myForm = this.formBuilder.group({ 51 | myPhone: ['', Validators.required], 52 | disabledPhone: [''] 53 | }); 54 | 55 | this.myForm.get('disabledPhone').disable(); 56 | } 57 | 58 | logForm(value: any) { 59 | console.log(value); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /projects/demo/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes recent versions of Safari, Chrome (including 12 | * Opera), Edge on the desktop, and iOS and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** 22 | * By default, zone.js will patch all possible macroTask and DomEvents 23 | * user can disable parts of macroTask/DomEvents patch by setting following flags 24 | * because those flags need to be set before `zone.js` being loaded, and webpack 25 | * will put import in the top of bundle, so user need to create a separate file 26 | * in this directory (for example: zone-flags.ts), and put the following flags 27 | * into that file, and then add the following code before importing zone.js. 28 | * import './zone-flags'; 29 | * 30 | * The flags allowed in zone-flags.ts are listed here. 31 | * 32 | * The following flags will work for all browsers. 33 | * 34 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 35 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 36 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 37 | * 38 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 39 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 40 | * 41 | * (window as any).__Zone_enable_cross_context_check = true; 42 | * 43 | */ 44 | 45 | /*************************************************************************************************** 46 | * Zone JS is required by default for Angular itself. 47 | */ 48 | import 'zone.js'; // Included with Angular CLI. 49 | 50 | 51 | /*************************************************************************************************** 52 | * APPLICATION IMPORTS 53 | */ 54 | -------------------------------------------------------------------------------- /projects/lib/README.md: -------------------------------------------------------------------------------- 1 | # Angular international phone prefix input 2 | 3 | #Demo 4 | https://ng4-intl-phone.netlify.app/ 5 | 6 | ## Description 7 | This is a simple library with international phone prefix with flags images. 8 | 9 | ## Installation 10 | 11 | To install this component to an external project, follow the procedure: 12 | 13 | 1. __npm install ng4-intl-phone --save__ 14 | 15 | 2. Add __InternationalPhoneModule__ import to your __@NgModule__ like example below 16 | ```ts 17 | import { NgModule } from '@angular/core'; 18 | import { BrowserModule } from '@angular/platform-browser'; 19 | import { MyTestApp } from './my-test-app'; 20 | import { InternationalPhoneModule } from 'ng4-intl-phone'; 21 | @NgModule({ 22 | imports: [ BrowserModule, InternationalPhoneModule ], 23 | declarations: [ MyTestApp ], 24 | bootstrap: [ MyTestApp ] 25 | }) 26 | export class MyTestAppModule {} 27 | ``` 28 | 29 | ##Testing in localhost 30 | - `npm install ./relative/path/to/lib` after `npm run build` to test locally in another app 31 | 32 | ## Usage 33 | 34 | Use one of the following two options. 35 | 36 | ### 1. ngModel binding 37 | 38 | In this option the ngModel binding is used. 39 | 40 | ```html 41 |

42 | {{title}} 43 |

44 |
45 |
46 | 47 | 48 |
49 |
50 | ``` 51 | 52 | ### 2. Reactive forms 53 | 54 | In this option the value accessor of reactive forms is used. 55 | 56 | To use reactive forms define the application class as follows: 57 | 58 | ```ts 59 | 60 | export class MyTestApp implements OnInit { 61 | 62 | private myForm: FormGroup; 63 | 64 | constructor(private formBuilder: FormBuilder) { } 65 | 66 | ngOnInit() { 67 | this.myForm = this.formBuilder.group({ 68 | myPhone: ['', Validators.required] 69 | // other controls are here... 70 | }); 71 | } 72 | } 73 | ``` 74 | 75 | Add the following snippet inside your template: 76 | 77 | ```html 78 |
79 | 81 | 82 |
83 | ``` 84 | ### @Input() locale 85 | An ISO 639-1 language code can be provided to set available language: 86 | es: Spanish, 87 | en: English 88 | 89 | ### @Input() defaultCountry 90 | An ISO 639-1 country code can be provided to set default country selected. 91 | 92 | ### @Input() maxLength 93 | maxLength (default: 15) 94 | 95 | ### @Input() onlyNumbers 96 | Allows only numeric values (default: true) 97 | 98 | ## License 99 | * License: MIT 100 | 101 | ## Author 102 | * Author: kondi0 103 | 104 | ## Mail 105 | * Mail: kondi.czerwinski@gmail.com 106 | 107 | ## Keywords 108 | * Phone 109 | * Prefix 110 | * International 111 | * Angular2 112 | * Angular4 113 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Angular international phone prefix input 2 | 3 | # Demo 4 | https://ng4-intl-phone.netlify.app/ 5 | 6 | ## Description 7 | This is a simple library with international phone prefix with flags images. 8 | 9 | ### Donating 10 | 11 | You can also help me and the project out by contributing through a donation on PayPal. 12 |

13 | 14 | PayPal 15 | 16 |

17 | 18 | ## Installation 19 | 20 | To install this component to an external project, follow the procedure: 21 | 22 | 1. __npm install ng4-intl-phone --save__ 23 | 24 | 2. Add __InternationalPhoneModule__ import to your __@NgModule__ like example below 25 | ```ts 26 | import { NgModule } from '@angular/core'; 27 | import { BrowserModule } from '@angular/platform-browser'; 28 | import { MyTestApp } from './my-test-app'; 29 | import { InternationalPhoneModule } from 'ng4-intl-phone'; 30 | @NgModule({ 31 | imports: [ BrowserModule, InternationalPhoneModule ], 32 | declarations: [ MyTestApp ], 33 | bootstrap: [ MyTestApp ] 34 | }) 35 | export class MyTestAppModule {} 36 | ``` 37 | 38 | ##Testing in localhost 39 | - `npm install ./relative/path/to/lib` after `npm run build` to test locally in another app 40 | 41 | ## Usage 42 | 43 | Use one of the following two options. 44 | 45 | ### 1. ngModel binding 46 | 47 | In this option the ngModel binding is used. 48 | 49 | ```html 50 |

51 | {{title}} 52 |

53 |
54 |
55 | 56 | 57 |
58 |
59 | ``` 60 | 61 | ### 2. Reactive forms 62 | 63 | In this option the value accessor of reactive forms is used. 64 | 65 | To use reactive forms define the application class as follows: 66 | 67 | ```ts 68 | 69 | export class MyTestApp implements OnInit { 70 | 71 | private myForm: FormGroup; 72 | 73 | constructor(private formBuilder: FormBuilder) { } 74 | 75 | ngOnInit() { 76 | this.myForm = this.formBuilder.group({ 77 | myPhone: ['', Validators.required] 78 | // other controls are here... 79 | }); 80 | } 81 | } 82 | ``` 83 | 84 | Add the following snippet inside your template: 85 | 86 | ```html 87 |
88 | 90 | 91 |
92 | ``` 93 | ### @Input() locale 94 | An ISO 639-1 language code can be provided to set available language: 95 | es: Spanish, 96 | en: English 97 | 98 | ### @Input() defaultCountry 99 | An ISO 639-1 country code can be provided to set default country selected. 100 | 101 | ### @Input() maxLength 102 | maxLength (default: 15) 103 | 104 | ### @Input() onlyNumbers 105 | Allows only numeric values (default: true) 106 | 107 | ## License 108 | * License: MIT 109 | 110 | ## Author 111 | * Author: kondi0 112 | 113 | ## Mail 114 | * Mail: kondi.czerwinski@gmail.com 115 | 116 | ## Keywords 117 | * Phone 118 | * Prefix 119 | * International 120 | * Angular2 121 | * Angular4 122 | -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "lib": { 7 | "projectType": "library", 8 | "root": "projects/lib", 9 | "sourceRoot": "projects/lib/src", 10 | "prefix": "lib", 11 | "architect": { 12 | "build": { 13 | "builder": "@angular-devkit/build-angular:ng-packagr", 14 | "options": { 15 | "project": "projects/lib/ng-package.json" 16 | }, 17 | "configurations": { 18 | "production": { 19 | "tsConfig": "projects/lib/tsconfig.lib.prod.json" 20 | }, 21 | "development": { 22 | "tsConfig": "projects/lib/tsconfig.lib.json" 23 | } 24 | }, 25 | "defaultConfiguration": "production" 26 | }, 27 | "test": { 28 | "builder": "@angular-devkit/build-angular:karma", 29 | "options": { 30 | "main": "projects/lib/src/test.ts", 31 | "tsConfig": "projects/lib/tsconfig.spec.json", 32 | "karmaConfig": "projects/lib/karma.conf.js" 33 | } 34 | } 35 | } 36 | }, 37 | "demo": { 38 | "projectType": "application", 39 | "schematics": { 40 | "@schematics/angular:component": { 41 | "style": "scss" 42 | }, 43 | "@schematics/angular:application": { 44 | "strict": true 45 | } 46 | }, 47 | "root": "projects/demo", 48 | "sourceRoot": "projects/demo/src", 49 | "prefix": "app", 50 | "architect": { 51 | "build": { 52 | "builder": "@angular-devkit/build-angular:browser", 53 | "options": { 54 | "outputPath": "dist/demo", 55 | "index": "projects/demo/src/index.html", 56 | "main": "projects/demo/src/main.ts", 57 | "polyfills": "projects/demo/src/polyfills.ts", 58 | "tsConfig": "projects/demo/tsconfig.app.json", 59 | "inlineStyleLanguage": "scss", 60 | "assets": [ 61 | "projects/demo/src/favicon.ico", 62 | "projects/demo/src/assets" 63 | ], 64 | "styles": [ 65 | "projects/demo/src/styles.scss" 66 | ], 67 | "scripts": [] 68 | }, 69 | "configurations": { 70 | "production": { 71 | 72 | "fileReplacements": [ 73 | { 74 | "replace": "projects/demo/src/environments/environment.ts", 75 | "with": "projects/demo/src/environments/environment.prod.ts" 76 | } 77 | ], 78 | "outputHashing": "all" 79 | }, 80 | "development": { 81 | "buildOptimizer": false, 82 | "optimization": false, 83 | "vendorChunk": true, 84 | "extractLicenses": false, 85 | "sourceMap": true, 86 | "namedChunks": true 87 | } 88 | }, 89 | "defaultConfiguration": "production" 90 | }, 91 | "serve": { 92 | "builder": "@angular-devkit/build-angular:dev-server", 93 | "configurations": { 94 | "production": { 95 | "browserTarget": "demo:build:production" 96 | }, 97 | "development": { 98 | "browserTarget": "demo:build:development" 99 | } 100 | }, 101 | "defaultConfiguration": "development" 102 | }, 103 | "extract-i18n": { 104 | "builder": "@angular-devkit/build-angular:extract-i18n", 105 | "options": { 106 | "browserTarget": "demo:build" 107 | } 108 | }, 109 | "test": { 110 | "builder": "@angular-devkit/build-angular:karma", 111 | "options": { 112 | "main": "projects/demo/src/test.ts", 113 | "polyfills": "projects/demo/src/polyfills.ts", 114 | "tsConfig": "projects/demo/tsconfig.spec.json", 115 | "karmaConfig": "projects/demo/karma.conf.js", 116 | "inlineStyleLanguage": "scss", 117 | "assets": [ 118 | "projects/demo/src/favicon.ico", 119 | "projects/demo/src/assets" 120 | ], 121 | "styles": [ 122 | "projects/demo/src/styles.scss" 123 | ], 124 | "scripts": [] 125 | } 126 | } 127 | } 128 | } 129 | }, 130 | "defaultProject": "lib", 131 | "cli": { 132 | "analytics": false 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /projects/lib/src/lib/interface/country-code.interface.ts: -------------------------------------------------------------------------------- 1 | export interface CountryCode { 2 | "ax": string, 3 | "af": string, 4 | "al": string, 5 | "dz": string, 6 | "as": string, 7 | "ad": string, 8 | "ao": string, 9 | "ai": string, 10 | "aq": string, 11 | "ag": string, 12 | "ar": string, 13 | "am": string, 14 | "aw": string, 15 | "au": string, 16 | "at": string, 17 | "az": string, 18 | "bs": string, 19 | "bh": string, 20 | "bd": string, 21 | "bb": string, 22 | "by": string, 23 | "be": string, 24 | "bz": string, 25 | "bj": string, 26 | "bm": string, 27 | "bt": string, 28 | "bo": string, 29 | "ba": string, 30 | "bw": string, 31 | "bv": string, 32 | "br": string, 33 | "io": string, 34 | "bn": string, 35 | "bg": string, 36 | "bf": string, 37 | "bi": string, 38 | "bq": string, 39 | "kh": string, 40 | "cm": string, 41 | "ca": string, 42 | "cv": string, 43 | "ky": string, 44 | "cf": string, 45 | "td": string, 46 | "cl": string, 47 | "cn": string, 48 | "cx": string, 49 | "cc": string, 50 | "co": string, 51 | "km": string, 52 | "cd": string, 53 | "cg": string, 54 | "ck": string, 55 | "cr": string, 56 | "ci": string, 57 | "hr": string, 58 | "cu": string, 59 | "cw": string, 60 | "cy": string, 61 | "cz": string, 62 | "dk": string, 63 | "dj": string, 64 | "dm": string, 65 | "do": string, 66 | "ec": string, 67 | "eg": string, 68 | "sv": string, 69 | "gq": string, 70 | "er": string, 71 | "ee": string, 72 | "et": string, 73 | "fk": string, 74 | "fo": string, 75 | "fj": string, 76 | "fi": string, 77 | "fr": string, 78 | "gf": string, 79 | "pf": string, 80 | "tf": string, 81 | "ga": string, 82 | "gm": string, 83 | "ge": string, 84 | "de": string, 85 | "gh": string, 86 | "gi": string, 87 | "gr": string, 88 | "gl": string, 89 | "gd": string, 90 | "gp": string, 91 | "gu": string, 92 | "gt": string, 93 | "gg": string, 94 | "gn": string, 95 | "gw": string, 96 | "gy": string, 97 | "ht": string, 98 | "hm": string, 99 | "hn": string, 100 | "hk": string, 101 | "hu": string, 102 | "is": string, 103 | "in": string, 104 | "id": string, 105 | "ir": string, 106 | "iq": string, 107 | "ie": string, 108 | "im": string, 109 | "il": string, 110 | "it": string, 111 | "jm": string, 112 | "jp": string, 113 | "je": string, 114 | "jo": string, 115 | "kz": string, 116 | "ke": string, 117 | "ki": string, 118 | "kp": string, 119 | "kr": string, 120 | "xk": string, 121 | "kw": string, 122 | "kg": string, 123 | "la": string, 124 | "lv": string, 125 | "lb": string, 126 | "ls": string, 127 | "lr": string, 128 | "ly": string, 129 | "li": string, 130 | "lt": string, 131 | "lu": string, 132 | "mo": string, 133 | "mk": string, 134 | "mg": string, 135 | "mw": string, 136 | "my": string, 137 | "mv": string, 138 | "ml": string, 139 | "mt": string, 140 | "mh": string, 141 | "mq": string, 142 | "mr": string, 143 | "mu": string, 144 | "yt": string, 145 | "mx": string, 146 | "fm": string, 147 | "md": string, 148 | "mc": string, 149 | "mn": string, 150 | "me": string, 151 | "ms": string, 152 | "ma": string, 153 | "mz": string, 154 | "mm": string, 155 | "na": string, 156 | "nr": string, 157 | "np": string, 158 | "nl": string, 159 | "an": string, 160 | "nc": string, 161 | "nz": string, 162 | "ni": string, 163 | "ne": string, 164 | "ng": string, 165 | "nu": string, 166 | "nf": string, 167 | "mp": string, 168 | "no": string, 169 | "om": string, 170 | "pk": string, 171 | "pw": string, 172 | "ps": string, 173 | "pa": string, 174 | "pg": string, 175 | "py": string, 176 | "pe": string, 177 | "ph": string, 178 | "pn": string, 179 | "pl": string, 180 | "pt": string, 181 | "pr": string, 182 | "qa": string, 183 | "re": string, 184 | "ro": string, 185 | "ru": string, 186 | "rw": string, 187 | "sh": string, 188 | "kn": string, 189 | "lc": string, 190 | "pm": string, 191 | "vc": string, 192 | "ws": string, 193 | "bl": string, 194 | "sm": string, 195 | "st": string, 196 | "sa": string, 197 | "sn": string, 198 | "cs": string, 199 | "rs": string, 200 | "sc": string, 201 | "sl": string, 202 | "sg": string, 203 | "sx": string, 204 | "sk": string, 205 | "si": string, 206 | "sb": string, 207 | "so": string, 208 | "za": string, 209 | "gs": string, 210 | "es": string, 211 | "lk": string, 212 | "sd": string, 213 | "ss": string, 214 | "sr": string, 215 | "sj": string, 216 | "sz": string, 217 | "se": string, 218 | "ch": string, 219 | "sy": string, 220 | "tw": string, 221 | "tj": string, 222 | "tz": string, 223 | "th": string, 224 | "tl": string, 225 | "tg": string, 226 | "tk": string, 227 | "to": string, 228 | "tt": string, 229 | "tn": string, 230 | "tr": string, 231 | "tm": string, 232 | "tc": string, 233 | "tv": string, 234 | "ug": string, 235 | "ua": string, 236 | "ae": string, 237 | "gb": string, 238 | "us": string, 239 | "um": string, 240 | "uy": string, 241 | "uz": string, 242 | "vu": string, 243 | "va": string, 244 | "ve": string, 245 | "vn": string, 246 | "vg": string, 247 | "vi": string, 248 | "wf": string, 249 | "eh": string, 250 | "ye": string, 251 | "zm": string, 252 | "zw": string 253 | } 254 | -------------------------------------------------------------------------------- /projects/lib/src/lib/component/int-phone-prefix/int-phone-prefix.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, ElementRef, forwardRef, HostListener, Input, OnInit, Renderer2} from '@angular/core'; 2 | import {Country} from '../../interface/country.interface'; 3 | import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; 4 | import {CountryCode} from '../../interface/country-code.interface'; 5 | import {CountryService} from '../../service/country.service'; 6 | import {LocaleService} from '../../service/locale.service'; 7 | 8 | const COUNTER_CONTROL_ACCESSOR = { 9 | provide: NG_VALUE_ACCESSOR, 10 | useExisting: forwardRef(() => IntPhonePrefixComponent), 11 | multi: true 12 | }; 13 | 14 | const PLUS = '+'; 15 | 16 | @Component({ 17 | selector: 'int-phone-prefix', 18 | templateUrl: './int-phone-prefix.component.html', 19 | styleUrls: [ 20 | './int-phone-prefix.component.scss', 21 | ], 22 | host: { 23 | '(document:click)': 'hideDropdown($event)', 24 | }, 25 | providers: [COUNTER_CONTROL_ACCESSOR, CountryService, LocaleService] 26 | }) 27 | export class IntPhonePrefixComponent implements OnInit, ControlValueAccessor { 28 | 29 | @Input() 30 | locale: string; 31 | 32 | @Input() 33 | defaultCountry: string; 34 | 35 | @Input() 36 | maxLength = 15; 37 | 38 | @Input() 39 | onlyNumbers = true; 40 | 41 | // ELEMENT REF 42 | phoneComponent: ElementRef; 43 | 44 | // CONTROL VALUE ACCESSOR FUNCTIONS 45 | onTouch: Function; 46 | onModelChange: Function; 47 | 48 | countries: Country[]; 49 | locales: CountryCode; 50 | selectedCountry: Country; 51 | countryFilter: string; 52 | showDropdown = false; 53 | phoneInput = ''; 54 | disabled = false; 55 | 56 | value = ''; 57 | 58 | // FILTER COUNTRIES LIST WHEN DROPDOWN IS OPEN 59 | @HostListener('document:keypress', ['$event']) 60 | handleKeyboardEvent(event: KeyboardEvent) { 61 | if (this.showDropdown) { 62 | this.countryFilter = `${this.countryFilter}${event.key}`; 63 | } 64 | } 65 | 66 | constructor(private service: CountryService, private localeService: LocaleService, phoneComponent: ElementRef) { 67 | this.phoneComponent = phoneComponent; 68 | } 69 | 70 | ngOnInit(): void { 71 | this.countries = this.service.getCountries(); 72 | this.locales = this.localeService.getLocales(this.locale); 73 | this.translateCountryNames(); 74 | } 75 | 76 | setDisabledState(isDisabled: boolean): void { 77 | this.disabled = isDisabled; 78 | } 79 | 80 | registerOnTouched(fn: Function) { 81 | this.onTouch = fn; 82 | } 83 | 84 | registerOnChange(fn: Function) { 85 | this.onModelChange = fn; 86 | } 87 | 88 | writeValue(value: string) { 89 | this.value = value || ''; 90 | this.phoneInput = this.value; 91 | 92 | if (IntPhonePrefixComponent.startsWithPlus(this.value)) { 93 | this.findPrefix(this.value.split(PLUS)[1]); 94 | if (this.selectedCountry) { 95 | this.updatePhoneInput(this.selectedCountry.countryCode); 96 | } 97 | } 98 | 99 | if (this.defaultCountry) { 100 | this.updatePhoneInput(this.defaultCountry); 101 | } 102 | } 103 | 104 | updateSelectedCountry(event: Event, countryCode: string) { 105 | event.preventDefault(); 106 | this.updatePhoneInput(countryCode); 107 | 108 | this.updateValue(); 109 | } 110 | 111 | showDropDown() { 112 | this.showDropdown = !this.showDropdown; 113 | this.countryFilter = ''; 114 | } 115 | 116 | hideDropdown(event: Event) { 117 | if (!this.phoneComponent.nativeElement.contains(event.target)) { 118 | this.showDropdown = false; 119 | } 120 | } 121 | 122 | updatePhone() { 123 | if (IntPhonePrefixComponent.startsWithPlus(this.phoneInput)) { 124 | this.findPrefix(this.phoneInput.split(PLUS)[1]); 125 | } else { 126 | this.selectedCountry = null; 127 | } 128 | 129 | this.updateValue(); 130 | } 131 | 132 | private translateCountryNames() { 133 | this.countries.forEach((country: Country) => { 134 | country.name = this.locales[country.countryCode]; 135 | }); 136 | 137 | this.orderCountriesByName(); 138 | } 139 | 140 | private orderCountriesByName() { 141 | this.countries = this.countries.sort((a, b) => (a.name > b.name) ? 1 : -1); 142 | } 143 | 144 | private updatePhoneInput(countryCode: string) { 145 | this.showDropdown = false; 146 | 147 | let newInputValue: string = IntPhonePrefixComponent.startsWithPlus(this.phoneInput) 148 | ? `${this.phoneInput.split(PLUS)[1].substr(this.selectedCountry.dialCode.length, this.phoneInput.length)}` 149 | : this.phoneInput; 150 | 151 | this.selectedCountry = this.countries.find((country: Country) => country.countryCode === countryCode); 152 | this.phoneInput = `${PLUS}${this.selectedCountry.dialCode} ${newInputValue.replace(/ /g, '')}`; 153 | } 154 | 155 | private findPrefix(prefix: string) { 156 | let foundPrefixes: Country[] = this.countries.filter((country: Country) => prefix.startsWith(country.dialCode)); 157 | this.selectedCountry = foundPrefixes.length 158 | ? IntPhonePrefixComponent.reducePrefixes(foundPrefixes) 159 | : null; 160 | } 161 | 162 | private updateValue() { 163 | this.value = this.phoneInput.replace(/ /g, ''); 164 | this.onModelChange(this.value); 165 | this.onTouch(); 166 | } 167 | 168 | private static startsWithPlus(text: string): boolean { 169 | return text.startsWith(PLUS); 170 | } 171 | 172 | private static reducePrefixes(foundPrefixes: Country[]) { 173 | return foundPrefixes.reduce( 174 | (first: Country, second: Country) => 175 | first.dialCode.length > second.dialCode.length 176 | ? first 177 | : second 178 | ); 179 | } 180 | } 181 | -------------------------------------------------------------------------------- /projects/lib/src/lib/service/locale.service.ts: -------------------------------------------------------------------------------- 1 | import {Injectable} from '@angular/core'; 2 | import {CountryLocale} from '../interface/country-locale.interface'; 3 | import {CountryCode} from "../interface/country-code.interface"; 4 | 5 | @Injectable() 6 | export class LocaleService { 7 | private locales: CountryLocale = { 8 | 'en': { 9 | 'ax': 'AALAND ISLANDS', 10 | 'af': 'AFGHANISTAN', 11 | 'al': 'ALBANIA', 12 | 'dz': 'ALGERIA', 13 | 'as': 'AMERICAN SAMOA', 14 | 'ad': 'ANDORRA', 15 | 'ao': 'ANGOLA', 16 | 'ai': 'ANGUILLA', 17 | 'aq': 'ANTARCTICA', 18 | 'ag': 'ANTIGUA AND BARBUDA', 19 | 'ar': 'ARGENTINA', 20 | 'am': 'ARMENIA', 21 | 'aw': 'ARUBA', 22 | 'au': 'AUSTRALIA', 23 | 'at': 'AUSTRIA', 24 | 'az': 'AZERBAIJAN', 25 | 'bs': 'BAHAMAS', 26 | 'bh': 'BAHRAIN', 27 | 'bd': 'BANGLADESH', 28 | 'bb': 'BARBADOS', 29 | 'by': 'BELARUS', 30 | 'be': 'BELGIUM', 31 | 'bz': 'BELIZE', 32 | 'bj': 'BENIN', 33 | 'bm': 'BERMUDA', 34 | 'bt': 'BHUTAN', 35 | 'bo': 'BOLIVIA', 36 | 'ba': 'BOSNIA AND HERZEGOWINA', 37 | 'bw': 'BOTSWANA', 38 | 'bv': 'BOUVET ISLAND', 39 | 'br': 'BRAZIL', 40 | 'io': 'BRITISH INDIAN OCEAN TERRITORY', 41 | 'bn': 'BRUNEI DARUSSALAM', 42 | 'bg': 'BULGARIA', 43 | 'bf': 'BURKINA FASO', 44 | 'bi': 'BURUNDI', 45 | 'bq': 'CARIBBEAN NETHERLANDS', 46 | 'kh': 'CAMBODIA', 47 | 'cm': 'CAMEROON', 48 | 'ca': 'CANADA', 49 | 'cv': 'CAPE VERDE', 50 | 'ky': 'CAYMAN ISLANDS', 51 | 'cf': 'CENTRAL AFRICAN REPUBLIC', 52 | 'td': 'CHAD', 53 | 'cl': 'CHILE', 54 | 'cn': 'CHINA', 55 | 'cx': 'CHRISTMAS ISLAND', 56 | 'cc': 'COCOS ISLANDS', 57 | 'co': 'COLOMBIA', 58 | 'km': 'COMOROS', 59 | 'cd': 'CONGO', 60 | 'cg': 'CONGO REPUBLIC', 61 | 'ck': 'COOK ISLANDS', 62 | 'cr': 'COSTA RICA', 63 | 'ci': 'COTE DIVOIRE', 64 | 'hr': 'CROATIA ', 65 | 'cu': 'CUBA', 66 | 'cw': 'CURACAO', 67 | 'cy': 'CYPRUS', 68 | 'cz': 'CZECH REPUBLIC', 69 | 'dk': 'DENMARK', 70 | 'dj': 'DJIBOUTI', 71 | 'dm': 'DOMINICA', 72 | 'do': 'DOMINICAN REPUBLIC', 73 | 'ec': 'ECUADOR', 74 | 'eg': 'EGYPT', 75 | 'sv': 'EL SALVADOR', 76 | 'gq': 'EQUATORIAL GUINEA', 77 | 'er': 'ERITREA', 78 | 'ee': 'ESTONIA', 79 | 'et': 'ETHIOPIA', 80 | 'fk': 'FALKLAND ISLANDS (MALVINAS)', 81 | 'fo': 'FAROE ISLANDS', 82 | 'fj': 'FIJI', 83 | 'fi': 'FINLAND', 84 | 'fr': 'FRANCE', 85 | 'gf': 'FRENCH GUIANA', 86 | 'pf': 'FRENCH POLYNESIA', 87 | 'tf': 'FRENCH SOUTHERN TERRITORIES', 88 | 'ga': 'GABON', 89 | 'gm': 'GAMBIA', 90 | 'ge': 'GEORGIA', 91 | 'de': 'GERMANY', 92 | 'gh': 'GHANA', 93 | 'gi': 'GIBRALTAR', 94 | 'gr': 'GREECE', 95 | 'gl': 'GREENLAND', 96 | 'gd': 'GRENADA', 97 | 'gp': 'GUADELOUPE', 98 | 'gu': 'GUAM', 99 | 'gt': 'GUATEMALA', 100 | 'gg': 'GUERNSEY', 101 | 'gn': 'GUINEA', 102 | 'gw': 'GUINEA-BISSAU', 103 | 'gy': 'GUYANA', 104 | 'ht': 'HAITI', 105 | 'hm': 'HEARD AND MC DONALD ISLANDS', 106 | 'hn': 'HONDURAS', 107 | 'hk': 'HONG KONG', 108 | 'hu': 'HUNGARY', 109 | 'is': 'ICELAND', 110 | 'in': 'INDIA', 111 | 'id': 'INDONESIA', 112 | 'ir': 'IRAN ', 113 | 'iq': 'IRAQ', 114 | 'ie': 'IRELAND', 115 | 'im': 'ISLA DE MAN', 116 | 'il': 'ISRAEL', 117 | 'it': 'ITALY', 118 | 'jm': 'JAMAICA', 119 | 'jp': 'JAPAN', 120 | 'je': 'JERSEY', 121 | 'jo': 'JORDAN', 122 | 'kz': 'KAZAKHSTAN', 123 | 'ke': 'KENYA', 124 | 'ki': 'KIRIBATI', 125 | 'kp': 'KOREA NORTH ', 126 | 'kr': 'KOREA SOUTH', 127 | 'xk': 'KOSOVO', 128 | 'kw': 'KUWAIT', 129 | 'kg': 'KYRGYZSTAN', 130 | 'la': 'LAO', 131 | 'lv': 'LATVIA', 132 | 'lb': 'LEBANON', 133 | 'ls': 'LESOTHO', 134 | 'lr': 'LIBERIA', 135 | 'ly': 'LIBYAN ARAB JAMAHIRIYA', 136 | 'li': 'LIECHTENSTEIN', 137 | 'lt': 'LITHUANIA', 138 | 'lu': 'LUXEMBOURG', 139 | 'mo': 'MACAU', 140 | 'mk': 'MACEDONIA', 141 | 'mg': 'MADAGASCAR', 142 | 'mw': 'MALAWI', 143 | 'my': 'MALAYSIA', 144 | 'mv': 'MALDIVES', 145 | 'ml': 'MALI', 146 | 'mt': 'MALTA', 147 | 'mh': 'MARSHALL ISLANDS', 148 | 'mq': 'MARTINIQUE', 149 | 'mr': 'MAURITANIA', 150 | 'mu': 'MAURITIUS', 151 | 'yt': 'MAYOTTE', 152 | 'mx': 'MEXICO', 153 | 'fm': 'MICRONESIA', 154 | 'md': 'MOLDOVA', 155 | 'mc': 'MONACO', 156 | 'mn': 'MONGOLIA', 157 | 'me': 'MONTENEGRO', 158 | 'ms': 'MONTSERRAT', 159 | 'ma': 'MOROCCO', 160 | 'mz': 'MOZAMBIQUE', 161 | 'mm': 'MYANMAR', 162 | 'na': 'NAMIBIA', 163 | 'nr': 'NAURU', 164 | 'np': 'NEPAL', 165 | 'nl': 'NETHERLANDS', 166 | 'an': 'NETHERLANDS ANTILLES', 167 | 'nc': 'NEW CALEDONIA', 168 | 'nz': 'NEW ZEALAND', 169 | 'ni': 'NICARAGUA', 170 | 'ne': 'NIGER', 171 | 'ng': 'NIGERIA', 172 | 'nu': 'NIUE', 173 | 'nf': 'NORFOLK ISLAND', 174 | 'mp': 'NORTHERN MARIANA ISLANDS', 175 | 'no': 'NORWAY', 176 | 'om': 'OMAN', 177 | 'pk': 'PAKISTAN', 178 | 'pw': 'PALAU', 179 | 'ps': 'PALESTINA', 180 | 'pa': 'PANAMA', 181 | 'pg': 'PAPUA NEW GUINEA', 182 | 'py': 'PARAGUAY', 183 | 'pe': 'PERU', 184 | 'ph': 'PHILIPPINES', 185 | 'pn': 'PITCAIRN', 186 | 'pl': 'POLAND', 187 | 'pt': 'PORTUGAL', 188 | 'pr': 'PUERTO RICO', 189 | 'qa': 'QATAR', 190 | 're': 'REUNION', 191 | 'ro': 'ROMANIA', 192 | 'ru': 'RUSSIAN FEDERATION', 193 | 'rw': 'RWANDA', 194 | 'sh': 'SAINT HELENA', 195 | 'kn': 'SAINT KITTS AND NEVIS', 196 | 'lc': 'SAINT LUCIA', 197 | 'pm': 'SAINT PIERRE AND MIQUELON', 198 | 'vc': 'SAINT VINCENT AND THE GRENADINES', 199 | 'ws': 'SAMOA', 200 | 'bl': 'SAN BARTOLOMÉ', 201 | 'sm': 'SAN MARINO', 202 | 'st': 'SAO TOME AND PRINCIPE', 203 | 'sa': 'SAUDI ARABIA', 204 | 'sn': 'SENEGAL', 205 | 'cs': 'SERBIA AND MONTENEGRO', 206 | 'rs': 'SERBIA', 207 | 'sc': 'SEYCHELLES', 208 | 'sl': 'SIERRA LEONE', 209 | 'sg': 'SINGAPORE', 210 | 'sx': 'SINT MAARTEN', 211 | 'sk': 'SLOVAKIA', 212 | 'si': 'SLOVENIA', 213 | 'sb': 'SOLOMON ISLANDS', 214 | 'so': 'SOMALIA', 215 | 'za': 'SOUTH AFRICA', 216 | 'gs': 'SOUTH GEORGIA ISLANDS', 217 | 'es': 'SPAIN', 218 | 'lk': 'SRI LANKA', 219 | 'sd': 'SUDAN', 220 | 'ss': 'SOUTH SUDAN', 221 | 'sr': 'SURINAME', 222 | 'sj': 'SVALBARD AND JAN MAYEN ISLANDS', 223 | 'sz': 'SWAZILAND', 224 | 'se': 'SWEDEN', 225 | 'ch': 'SWITZERLAND', 226 | 'sy': 'SYRIAN ARAB REPUBLIC', 227 | 'tw': 'TAIWAN', 228 | 'tj': 'TAJIKISTAN', 229 | 'tz': 'TANZANIA', 230 | 'th': 'THAILAND', 231 | 'tl': 'TIMOR-LESTE', 232 | 'tg': 'TOGO', 233 | 'tk': 'TOKELAU', 234 | 'to': 'TONGA', 235 | 'tt': 'TRINIDAD AND TOBAGO', 236 | 'tn': 'TUNISIA', 237 | 'tr': 'TURKEY', 238 | 'tm': 'TURKMENISTAN', 239 | 'tc': 'TURKS AND CAICOS ISLANDS', 240 | 'tv': 'TUVALU', 241 | 'ug': 'UGANDA', 242 | 'ua': 'UKRAINE', 243 | 'ae': 'UNITED ARAB EMIRATES', 244 | 'gb': 'UNITED KINGDOM', 245 | 'us': 'UNITED STATES', 246 | 'um': 'UNITED STATES MINOR OUTLYING ISLANDS', 247 | 'uy': 'URUGUAY', 248 | 'uz': 'UZBEKISTAN', 249 | 'vu': 'VANUATU', 250 | 'va': 'VATICAN CITY STATE', 251 | 've': 'VENEZUELA', 252 | 'vn': 'VIET NAM', 253 | 'vg': 'VIRGIN ISLANDS (BRITISH)', 254 | 'vi': 'VIRGIN ISLANDS (U.S.)', 255 | 'wf': 'WALLIS AND FUTUNA ISLANDS', 256 | 'eh': 'WESTERN SAHARA', 257 | 'ye': 'YEMEN', 258 | 'zm': 'ZAMBIA', 259 | 'zw': 'ZIMBABWE ' 260 | }, 261 | 'es': { 262 | 'ax': 'ISLAS ÁLAND', 263 | 'af': 'AFGHANISTÁN', 264 | 'al': 'ALBANIA', 265 | 'dz': 'ARGEL', 266 | 'as': 'SAMOA AMERICANA', 267 | 'ad': 'ANDORRA', 268 | 'ao': 'ANGOLA', 269 | 'ai': 'ANGUILA', 270 | 'aq': 'ANTÁRTIDA', 271 | 'ag': 'ANTIGUA Y BARBUDA', 272 | 'ar': 'ARGENTINA', 273 | 'am': 'ARMENIA', 274 | 'aw': 'ARUBA', 275 | 'au': 'AUSTRALIA', 276 | 'at': 'AUSTRIA', 277 | 'az': 'AZERBAIYÁN', 278 | 'bs': 'BAHAMAS', 279 | 'bh': 'BAHRÉIN', 280 | 'bd': 'BANGLADESH', 281 | 'bb': 'BARBADOS', 282 | 'by': 'BELARÚS', 283 | 'be': 'BÉLGICA', 284 | 'bz': 'BELICE', 285 | 'bj': 'BENIN', 286 | 'bm': 'BERMUDAAS', 287 | 'bt': 'BHUTÁN', 288 | 'bo': 'BOLIVIA', 289 | 'ba': 'BOSNIA Y HERZEGOVINA', 290 | 'bw': 'BOTSUANA', 291 | 'bv': 'ISLA BOUVET', 292 | 'br': 'BRASIL', 293 | 'io': 'TERRITORIO BRITÁNICO DEL OCÉANO ÍNDICO', 294 | 'bn': 'BRUNÉI', 295 | 'bg': 'BULGARIA', 296 | 'bf': 'BURKINA FASO', 297 | 'bi': 'BURUNDI', 298 | 'bq': 'CARIBE PAÍSES BAJOS', 299 | 'kh': 'CAMBOYA', 300 | 'cm': 'CAMERÚN', 301 | 'ca': 'CANADÁ', 302 | 'cv': 'CABO VERDE', 303 | 'ky': 'ISLAS CAIMÁN', 304 | 'cf': 'REPÚBLICA CENTRO-AFRICANA', 305 | 'td': 'CHAD', 306 | 'cl': 'CHILE', 307 | 'cn': 'CHINA', 308 | 'cx': 'ISLAS CHRISTMAS', 309 | 'cc': 'ISLAS COCOS', 310 | 'co': 'COLOMBIA', 311 | 'km': 'COMOROS', 312 | 'cd': 'CONGO (ZAIRE)', 313 | 'cg': 'CONGO', 314 | 'ck': 'ISLAS COOK', 315 | 'cr': 'COSTA RICA', 316 | 'ci': 'COSTA DE MARFIL', 317 | 'hr': 'CROACIA ', 318 | 'cu': 'CUBA', 319 | 'cw': 'CURAÇAO', 320 | 'cy': 'CHIPRE', 321 | 'cz': 'REPÚBLICA CHECA', 322 | 'dk': 'DINAMARCA', 323 | 'dj': 'YIBUTI', 324 | 'dm': 'DOMÍNICA', 325 | 'do': 'REPÚBLICA DOMINICANA', 326 | 'ec': 'ECUADOR', 327 | 'eg': 'EGIPTO', 328 | 'sv': 'EL SALVADOR', 329 | 'gq': 'GUINEA ECUATORIAL', 330 | 'er': 'ERITREA', 331 | 'ee': 'ESTONIA', 332 | 'et': 'ETIOPÍA', 333 | 'fk': 'ISLAS MALVINAS', 334 | 'fo': 'ISLAS FAROE', 335 | 'fj': 'FIJI', 336 | 'fi': 'FINLANDIA', 337 | 'fr': 'FRANCIA', 338 | 'gf': 'GUIANA FRANCESA', 339 | 'pf': 'POLYNESIA FRANCESA', 340 | 'tf': 'TERRITORIOS AUSTRALES FRANCESES', 341 | 'ga': 'GABÓN', 342 | 'gm': 'GAMBIA', 343 | 'ge': 'GEORGIA', 344 | 'de': 'ALEMANIA', 345 | 'gh': 'GHANA', 346 | 'gi': 'GIBRALTAR', 347 | 'gr': 'GREECE', 348 | 'gl': 'GROENLANDIA', 349 | 'gd': 'GRANADA', 350 | 'gp': 'GUADALUPE', 351 | 'gu': 'GUAM', 352 | 'gt': 'GUATEMALA', 353 | 'gg': 'GUERNSEY', 354 | 'gn': 'GUINEA', 355 | 'gw': 'GUINEA-BISSAU', 356 | 'gy': 'GUYANA', 357 | 'ht': 'HAITI', 358 | 'hm': 'ISLAS HEARD Y MC DONALD', 359 | 'hn': 'HONDURAS', 360 | 'hk': 'HONG KONG', 361 | 'hu': 'HUNGRÍA', 362 | 'is': 'ISLANDIA', 363 | 'in': 'INDIA', 364 | 'id': 'INDONESIA', 365 | 'ir': 'IRÁN', 366 | 'iq': 'IRAK', 367 | 'ie': 'IRLANDA', 368 | 'im': 'ISLA DE MAN', 369 | 'il': 'ISRAEL', 370 | 'it': 'ITALIA', 371 | 'jm': 'JAMAICA', 372 | 'jp': 'JAPÓN', 373 | 'je': 'JERSEY', 374 | 'jo': 'JORDANIA', 375 | 'kz': 'KAZAJSTÁN', 376 | 'ke': 'KENIA', 377 | 'ki': 'KIRIBATI', 378 | 'kp': 'KOREA DEL NORTE', 379 | 'kr': 'KOREA DEL SUR', 380 | 'xk': 'KOSOVO', 381 | 'kw': 'KUWAIT', 382 | 'kg': 'KIRGUISTÁN', 383 | 'la': 'LAOS', 384 | 'lv': 'LETONIA', 385 | 'lb': 'LÍBANO', 386 | 'ls': 'LESOTHO', 387 | 'lr': 'LIBERIA', 388 | 'ly': 'LIBIA', 389 | 'li': 'LIECHTENSTEIN', 390 | 'lt': 'LITUANIA', 391 | 'lu': 'LUXEMBURGO', 392 | 'mo': 'MACAO', 393 | 'mk': 'MACEDONIA', 394 | 'mg': 'MADAGASCAR', 395 | 'mw': 'MALAWI', 396 | 'my': 'MALASIA', 397 | 'mv': 'MALDIVAS', 398 | 'ml': 'MALI', 399 | 'mt': 'MALTA', 400 | 'mh': 'ISLAS MARSHALL', 401 | 'mq': 'MATINICA', 402 | 'mr': 'MAURITANIA', 403 | 'mu': 'MAURICIO', 404 | 'yt': 'MAYOTTE', 405 | 'mx': 'MÉXICO', 406 | 'fm': 'MICRONESIA', 407 | 'md': 'MOLDOVA', 408 | 'mc': 'MÓNACO', 409 | 'mn': 'MONGOLIA', 410 | 'me': 'MONTENEGRO', 411 | 'ms': 'MONTSERRAT', 412 | 'ma': 'MARRUECOS', 413 | 'mz': 'MOZAMBIQUE', 414 | 'mm': 'MYANMAR', 415 | 'na': 'NAMIBIA', 416 | 'nr': 'NAURU', 417 | 'np': 'NEPAL', 418 | 'nl': 'PAÍSES BAJOS', 419 | 'an': 'ANTILLAS NEERLANDESAS', 420 | 'nc': 'NUEVA CALEDONIA', 421 | 'nz': 'NUEVA ZELANDA', 422 | 'ni': 'NICARAGUA', 423 | 'ne': 'NÍGER', 424 | 'ng': 'NIGERIA', 425 | 'nu': 'NIUE', 426 | 'nf': 'ISLAS NORKFOLK', 427 | 'mp': 'ISLAS MARIANAS DEL NORTE', 428 | 'no': 'NORUEGA', 429 | 'om': 'OMÁN', 430 | 'pk': 'PAKISTÁN', 431 | 'pw': 'ISLAS PALAOS', 432 | 'ps': 'PALESTINA', 433 | 'pa': 'PANAMÁ', 434 | 'pg': 'PAPÚA NUEVA GUINEA', 435 | 'py': 'PARAGUAY', 436 | 'pe': 'PERÚ', 437 | 'ph': 'FILIPINAS', 438 | 'pn': 'ISLAS PITCAIRN', 439 | 'pl': 'POLONIA', 440 | 'pt': 'PORTUGAL', 441 | 'pr': 'PUERTO RICO', 442 | 'qa': 'QATAR', 443 | 're': 'REUNIÓN', 444 | 'ro': 'RUMANÍA', 445 | 'ru': 'RUSIA', 446 | 'rw': 'RUANDA', 447 | 'sh': 'SANTA ELENA', 448 | 'kn': 'SAN CRISTÓBAL Y NIEVES', 449 | 'lc': 'SANTA LUCÍA', 450 | 'pm': 'SAN PEDRO Y MIQUELÓN', 451 | 'vc': 'SAN VICENTE Y LAS GRANADINAS', 452 | 'ws': 'SAMOA', 453 | 'bl': 'SAN BARTOLOMÉ', 454 | 'sm': 'SAN MARINO', 455 | 'st': 'SANTO TOMÉ Y PRÍNCIPE', 456 | 'sa': 'ARABIA SAUDITA', 457 | 'sn': 'SENEGAL', 458 | 'cs': 'SERBIA Y MONTENEGRO', 459 | 'rs': 'SERBIA', 460 | 'sc': 'SEYCHELLES', 461 | 'sl': 'SIERRA LEONA', 462 | 'sg': 'SINGAPUR', 463 | 'sx': 'SINT MAARTEN', 464 | 'sk': 'ESLOVAQUIA', 465 | 'si': 'ESLOVENIA', 466 | 'sb': 'ISLAS SOLOMÓN', 467 | 'so': 'SOMALIA', 468 | 'za': 'SUDÁFRICA', 469 | 'gs': 'GEORGIA DEL SUR E ISLAS SANDWICH DEL SUR', 470 | 'es': 'ESPAÑA', 471 | 'lk': 'SRI LANKA', 472 | 'sd': 'SUDÁN', 473 | 'ss': 'SUDÁN DEL SUR', 474 | 'sr': 'SURINAM', 475 | 'sj': 'ISLAS SVALBARD Y JAN MAYEN', 476 | 'sz': 'SUAZILANDIA', 477 | 'se': 'SUECIA', 478 | 'ch': 'SUIZA', 479 | 'sy': 'SIRIA', 480 | 'tw': 'TAIWÁN', 481 | 'tj': 'TAYIKISTÁN', 482 | 'tz': 'TANZANIA', 483 | 'th': 'TAILANDIA', 484 | 'tl': 'TIMOR-LESTE', 485 | 'tg': 'TOGO', 486 | 'tk': 'TOKELAU', 487 | 'to': 'TONGA', 488 | 'tt': 'TRINIDAD Y TOBAGO', 489 | 'tn': 'TÚNEZ', 490 | 'tr': 'TURQUÍA', 491 | 'tm': 'TURKMENISTÁN', 492 | 'tc': 'ISLAS TURCAS Y CAICOS', 493 | 'tv': 'TUVALU', 494 | 'ug': 'UGANDA', 495 | 'ua': 'UCRANIA', 496 | 'ae': 'EMIRATOS ÁRABES UNIDOS', 497 | 'gb': 'REINO UNIDO', 498 | 'us': 'ESTADOS UNIDOS DE AMÉRICA', 499 | 'um': 'ESTADOS UNIDOS ISLAS MINOR OUTLYING', 500 | 'uy': 'URUGUAY', 501 | 'uz': 'UZBEKISTÁN', 502 | 'vu': 'VANUATU', 503 | 'va': 'CIUDAD DEL VATICANO', 504 | 've': 'VENEZUELA', 505 | 'vn': 'VIETNAM', 506 | 'vg': 'ISLAS VÍRGENES (INGLESAS)', 507 | 'vi': 'ISLAS VÍRGENES (U.S.)', 508 | 'wf': 'WALLIS Y FUTUNA', 509 | 'eh': 'SAHARA OCCIDENTAL', 510 | 'ye': 'YEMEN', 511 | 'zm': 'ZAMBIA', 512 | 'zw': 'ZIMBABUE ' 513 | } 514 | }; 515 | 516 | getLocales(locale: string): CountryCode { 517 | if (locale && this.locales.hasOwnProperty(locale)) { 518 | // User given locale 519 | return this.locales[locale]; 520 | } 521 | // Default: en 522 | return this.locales['en']; 523 | } 524 | } 525 | -------------------------------------------------------------------------------- /projects/lib/src/lib/service/country.service.ts: -------------------------------------------------------------------------------- 1 | import {Injectable} from '@angular/core'; 2 | import {Country} from "../interface/country.interface"; 3 | 4 | @Injectable() 5 | export class CountryService { 6 | 7 | countries: Country[]; 8 | 9 | constructor() { 10 | this.countries = [ 11 | { 12 | name: '', 13 | dialCode: '994', 14 | countryCode: 'az' 15 | }, 16 | { 17 | name: '', 18 | dialCode: '1242', 19 | countryCode: 'bs' 20 | }, 21 | { 22 | name: '', 23 | dialCode: '973', 24 | countryCode: 'bh' 25 | }, 26 | { 27 | name: '', 28 | dialCode: '880', 29 | countryCode: 'bd' 30 | }, 31 | { 32 | name: '', 33 | dialCode: '1246', 34 | countryCode: 'bb' 35 | }, 36 | { 37 | name: '', 38 | dialCode: '375', 39 | countryCode: 'by' 40 | }, 41 | { 42 | name: '', 43 | dialCode: '32', 44 | countryCode: 'be' 45 | }, 46 | { 47 | name: '', 48 | dialCode: '501', 49 | countryCode: 'bz' 50 | }, 51 | { 52 | name: '', 53 | dialCode: '229', 54 | countryCode: 'bj' 55 | }, 56 | { 57 | name: '', 58 | dialCode: '1441', 59 | countryCode: 'bm' 60 | }, 61 | { 62 | name: '', 63 | dialCode: '975', 64 | countryCode: 'bt' 65 | }, 66 | { 67 | name: '', 68 | dialCode: '591', 69 | countryCode: 'bo' 70 | }, 71 | { 72 | name: '', 73 | dialCode: '387', 74 | countryCode: 'ba' 75 | }, 76 | { 77 | name: '', 78 | dialCode: '267', 79 | countryCode: 'bw' 80 | }, 81 | { 82 | name: '', 83 | dialCode: '55', 84 | countryCode: 'br' 85 | }, 86 | { 87 | name: '', 88 | dialCode: '246', 89 | countryCode: 'io' 90 | }, 91 | { 92 | name: '', 93 | dialCode: '1284', 94 | countryCode: 'vg' 95 | }, 96 | { 97 | name: '', 98 | dialCode: '673', 99 | countryCode: 'bn' 100 | }, 101 | { 102 | name: '', 103 | dialCode: '359', 104 | countryCode: 'bg' 105 | }, 106 | { 107 | name: '', 108 | dialCode: '226', 109 | countryCode: 'bf' 110 | }, 111 | { 112 | name: '', 113 | dialCode: '257', 114 | countryCode: 'bi' 115 | }, 116 | { 117 | name: '', 118 | dialCode: '855', 119 | countryCode: 'kh' 120 | }, 121 | { 122 | name: '', 123 | dialCode: '237', 124 | countryCode: 'cm' 125 | }, 126 | { 127 | name: '', 128 | dialCode: '1', 129 | countryCode: 'ca' 130 | }, 131 | { 132 | name: '', 133 | dialCode: '238', 134 | countryCode: 'cv' 135 | }, 136 | { 137 | name: '', 138 | dialCode: '599', 139 | countryCode: 'bq' 140 | }, 141 | { 142 | name: '', 143 | dialCode: '1345', 144 | countryCode: 'ky' 145 | }, 146 | { 147 | name: '', 148 | dialCode: '236', 149 | countryCode: 'cf' 150 | }, 151 | { 152 | name: '', 153 | dialCode: '235', 154 | countryCode: 'td' 155 | }, 156 | { 157 | name: '', 158 | dialCode: '56', 159 | countryCode: 'cl' 160 | }, 161 | { 162 | name: '', 163 | dialCode: '86', 164 | countryCode: 'cn' 165 | }, 166 | { 167 | name: '', 168 | dialCode: '61', 169 | countryCode: 'au' 170 | }, 171 | { 172 | name: '', 173 | dialCode: '57', 174 | countryCode: 'co' 175 | }, 176 | { 177 | name: '', 178 | dialCode: '269', 179 | countryCode: 'km' 180 | }, 181 | { 182 | name: '', 183 | dialCode: '243', 184 | countryCode: 'cd' 185 | }, 186 | { 187 | name: '', 188 | dialCode: '242', 189 | countryCode: 'cg' 190 | }, 191 | { 192 | name: '', 193 | dialCode: '682', 194 | countryCode: 'ck' 195 | }, 196 | { 197 | name: '', 198 | dialCode: '506', 199 | countryCode: 'cr' 200 | }, 201 | { 202 | name: '', 203 | dialCode: '225', 204 | countryCode: 'ci' 205 | }, 206 | { 207 | name: '', 208 | dialCode: '385', 209 | countryCode: 'hr' 210 | }, 211 | { 212 | name: '', 213 | dialCode: '53', 214 | countryCode: 'cu' 215 | }, 216 | { 217 | name: '', 218 | dialCode: '599', 219 | countryCode: 'cw' 220 | }, 221 | { 222 | name: '', 223 | dialCode: '357', 224 | countryCode: 'cy' 225 | }, 226 | { 227 | name: '', 228 | dialCode: '420', 229 | countryCode: 'cz' 230 | }, 231 | { 232 | name: '', 233 | dialCode: '45', 234 | countryCode: 'dk' 235 | }, 236 | { 237 | name: '', 238 | dialCode: '253', 239 | countryCode: 'dj' 240 | }, 241 | { 242 | name: '', 243 | dialCode: '1767', 244 | countryCode: 'dm' 245 | }, 246 | { 247 | name: '', 248 | dialCode: '1', 249 | countryCode: 'do' 250 | }, 251 | { 252 | name: '', 253 | dialCode: '593', 254 | countryCode: 'ec' 255 | }, 256 | { 257 | name: '', 258 | dialCode: '20', 259 | countryCode: 'eg' 260 | }, 261 | { 262 | name: '', 263 | dialCode: '503', 264 | countryCode: 'sv' 265 | }, 266 | { 267 | name: '', 268 | dialCode: '240', 269 | countryCode: 'gq' 270 | }, 271 | { 272 | name: '', 273 | dialCode: '291', 274 | countryCode: 'er' 275 | }, 276 | { 277 | name: '', 278 | dialCode: '372', 279 | countryCode: 'ee' 280 | }, 281 | { 282 | name: '', 283 | dialCode: '251', 284 | countryCode: 'et' 285 | }, 286 | { 287 | name: '', 288 | dialCode: '500', 289 | countryCode: 'fk' 290 | }, 291 | { 292 | name: '', 293 | dialCode: '298', 294 | countryCode: 'fo' 295 | }, 296 | { 297 | name: '', 298 | dialCode: '679', 299 | countryCode: 'fj' 300 | }, 301 | { 302 | name: '', 303 | dialCode: '358', 304 | countryCode: 'fi' 305 | }, 306 | { 307 | name: '', 308 | dialCode: '33', 309 | countryCode: 'fr' 310 | }, 311 | { 312 | name: '', 313 | dialCode: '594', 314 | countryCode: 'gf' 315 | }, 316 | { 317 | name: '', 318 | dialCode: '689', 319 | countryCode: 'pf' 320 | }, 321 | { 322 | name: '', 323 | dialCode: '241', 324 | countryCode: 'ga' 325 | }, 326 | { 327 | name: '', 328 | dialCode: '220', 329 | countryCode: 'gm' 330 | }, 331 | { 332 | name: '', 333 | dialCode: '995', 334 | countryCode: 'ge' 335 | }, 336 | { 337 | name: '', 338 | dialCode: '49', 339 | countryCode: 'de' 340 | }, 341 | { 342 | name: '', 343 | dialCode: '233', 344 | countryCode: 'gh' 345 | }, 346 | { 347 | name: '', 348 | dialCode: '350', 349 | countryCode: 'gi' 350 | }, 351 | { 352 | name: '', 353 | dialCode: '30', 354 | countryCode: 'gr' 355 | }, 356 | { 357 | name: '', 358 | dialCode: '299', 359 | countryCode: 'gl' 360 | }, 361 | { 362 | name: '', 363 | dialCode: '1473', 364 | countryCode: 'gd' 365 | }, 366 | { 367 | name: '', 368 | dialCode: '590', 369 | countryCode: 'gp' 370 | }, 371 | { 372 | name: '', 373 | dialCode: '1671', 374 | countryCode: 'gu' 375 | }, 376 | { 377 | name: '', 378 | dialCode: '502', 379 | countryCode: 'gt' 380 | }, 381 | { 382 | name: '', 383 | dialCode: '44', 384 | countryCode: 'gg' 385 | }, 386 | { 387 | name: '', 388 | dialCode: '224', 389 | countryCode: 'gn' 390 | }, 391 | { 392 | name: '', 393 | dialCode: '245', 394 | countryCode: 'gw' 395 | }, 396 | { 397 | name: '', 398 | dialCode: '592', 399 | countryCode: 'gy' 400 | }, 401 | { 402 | name: '', 403 | dialCode: '509', 404 | countryCode: 'ht' 405 | }, 406 | { 407 | name: '', 408 | dialCode: '504', 409 | countryCode: 'hn' 410 | }, 411 | { 412 | name: '', 413 | dialCode: '852', 414 | countryCode: 'hk' 415 | }, 416 | { 417 | name: '', 418 | dialCode: '36', 419 | countryCode: 'hu' 420 | }, 421 | { 422 | name: '', 423 | dialCode: '354', 424 | countryCode: 'is' 425 | }, 426 | { 427 | name: '', 428 | dialCode: '91', 429 | countryCode: 'in' 430 | }, 431 | { 432 | name: '', 433 | dialCode: '62', 434 | countryCode: 'id' 435 | }, 436 | { 437 | name: '', 438 | dialCode: '98', 439 | countryCode: 'ir' 440 | }, 441 | { 442 | name: '', 443 | dialCode: '964', 444 | countryCode: 'iq' 445 | }, 446 | { 447 | name: '', 448 | dialCode: '353', 449 | countryCode: 'ie' 450 | }, 451 | { 452 | name: '', 453 | dialCode: '44', 454 | countryCode: 'im' 455 | }, 456 | { 457 | name: '', 458 | dialCode: '972', 459 | countryCode: 'il' 460 | }, 461 | { 462 | name: '', 463 | dialCode: '39', 464 | countryCode: 'it' 465 | }, 466 | { 467 | name: '', 468 | dialCode: '1876', 469 | countryCode: 'jm' 470 | }, 471 | { 472 | name: '', 473 | dialCode: '81', 474 | countryCode: 'jp' 475 | }, 476 | { 477 | name: '', 478 | dialCode: '44', 479 | countryCode: 'je' 480 | }, 481 | { 482 | name: '', 483 | dialCode: '962', 484 | countryCode: 'jo' 485 | }, 486 | { 487 | name: '', 488 | dialCode: '7', 489 | countryCode: 'kz' 490 | }, 491 | { 492 | name: '', 493 | dialCode: '254', 494 | countryCode: 'ke' 495 | }, 496 | { 497 | name: '', 498 | dialCode: '686', 499 | countryCode: 'ki' 500 | }, 501 | { 502 | name: '', 503 | dialCode: '383', 504 | countryCode: 'xk' 505 | }, 506 | { 507 | name: '', 508 | dialCode: '965', 509 | countryCode: 'kw' 510 | }, 511 | { 512 | name: '', 513 | dialCode: '996', 514 | countryCode: 'kg' 515 | }, 516 | { 517 | name: '', 518 | dialCode: '856', 519 | countryCode: 'la' 520 | }, 521 | { 522 | name: '', 523 | dialCode: '371', 524 | countryCode: 'lv' 525 | }, 526 | { 527 | name: '', 528 | dialCode: '961', 529 | countryCode: 'lb' 530 | }, 531 | { 532 | name: '', 533 | dialCode: '266', 534 | countryCode: 'ls' 535 | }, 536 | { 537 | name: '', 538 | dialCode: '231', 539 | countryCode: 'lr' 540 | }, 541 | { 542 | name: '', 543 | dialCode: '218', 544 | countryCode: 'ly' 545 | }, 546 | { 547 | name: '', 548 | dialCode: '423', 549 | countryCode: 'li' 550 | }, 551 | { 552 | name: '', 553 | dialCode: '370', 554 | countryCode: 'lt' 555 | }, 556 | { 557 | name: '', 558 | dialCode: '352', 559 | countryCode: 'lu' 560 | }, 561 | { 562 | name: '', 563 | dialCode: '853', 564 | countryCode: 'mo' 565 | }, 566 | { 567 | name: '', 568 | dialCode: '389', 569 | countryCode: 'mk' 570 | }, 571 | { 572 | name: '', 573 | dialCode: '261', 574 | countryCode: 'mg' 575 | }, 576 | { 577 | name: '', 578 | dialCode: '265', 579 | countryCode: 'mw' 580 | }, 581 | { 582 | name: '', 583 | dialCode: '60', 584 | countryCode: 'my' 585 | }, 586 | { 587 | name: '', 588 | dialCode: '960', 589 | countryCode: 'mv' 590 | }, 591 | { 592 | name: '', 593 | dialCode: '223', 594 | countryCode: 'ml' 595 | }, 596 | { 597 | name: '', 598 | dialCode: '356', 599 | countryCode: 'mt' 600 | }, 601 | { 602 | name: '', 603 | dialCode: '692', 604 | countryCode: 'mh' 605 | }, 606 | { 607 | name: '', 608 | dialCode: '596', 609 | countryCode: 'mq' 610 | }, 611 | { 612 | name: '', 613 | dialCode: '222', 614 | countryCode: 'mr' 615 | }, 616 | { 617 | name: '', 618 | dialCode: '230', 619 | countryCode: 'mu' 620 | }, 621 | { 622 | name: '', 623 | dialCode: '262', 624 | countryCode: 'yt' 625 | }, 626 | { 627 | name: '', 628 | dialCode: '52', 629 | countryCode: 'mx' 630 | }, 631 | { 632 | name: '', 633 | dialCode: '691', 634 | countryCode: 'fm' 635 | }, 636 | { 637 | name: '', 638 | dialCode: '373', 639 | countryCode: 'md' 640 | }, 641 | { 642 | name: '', 643 | dialCode: '377', 644 | countryCode: 'mc' 645 | }, 646 | { 647 | name: '', 648 | dialCode: '976', 649 | countryCode: 'mn' 650 | }, 651 | { 652 | name: '', 653 | dialCode: '382', 654 | countryCode: 'me' 655 | }, 656 | { 657 | name: '', 658 | dialCode: '1664', 659 | countryCode: 'ms' 660 | }, 661 | { 662 | name: '', 663 | dialCode: '212', 664 | countryCode: 'ma' 665 | }, 666 | { 667 | name: '', 668 | dialCode: '258', 669 | countryCode: 'mz' 670 | }, 671 | { 672 | name: '', 673 | dialCode: '95', 674 | countryCode: 'mm' 675 | }, 676 | { 677 | name: '', 678 | dialCode: '264', 679 | countryCode: 'na' 680 | }, 681 | { 682 | name: '', 683 | dialCode: '674', 684 | countryCode: 'nr' 685 | }, 686 | { 687 | name: '', 688 | dialCode: '977', 689 | countryCode: 'np' 690 | }, 691 | { 692 | name: '', 693 | dialCode: '31', 694 | countryCode: 'nl' 695 | }, 696 | { 697 | name: '', 698 | dialCode: '687', 699 | countryCode: 'nc' 700 | }, 701 | { 702 | name: '', 703 | dialCode: '64', 704 | countryCode: 'nz' 705 | }, 706 | { 707 | name: '', 708 | dialCode: '505', 709 | countryCode: 'ni' 710 | }, 711 | { 712 | name: '', 713 | dialCode: '227', 714 | countryCode: 'ne' 715 | }, 716 | { 717 | name: '', 718 | dialCode: '234', 719 | countryCode: 'ng' 720 | }, 721 | { 722 | name: '', 723 | dialCode: '683', 724 | countryCode: 'nu' 725 | }, 726 | { 727 | name: '', 728 | dialCode: '672', 729 | countryCode: 'nf' 730 | }, 731 | { 732 | name: '', 733 | dialCode: '850', 734 | countryCode: 'kp' 735 | }, 736 | { 737 | name: '', 738 | dialCode: '1670', 739 | countryCode: 'mp' 740 | }, 741 | { 742 | name: '', 743 | dialCode: '47', 744 | countryCode: 'no' 745 | }, 746 | { 747 | name: '', 748 | dialCode: '968', 749 | countryCode: 'om' 750 | }, 751 | { 752 | name: '', 753 | dialCode: '92', 754 | countryCode: 'pk' 755 | }, 756 | { 757 | name: '', 758 | dialCode: '680', 759 | countryCode: 'pw' 760 | }, 761 | { 762 | name: '', 763 | dialCode: '970', 764 | countryCode: 'ps' 765 | }, 766 | { 767 | name: '', 768 | dialCode: '507', 769 | countryCode: 'pa' 770 | }, 771 | { 772 | name: '', 773 | dialCode: '675', 774 | countryCode: 'pg' 775 | }, 776 | { 777 | name: '', 778 | dialCode: '595', 779 | countryCode: 'py' 780 | }, 781 | { 782 | name: '', 783 | dialCode: '51', 784 | countryCode: 'pe' 785 | }, 786 | { 787 | name: '', 788 | dialCode: '63', 789 | countryCode: 'ph' 790 | }, 791 | { 792 | name: '', 793 | dialCode: '48', 794 | countryCode: 'pl' 795 | }, 796 | { 797 | name: '', 798 | dialCode: '351', 799 | countryCode: 'pt' 800 | }, 801 | { 802 | name: '', 803 | dialCode: '1', 804 | countryCode: 'pr' 805 | }, 806 | { 807 | name: '', 808 | dialCode: '974', 809 | countryCode: 'qa' 810 | }, 811 | { 812 | name: '', 813 | dialCode: '262', 814 | countryCode: 're' 815 | }, 816 | { 817 | name: '', 818 | dialCode: '40', 819 | countryCode: 'ro' 820 | }, 821 | { 822 | name: '', 823 | dialCode: '7', 824 | countryCode: 'ru' 825 | }, 826 | { 827 | name: '', 828 | dialCode: '250', 829 | countryCode: 'rw' 830 | }, 831 | { 832 | name: '', 833 | dialCode: '590', 834 | countryCode: 'bl' 835 | }, 836 | { 837 | name: '', 838 | dialCode: '290', 839 | countryCode: 'sh' 840 | }, 841 | { 842 | name: '', 843 | dialCode: '1869', 844 | countryCode: 'kn' 845 | }, 846 | { 847 | name: '', 848 | dialCode: '1758', 849 | countryCode: 'lc' 850 | }, 851 | { 852 | name: '', 853 | dialCode: '508', 854 | countryCode: 'pm' 855 | }, 856 | { 857 | name: '', 858 | dialCode: '1784', 859 | countryCode: 'vc' 860 | }, 861 | { 862 | name: '', 863 | dialCode: '685', 864 | countryCode: 'ws' 865 | }, 866 | { 867 | name: '', 868 | dialCode: '378', 869 | countryCode: 'sm' 870 | }, 871 | { 872 | name: '', 873 | dialCode: '239', 874 | countryCode: 'st' 875 | }, 876 | { 877 | name: '', 878 | dialCode: '966', 879 | countryCode: 'sa' 880 | }, 881 | { 882 | name: '', 883 | dialCode: '221', 884 | countryCode: 'sn' 885 | }, 886 | { 887 | name: '', 888 | dialCode: '381', 889 | countryCode: 'rs' 890 | }, 891 | { 892 | name: '', 893 | dialCode: '248', 894 | countryCode: 'sc' 895 | }, 896 | { 897 | name: '', 898 | dialCode: '232', 899 | countryCode: 'sl' 900 | }, 901 | { 902 | name: '', 903 | dialCode: '65', 904 | countryCode: 'sg' 905 | }, 906 | { 907 | name: '', 908 | dialCode: '1721', 909 | countryCode: 'sx' 910 | }, 911 | { 912 | name: '', 913 | dialCode: '421', 914 | countryCode: 'sk' 915 | }, 916 | { 917 | name: '', 918 | dialCode: '386', 919 | countryCode: 'si' 920 | }, 921 | { 922 | name: '', 923 | dialCode: '677', 924 | countryCode: 'sb' 925 | }, 926 | { 927 | name: '', 928 | dialCode: '252', 929 | countryCode: 'so' 930 | }, 931 | { 932 | name: '', 933 | dialCode: '27', 934 | countryCode: 'za' 935 | }, 936 | { 937 | name: '', 938 | dialCode: '82', 939 | countryCode: 'kr' 940 | }, 941 | { 942 | name: '', 943 | dialCode: '211', 944 | countryCode: 'ss' 945 | }, 946 | { 947 | name: '', 948 | dialCode: '34', 949 | countryCode: 'es' 950 | }, 951 | { 952 | name: '', 953 | dialCode: '94', 954 | countryCode: 'lk' 955 | }, 956 | { 957 | name: '', 958 | dialCode: '249', 959 | countryCode: 'sd' 960 | }, 961 | { 962 | name: '', 963 | dialCode: '597', 964 | countryCode: 'sr' 965 | }, 966 | { 967 | name: '', 968 | dialCode: '47', 969 | countryCode: 'sj' 970 | }, 971 | { 972 | name: '', 973 | dialCode: '268', 974 | countryCode: 'sz' 975 | }, 976 | { 977 | name: '', 978 | dialCode: '46', 979 | countryCode: 'se' 980 | }, 981 | { 982 | name: '', 983 | dialCode: '41', 984 | countryCode: 'ch' 985 | }, 986 | { 987 | name: '', 988 | dialCode: '963', 989 | countryCode: 'sy' 990 | }, 991 | { 992 | name: '', 993 | dialCode: '886', 994 | countryCode: 'tw' 995 | }, 996 | { 997 | name: '', 998 | dialCode: '992', 999 | countryCode: 'tj' 1000 | }, 1001 | { 1002 | name: '', 1003 | dialCode: '255', 1004 | countryCode: 'tz' 1005 | }, 1006 | { 1007 | name: '', 1008 | dialCode: '66', 1009 | countryCode: 'th' 1010 | }, 1011 | { 1012 | name: '', 1013 | dialCode: '670', 1014 | countryCode: 'tl' 1015 | }, 1016 | { 1017 | name: '', 1018 | dialCode: '228', 1019 | countryCode: 'tg' 1020 | }, 1021 | { 1022 | name: '', 1023 | dialCode: '690', 1024 | countryCode: 'tk' 1025 | }, 1026 | { 1027 | name: '', 1028 | dialCode: '676', 1029 | countryCode: 'to' 1030 | }, 1031 | { 1032 | name: '', 1033 | dialCode: '1868', 1034 | countryCode: 'tt' 1035 | }, 1036 | { 1037 | name: '', 1038 | dialCode: '216', 1039 | countryCode: 'tn' 1040 | }, 1041 | { 1042 | name: '', 1043 | dialCode: '90', 1044 | countryCode: 'tr' 1045 | }, 1046 | { 1047 | name: '', 1048 | dialCode: '993', 1049 | countryCode: 'tm' 1050 | }, 1051 | { 1052 | name: '', 1053 | dialCode: '1649', 1054 | countryCode: 'tc' 1055 | }, 1056 | { 1057 | name: '', 1058 | dialCode: '688', 1059 | countryCode: 'tv' 1060 | }, 1061 | { 1062 | name: '', 1063 | dialCode: '1340', 1064 | countryCode: 'vi' 1065 | }, 1066 | { 1067 | name: '', 1068 | dialCode: '256', 1069 | countryCode: 'ug' 1070 | }, 1071 | { 1072 | name: '', 1073 | dialCode: '380', 1074 | countryCode: 'ua' 1075 | }, 1076 | { 1077 | name: '', 1078 | dialCode: '971', 1079 | countryCode: 'ae' 1080 | }, 1081 | { 1082 | name: '', 1083 | dialCode: '44', 1084 | countryCode: 'gb' 1085 | }, 1086 | { 1087 | name: '', 1088 | dialCode: '1', 1089 | countryCode: 'us' 1090 | }, 1091 | { 1092 | name: '', 1093 | dialCode: '598', 1094 | countryCode: 'uy' 1095 | }, 1096 | { 1097 | name: '', 1098 | dialCode: '998', 1099 | countryCode: 'uz' 1100 | }, 1101 | { 1102 | name: '', 1103 | dialCode: '678', 1104 | countryCode: 'vu' 1105 | }, 1106 | { 1107 | name: '', 1108 | dialCode: '39', 1109 | countryCode: 'va' 1110 | }, 1111 | { 1112 | name: '', 1113 | dialCode: '58', 1114 | countryCode: 've' 1115 | }, 1116 | { 1117 | name: '', 1118 | dialCode: '84', 1119 | countryCode: 'vn' 1120 | }, 1121 | { 1122 | name: '', 1123 | dialCode: '681', 1124 | countryCode: 'wf' 1125 | }, 1126 | { 1127 | name: '', 1128 | dialCode: '212', 1129 | countryCode: 'eh' 1130 | }, 1131 | { 1132 | name: '', 1133 | dialCode: '967', 1134 | countryCode: 'ye' 1135 | }, 1136 | { 1137 | name: '', 1138 | dialCode: '260', 1139 | countryCode: 'zm' 1140 | }, 1141 | { 1142 | name: '', 1143 | dialCode: '263', 1144 | countryCode: 'zw' 1145 | }, 1146 | { 1147 | name: '', 1148 | dialCode: '358', 1149 | countryCode: 'ax' 1150 | } 1151 | ]; 1152 | } 1153 | 1154 | getCountries(): Country[] { 1155 | return this.countries; 1156 | } 1157 | 1158 | 1159 | } 1160 | 1161 | 1162 | -------------------------------------------------------------------------------- /projects/lib/src/lib/component/int-phone-prefix/int-phone-prefix.component.scss: -------------------------------------------------------------------------------- 1 | .country-name { 2 | margin-left: 6px; 3 | } 4 | 5 | .dial-code { 6 | color: #999; 7 | } 8 | 9 | .scrollable-menu { 10 | height: auto; 11 | max-height: 200px; 12 | width: 350px; 13 | overflow-x: hidden; 14 | } 15 | .flagInput { 16 | padding: 0 !important; 17 | } 18 | 19 | .input-group-addon { 20 | text-align: left; 21 | } 22 | 23 | .btn-flag { 24 | border-color: white; 25 | } 26 | 27 | .btn:hover, .btn:focus{ 28 | background-color: white; 29 | } 30 | 31 | .defaultCountry { 32 | display:inline-block; 33 | width:15px; 34 | height:15px; 35 | } 36 | 37 | .list-group { 38 | margin-bottom: 0; 39 | } 40 | 41 | 42 | /* Dropdown Button */ 43 | .dropbtn { 44 | background-color: white; 45 | color: white; 46 | border: none; 47 | cursor: pointer; 48 | } 49 | 50 | .dropdown { 51 | position: relative; 52 | display: inline-block; 53 | } 54 | 55 | .dropdown-content { 56 | position: absolute; 57 | background-color: #f9f9f9; 58 | min-width: 160px; 59 | box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 60 | z-index: 1000; 61 | } 62 | 63 | .dropdown-content a { 64 | color: black; 65 | padding: 12px 16px; 66 | text-decoration: none; 67 | display: block; 68 | } 69 | 70 | /*! 71 | * Generated with CSS Flag Sprite generator (https://www.flag-sprites.com/) - 72 | */ 73 | .flag{display:inline-block;position: relative;width:16px;height:11px;background:url('data:image/png;base64,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') no-repeat}.flag.flag-gu{background-position:-96px -55px}.flag.flag-mn{background-position:-208px -88px}.flag.flag-va{background-position:-48px -154px}.flag.flag-tibet{background-position:-32px -143px}.flag.flag-fo{background-position:-64px -44px}.flag.flag-th{background-position:-16px -143px}.flag.flag-tr{background-position:-144px -143px}.flag.flag-tl{background-position:-80px -143px}.flag.flag-kz{background-position:-144px -77px}.flag.flag-zm{background-position:-16px -165px}.flag.flag-uz{background-position:-32px -154px}.flag.flag-dk{background-position:-64px -33px}.flag.flag-scotland{background-position:-176px -121px}.flag.flag-gi{background-position:-224px -44px}.flag.flag-gy{background-position:-128px -55px}.flag.flag-bj{background-position:-112px -11px}.flag.flag-fr{background-position:-80px -44px}.flag.flag-mo{background-position:-224px -88px}.flag.flag-ir{background-position:-112px -66px}.flag.flag-io{background-position:-80px -66px}.flag.flag-tm{background-position:-96px -143px}.flag.flag-ch{background-position:-96px -22px}.flag.flag-mt{background-position:-32px -99px}.flag.flag-nl{background-position:-240px -99px}.flag.flag-gp{background-position:-16px -55px}.flag.flag-im{background-position:-48px -66px}.flag.flag-tv{background-position:-176px -143px}.flag.flag-mu{background-position:-48px -99px}.flag.flag-pe{background-position:-96px -110px}.flag.flag-vi{background-position:-112px -154px}.flag.flag-hn{background-position:-176px -55px}.flag.flag-ss{background-position:-128px -132px}.flag.flag-ae{background-position:-16px 0}.flag.flag-td{background-position:-240px -132px}.flag.flag-pw{background-position:0 -121px}.flag.flag-nu{background-position:-32px -110px}.flag.flag-bt{background-position:-208px -11px}.flag.flag-ms{background-position:-16px -99px}.flag.flag-cv{background-position:-240px -22px}.flag.flag-es{background-position:-224px -33px}.flag.flag-mh{background-position:-144px -88px}.flag.flag-la{background-position:-160px -77px}.flag.flag-vn{background-position:-128px -154px}.flag.flag-py{background-position:-16px -121px}.flag.flag-br{background-position:-176px -11px}.flag.flag-ye{background-position:-224px -154px}.flag.flag-ie{background-position:0 -66px}.flag.flag-gh{background-position:-208px -44px}.flag.flag-cg{background-position:-80px -22px}.flag.flag-cu{background-position:-224px -22px}.flag.flag-hu{background-position:-224px -55px}.flag.flag-sg{background-position:-224px -121px}.flag.flag-at{background-position:-176px 0}.flag.flag-lk{background-position:-224px -77px}.flag.flag-vu{background-position:-144px -154px}.flag.flag-bo{background-position:-160px -11px}.flag.flag-jo{background-position:-208px -66px}.flag.flag-er{background-position:-208px -33px}.flag.flag-za{background-position:-256px -154px}.flag.flag-rs{background-position:-80px -121px}.flag.flag-nr{background-position:-16px -110px}.flag.flag-ls{background-position:-256px -77px}.flag.flag-jm{background-position:-192px -66px}.flag.flag-tz{background-position:-208px -143px}.flag.flag-ki{background-position:-16px -77px}.flag.flag-sj{background-position:0 -132px}.flag.flag-cz{background-position:-16px -33px}.flag.flag-pg{background-position:-128px -110px}.flag.flag-lv{background-position:-32px -88px}.flag.flag-do{background-position:-96px -33px}.flag.flag-lu{background-position:-16px -88px}.flag.flag-no{background-position:-256px -99px}.flag.flag-kw{background-position:-112px -77px}.flag.flag-mx{background-position:-96px -99px}.flag.flag-yt{background-position:-240px -154px}.flag.flag-ly{background-position:-48px -88px}.flag.flag-cy{background-position:0 -33px}.flag.flag-ph{background-position:-144px -110px}.flag.flag-my{background-position:-112px -99px}.flag.flag-sm{background-position:-48px -132px}.flag.flag-et{background-position:-240px -33px}.flag.flag-ru{background-position:-96px -121px}.flag.flag-tj{background-position:-48px -143px}.flag.flag-ai{background-position:-64px 0}.flag.flag-pl{background-position:-176px -110px}.flag.flag-kp{background-position:-64px -77px}.flag.flag-uy{background-position:-16px -154px}.flag.flag-gb{background-position:-112px -44px}.flag.flag-gs{background-position:-64px -55px}.flag.flag-kurdistan{background-position:-96px -77px}.flag.flag-rw{background-position:-112px -121px}.flag.flag-ec{background-position:-128px -33px}.flag.flag-mm{background-position:-192px -88px}.flag.flag-pa{background-position:-80px -110px}.flag.flag-wales{background-position:-160px -154px}.flag.flag-kg{background-position:-256px -66px}.flag.flag-ve{background-position:-80px -154px}.flag.flag-tk{background-position:-64px -143px}.flag.flag-ca{background-position:-16px -22px}.flag.flag-is{background-position:-128px -66px}.flag.flag-ke{background-position:-240px -66px}.flag.flag-ro{background-position:-64px -121px}.flag.flag-gq{background-position:-32px -55px}.flag.flag-pt{background-position:-256px -110px}.flag.flag-tf{background-position:-256px -132px}.flag.flag-ad{background-position:0 0}.flag.flag-sk{background-position:-16px -132px}.flag.flag-pm{background-position:-192px -110px}.flag.flag-om{background-position:-64px -110px}.flag.flag-an{background-position:-112px 0}.flag.flag-ws{background-position:-192px -154px}.flag.flag-sh{background-position:-240px -121px}.flag.flag-mp{background-position:-240px -88px}.flag.flag-gt{background-position:-80px -55px}.flag.flag-cf{background-position:-64px -22px}.flag.flag-zanzibar{background-position:0 -165px}.flag.flag-mw{background-position:-80px -99px}.flag.flag-catalonia{background-position:-32px -22px}.flag.flag-ug{background-position:-240px -143px}.flag.flag-je{background-position:-176px -66px}.flag.flag-km{background-position:-32px -77px}.flag.flag-in{background-position:-64px -66px}.flag.flag-bf{background-position:-48px -11px}.flag.flag-mc{background-position:-80px -88px}.flag.flag-sy{background-position:-192px -132px}.flag.flag-sn{background-position:-64px -132px}.flag.flag-kr{background-position:-80px -77px}.flag.flag-eu{background-position:-256px -33px}.flag.flag-bn{background-position:-144px -11px}.flag.flag-st{background-position:-144px -132px}.flag.flag-england{background-position:-192px -33px}.flag.flag-lc{background-position:-192px -77px}.flag.flag-dm{background-position:-80px -33px}.flag.flag-be{background-position:-32px -11px}.flag.flag-ni{background-position:-224px -99px}.flag.flag-ua{background-position:-224px -143px}.flag.flag-mz{background-position:-128px -99px}.flag.flag-pf{background-position:-112px -110px}.flag.flag-tn{background-position:-112px -143px}.flag.flag-ee{background-position:-144px -33px}.flag.flag-xk{background-position:-208px -154px}.flag.flag-sx{background-position:-176px -132px}.flag.flag-sd{background-position:-192px -121px}.flag.flag-gd{background-position:-128px -44px}.flag.flag-ci{background-position:-112px -22px}.flag.flag-sz{background-position:-208px -132px}.flag.flag-cl{background-position:-144px -22px}.flag.flag-fi{background-position:0 -44px}.flag.flag-ga{background-position:-96px -44px}.flag.flag-jp{background-position:-224px -66px}.flag.flag-de{background-position:-32px -33px}.flag.flag-np{background-position:0 -110px}.flag.flag-re{background-position:-48px -121px}.flag.flag-bg{background-position:-64px -11px}.flag.flag-sc{background-position:-160px -121px}.flag.flag-ng{background-position:-208px -99px}.flag.flag-qa{background-position:-32px -121px}.flag.flag-mk{background-position:-160px -88px}.flag.flag-aw{background-position:-208px 0}.flag.flag-kn{background-position:-48px -77px}.flag.flag-al{background-position:-80px 0}.flag.flag-bw{background-position:-240px -11px}.flag.flag-um{background-position:-256px -143px}.flag.flag-ky{background-position:-128px -77px}.flag.flag-tt{background-position:-160px -143px}.flag.flag-so{background-position:-80px -132px}.flag.flag-lt{background-position:0 -88px}.flag.flag-by{background-position:-256px -11px}.flag.flag-bb{background-position:0 -11px}.flag.flag-us{background-position:0 -154px}.flag.flag-md{background-position:-96px -88px}.flag.flag-ag{background-position:-48px 0}.flag.flag-hm{background-position:-160px -55px}.flag.flag-as{background-position:-160px 0}.flag.flag-eg{background-position:-160px -33px}.flag.flag-sv{background-position:-160px -132px}.flag.flag-sl{background-position:-32px -132px}.flag.flag-fk{background-position:-32px -44px}.flag.flag-am{background-position:-96px 0}.flag.flag-ck{background-position:-128px -22px}.flag.flag-tw{background-position:-192px -143px}.flag.flag-kh{background-position:0 -77px}.flag.flag-to{background-position:-128px -143px}.flag.flag-se{background-position:-208px -121px}.flag.flag-cd{background-position:-48px -22px}.flag.flag-pn{background-position:-208px -110px}.flag.flag-gr{background-position:-48px -55px}.flag.flag-id{background-position:-256px -55px}.flag.flag-vc{background-position:-64px -154px}.flag.flag-somaliland{background-position:-96px -132px}.flag.flag-bi{background-position:-96px -11px}.flag.flag-pk{background-position:-160px -110px}.flag.flag-pr{background-position:-224px -110px}.flag.flag-bd{background-position:-16px -11px}.flag.flag-co{background-position:-192px -22px}.flag.flag-fm{background-position:-48px -44px}.flag.flag-bm{background-position:-128px -11px}.flag.flag-ar{background-position:-144px 0}.flag.flag-bv{background-position:-224px -11px}.flag.flag-sb{background-position:-144px -121px}.flag.flag-mq{background-position:-256px -88px}.flag.flag-eh{background-position:-176px -33px}.flag.flag-bh{background-position:-80px -11px}.flag.flag-it{background-position:-144px -66px}.flag.flag-hr{background-position:-192px -55px}.flag.flag-sa{background-position:-128px -121px}.flag.flag-mv{background-position:-64px -99px}.flag.flag-mg{background-position:-128px -88px}.flag.flag-dz{background-position:-112px -33px}.flag.flag-gg{background-position:-192px -44px}.flag.flag-gm{background-position:-256px -44px}.flag.flag-af{background-position:-32px 0}.flag.flag-li{background-position:-208px -77px}.flag.flag-sr{background-position:-112px -132px}.flag.flag-vg{background-position:-96px -154px}.flag.flag-cr{background-position:-208px -22px}.flag.flag-tc{background-position:-224px -132px}.flag.flag-ao{background-position:-128px 0}.flag.flag-ma{background-position:-64px -88px}.flag.flag-mr{background-position:0 -99px}.flag.flag-gn{background-position:0 -55px}.flag.flag-ne{background-position:-176px -99px}.flag.flag-nf{background-position:-192px -99px}.flag.flag-wf{background-position:-176px -154px}.flag.flag-hk{background-position:-144px -55px}.flag.flag-gf{background-position:-160px -44px}.flag.flag-ps{background-position:-240px -110px}.flag.flag-ic{background-position:-240px -55px}.flag.flag-cw{background-position:-256px -22px}.flag.flag-ml{background-position:-176px -88px}.flag.flag-ax{background-position:-224px 0}.flag.flag-gl{background-position:-240px -44px}.flag.flag-dj{background-position:-48px -33px}.flag.flag-cn{background-position:-176px -22px}.flag.flag-ht{background-position:-208px -55px}.flag.flag-lr{background-position:-240px -77px}.flag.flag-tg{background-position:0 -143px}.flag.flag-ba{background-position:-256px 0}.flag.flag-ge{background-position:-144px -44px}.flag.flag-bz{background-position:0 -22px}.flag.flag-au{background-position:-192px 0}.flag.flag-iq{background-position:-96px -66px}.flag.flag-cm{background-position:-160px -22px}.flag.flag-gw{background-position:-112px -55px}.flag.flag-az{background-position:-240px 0}.flag.flag-na{background-position:-144px -99px}.flag.flag-fj{background-position:-16px -44px}.flag.flag-zw{background-position:-32px -165px}.flag.flag-bs{background-position:-192px -11px}.flag.flag-il{background-position:-16px -66px}.flag.flag-nz{background-position:-48px -110px}.flag.flag-me{background-position:-112px -88px}.flag.flag-si{background-position:-256px -121px}.flag.flag-nc{background-position:-160px -99px}.flag.flag-lb{background-position:-176px -77px} 74 | 75 | --------------------------------------------------------------------------------