├── 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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------