{"version":3,"file":"al00x-forms.mjs","sources":["../../../../libs/base/src/utils.ts","../../../../libs/base/src/validators.ts","../../../../libs/base/src/errors.ts","../../../../libs/base/src/form-control.ts","../../../../libs/base/src/form-group.ts","../../../../libs/base/src/providers.ts","../../../../libs/base/src/al00x-forms.ts"],"sourcesContent":["import { ProviderToken, inject } from '@angular/core';\n\nexport function injectOptional<T>(token: ProviderToken<T>): T | undefined {\n  try {\n    return inject(token);\n  } catch {\n    return undefined;\n  }\n}\n","import { AbstractControl, Validators as AngularValidators } from '@angular/forms';\r\nimport { debounceTime, Subscription, take } from 'rxjs';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { injectOptional } from './utils';\r\n\r\nconst RegexIP = new RegExp(`^((25[0-5]|(2[0-4]|1\\\\d|[1-9]|)\\\\d)\\\\.?\\\\b){4}$`);\r\nconst RegexPassword = new RegExp(`^(?=.*\\\\d)(?=.*[A-Za-z])(?=.*[a-zA-Z]).*$`);\r\n\r\nconst VALIDATORS_DEFAULTS = {\r\n  phone: {\r\n    min: 11,\r\n    max: 11,\r\n  },\r\n  nationalCode: {\r\n    min: 10,\r\n    max: 10,\r\n  },\r\n  password: {\r\n    regex: RegexPassword,\r\n    min: 8,\r\n  },\r\n};\r\n\r\nexport const VALIDATORS_CONFIG = new InjectionToken<Partial<typeof VALIDATORS_DEFAULTS>>('Validators');\r\n\r\nfunction withDefault<T>(input: T | undefined, defaultValue: T) {\r\n  return input !== undefined ? input : defaultValue;\r\n}\r\n\r\nexport class Validators extends AngularValidators {\r\n  private static config() {\r\n    const value = injectOptional(VALIDATORS_CONFIG);\r\n    return {\r\n      ...VALIDATORS_DEFAULTS,\r\n      ...value,\r\n    };\r\n  }\r\n\r\n  static nationalCode(min?: number, max?: number) {\r\n    const config = this.config();\r\n    const minValue = withDefault(min, config.nationalCode.min);\r\n    const maxValue = withDefault(max, config.nationalCode.max);\r\n\r\n    return (control: AbstractControl) => {\r\n      return Validators.number(minValue, maxValue)(control) !== null ? { codeMelli: { value: control.value } } : null;\r\n    };\r\n  }\r\n\r\n  static clone(controller: AbstractControl) {\r\n    return () => {\r\n      return controller.invalid ? { clone: true } : null;\r\n    };\r\n  }\r\n\r\n  static ip(control: AbstractControl) {\r\n    const value = control?.value?.toString() ?? '';\r\n    return !RegexIP.test(value) ? { ip: { value: control.value } } : null;\r\n  }\r\n\r\n  static alphabet(lang?: 'en') {\r\n    return (control: AbstractControl) => {\r\n      const value = control?.value?.toString() ?? '';\r\n      const regex = new RegExp(\r\n        lang === 'en' ? '^[A-Za-z0-9\\\\s!@#$%^&*()_+={}\\\\[\\\\]:;\"\\'<>,.?/\\\\\\\\|-]+$' : /^(\\p{L}|\\p{N}|\\p{S}|\\s)+$/u,\r\n      );\r\n      return !regex.test(value) ? { alphabet: { value: control.value } } : null;\r\n    };\r\n  }\r\n\r\n  static match(secondControl: AbstractControl) {\r\n    let sub = new Subscription();\r\n    return (control: AbstractControl) => {\r\n      sub.unsubscribe();\r\n      sub = secondControl.valueChanges.pipe(take(1), debounceTime(100)).subscribe(() => {\r\n        control.updateValueAndValidity();\r\n      });\r\n      const v1 = secondControl?.value ?? '';\r\n      const v2 = control?.value ?? '';\r\n      return v1 !== v2 ? { unmatched: { value: control.value } } : null;\r\n    };\r\n  }\r\n\r\n  static number(minLength = 0, maxLength?: number) {\r\n    return (control: AbstractControl) => {\r\n      const value = control?.value?.toString() ?? '';\r\n      const regex = new RegExp(`\\\\b(\\\\d){${minLength},${maxLength ?? ''}}\\\\b`);\r\n      return !regex.test(value) ? { number: { value: control.value } } : null;\r\n    };\r\n  }\r\n\r\n  static password(minLength?: number, regex?: RegExp) {\r\n    const config = this.config();\r\n    const minValue = withDefault(minLength, config.password.min);\r\n    const regexValue = withDefault(regex, config.password.regex);\r\n\r\n    return (control: AbstractControl) => {\r\n      const value = control?.value ?? '';\r\n      if (!value || value === '') return null;\r\n\r\n      const tested = regexValue.test(value);\r\n      const length = (value.length ?? 0) >= minValue;\r\n      return !tested\r\n        ? { passwordChars: { value: control.value } }\r\n        : !length\r\n          ? { passwordLength: { value: control.value } }\r\n          : null;\r\n    };\r\n  }\r\n\r\n  static phone(min?: number, max?: number) {\r\n    const config = this.config();\r\n    const minValue = withDefault(min, config.phone.min);\r\n    const maxValue = withDefault(max, config.phone.max);\r\n\r\n    return (control: AbstractControl) => {\r\n      return Validators.number(minValue, maxValue)(control) !== null ? { phoneNumber: { value: control.value } } : null;\r\n    };\r\n  }\r\n\r\n  static requiredNullable(control: AbstractControl) {\r\n    const value = control.value;\r\n    const isEmpty = value === undefined || ((typeof value === 'string' || Array.isArray(value)) && value.length === 0);\r\n    return isEmpty ? { required: true } : null;\r\n  }\r\n}\r\n","import { AbstractControl } from '@angular/forms';\r\nimport { provideAppInitializer } from '@angular/core';\r\n\r\nconst DEFAULT_CONTROL_ERROR = {\r\n  default: `This field is incorrect.`,\r\n  required: `This field is required.`,\r\n  email: `Email format is incorrect.`,\r\n  codeMelli: `National code format is incorrect.`,\r\n  unmatched: `This field does not match.`,\r\n  passwordLength: `Password should at least be 8 characters long.`,\r\n  passwordChars: `Password should contain both numbers and letters.`,\r\n} as const;\r\n\r\nlet CONTROL_ERRORS: {[p: string]: string} = {\r\n  ...DEFAULT_CONTROL_ERROR\r\n};\r\n\r\nexport function setControlErrors(errors: typeof CONTROL_ERRORS) {\r\n  CONTROL_ERRORS = {\r\n    ...DEFAULT_CONTROL_ERROR,\r\n    ...errors,\r\n  }\r\n}\r\n\r\nexport function getControlErrorMessage(control: AbstractControl, customMessage?: string) {\r\n  if (control.status !== 'INVALID') return undefined;\r\n  if (customMessage) {\r\n    return customMessage;\r\n  }\r\n  const errorKeys = Object.keys(control.errors ?? {});\r\n  const firstKey = errorKeys.length > 0 ? errorKeys[0] : undefined;\r\n\r\n  let error: string | undefined;\r\n  if (firstKey) {\r\n    error = CONTROL_ERRORS[firstKey as never];\r\n    if (!error) {\r\n      error = !customMessage ? CONTROL_ERRORS['default'] : customMessage;\r\n    }\r\n  }\r\n  return error;\r\n}\r\n","import {\r\n  AbstractControl,\r\n  FormControl,\r\n  FormControlState,\r\n  FormControlStatus,\r\n  ValidatorFn,\r\n} from '@angular/forms';\r\nimport { BehaviorSubject, debounceTime, map, Observable, startWith, Subject, merge, combineLatest } from 'rxjs';\r\nimport { Validators } from './validators';\r\nimport { getControlErrorMessage } from './errors';\r\n\r\nexport interface FormControlExtended<TValue = any, DATA = any> extends FormControl<TValue> {\r\n  extended: true;\r\n\r\n  status$: Observable<FormControlStatus>;\r\n  invalid$: Observable<boolean>;\r\n  valid$: Observable<boolean>;\r\n  value$: Observable<TValue | undefined>;\r\n  error$: Observable<string | undefined>;\r\n\r\n  hasValue$: Observable<boolean>;\r\n  empty$: Observable<boolean>;\r\n\r\n  selectedItems$: Observable<any[] | undefined>;\r\n  selectedItems: any[] | undefined;\r\n\r\n  readonly$: Observable<boolean>;\r\n  readonly: boolean;\r\n\r\n  disabled$: Observable<boolean>;\r\n  enabled$: Observable<boolean>;\r\n  touched$: Observable<boolean>;\r\n  dirty$: Observable<boolean>;\r\n  // Returns true whenever a control is touched & is invalid in order to show error in the UI\r\n  showError$: Observable<boolean>;\r\n\r\n  displayText$: Observable<string | undefined>;\r\n  displayText: string | undefined;\r\n  displayControl: FormControl<string | undefined | null>;\r\n\r\n  // data is being used as extra information that is carried by the formControl\r\n  data$: Observable<DATA | undefined>;\r\n  // data is being used as extra information that is carried by the formControl\r\n  data: DATA | undefined;\r\n\r\n  customError?: string;\r\n\r\n  setReadonly: (value: boolean) => FormControlExtended<TValue, DATA>;\r\n  // if value is typeof string or number, it will be set in the display text, otherwise, undefined\r\n  setDisplayText: (value: any | undefined) => FormControlExtended<TValue>;\r\n  setSelectedItems: (value: any[] | undefined) => FormControlExtended<TValue, DATA>;\r\n  setCustomError: (value: string | undefined) => FormControlExtended<TValue, DATA>;\r\n  setDisabled: (value: boolean) => FormControlExtended<TValue, DATA>;\r\n  // get value if valid, else, return null\r\n  getValue: () => TValue | null;\r\n  // data is being used as extra information that is carried by the formControl\r\n  setData: (value: DATA | undefined) => FormControlExtended<TValue, DATA>;\r\n  emitStatus: () => void;\r\n}\r\n\r\nexport function formControl<T, DATA = any>(\r\n  value?: FormControlState<T> | T | null,\r\n  validators?: ValidatorFn | ValidatorFn[],\r\n  nullable = true,\r\n) {\r\n  const control = new FormControl(value, {\r\n    validators: validators,\r\n    nonNullable: nullable,\r\n  }) as FormControlExtended<T, DATA>;\r\n\r\n  const statusTrigger = new Subject<FormControlStatus>();\r\n  const disableTrigger = new BehaviorSubject<boolean>(control.disabled);\r\n  const dirtyTrigger = new BehaviorSubject<boolean>(control.dirty);\r\n  const touchedTrigger = new BehaviorSubject<boolean>(control.touched);\r\n  const valueSubject = new BehaviorSubject<T | undefined>(control.value);\r\n  const selectedItemsTrigger = new BehaviorSubject<any>(undefined);\r\n  const readonlyTrigger = new BehaviorSubject<boolean>(false);\r\n  const displayTextTrigger = new BehaviorSubject<string | undefined>(undefined);\r\n  const dataTrigger = new BehaviorSubject<DATA | undefined>(undefined);\r\n  const subControls: AbstractControl[] = [];\r\n\r\n  // Extended new properties!\r\n\r\n  control.extended = true;\r\n\r\n  control.status$ = merge(control.statusChanges, statusTrigger).pipe(startWith(control.status));\r\n  control.invalid$ = control.status$.pipe(map((t) => t === 'INVALID'));\r\n  control.valid$ = control.status$.pipe(map((t) => t === 'VALID'));\r\n  control.value$ = valueSubject.pipe();\r\n\r\n  control.hasValue$ = valueSubject.pipe(map((v) => {\r\n    if (value === null || value === undefined) return false;\r\n    if (typeof value === 'string' && value.length === 0) return false;\r\n    if (value instanceof Array && value.length === 0) return false;\r\n    return true;\r\n  }));\r\n  control.empty$ = control.hasValue$.pipe(map(v => !v))\r\n\r\n  control.selectedItems$ = selectedItemsTrigger.asObservable();\r\n  control.selectedItems = selectedItemsTrigger.value;\r\n\r\n  control.readonly$ = readonlyTrigger.asObservable();\r\n  control.readonly = false;\r\n\r\n  control.disabled$ = disableTrigger.asObservable();\r\n  control.enabled$ = control.disabled$.pipe(map((t) => !t));\r\n  control.dirty$ = combineLatest({ trigger: dirtyTrigger, status: control.status$ }).pipe(\r\n    map((t) => (t.status === 'DISABLED' ? false : t.trigger)),\r\n  );\r\n  control.touched$ = combineLatest({ trigger: touchedTrigger, status: control.status$ }).pipe(\r\n    map((t) => (t.status === 'DISABLED' ? false : t.trigger)),\r\n  );\r\n  control.showError$ = combineLatest({ invalid: control.invalid$, touched: control.touched$ }).pipe(\r\n    map((t) => t.invalid && t.touched),\r\n  );\r\n\r\n  control.displayText$ = displayTextTrigger.asObservable();\r\n  control.displayText = undefined;\r\n  control.displayControl = new FormControl<string | undefined>(undefined, [Validators.clone(control)]);\r\n\r\n  control.data$ = dataTrigger.asObservable();\r\n  control.data = undefined as any;\r\n\r\n  control.error$ = control.status$.pipe(\r\n    debounceTime(1),\r\n    map(() => {\r\n      if (control.status === 'INVALID') {\r\n        return getControlErrorMessage(control, control.customError);\r\n      }\r\n      return undefined;\r\n    }),\r\n  );\r\n  control.customError = undefined;\r\n\r\n  control.setReadonly = (value) => {\r\n    control.readonly = value;\r\n    readonlyTrigger.next(value);\r\n    return control;\r\n  };\r\n  control.setDisplayText = (value) => {\r\n    let newValue: string | undefined = undefined;\r\n    if (typeof value === 'string' || typeof value === 'number') {\r\n      newValue = typeof value === 'number' ? value.toString() : value;\r\n    }\r\n    control.displayText = newValue;\r\n    displayTextTrigger.next(newValue);\r\n    control.displayControl.setValue(newValue);\r\n\r\n    return control;\r\n  };\r\n  control.setSelectedItems = (value) => {\r\n    control.selectedItems = value;\r\n    selectedItemsTrigger.next(value);\r\n    return control;\r\n  };\r\n  control.setCustomError = (value) => {\r\n    control.customError = value;\r\n    return control;\r\n  };\r\n  control.setData = (value) => {\r\n    control.data = value;\r\n    dataTrigger.next(value)\r\n    return control;\r\n  };\r\n  control.setDisabled = (value) => {\r\n    if (value) {\r\n      control.disable();\r\n    } else {\r\n      control.enable();\r\n    }\r\n    return control;\r\n  };\r\n  control.getValue = () => {\r\n    return control.valid ? control.value : null;\r\n  };\r\n  control.emitStatus = () => {\r\n    statusTrigger.next(control.status);\r\n  };\r\n\r\n  subControls.push(control.displayControl);\r\n\r\n  // Override original functions\r\n\r\n  // @ts-ignore\r\n  // control._forEachChild = function (cb: (c: AbstractControl, index: number) => void) {\r\n  //   subControls.forEach((control: AbstractControl, index: number) => {\r\n  //     cb(control, index);\r\n  //   });\r\n  // }\r\n  //\r\n  // // @ts-ignore\r\n  // const _runValidatorFn = control._runValidator\r\n  // // @ts-ignore\r\n  // control._runValidator = function () {\r\n  //   const errors = _runValidatorFn.apply(this);\r\n  //   subControls.forEach(c => {\r\n  //     c.setErrors(errors);\r\n  //   });\r\n  //   return errors;\r\n  // }\r\n\r\n  const { setValue, patchValue, reset, disable, enable, markAsTouched, markAsUntouched, markAsDirty, markAsPristine } =\r\n    control;\r\n\r\n  control.setValue = function (value, options) {\r\n    setValue.apply(this, [value, options]);\r\n    valueSubject.next(value);\r\n    // control.setDisplayText(value);\r\n  };\r\n  control.patchValue = function (value, options) {\r\n    patchValue.apply(this, [value, options]);\r\n    valueSubject.next(value);\r\n    // control.setDisplayText(value);\r\n  };\r\n  control.reset = function (value, options) {\r\n    reset.apply(this, [value, options]);\r\n    valueSubject.next(value && typeof value === 'object' && 'value' in value ? value.value : value);\r\n    control.setData(undefined);\r\n    control.setSelectedItems(undefined);\r\n    control.setDisplayText(undefined);\r\n    dirtyTrigger.next(control.dirty);\r\n    touchedTrigger.next(control.touched);\r\n  };\r\n  control.disable = function (e) {\r\n    disable.apply(this, [e]);\r\n    disableTrigger.next(true);\r\n  };\r\n  control.enable = function (e) {\r\n    enable.apply(this, [e]);\r\n    disableTrigger.next(false);\r\n  };\r\n  control.markAsTouched = function (opts) {\r\n    markAsTouched.apply(this, [opts]);\r\n    touchedTrigger.next(true);\r\n  };\r\n  control.markAsDirty = function (opts) {\r\n    markAsDirty.apply(this, [opts]);\r\n    dirtyTrigger.next(true);\r\n  };\r\n  control.markAsUntouched = function (opts) {\r\n    markAsUntouched.apply(this, [opts]);\r\n    touchedTrigger.next(false);\r\n  };\r\n  control.markAsPristine = function (opts) {\r\n    markAsPristine.apply(this, [opts]);\r\n    dirtyTrigger.next(false);\r\n  };\r\n\r\n  // Initialize\r\n\r\n  control.setDisplayText(value);\r\n\r\n  return control;\r\n}\r\n\r\nexport function isFormControlExtended(\r\n  control: AbstractControl | FormControl | FormControlExtended,\r\n): control is FormControlExtended {\r\n  return 'extended' in control;\r\n}\r\n","import { AbstractControl, FormControlStatus, FormGroup } from '@angular/forms';\r\nimport { BehaviorSubject, map, merge, Observable, startWith } from 'rxjs';\r\nimport { isFormControlExtended } from './form-control';\r\n\r\nexport interface FormGroupExtended<TValue extends { [K in keyof TValue]: AbstractControl<any, any> } = any, DATA = any>\r\n  extends FormGroup<TValue> {\r\n  extended: true;\r\n\r\n  status$: Observable<FormControlStatus>;\r\n  invalid$: Observable<boolean>;\r\n  valid$: Observable<boolean>;\r\n\r\n  // data is being used as extra information that is carried by the formControl\r\n  data$: Observable<DATA | undefined>;\r\n  // data is being used as extra information that is carried by the formControl\r\n  data: DATA | undefined;\r\n\r\n  markAllAsDirty: () => void;\r\n\r\n  setReadonly: (value: boolean, ...keys: (keyof TValue)[]) => FormGroupExtended<TValue, DATA>;\r\n  setDisabled: (value: boolean, ...keys: (keyof TValue)[]) => FormGroupExtended<TValue, DATA>;\r\n  // data is being used as extra information that is carried by the formControl\r\n  setData: (value: DATA | undefined) => FormGroupExtended<TValue, DATA>;\r\n}\r\n\r\nexport function formGroup<T extends { [K in keyof T]: AbstractControl<any, any> }, DATA = any>(inputs: T) {\r\n  const group = new FormGroup<T>(inputs) as FormGroupExtended<T>;\r\n\r\n  const dataTrigger = new BehaviorSubject<DATA | undefined>(undefined);\r\n\r\n  group.extended = true;\r\n\r\n  group.status$ = merge(group.statusChanges).pipe(startWith(group.status));\r\n  group.invalid$ = group.status$.pipe(map((t) => t === 'INVALID'));\r\n  group.valid$ = group.status$.pipe(map((t) => t === 'VALID'));\r\n\r\n  group.data$ = dataTrigger.asObservable();\r\n  group.data = undefined as any;\r\n\r\n  const forEachControl = (fn: (key: keyof T, control: AbstractControl) => void) => {\r\n    Object.entries(group.controls).forEach(([key, control]) => fn(key as never, control));\r\n  };\r\n\r\n  group.setReadonly = (value, ...keys) => {\r\n    forEachControl((key, control) => {\r\n      if (isFormControlExtended(control) && (keys?.length ? keys.includes(key) : true)) {\r\n        control.setReadonly(value);\r\n      }\r\n    });\r\n    return group;\r\n  };\r\n\r\n  group.setDisabled = (value, ...keys) => {\r\n    forEachControl((key, control) => {\r\n      if ((keys?.length ? keys.includes(key) : true)) {\r\n        value ? control.disable() : control.enable();\r\n      }\r\n    });\r\n    return group;\r\n  };\r\n\r\n  group.markAllAsDirty = () => {\r\n    forEachControl((key, control) => {\r\n      control.markAsDirty();\r\n      control.markAsTouched();\r\n    })\r\n  }\r\n\r\n  group.setData = (value) => {\r\n    group.data = value;\r\n    dataTrigger.next(value)\r\n    return group;\r\n  };\r\n\r\n  return group;\r\n}\r\n\r\nexport function isFormGroupExtended(group: FormGroup | FormGroupExtended): group is FormGroupExtended {\r\n  return 'extended' in group;\r\n}\r\n","import { provideAppInitializer } from '@angular/core';\r\nimport { setControlErrors } from './errors';\r\n\r\nexport function provideFormErrors(errorsObject: {[p: string]: string}) {\r\n  return provideAppInitializer(() => {\r\n    setControlErrors(errorsObject);\r\n  })\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AngularValidators"],"mappings":"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"}