{"version":3,"file":"ngx-useful-libs.mjs","sources":["../../../projects/ngx-useful-libs/src/lib/helpers/number-with-cama.ts","../../../projects/ngx-useful-libs/src/lib/services/convert-number.service.ts","../../../projects/ngx-useful-libs/src/lib/directives/only-numbers.directive.ts","../../../projects/ngx-useful-libs/src/lib/directives/only-decimals.directive.ts","../../../projects/ngx-useful-libs/src/lib/pipes/array-sort.pipe.ts","../../../projects/ngx-useful-libs/src/lib/pipes/randomize.pipe.ts","../../../projects/ngx-useful-libs/src/lib/pipes/second-to-time.pipe.ts","../../../projects/ngx-useful-libs/src/lib/pipes/number-to-persian-string.pipe.ts","../../../projects/ngx-useful-libs/src/lib/form-validator/form-validator.ts","../../../projects/ngx-useful-libs/src/lib/ngx-useful-libs.module.ts","../../../projects/ngx-useful-libs/src/public-api.ts","../../../projects/ngx-useful-libs/src/ngx-useful-libs.ts"],"sourcesContent":["export function numberWithCommas(x: string) {\r\n    return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/*\r\n۰۱۲۳۴۵۶۷۸۹\r\n٠١٢٣٤٥٦٧٨٩\r\n0123456789\r\n*/\r\n@Injectable()\r\nexport class ConvertPersianArabicNumbersToEnglish {\r\n\r\n    private persianNumbers = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g];\r\n    private arabicNumbers = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g];\r\n\r\n    public fixNumbers(str: string): string {\r\n        if (typeof str === 'string') {\r\n            for (let i = 0; i < 10; i++) {\r\n                str = str\r\n                    .replace(this.persianNumbers[i], i.toString())\r\n                    .replace(this.arabicNumbers[i], i.toString());\r\n            }\r\n        }\r\n        return str;\r\n    }\r\n\r\n}\r\n","import { Directive, ElementRef, HostListener, Input, Self } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { numberWithCommas } from '../helpers/number-with-cama';\r\nimport { ConvertPersianArabicNumbersToEnglish } from '../services/convert-number.service';\r\n\r\n@Directive({\r\n  selector: 'input[OnlyNumbers]'\r\n})\r\nexport class OnlyNumbersDirective {\r\n  @Input() thousandSeparators = false;\r\n  @Input() min?: number;\r\n  @Input() max?: number;\r\n  constructor(\r\n    @Self() public ngControl: NgControl,\r\n    private convert: ConvertPersianArabicNumbersToEnglish,\r\n    private el: ElementRef) { }\r\n\r\n  @HostListener('input', ['$event']) onInputChange(event: any): void {\r\n    this.checkNumbers(event);\r\n\r\n  }\r\n\r\n\r\n  @HostListener('blur', ['$event']) inputBlur(event: any): void {\r\n    this.checkNumbers(event);\r\n    if (this.thousandSeparators) {\r\n      this.formatValue();\r\n    }\r\n  }\r\n  @HostListener('paste', ['$event']) blockPaste(event: KeyboardEvent): void {\r\n    this.checkNumbers(event);\r\n    if (this.thousandSeparators) {\r\n      this.formatValue();\r\n    }\r\n  }\r\n  @HostListener('focus')\r\n  onFocus() {\r\n    this.unFormatValue();\r\n  }\r\n\r\n\r\n\r\n  checkNumbers(event: any): void {\r\n    let initialValue = this.el.nativeElement.value;\r\n    initialValue = this.convert.fixNumbers(initialValue);\r\n\r\n    this.el.nativeElement.value = initialValue.replace(/[^0-9]*/g, '');\r\n    if (this.ngControl.control) {\r\n      this.ngControl.control.setValue(this.el.nativeElement.value);\r\n    }\r\n    if (initialValue !== this.el.nativeElement.value) {\r\n      event.stopPropagation();\r\n    }\r\n    if (this.min !== undefined && +this.el.nativeElement.value < +this.min) {\r\n      this.el.nativeElement.value = this.min.toString();\r\n    }\r\n    if (this.max !== undefined && +this.el.nativeElement.value > +this.max) {\r\n      this.el.nativeElement.value = this.max.toString();\r\n    }\r\n\r\n  }\r\n\r\n\r\n  private formatValue() {\r\n    let value = this.el.nativeElement.value;\r\n    if (value !== null) {\r\n      this.el.nativeElement.value = numberWithCommas(value);\r\n    } else {\r\n      this.el.nativeElement.value = '';\r\n    }\r\n  }\r\n\r\n  private unFormatValue() {\r\n    let value = this.el.nativeElement.value;\r\n    value = value.replace(/[^\\d.-]/g, '');\r\n    if (value) {\r\n      this.el.nativeElement.value = value;\r\n    } else {\r\n      this.el.nativeElement.value = '';\r\n    }\r\n  }\r\n\r\n}\r\n","import { Directive, ElementRef, HostListener, Input, Self } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { numberWithCommas } from '../helpers/number-with-cama';\r\nimport { ConvertPersianArabicNumbersToEnglish } from '../services/convert-number.service';\r\n\r\n@Directive({\r\n  selector: 'input[OnlyDecimals]'\r\n})\r\nexport class OnlyDecimalsDirective {\r\n  @Input() thousandSeparators = false;\r\n  @Input() min?: number;\r\n  @Input() max?: number;\r\n  constructor(\r\n    @Self() public ngControl: NgControl,\r\n    private convert: ConvertPersianArabicNumbersToEnglish,\r\n    private el: ElementRef<HTMLInputElement>\r\n  ) { }\r\n\r\n\r\n  @HostListener('input', ['$event']) onInputChange(event: any): void {\r\n    this.checkNumbers(event);\r\n  }\r\n\r\n\r\n  @HostListener('blur', ['$event']) inputBlur(event: any): void {\r\n    this.checkNumbers(event);\r\n    if (this.thousandSeparators) {\r\n      this.formatValue();\r\n    }\r\n  }\r\n\r\n\r\n  @HostListener('focus')\r\n  onFocus() {\r\n    this.unFormatValue();\r\n  }\r\n\r\n  @HostListener('paste', ['$event']) blockPaste(event: KeyboardEvent): void {\r\n    this.checkNumbers(event);\r\n    if (this.thousandSeparators) {\r\n      this.formatValue();\r\n    }\r\n  }\r\n\r\n\r\n\r\n  checkNumbers(event: any): void {\r\n    let initialValue = this.el.nativeElement.value;\r\n    initialValue = this.convert.fixNumbers(initialValue);\r\n    let num: any = initialValue.replace(/[^0-9/.]*/g, '');\r\n    if (num.match(/\\./g)) {\r\n      if (num.match(/\\./g).length > 1) {\r\n        num = parseFloat(num);\r\n      }\r\n    }\r\n    if (this.ngControl.control) {\r\n      this.ngControl.control.setValue(num);\r\n    }\r\n\r\n    if (initialValue !== this.el.nativeElement.value) {\r\n      event.stopPropagation();\r\n    }\r\n    if (this.min !== undefined && +this.el.nativeElement.value < +this.min) {\r\n      this.el.nativeElement.value = this.min.toString();\r\n    }\r\n    if (this.max !== undefined && +this.el.nativeElement.value > +this.max) {\r\n      this.el.nativeElement.value = this.max.toString();\r\n    }\r\n  }\r\n\r\n\r\n\r\n  private formatValue() {\r\n    let value = this.el.nativeElement.value;\r\n    if (value !== null) {\r\n      this.el.nativeElement.value = numberWithCommas(value);\r\n    } else {\r\n      this.el.nativeElement.value = '';\r\n    }\r\n  }\r\n\r\n  private unFormatValue() {\r\n    let value = this.el.nativeElement.value;\r\n    value = value.replace(/[^\\d.-]/g, '');\r\n    if (value) {\r\n      this.el.nativeElement.value = value;\r\n    } else {\r\n      this.el.nativeElement.value = '';\r\n    }\r\n  }\r\n\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\n//example asc sort  *ngFor=\"let item of list| sort: 'priority';let i=index;\"\r\n//example desc sort  *ngFor=\"let item of list| sort: 'priority':true;let i=index;\"\r\n@Pipe({\r\n  name: 'sort'\r\n})\r\n@Injectable()\r\nexport class ArraySortPipe implements PipeTransform {\r\n\r\n  transform(array: any, field: string, desc: boolean = false): any[] {\r\n    if (!Array.isArray(array)) {\r\n      return [];\r\n    }\r\n    if (desc) {\r\n      array.sort((a: any, b: any) => {\r\n       if (a[field] < b[field]) {\r\n          return -1;\r\n        } else if (a[field] > b[field]) {\r\n          return 1;\r\n        } else {\r\n          return 0;\r\n        }\r\n      });\r\n    } else {\r\n      array.sort((a: any, b: any) => {\r\n        if (a[field] > b[field]) {\r\n          return -1;\r\n        } else if (a[field] < b[field]) {\r\n          return 1;\r\n        } else {\r\n          return 0;\r\n        }\r\n      });\r\n    }\r\n\r\n    return array;\r\n  }\r\n\r\n\r\n\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'random'\r\n})\r\n@Injectable()\r\nexport class ArrayRandomizePipe implements PipeTransform {\r\n\r\n  transform(array: any,  randomExceptOf: number = 0): any[] {\r\n    if (!Array.isArray(array)) {\r\n      return [];\r\n    }\r\n      return this.shuffle(array, randomExceptOf);\r\n  }\r\n\r\n\r\n\r\n  shuffle(array: any[], randomExceptOf: number): any[] {\r\n    let currentIndex = (array.length - randomExceptOf);\r\n    let temporaryValue: any[];\r\n    let randomIndex: number;\r\n\r\n    for (currentIndex; currentIndex > 0; currentIndex--) {\r\n      // Pick a remaining element...\r\n      randomIndex = Math.floor(Math.random() * currentIndex);\r\n      currentIndex -= 1;\r\n\r\n      // And swap it with the current element.\r\n      temporaryValue = array[currentIndex];\r\n      array[currentIndex] = array[randomIndex];\r\n      array[randomIndex] = temporaryValue;\r\n    }\r\n\r\n    return array;\r\n  }\r\n\r\n\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'secondToTime'\r\n})\r\n@Injectable()\r\nexport class SecondToTimePipe implements PipeTransform {\r\n\r\n\r\n\r\n  transform(val: any): string {\r\n    if (val) {\r\n      const dateObj = new Date(+val * 1000);\r\n      const hours = dateObj.getUTCHours();\r\n      const minutes = dateObj.getUTCMinutes();\r\n      const seconds = dateObj.getSeconds();\r\n\r\n      const timeString = hours.toString().padStart(2, '0')\r\n        + ':' + minutes.toString().padStart(2, '0')\r\n        + ':' + seconds.toString().padStart(2, '0');\r\n\r\n      return timeString;\r\n    } else {\r\n      return '';\r\n    }\r\n  }\r\n\r\n\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'numberToPersianString'\r\n})\r\n@Injectable()\r\nexport class NumberToPersianStringPipe implements PipeTransform {\r\n\r\n\r\n\r\n  s1 = new Array('', 'يک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه');\r\n  s2 = new Array('ده', 'يازده', 'دوازده', 'سيزده', 'چهارده', 'پانزده', 'شانزده', 'هفده', 'هجده', 'نوزده');\r\n  s3 = new Array('', '', 'بيست', 'سي', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود');\r\n  s4 = new Array('', 'صد', 'دويست', 'سيصد', 'چهارصد', 'پانصد', 'ششصد', 'هفتصد', 'هشتصد', 'نهصد');\r\n  result = '';\r\n\r\n  transform(val: number): string {\r\n    if (val) {\r\n      return this.convert(val.toString());\r\n    }\r\n    else {\r\n      return '';\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  /*------------------------------------------------------------------------------------------------*/\r\n  convert(z: any): string {\r\n    z = z.replace(/[^a-zA-Z0-9 ]/g, '');\r\n\r\n    // tslint:disable-next-line: radix\r\n    z = parseInt(z);\r\n    if (z === 0) { this.result = 'صفر'; } else {\r\n      this.result = '';\r\n      this.convert2(z);\r\n    }\r\n    // alert(\".\"+this.result)\r\n\r\n    if (this.result === 'Error') {\r\n      return ('--خطا--');\r\n    }\r\n    else {\r\n      return this.result;\r\n    }\r\n  }\r\n\r\n  convert2(y: number): void {\r\n    if (y > 999999999 && y < 1000000000000) {\r\n      const bghb = (y % 1000000000);\r\n      const temp = y - bghb;\r\n      const bil = temp / 1000000000;\r\n      this.convert3r(bil);\r\n      this.result = this.result + ' ميليارد';\r\n      if (bghb !== 0) {\r\n        this.result = this.result + ' و '; this.convert2(bghb);\r\n      }\r\n    }\r\n    else if (y > 999999 && y <= 999999999) {\r\n      const bghm = (y % 1000000);\r\n      const temp = y - bghm;\r\n      const mil = temp / 1000000; this.convert3r(mil);\r\n      this.result = this.result + ' ميليون';\r\n      if (bghm !== 0) {\r\n        this.result = this.result + ' و '; this.convert2(bghm);\r\n      }\r\n    }\r\n    else if (y > 999 && y <= 999999) {\r\n      const bghh = (y % 1000);\r\n      const temp = y - bghh;\r\n      const hez = temp / 1000;\r\n      this.convert3r(hez);\r\n      this.result = this.result + ' هزار';\r\n      if (bghh !== 0) {\r\n        this.result = this.result + ' و '; this.convert2(bghh);\r\n      }\r\n    }\r\n    else if (y <= 999) {\r\n      this.convert3r(y);\r\n    } else {\r\n      this.result = 'Error';\r\n    }\r\n  }\r\n\r\n  convert3r(x: number): void {\r\n    const bgh = (x % 100); let temp = x - bgh; const sad = temp / 100;\r\n    if (bgh === 0) { this.result = this.result + this.s4[sad]; }\r\n    else {\r\n      if (x > 100) {\r\n        this.result = this.result + this.s4[sad] + ' و ';\r\n      }\r\n      if (bgh < 10) {\r\n        this.result = this.result + this.s1[bgh];\r\n      }\r\n      else if (bgh < 20) {\r\n        const bgh2 = (bgh % 10);\r\n        this.result = this.result + this.s2[bgh2];\r\n      }\r\n      else {\r\n        const bgh2 = (bgh % 10);\r\n        temp = bgh - bgh2;\r\n        const dah = temp / 10;\r\n        if (bgh2 === 0) {\r\n          this.result = this.result + this.s3[dah];\r\n        }\r\n        else {\r\n          this.result = this.result + this.s3[dah] + ' و ' + this.s1[bgh2];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  // tslint:disable-next-line: variable-name\r\n  itpro(Number: string): string {\r\n    Number += '';\r\n    Number = Number.replace(',', ''); Number = Number.replace(',', ''); Number = Number.replace(',', '');\r\n    Number = Number.replace(',', ''); Number = Number.replace(',', ''); Number = Number.replace(',', '');\r\n    const x = Number.split('.');\r\n    let y = x[0];\r\n    const z = x.length > 1 ? '.' + x[1] : '';\r\n    const rgx = /(\\d+)(\\d{3})/;\r\n    while (rgx.test(y)) {\r\n      y = y.replace(rgx, '$1' + ',' + '$2');\r\n    }\r\n    return y + z;\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractControl, ValidatorFn, FormGroup } from '@angular/forms';\r\n\r\n@Injectable()\r\nexport class FormValidators {\r\n  /**\r\n   * بررسی صحت کد ملی\r\n   * use invalid\r\n   * @param control  string\r\n   */\r\n  checkNationalCode(control:AbstractControl): { invalid: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    let num = control.value;\r\n    let returnModel = '';\r\n    const symbolMap: any = {\r\n      '۱': '1',\r\n      '۲': '2',\r\n      '۳': '3',\r\n      '۴': '4',\r\n      '۵': '5',\r\n      '۶': '6',\r\n      '۷': '7',\r\n      '۸': '8',\r\n      '۹': '9',\r\n      '۰': '0'\r\n    };\r\n    num = num.toString();\r\n    // tslint:disable-next-line: prefer-for-of\r\n    for (let i = 0; i < num.length; i++) {\r\n      if (symbolMap[num[i]]) {\r\n        returnModel += symbolMap[num[i]];\r\n      }\r\n      else {\r\n        returnModel += num[i];\r\n      }\r\n    }\r\n    const nationalCode = returnModel;\r\n    const isNumber = /^\\d{10}$/.test(nationalCode);\r\n\r\n    let isValid = false;\r\n\r\n    if (isNumber && nationalCode.length === 10) {\r\n      const allDigitEqual = ['0000000000', '1111111111', '2222222222', '3333333333', '4444444444', '5555555555', '6666666666', '7777777777', '8888888888', '9999999999'];\r\n      if (allDigitEqual.indexOf(nationalCode) > -1) {\r\n        isValid = false;\r\n      }\r\n      else {\r\n\r\n        const num0 = +nationalCode.charAt(0) * 10;\r\n        const num2 = +nationalCode.charAt(1) * 9;\r\n        const num3 = +nationalCode.charAt(2) * 8;\r\n        const num4 = +nationalCode.charAt(3) * 7;\r\n        const num5 = +nationalCode.charAt(4) * 6;\r\n        const num6 = +nationalCode.charAt(5) * 5;\r\n        const num7 = +nationalCode.charAt(6) * 4;\r\n        const num8 = +nationalCode.charAt(7) * 3;\r\n        const num9 = +nationalCode.charAt(8) * 2;\r\n        const a = +nationalCode.charAt(9);\r\n\r\n        const b = (((((((num0 + num2) + num3) + num4) + num5) + num6) + num7) + num8) + num9;\r\n        const c = b % 11;\r\n\r\n        if (((c < 2) && (a === c)) || ((c >= 2) && ((11 - c) === a))) {\r\n          isValid = true;\r\n        }\r\n        else {\r\n          isValid = false;\r\n        }\r\n      }\r\n    } else {\r\n      isValid = false;\r\n    }\r\n\r\n\r\n\r\n    if (isValid === true) {\r\n      return null;\r\n    } else {\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  /**\r\n   *  بررسی صحت شماره موبایل\r\n   * use invalidMobile\r\n   */\r\n  checkMobileNumber(control: AbstractControl): { invalidMobile: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    let num = control.value;\r\n    let returnModel = '';\r\n    const symbolMap: any = {\r\n      '۱': '1',\r\n      '۲': '2',\r\n      '۳': '3',\r\n      '۴': '4',\r\n      '۵': '5',\r\n      '۶': '6',\r\n      '۷': '7',\r\n      '۸': '8',\r\n      '۹': '9',\r\n      '۰': '0'\r\n    };\r\n    num = num.toString();\r\n    // tslint:disable-next-line: prefer-for-of\r\n    for (let i = 0; i < num.length; i++) {\r\n      if (symbolMap[num[i]]) {\r\n        returnModel += symbolMap[num[i]];\r\n      }\r\n      else {\r\n        returnModel += num[i];\r\n      }\r\n    }\r\n    const mobileNumber = returnModel;\r\n    const isNumber = /^\\d{11}$/.test(mobileNumber);\r\n    if (!isNumber) {\r\n      return { invalidMobile: true };\r\n    }\r\n\r\n    // validation logic pre number\r\n    const validNumber = ['901', '902', '903', '904', '905', '930', '933', '935', '936', '937', '938', '939',  // irancel\r\n      '910', '911', '912', '913', '914', '915', '916', '917', '918', '919', '990', '991', '992', '993', '994',      // MCI\r\n      '920', '921', '922',        // Rightel\r\n      '931',  // Espadan (MTCE)\r\n      '921',  // Taliya\r\n      '934'  // Kish-TCI\r\n    ];\r\n    let valid = false;\r\n    // check validation mobile number\r\n    // tslint:disable-next-line: prefer-for-of\r\n    for (let i = 0; i < validNumber.length; i++) {\r\n      if (mobileNumber.toString().substring(1, 4) === validNumber[i]) {\r\n        valid = true;\r\n      }\r\n    }\r\n\r\n\r\n\r\n    if (valid) {\r\n      return null;\r\n    } else {\r\n      return { invalidMobile: true };\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n  /**\r\n   * بررسی حروف فارسی\r\n   * use invalid\r\n   */\r\n  checkPersianCharacters(control: AbstractControl): { invalid: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    const word = control.value;\r\n    const isValid = /^([\\u0600-\\u06FF]+\\s*)+$/.test(word);\r\n    if (isValid) {\r\n      return null;\r\n    }\r\n    else {\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * بررسی حروف انگلیسی\r\n   * use invalid\r\n   */\r\n  checkEnglishCharacters(control: AbstractControl): { invalid: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    const word = control.value;\r\n    const isValid = /^([a-zA-Z]+\\s*)+$/.test(word);\r\n    if (isValid) {\r\n      return null;\r\n    }\r\n    else {\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * بررسی حروف انگلیسی و اعداد\r\n   * use invalid\r\n   */\r\n  checkEnglishAndNumberCharacters(control: AbstractControl): { invalid: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    const word = control.value;\r\n    const isValid = /^[a-zA-Z]+[a-zA-Z0-9-_]*$/.test(word);\r\n    if (isValid) {\r\n      return null;\r\n    }\r\n    else {\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * با عدد شروع نشود\r\n   *\r\n   * use startWithNumber\r\n   */\r\n  notStartWithNumber(control: AbstractControl): { startWithNumber: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    const word = control.value;\r\n    const isValid = /^[^0-9][a-zA-Z0-9_]\\S*/.test(word);\r\n    if (isValid) {\r\n      return null;\r\n    }\r\n    else {\r\n      return { startWithNumber: true };\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * بررسی تلفن ثابت به همراه کد\r\n   * 0xxxxxxxxxx\r\n   * use invalid\r\n   */\r\n  checkPhoneNumber(control: AbstractControl): { invalid: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    let num = control.value;\r\n    let returnModel = '';\r\n    const symbolMap:any = {\r\n      '۱': '1',\r\n      '۲': '2',\r\n      '۳': '3',\r\n      '۴': '4',\r\n      '۵': '5',\r\n      '۶': '6',\r\n      '۷': '7',\r\n      '۸': '8',\r\n      '۹': '9',\r\n      '۰': '0'\r\n    };\r\n    num = num.toString();\r\n    // tslint:disable-next-line: prefer-for-of\r\n    for (let i = 0; i < num.length; i++) {\r\n      if (symbolMap[num[i]]) {\r\n        returnModel += symbolMap[num[i]];\r\n      } else {\r\n        returnModel += num[i];\r\n      }\r\n    }\r\n\r\n    const word = returnModel;\r\n    const isValid = /^((?:0)[0-9]{10})$/.test(word);\r\n    if (isValid) {\r\n      return null;\r\n    } else {\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * بررسی صحیت ایمیل\r\n   * a@b.c\r\n   * use invalid\r\n   */\r\n  checkEmail(control: AbstractControl): { invalid: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    const word = control.value;\r\n    const isValid = /^[\\w-.]+@([\\w-]+\\.)+[\\w-]+$/.test(word);    // /^.+@.+\\..+$/.test(word);\r\n    if (isValid) {\r\n      return null;\r\n    }\r\n    else {\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * بررسی کاراکترهای عددی\r\n   * use invalid\r\n   */\r\n  checkNumberCharacters(control: AbstractControl): { invalid: boolean } | null {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    let num = control.value;\r\n    let returnModel = '';\r\n    const symbolMap: any = {\r\n      '۱': '1',\r\n      '۲': '2',\r\n      '۳': '3',\r\n      '۴': '4',\r\n      '۵': '5',\r\n      '۶': '6',\r\n      '۷': '7',\r\n      '۸': '8',\r\n      '۹': '9',\r\n      '۰': '0'\r\n    };\r\n    num = num.toString();\r\n    // tslint:disable-next-line: prefer-for-of\r\n    for (let i = 0; i < num.length; i++) {\r\n      if (symbolMap[num[i]]) {\r\n        returnModel += symbolMap[num[i]];\r\n      }\r\n      else {\r\n        returnModel += num[i];\r\n      }\r\n    }\r\n\r\n    const word = returnModel;\r\n\r\n    const isValid = /^-?(0|[1-9]\\d*)?$/.test(word);\r\n    if (isValid) {\r\n      return null;\r\n    }\r\n    else {\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n\r\n  /**\r\n   * حداقل 6 کاراکتر\r\n   * حروف لاتین شامل اعداد و حروف بزرگ\r\n   */\r\n// //   strongPassword(control: AbstractControl): { weakPassword: boolean } | null {\r\n// //     if (!control.value) {\r\n// //       return null;\r\n// //     }\r\n// //     const word = control.value;\r\n// //     const isValid = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%?&^#*()_\\-=+])[A-Za-z\\d$@$!%?&^#*()_\\-=+]{6,}$/.test(word);\r\n// //     if (isValid) {\r\n// //       return null;\r\n// //     }\r\n// //     else {\r\n// //       return { weakPassword: true };\r\n// //     }\r\n// //   }\r\n\r\n\r\n\r\n\r\n\r\n\r\n// //   minimum(control: AbstractControl, min: number): { minmum: true } | null {\r\n// //     if (!control.value) {\r\n// //       return null;\r\n// //     }\r\n// //     if (control.value >= min) {\r\n// //       return null;\r\n// //     }\r\n// //     else {\r\n// //       return { minmum: true };\r\n// //     }\r\n// //   }\r\n\r\n\r\n//   range(min: number, max: number): ValidatorFn {\r\n//     return (c: AbstractControl): { [key: string]: boolean } | null => {\r\n//       if (c.value && (isNaN(c.value) || c.value < min || c.value > max)) {\r\n//         return { range: true };\r\n//       }\r\n//       return null;\r\n//     };\r\n//   }\r\n\r\n\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OnlyNumbersDirective } from './directives/only-numbers.directive';\r\nimport { ConvertPersianArabicNumbersToEnglish } from './services/convert-number.service';\r\nimport { OnlyDecimalsDirective } from './directives/only-decimals.directive';\r\nimport { NumberToPersianStringPipe } from './pipes/number-to-persian-string.pipe';\r\nimport { ArraySortPipe } from './pipes/array-sort.pipe';\r\nimport { ArrayRandomizePipe } from './pipes/randomize.pipe';\r\nimport { SecondToTimePipe } from './pipes/second-to-time.pipe';\r\nimport { FormValidators } from './form-validator/form-validator';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    OnlyNumbersDirective,\r\n    OnlyDecimalsDirective,\r\n    ArraySortPipe,\r\n    ArrayRandomizePipe,\r\n    SecondToTimePipe,\r\n    NumberToPersianStringPipe\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [\r\n    OnlyNumbersDirective,\r\n    OnlyDecimalsDirective,\r\n    ArraySortPipe,\r\n    ArrayRandomizePipe,\r\n    SecondToTimePipe,\r\n    NumberToPersianStringPipe\r\n  ],\r\n  providers: [\r\n    ConvertPersianArabicNumbersToEnglish,\r\n    FormValidators\r\n  ]\r\n})\r\nexport class NgxUsefulLibsModule { }\r\n","/*\r\n * Public API Surface of ngx-useful-libs\r\n */\r\n\r\n\r\nexport * from './lib/directives/only-numbers.directive';\r\nexport * from './lib/directives/only-decimals.directive';\r\nexport * from './lib/services/convert-number.service';\r\n\r\nexport * from './lib/pipes/array-sort.pipe';\r\nexport * from './lib/pipes/randomize.pipe';\r\nexport * from './lib/pipes/second-to-time.pipe';\r\nexport * from './lib/pipes/number-to-persian-string.pipe';\r\n\r\nexport * from './lib/helpers/number-with-cama';\r\n\r\nexport * from './lib/form-validator/form-validator';\r\n\r\nexport * from './lib/ngx-useful-libs.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}