{"version":3,"file":"angular-extensions-models.mjs","sources":["../../../projects/angular-extensions/models/src/validation.model.ts","../../../projects/angular-extensions/models/src/datetime-configuration.model.ts","../../../projects/angular-extensions/models/src/field.model.ts","../../../projects/angular-extensions/models/src/form.model.ts","../../../projects/angular-extensions/models/src/schedule.model.ts","../../../projects/angular-extensions/models/src/angular-extensions-models.ts"],"sourcesContent":["import { Observable, from } from \"rxjs\";\r\nimport { map, tap } from \"rxjs/operators\";\r\nimport { ValidatorFn, ValidationErrors, AbstractControl as AbstractControlBase, Validators, AsyncValidatorFn } from \"@angular/forms\";\r\n\r\nexport type ValueProvider<TValue, TResult> = (value?: TValue) => TResult;\r\n\r\n/**\r\n * Generic representation of Angular's AbstractControl\r\n */\r\nexport interface AbstractControl<TValue> extends AbstractControlBase {\r\n  value: TValue;\r\n}\r\n\r\nexport const CustomValidators = {\r\n\r\n  emailRegex: new RegExp(\r\n    `^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_\\`{|}~-]+` +\r\n    `(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_\\`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?` +\r\n    `(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$`),\r\n\r\n  /**\r\n   * Triggers validation of related controls by specified predicate.\r\n   *\r\n   * @param control Control that triggers validation\r\n   * @param predicate Related controls predicate\r\n   */\r\n  triggerValidation: (control: AbstractControl<any>, predicate: (siblingControl: AbstractControl<any>) => boolean): void => {\r\n    if (control.parent) {\r\n      setTimeout(() => {\r\n        Object.values(control.parent?.controls || {})\r\n          .filter(siblingControl =>\r\n            siblingControl !== control && siblingControl.validator &&\r\n            siblingControl.touched && predicate(siblingControl))\r\n          .forEach(siblingControl => siblingControl.setErrors(siblingControl.validator(siblingControl)));\r\n      });\r\n    }\r\n  },\r\n\r\n  /**\r\n   * Custom validation that requires non empty string values\r\n   *\r\n   * @param control AbstractControl\r\n   * @returns Validation function\r\n   */\r\n  required(control: AbstractControl<any>): ValidationErrors | null {\r\n    if (typeof control.value == \"string\") {\r\n      return (control.value || \"\").trim() != \"\"\r\n        ? null\r\n        : { required: { expected: true } };\r\n    }\r\n    else {\r\n      return Validators.required(control);\r\n    }\r\n  },\r\n\r\n  minDate(minDate: Date): ValidatorFn {\r\n    return (control: AbstractControl<Date>): ValidationErrors | null => {\r\n      return control.value == null ||\r\n        minDate == null ||\r\n        minDate.valueOf() < control.value.valueOf()\r\n        ? null\r\n        : { minDate: { expected: minDate } };\r\n    };\r\n  },\r\n\r\n  minOrEqualDate(minOrEqualDate: Date): ValidatorFn {\r\n    return (control: AbstractControl<Date>): ValidationErrors | null => {\r\n      return control.value == null ||\r\n        minOrEqualDate == null ||\r\n        minOrEqualDate.valueOf() <= control.value.valueOf()\r\n        ? null\r\n        : { minOrEqualDate: { expected: minOrEqualDate } };\r\n    };\r\n  },\r\n\r\n  maxDate(maxDate: Date): ValidatorFn {\r\n    return (control: AbstractControl<Date>): ValidationErrors | null => {\r\n      return control.value == null ||\r\n        maxDate == null ||\r\n        maxDate.valueOf() > control.value.valueOf()\r\n        ? null\r\n        : { maxDate: { expected: maxDate } };\r\n    };\r\n  },\r\n\r\n  maxOrEqualDate(maxOrEqualDate: Date): ValidatorFn {\r\n    return (control: AbstractControl<Date>): ValidationErrors | null => {\r\n      return control.value == null ||\r\n        maxOrEqualDate == null ||\r\n        maxOrEqualDate.valueOf() >= control.value.valueOf()\r\n        ? null\r\n        : { maxOrEqualDate: { expected: maxOrEqualDate } };\r\n    };\r\n  },\r\n\r\n  custom(valid: boolean): ValidatorFn {\r\n    return (control: AbstractControl<any>): ValidationErrors | null => {\r\n      return valid\r\n        ? null\r\n        : { custom: { value: control.value } };\r\n    };\r\n  },\r\n\r\n  async(valid: Observable<boolean> | Promise<boolean>): AsyncValidatorFn {\r\n    return (control: AbstractControl<any>): Observable<ValidationErrors | null> => {\r\n      if(valid instanceof Promise) {\r\n        valid = from(valid);\r\n      }\r\n\r\n      return valid.pipe(map(result => result ? null : { async: { value: control.value } }));\r\n    };\r\n  },\r\n\r\n  native(input?: HTMLInputElement): ValidatorFn {\r\n    return (control: AbstractControl<any>): ValidationErrors | null => {\r\n      return !input || input.checkValidity()\r\n        ? null\r\n        : { native: { value: control.value } };\r\n    };\r\n  },\r\n};\r\n\r\nexport interface ValidationItemConstructor<TValue, TResult> {\r\n  value: TResult | ValueProvider<TValue, TResult>;\r\n\r\n  text?: string;\r\n}\r\n\r\n/**\r\n * Contains validation data provider and provides generic method to validate AbstractControl\r\n */\r\nexport class ValidationItem<TValue, TResult> implements ValidationItemConstructor<TValue, TResult> {\r\n\r\n  /**\r\n   * Validation data provider\r\n   */\r\n  public value: TResult | ValueProvider<TValue, TResult>;\r\n\r\n  /**\r\n   * Validation error text\r\n   */\r\n  public text?: string;\r\n\r\n  constructor(props: Partial<ValidationItem<TValue, TResult>>) {\r\n    Object.assign(this, props);\r\n  }\r\n\r\n  /**\r\n   * Gets constant value if possible or executes provider function\r\n   *\r\n   * @param controlValue Actual AbstractControl value\r\n   * @returns Validation data\r\n   */\r\n  public getValue(controlValue?: TValue): TResult {\r\n    return this.value instanceof Function\r\n      ? this.value(controlValue)\r\n      : this.value;\r\n  }\r\n\r\n  /**\r\n   * Returns AbstractControl validation function based on provided validator and validation data\r\n   *\r\n   * @param validator AbstractControl validator\r\n   * @param onValidationComplete Validation completed hook\r\n   * @returns AbstractControl validation function\r\n   */\r\n  public validate(\r\n    validator: (value: TResult) => ValidatorFn,\r\n    onValidationComplete?: (control: AbstractControl<TValue>, validationErrors: ValidationErrors | null) => void\r\n  ): ValidatorFn {\r\n    return control => {\r\n      let value = this.getValue(control.value);\r\n\r\n      if (value != null) {\r\n        let validationErrors = validator(value)(control);\r\n\r\n        if (onValidationComplete) {\r\n          onValidationComplete(control, validationErrors);\r\n        }\r\n\r\n        return validationErrors;\r\n      }\r\n      else {\r\n        return null;\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Returns AbstractControl async validation function based on provided validator and validation data\r\n   *\r\n   * @param validator AbstractControl validator\r\n   * @param onValidationComplete Validation completed hook\r\n   * @returns AbstractControl validation function\r\n   */\r\n  public validateAsync(\r\n    validator: (value: TResult) => AsyncValidatorFn,\r\n    onValidationComplete?: (control: AbstractControl<TValue>, validationErrors: ValidationErrors | null) => void\r\n  ): AsyncValidatorFn {\r\n    return control => {\r\n      let value = this.getValue(control.value);\r\n\r\n      if (value != null) {\r\n        let validationErrors$ = validator(value)(control);\r\n\r\n        if (onValidationComplete && validationErrors$ instanceof Observable) {\r\n          validationErrors$ = validationErrors$.pipe(tap(validationErrors => onValidationComplete(control, validationErrors)));\r\n        }\r\n\r\n        return validationErrors$;\r\n      }\r\n      else {\r\n        return null;\r\n      }\r\n    };\r\n  }\r\n}\r\n\r\nexport type ValidationConstructor<TValue> =\r\n  Partial<{ [K in keyof Validation<TValue>]: Partial<Validation<TValue>[K]> }>;\r\n\r\n/**\r\n * Contains Field's available validation components\r\n */\r\nexport class Validation<TValue> {\r\n\r\n  [key: string]: ValidationItem<TValue, any> | undefined;\r\n\r\n  public required?: ValidationItem<TValue, boolean>;\r\n\r\n  public requiredTrue?: ValidationItem<TValue, boolean>;\r\n\r\n  public minLength?: ValidationItem<TValue, number>;\r\n\r\n  public maxLength?: ValidationItem<TValue, number>;\r\n\r\n  public min?: ValidationItem<TValue, number>;\r\n\r\n  public max?: ValidationItem<TValue, number>;\r\n\r\n  public minDate?: ValidationItem<TValue, Date>;\r\n\r\n  public minOrEqualDate?: ValidationItem<TValue, Date>;\r\n\r\n  public maxDate?: ValidationItem<TValue, Date>;\r\n\r\n  public maxOrEqualDate?: ValidationItem<TValue, Date>;\r\n\r\n  public pattern?: ValidationItem<TValue, string | RegExp>;\r\n\r\n  public custom?: ValidationItem<TValue, boolean>;\r\n\r\n  public async?: ValidationItem<TValue, Observable<boolean> | Promise<boolean>>;\r\n\r\n  public native?: ValidationItem<TValue, HTMLInputElement>;\r\n\r\n  constructor(props: ValidationConstructor<TValue>) {\r\n    Object\r\n      .keys(props || {})\r\n      .forEach(key => {\r\n        this[key] = new ValidationItem(props[key] as Partial<ValidationItem<TValue, any>>);\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Builds AbstractControl validators based on Validation object\r\n   *\r\n   * @param validation\r\n   * @returns\r\n   */\r\n  public static getValidators(validation: Validation<any>): ValidatorFn[] {\r\n    let validators: ValidatorFn[] = [];\r\n\r\n    if (validation) {\r\n      if (validation.required) {\r\n        validators.push(validation.required.validate(\r\n          isRequired => isRequired ? CustomValidators.required : () => null,\r\n          (control, errors) => {\r\n            if (errors == null) {\r\n              CustomValidators.triggerValidation(control, siblingControl => siblingControl.hasError(\"required\"));\r\n            }\r\n          }));\r\n      }\r\n\r\n      if (validation.requiredTrue) {\r\n        validators.push(validation.requiredTrue.validate(isRequiredTrue => isRequiredTrue ? Validators.requiredTrue : () => null));\r\n      }\r\n\r\n      if (validation.minLength) {\r\n        validators.push(validation.minLength.validate(Validators.minLength));\r\n      }\r\n\r\n      if (validation.maxLength) {\r\n        validators.push(validation.maxLength.validate(Validators.maxLength));\r\n      }\r\n\r\n      if (validation.min) {\r\n        validators.push(validation.min.validate(Validators.min, (control, errors) => {\r\n          if (errors == null) {\r\n            CustomValidators.triggerValidation(control, siblingControl => siblingControl.hasError(\"max\"));\r\n          }\r\n        }));\r\n      }\r\n\r\n      if (validation.max) {\r\n        validators.push(validation.max.validate(Validators.max, (control, errors) => {\r\n          if (errors == null) {\r\n            CustomValidators.triggerValidation(control, siblingControl => siblingControl.hasError(\"min\"));\r\n          }\r\n        }));\r\n      }\r\n\r\n      if (validation.minDate) {\r\n        validators.push(validation.minDate.validate(CustomValidators.minDate, (control, errors) => {\r\n          if (errors == null) {\r\n            CustomValidators.triggerValidation(control, siblingControl =>\r\n              siblingControl.hasError(\"maxDate\") || siblingControl.hasError(\"maxOrEqualDate\"));\r\n          }\r\n        }));\r\n      }\r\n\r\n      if (validation.minOrEqualDate) {\r\n        validators.push(validation.minOrEqualDate.validate(CustomValidators.minOrEqualDate, (control, errors) => {\r\n          if (errors == null) {\r\n            CustomValidators.triggerValidation(control, siblingControl =>\r\n              siblingControl.hasError(\"maxDate\") || siblingControl.hasError(\"maxOrEqualDate\"));\r\n          }\r\n        }));\r\n      }\r\n\r\n      if (validation.maxDate) {\r\n        validators.push(validation.maxDate.validate(CustomValidators.maxDate, (control, errors) => {\r\n          if (errors == null) {\r\n            CustomValidators.triggerValidation(control, siblingControl =>\r\n              siblingControl.hasError(\"minDate\") || siblingControl.hasError(\"minOrEqualDate\"));\r\n          }\r\n        }));\r\n      }\r\n\r\n      if (validation.maxOrEqualDate) {\r\n        validators.push(validation.maxOrEqualDate.validate(CustomValidators.maxOrEqualDate, (control, errors) => {\r\n          if (errors == null) {\r\n            CustomValidators.triggerValidation(control, siblingControl =>\r\n              siblingControl.hasError(\"minDate\") || siblingControl.hasError(\"minOrEqualDate\"));\r\n          }\r\n        }));\r\n      }\r\n\r\n      if (validation.pattern) {\r\n        validators.push(validation.pattern.validate(Validators.pattern));\r\n      }\r\n\r\n      if (validation.custom) {\r\n        validators.push(validation.custom.validate(CustomValidators.custom));\r\n      }\r\n\r\n      if (validation.native) {\r\n        validators.push(validation.native.validate(CustomValidators.native));\r\n      }\r\n    }\r\n\r\n    return validators;\r\n  }\r\n\r\n  /**\r\n   * Builds AbstractControl async validators based on Validation object\r\n   *\r\n   * @param validation\r\n   * @returns\r\n   */\r\n  public static getAsyncValidators(validation: Validation<any>): AsyncValidatorFn[] {\r\n    let validators: AsyncValidatorFn[] = [];\r\n\r\n    if (validation) {\r\n      if (validation.async) {\r\n        validators.push(validation.async.validateAsync(CustomValidators.async));\r\n      }\r\n    }\r\n\r\n    return validators;\r\n  }\r\n}\r\n","import type { ComponentRef } from \"@angular/core\";\r\nimport type { MatDateFormats } from \"@angular/material/core\";\r\nimport type { MatDatepicker, MatDatepickerContent, MatDatepickerInput, MatSingleDateSelectionModel } from \"@angular/material/datepicker\";\r\nimport type { NgxMatTimepickerComponent } from \"@angular-material-components/datetime-picker\";\r\n\r\n/**\r\n * Provides consolidated application's default date formats\r\n */\r\nexport const NGX_DATE_FORMATS: MatDateFormats = {\r\n  parse: {\r\n    dateInput: \"LL\",\r\n  },\r\n  display: {\r\n    dateInput: \"yyyy-MM-dd\",\r\n    monthYearLabel: \"MMM yyyy\",\r\n    dateA11yLabel: \"LL\",\r\n    monthYearA11yLabel: \"MMMM yyyy\",\r\n  },\r\n};\r\n\r\nexport interface AppNgxMatTimepickerComponent<T> extends Omit<NgxMatTimepickerComponent<T>, \"_model\"> {\r\n\r\n  _model: T;\r\n\r\n  hour: number;\r\n\r\n  minute: number;\r\n\r\n  second: number;\r\n\r\n  _updateModel(): void;\r\n\r\n  _getNextValueByProp(property: string, up?: boolean): number;\r\n}\r\n\r\nexport interface AppMatDatepicker<T> extends Omit<MatDatepicker<T>, \"_model\"> {\r\n\r\n  _model: MatSingleDateSelectionModel<T>;\r\n\r\n  _componentRef?: ComponentRef<MatDatepickerContent<T>>;\r\n\r\n  _popupComponentRef?: ComponentRef<MatDatepickerContent<T>>;\r\n}\r\n\r\nexport interface AppMatDatepickerInput<T> extends Omit<MatDatepickerInput<T>, \"_dateFormats\"> {\r\n  _dateFormats: MatDateFormats;\r\n\r\n  value: T;\r\n\r\n  _formatValue(date: T): void;\r\n}\r\n","import { xorBy } from \"lodash-es\";\r\nimport { Observable, of, Subject } from \"rxjs\";\r\nimport { catchError, filter as filterPredicate, first, map, pairwise, startWith, takeUntil } from \"rxjs/operators\";\r\nimport { FormControl, FormGroup } from \"@angular/forms\";\r\n\r\nimport { handleError, toStartCase, type StartCaseOptions } from \"angular-extensions/core\";\r\nimport { DatePipe, DateTimePipe } from \"angular-extensions/pipes\";\r\nimport { Validation, ValidationConstructor } from \"./validation.model\";\r\nimport { NGX_DATE_FORMATS } from \"./datetime-configuration.model\";\r\n\r\n/**\r\n * Constructor object for Field class\r\n */\r\ntype FieldConstructor<TValue, TOption = TValue, TOptionGroup = any, TFormattedValue = any, TControlValue = any> =\r\n  Partial<Omit<Field<TValue, TOption, TOptionGroup, TFormattedValue, TControlValue>,\r\n    \"control\" | \"element\" | \"options\" | \"onValueChange\" | \"onOptionsChange\" | \"validation\" |\r\n    \"customOptionFilterPredicate\" | \"_initialStatus\" | \"destroy\" | \"setOptions\" | \"setFromOptions\" |\r\n    \"updateValidation\" | \"visible\" | \"formattedValue\" | \"formGroup\" | \"optionChanges\" | \"destroy$\"> & {\r\n      options: TOption[] | Observable<TOption[]>;\r\n\r\n      onValueChange: (value: TValue, previous: TValue) => void;\r\n\r\n      onOptionsChange: (value: TOption[]) => void;\r\n\r\n      validation: ValidationConstructor<TValue>;\r\n\r\n      /**\r\n       * Indicates field initial state\r\n       */\r\n      disabled: boolean;\r\n\r\n      /**\r\n       * Configures when {@link valueChanges} should emit event.\r\n       */\r\n      updateOn?: \"change\" | \"blur\" | \"submit\";\r\n    }>;\r\n\r\n/**\r\n * Commonly used Field value formatters\r\n */\r\nexport const Formatters = {\r\n\r\n  /**\r\n   * Formats Field<Date> value to UTC date (\"yyyy-MM-dd\") string.\r\n   *\r\n   * @param field Field<Date>\r\n   * @returns String\r\n   */\r\n  utcDateFormatter: (field: Field<Date, any>): string => {\r\n    return new DatePipe(NGX_DATE_FORMATS).transform(field.value, \"yyyy-MM-dd\");\r\n  },\r\n\r\n  /**\r\n   * Formats Field<Date> value to UTC date/time (\"yyyy-MM-dd'T'HH:mm:ss'Z'\") string.\r\n   *\r\n   * @param field Field<Date>\r\n   * @returns String\r\n   */\r\n  utcDateTimeFormatter: (field: Field<Date, any>): string => {\r\n    return new DatePipe(NGX_DATE_FORMATS).transform(field.value?.toUtcDate(), \"yyyy-MM-dd'T'HH:mm:ss'Z'\");\r\n  },\r\n\r\n  /**\r\n   * Formats Field<Date> value to date string with {@link DatePipe} and {@link NGX_DATE_FORMATS}\r\n   *\r\n   * @param field Field<Date>\r\n   * @returns String\r\n   */\r\n  dateFormatter: (field: Field<Date, any>) => {\r\n    return new DatePipe(NGX_DATE_FORMATS).transform(field.value);\r\n  },\r\n\r\n  /**\r\n   * Formats Field<Date> value to date/time string with {@link DateTimePipe} and {@link NGX_DATE_FORMATS}\r\n   *\r\n   * @param field Field<Date>\r\n   * @returns String\r\n   */\r\n  dateTimeFormatter: (field: Field<Date, any>) => {\r\n    return new DateTimePipe(NGX_DATE_FORMATS).transform(field.value);\r\n  }\r\n};\r\n\r\n/**\r\n * Field <=> Control value converter.\r\n * Useful when HTML input has different model that actual Field.\r\n *\r\n * @template TFieldValue Field Value\r\n * @template TControlValue Field's Control Value\r\n */\r\ninterface FieldControlValueConverter<TFieldValue, TControlValue> {\r\n\r\n  fromControlValue: (value: TControlValue) => TFieldValue;\r\n\r\n  toControlValue: (value: TFieldValue) => TControlValue;\r\n}\r\n\r\ninterface FormatterOptions {\r\n  insertSpaceBeforeDigits?: boolean;\r\n  insertSpaceBeforeAbbreviations?: boolean;\r\n}\r\n\r\n/**\r\n * Field option that can be used in select-control, etc.\r\n */\r\nexport class Option<TValue, TId = string> {\r\n\r\n  public id: TId;\r\n\r\n  public name: string;\r\n\r\n  public label: string;\r\n\r\n  public value: TValue;\r\n\r\n  constructor(props?: Partial<Option<TValue, TId>>) {\r\n    Object.assign(this, props);\r\n\r\n    if (!this.name) {\r\n      this.name = this.value?.toString();\r\n    }\r\n\r\n    if (!this.id) {\r\n      this.id = this.name as any;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates options from specified Enum\r\n   *\r\n   * @param enumType Enum type\r\n   * @param options Label formatter options\r\n   * @returns Collection of options\r\n   */\r\n  public static ForEnum<TEnum extends number | string>(\r\n    enumType: any,\r\n    options: StartCaseOptions = {}): Option<TEnum>[] {\r\n    let entries = Object.entries(enumType) as [string, string | number][];;\r\n\r\n    let numberEntries = entries.filter(([, value]) => typeof value == \"number\") as [string, number][];\r\n\r\n    return (numberEntries.length > 0 ? numberEntries : entries)\r\n      .map(([key, value]: [string, string | number]) => {\r\n        return Object.assign(new Option<TEnum>({\r\n          label: toStartCase.call(key ?? \"\", options),\r\n          name: key,\r\n          value: value as TEnum,\r\n        }));\r\n      });\r\n  }\r\n}\r\n\r\n/**\r\n * Provides simplified api to work with Angular reactive forms and predefined control components.\r\n */\r\nexport class Field<TValue, TOption = TValue, TOptionGroup = any, TFormattedValue = any, TControlValue = TValue> {\r\n\r\n  private optionChanges$ = new Subject<TOption[]>();\r\n\r\n  private _options: TOption[] = [];\r\n\r\n  public _initialStatus: { disabled: boolean };\r\n\r\n  public readonly destroy$ = new Subject();\r\n\r\n  /**\r\n   * Angular FormControl of field. Control components communicates via this control between Field and UI\r\n   */\r\n  public control: FormControl<TControlValue>;\r\n\r\n  /**\r\n   * Reference to control root HTML element\r\n   */\r\n  public element?: HTMLElement;\r\n\r\n  /**\r\n   * Name of a field inside parent's FormGroup, etc.\r\n   */\r\n  public name: string;\r\n\r\n  /**\r\n   * Placeholder of a field\r\n   */\r\n  public placeholder?: string;\r\n\r\n  /**\r\n   * Label of a field\r\n   */\r\n  public label?: string;\r\n\r\n  /**\r\n   * Info text of field showed in mat-hint\r\n   */\r\n  public info?: string;\r\n\r\n  /**\r\n   * Validations of a field\r\n   */\r\n  public validation: Validation<TValue>;\r\n\r\n  /**\r\n   * Field value formatter which is used by {@link formattedValue}. See list of built-in {@link Formatters}\r\n   */\r\n  public formatter: (field: Field<TValue, TOption, TOptionGroup, TFormattedValue, TControlValue>) => TFormattedValue;\r\n\r\n  /**\r\n   * Field's Control value converter, conversion is done whenever value is being read from/written to a {@link control}.\r\n   */\r\n  public controlConverter: FieldControlValueConverter<TValue, TControlValue> = {\r\n    fromControlValue: controlValue => controlValue as any as TValue,\r\n    toControlValue: value => value as any as TControlValue,\r\n  };\r\n\r\n  /**\r\n   * Configures when field should be visible, by default is always visible.\r\n   */\r\n  public visibilityProvider?: () => boolean;\r\n\r\n  /**\r\n   * Highlights field\r\n   */\r\n  public highlight?: (value?: any) => void;\r\n\r\n  /**\r\n   * Determines whether field is querying data: options, etc.\r\n   */\r\n  public isQuerying: boolean;\r\n\r\n  /**\r\n   * Gets field's parent as form group\r\n   */\r\n  public get formGroup() {\r\n    return this.control?.parent as FormGroup | null;\r\n  }\r\n\r\n  /**\r\n   * Gets field's visibility status. Based on {@link visibilityProvider}.\r\n   */\r\n  public get visible() {\r\n    return !this.visibilityProvider || this.visibilityProvider();\r\n  }\r\n\r\n  /**\r\n   * Sets field's visibility status. Based on {@link visibilityProvider}.\r\n   */\r\n  public set visible(isVisible: boolean) {\r\n    this.visibilityProvider = () => !!isVisible;\r\n\r\n    this.control.updateValueAndValidity();\r\n  }\r\n\r\n  /**\r\n   * Gets field's value. Applies conversion if specified at {@link controlConverter}.\r\n   */\r\n  public get value() {\r\n    return this.controlConverter.fromControlValue(this.control.value);\r\n  }\r\n\r\n  /**\r\n   * Sets field's value. Applies conversion if specified at {@link controlConverter}.\r\n   * If previous value is the same as current value, {@link onValueChange} wont emit changes\r\n   */\r\n  public set value(value: TValue) {\r\n    let convertedValue = this.controlConverter.toControlValue(value);\r\n\r\n    if (convertedValue !== this.control.value) {\r\n      this.control.setValue(convertedValue, { onlySelf: true });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets formatted value, applies {@link formatter} if exists\r\n   */\r\n  public get formattedValue(): TFormattedValue {\r\n    return this.formatter\r\n      ? this.formatter(this)\r\n      : this.value as any;\r\n  }\r\n\r\n  /**\r\n   * Gets Field's options\r\n   */\r\n  public get options(): TOption[] {\r\n    return this._options;\r\n  }\r\n\r\n  /**\r\n   * Sets Field's options and notifies subscribers.\r\n   */\r\n  public set options(value: TOption[]) {\r\n    this._options = value;\r\n\r\n    if (this.value != null && this.updateValueWhenOptionsChanged) {\r\n      this.setFromOptions(option => {\r\n        if (this.value instanceof Array) {\r\n          return this.value.map(this.optionId).contains(this.optionId(option));\r\n        }\r\n        else {\r\n          return this.value?.valueOf() == this.optionValue(option)?.valueOf() ||\r\n            this.optionId(this.value as any) == this.optionId(option);\r\n        }\r\n      });\r\n    }\r\n\r\n    // triggers change detection for internal controls\r\n    this.control.setErrors(this.control.errors);\r\n\r\n    this.optionChanges$.next(value);\r\n  }\r\n\r\n  /**\r\n   * Gets option changes stream\r\n   */\r\n  public get optionChanges() {\r\n    return this.optionChanges$.asObservable().pipe(takeUntil(this.destroy$));\r\n  }\r\n\r\n  public readonly customOptionFilterPredicate: boolean;\r\n\r\n  /**\r\n   * Indicates whether field values should be updated when options changed.\r\n   */\r\n  public updateValueWhenOptionsChanged: boolean;\r\n\r\n  /**\r\n   * Configures when Field should be destroyed.\r\n   * If \"control\" - Field is destroyed when control ngOnDestroy method called.\r\n   * If \"editor\" - Field is destroyed when editor destroy method called.\r\n   *\r\n   * @default Default value: \"control\"\r\n   */\r\n  public destoryWith: \"control\" | \"editor\" = \"control\";\r\n\r\n  /**\r\n   * Options filter predicate that is used by select-control, by default filters by option label\r\n   */\r\n  public optionsFilterPredicate: (option: TOption, filter: string) => boolean;\r\n\r\n  /**\r\n   * Custom option identifier that is used by select-control to compare options\r\n   */\r\n  public optionId: (option: TOption, index?: number) => number | string;\r\n\r\n  /**\r\n   * Custom option label provider that is used by select-control\r\n   */\r\n  public optionLabel: (option: TOption) => string;\r\n\r\n  /**\r\n   * Custom option label provider that is used by select-control\r\n   */\r\n  public optionTooltip?: (option: TOption) => string;\r\n\r\n  /**\r\n   * Allows to specify option display label when selected\r\n   */\r\n  public optionDisplayLabel?: (option: TOption) => string;\r\n\r\n  /**\r\n   * Custom option value provider that is used by select-control\r\n   */\r\n  public optionValue: (option: TOption) => TControlValue;\r\n\r\n  /**\r\n   * Custom option availability provider that is used by select-control\r\n   */\r\n  public optionDisabled: (option: TOption) => boolean;\r\n\r\n  /**\r\n   * Options provider function accepting string query\r\n   */\r\n  public optionsProvider?: (query: string) => Observable<TOption[]>;\r\n\r\n  /**\r\n   * Options group provider that is used by select-control.\r\n   */\r\n  public optionsGroupProvider?: (option: TOption) => TOptionGroup;\r\n\r\n  /**\r\n   * Custom option group label provider that is used by select-control\r\n   */\r\n  public optionGroupLabel: (optionGroup: TOptionGroup) => string;\r\n\r\n  constructor(props: FieldConstructor<TValue, TOption, TOptionGroup, TFormattedValue, TControlValue>) {\r\n    this.validation = new Validation(props.validation || {});\r\n\r\n    this.control = new FormControl(\r\n      {\r\n        value: this.controlConverter.toControlValue(props.value),\r\n\r\n        // suppresses validation that might have dependencies\r\n        // on other fields that are not currently instantiated\r\n        disabled: props.disabled !== undefined\r\n          ? props.disabled\r\n          : true,\r\n      },\r\n      {\r\n        validators: Validation.getValidators(this.validation),\r\n        asyncValidators: Validation.getAsyncValidators(this.validation),\r\n        updateOn: props.updateOn,\r\n      });\r\n\r\n    this.customOptionFilterPredicate = !!props.optionsFilterPredicate;\r\n\r\n    // do not filter option if search provider is used\r\n    this.optionsFilterPredicate = props.optionsProvider\r\n      ? () => true\r\n      : (option, filter) => {\r\n        filter = filter.toLowerCase();\r\n\r\n        let optionGroup = this.optionsGroupProvider?.(option);\r\n\r\n        if (optionGroup && this.optionGroupLabel(optionGroup)?.toLowerCase().includes(filter)) {\r\n          return true;\r\n        }\r\n\r\n        if (this.optionLabel(option)?.toLowerCase().includes(filter)) {\r\n          return true;\r\n        }\r\n\r\n        return false;\r\n      };\r\n\r\n    this.optionGroupLabel = optionGroup => optionGroup?.toString();\r\n    this.optionId = option => option instanceof Option ? option.value : option;\r\n    this.optionLabel = option => option instanceof Option ? option.label : option?.toString();\r\n    this.optionValue = option => option instanceof Option ? option.value : option;\r\n    this.optionDisabled = _ => false;\r\n\r\n    // indicated form that control should remain disabled\r\n    if (props.disabled) {\r\n      this._initialStatus = { disabled: props.disabled };\r\n\r\n      delete props.disabled;\r\n    }\r\n\r\n    if (props.onValueChange) {\r\n      let onValueChange = props.onValueChange;\r\n\r\n      this.control\r\n        .valueChanges\r\n        .pipe(\r\n          filterPredicate(() => this.control.enabled),\r\n          map(this.controlConverter.fromControlValue),\r\n          startWith(props.value),\r\n          pairwise(),\r\n          takeUntil(this.destroy$),\r\n        )\r\n        .subscribe(([previous, current]) => handleError(() => onValueChange(current as TValue, previous)));\r\n\r\n      delete props.onValueChange;\r\n    }\r\n\r\n    if (props.onOptionsChange) {\r\n      let onOptionsChange = props.onOptionsChange;\r\n\r\n      this.optionChanges$\r\n        .pipe(takeUntil(this.destroy$))\r\n        .subscribe(options => handleError(() => onOptionsChange(options)));\r\n\r\n      delete props.onOptionsChange;\r\n    }\r\n\r\n    if (props.options) {\r\n      this.setOptions(props.options);\r\n\r\n      delete props.options;\r\n    }\r\n\r\n    delete props.validation;\r\n\r\n    Object.assign(this, props);\r\n  }\r\n\r\n  /**\r\n   * Sets Field's options. Subscribes to Observable input and tracks status in {@link isQuerying} property\r\n   */\r\n  public setOptions(value: TOption[] | Observable<TOption[]>): Promise<void> {\r\n    return new Promise(resolve => {\r\n      if (value instanceof Observable) {\r\n        this.isQuerying = true;\r\n\r\n        // emit control status change event to trigger change detection by controls\r\n        this.control.markAsPending({ onlySelf: true });\r\n\r\n        value\r\n          .pipe(\r\n            first(),\r\n            catchError(error => {\r\n              console.error(error);\r\n\r\n              return of([]);\r\n            }))\r\n          .subscribe({\r\n            next: options => {\r\n              this.options = options;\r\n              this.isQuerying = false;\r\n\r\n              // opposite action to \"control.markAsPending\"\r\n              this.control.setErrors(this.control.errors);\r\n\r\n              resolve();\r\n            }\r\n          });\r\n      }\r\n      else {\r\n        this.options = value;\r\n\r\n        resolve();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Selects values from available options based on options predicate. Honors\r\n   *\r\n   * @param optionPredicate Options predicate that will select values from\r\n   * @param config Configures default value if nothing selected or should it emit value change event.\r\n   * @returns Promise\r\n   */\r\n  public setFromOptions(\r\n    optionPredicate: (option: TOption) => boolean,\r\n    config: { defaultValue?: TValue; emitEvent?: boolean } = { defaultValue: undefined, emitEvent: true },\r\n  ) {\r\n    return new Promise<void>(resolve => {\r\n      let optionsProvider = () => {\r\n        if (this.control.value instanceof Array) {\r\n          let value = this.options.filter(optionPredicate).map(this.optionValue);\r\n\r\n          if (xorBy(this.control.value, value, this.optionId as any).length > 0) {\r\n            this.control.setValue(value as any as TControlValue, { emitEvent: config.emitEvent });\r\n          }\r\n        }\r\n        else {\r\n          let value = this.optionValue(this.options.find(optionPredicate)) ?? this.controlConverter.toControlValue(config.defaultValue);\r\n\r\n          if (value != null && this.control.value != null &&\r\n            this.optionId(value as any)?.valueOf() !== this.optionId(this.control.value as any)?.valueOf()\r\n          ) {\r\n            this.control.setValue(value, { emitEvent: config.emitEvent });\r\n          }\r\n          else if ((value != null) != (this.control.value != null)) {\r\n            this.control.setValue(value, { emitEvent: config.emitEvent });\r\n          }\r\n        }\r\n\r\n        resolve();\r\n      };\r\n\r\n      if (this.isQuerying) {\r\n        this.optionChanges$\r\n          .pipe(first())\r\n          .subscribe(() => optionsProvider());\r\n      }\r\n      else {\r\n        optionsProvider();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Updates field validation\r\n   *\r\n   * @param validation Validation constructor parameters\r\n   */\r\n  public updateValidation(validation: ValidationConstructor<TValue>) {\r\n    Object.assign(this.validation, new Validation(validation));\r\n\r\n    this.control.setValidators(Validation.getValidators(this.validation));\r\n    this.control.setAsyncValidators(Validation.getAsyncValidators(this.validation));\r\n  }\r\n\r\n  /**\r\n   * Destroys field and its subscriptions\r\n   */\r\n  public destroy() {\r\n    this.destroy$.next(null);\r\n    this.destroy$.complete();\r\n  }\r\n}\r\n","import { remove } from \"lodash-es\";\r\nimport { forkJoin, Observable, Subject } from \"rxjs\";\r\nimport { first, tap } from \"rxjs/operators\";\r\nimport { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { FormGroup, AbstractControl, FormArray, ValidationErrors } from \"@angular/forms\";\r\n\r\nimport { Field } from \"./field.model\";\r\n\r\n/**\r\n * Provides API to work with Form validation based on provided Fields\r\n */\r\nexport class Form {\r\n\r\n  private _fields: Field<any>[] = [];\r\n  private _editors: BaseEditor[] = [];\r\n\r\n  public readonly destroy$ = new Subject();\r\n\r\n  /**\r\n   * Provides all registered fields for this form\r\n   */\r\n  public get fields(): Field<any>[] {\r\n    return [...this._fields, ...this._editors.flatMap(editor => editor.form.fields)];\r\n  }\r\n\r\n  /**\r\n   * Angular's Form group\r\n   */\r\n  public formGroup: FormGroup;\r\n\r\n  /**\r\n   * Indicates if Form is invalid\r\n   */\r\n  public get invalid() {\r\n    return this.formGroup.invalid;\r\n  }\r\n\r\n  /**\r\n   * Indicates if Form is valid\r\n   */\r\n  public get valid() {\r\n    return this.formGroup.valid;\r\n  }\r\n\r\n  constructor(...fields: Field<any>[]) {\r\n    this.formGroup = new FormGroup({});\r\n\r\n    if (fields.length > 0) {\r\n      fields.forEach(field => {\r\n        this.addField(field);\r\n      });\r\n\r\n      this.formGroup.updateValueAndValidity({ onlySelf: true });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates Form from a {@link BaseEditor} model, based on Field properties of a model.\r\n   * Assigns Field name based on property name of a model.\r\n   * Enables each discovered Field property unless is explicitly disabled.\r\n   *\r\n   * @param model {@link BaseEditor} model\r\n   * @returns Form\r\n   */\r\n  public static Create<TModel>(model: TModel, ...fieldsToIgnore: string[]) {\r\n    let form = new Form();\r\n\r\n    // initialize field name if missing\r\n    Object\r\n      .keys(model)\r\n      .filter(key => !fieldsToIgnore.contains(key))\r\n      .forEach(key => {\r\n        let field = (model as any)[key];\r\n\r\n        if (field instanceof Field && !field.name) {\r\n          field.name = key;\r\n        }\r\n      });\r\n\r\n    // add fields to form group\r\n    Object\r\n      .keys(model)\r\n      .filter(key => !fieldsToIgnore.contains(key))\r\n      .map(prop => (model as any)[prop])\r\n      .filter(field => field instanceof Field && field.name)\r\n      .forEach((field: Field<any>) => {\r\n        form.addField(field);\r\n      });\r\n\r\n    // add nested editors to form group\r\n    Object\r\n      .keys(model)\r\n      .filter(key => !fieldsToIgnore.contains(key))\r\n      .forEach(key => {\r\n        if ((model as any)[key] instanceof BaseEditor) {\r\n          let editor = (model as any)[key] as BaseEditor;\r\n\r\n          form.formGroup.addControl(key, editor.form.formGroup);\r\n\r\n          form._editors.push(editor);\r\n        }\r\n      });\r\n\r\n    form.formGroup.updateValueAndValidity({ onlySelf: true });\r\n\r\n    return form;\r\n  }\r\n\r\n  /**\r\n   * Adds Field to a Form\r\n   *\r\n   * @param field Field\r\n   */\r\n  public addField(field: Field<any>) {\r\n    if (!field.name) {\r\n      throw new Error(\"Field is missing the 'Name' property, so it cannot be used inside validation Form\");\r\n    }\r\n\r\n    if (this.formGroup.contains(field.name)) {\r\n      throw new Error(`Validation Form already contains the field with name '${field.name}',` +\r\n        ` please provide unique name to make validation working properly`);\r\n    }\r\n\r\n    this._fields.push(field);\r\n    this.formGroup.registerControl(field.name, field.control);\r\n\r\n    if (!field._initialStatus?.disabled) {\r\n      // do not emit initial value since it is known during init phase\r\n      field.control.enable({ onlySelf: true, emitEvent: false });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes Field from a Form\r\n   *\r\n   * @param field Field\r\n   */\r\n  public removeField(field: Field<any>, options?: { emitEvent?: boolean }) {\r\n    remove(this._fields, formField => formField == field);\r\n\r\n    this.formGroup.removeControl(field.name, options);\r\n  }\r\n\r\n  /**\r\n   * Marks Form and all descendants as Untouched\r\n   */\r\n  public markAsUntouched() {\r\n    this.applyAction(control => {\r\n      control.markAsUntouched({ onlySelf: true });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Marks Form and all descendants as Touched\r\n   */\r\n  public markAsTouched() {\r\n    this.applyAction(control => {\r\n      control.markAsTouched({ onlySelf: true });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Shows validation errors for all descendants\r\n   */\r\n  public validate() {\r\n    this.applyAction(control => {\r\n      control.markAsTouched({ onlySelf: true });\r\n      control.setErrors(control.validator?.(control));\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Shows validation errors for all descendants\r\n   */\r\n  public async validateAsync() {\r\n    this.validate();\r\n\r\n    let errors$ = this.getDescendants()\r\n      .filter(control => control.errors == null && control.asyncValidator)\r\n      .map(control => {\r\n        let result = control.asyncValidator(control) as Observable<ValidationErrors>;\r\n\r\n        return result.pipe(tap(errors => {\r\n          control.setErrors(errors);\r\n        }));\r\n      });\r\n\r\n    return !errors$.length ? Promise.resolve() : forkJoin(errors$)\r\n      .pipe(first())\r\n      .toPromise()\r\n      .then(_ => { });\r\n  }\r\n\r\n  /**\r\n   * Iterates through descendants\r\n   */\r\n  public applyAction(action: (control: AbstractControl) => void) {\r\n    this.getDescendants().forEach(control => action(control));\r\n  }\r\n\r\n  /**\r\n   * Iterates through descendants\r\n   */\r\n  public getDescendants() {\r\n    return this.getDescendantsInternal(this.formGroup);\r\n  }\r\n\r\n  /**\r\n   * Destroys each field in a form\r\n   */\r\n  public destroy() {\r\n    this._fields\r\n      .filter(field => field.destoryWith == \"editor\")\r\n      .forEach(field => field.destroy());\r\n\r\n    this._editors.forEach(editor => editor.ngOnDestroy());\r\n\r\n    this.destroy$.next(null);\r\n    this.destroy$.complete();\r\n  }\r\n\r\n  /**\r\n   * Iterates through descendants\r\n   */\r\n  private getDescendantsInternal(control: AbstractControl): AbstractControl[] {\r\n    let innerControls = control instanceof FormGroup\r\n      ? Object.values(control.controls)\r\n      : control instanceof FormArray\r\n        ? control.controls\r\n        : [];\r\n\r\n    return [...innerControls.flatMap(innerControl => this.getDescendantsInternal(innerControl)), control];\r\n  }\r\n}\r\n\r\n/**\r\n * Base editor model that dedicated page editors should derive from. Used by {@link Form}\r\n */\r\n@Injectable()\r\nexport abstract class BaseEditor implements OnDestroy {\r\n\r\n  public get destroy$() {\r\n    return this.form.destroy$;\r\n  }\r\n\r\n  public form: Form;\r\n\r\n  public ngOnDestroy(): void {\r\n    this.form.destroy();\r\n  }\r\n\r\n  protected initialize(...fieldsToIgnore: string[]) {\r\n    this.form = Form.Create(this, ...fieldsToIgnore);\r\n  }\r\n}\r\n","import { DecimalPipe } from \"@angular/common\";\r\nimport { format } from \"date-fns\";\r\n\r\n/**\r\n * Represents parts of a recurring period\r\n */\r\nexport enum TimePart {\r\n  Second,\r\n\r\n  Minute,\r\n\r\n  Hour,\r\n\r\n  Day,\r\n\r\n  Month,\r\n\r\n  Quarter,\r\n\r\n  Year,\r\n}\r\n\r\n/**\r\n * Days of a week\r\n */\r\nexport enum DayOfWeek {\r\n  Monday = 1,\r\n\r\n  Tuesday = 2,\r\n\r\n  Wednesday = 3,\r\n\r\n  Thursday = 4,\r\n\r\n  Friday = 5,\r\n\r\n  Saturday = 6,\r\n\r\n  Sunday = 0,\r\n}\r\n\r\ntype OmitFunctions<T> =\r\n  Omit<T, { [K in keyof T]-?: T[K] extends Function ? K : never }[keyof T]>;\r\n\r\n/**\r\n * Provides simple API to work with time of a day separately from Dates\r\n */\r\nexport class TimeOfDay {\r\n\r\n  public hour: number;\r\n\r\n  public minute: number;\r\n\r\n  public second?: number;\r\n\r\n  constructor(timeOfDay: Partial<OmitFunctions<TimeOfDay>>) {\r\n    this.hour = timeOfDay?.hour || 0;\r\n    this.minute = timeOfDay?.minute || 0;\r\n    this.second = timeOfDay?.second || 0;\r\n  }\r\n\r\n  /**\r\n   * Returns string of time of day in \"HH:mm:ss\" format\r\n   *\r\n   * @param timeOfDay TimeOfDay value\r\n   * @returns Formatted string\r\n   */\r\n  public static toTimeString(timeOfDay: TimeOfDay) {\r\n    let decimalPipe = new DecimalPipe(\"en-GB\");\r\n\r\n    return `${decimalPipe.transform(timeOfDay.hour, \"2.0\")}:${decimalPipe.transform(timeOfDay.minute, \"2.0\")}`;\r\n  }\r\n\r\n  /**\r\n   * Converts TimeOfDay to Date\r\n   *\r\n   * @param timeOfDay TimeOfDay value\r\n   * @returns Date\r\n   */\r\n  public static toLocalDate(timeOfDay: TimeOfDay) {\r\n    return new Date(`${format(new Date(), \"yyyy-MM-dd\")}T${TimeOfDay.toTimeString(timeOfDay)}:00`);\r\n  }\r\n\r\n  /**\r\n   * Parses TimeOfDay from Date of time string of \"HH:mm:ss\" format\r\n   *\r\n   * @param value\r\n   * @returns\r\n   */\r\n  public static parse(value: string | Date) {\r\n    if (value instanceof Date) {\r\n      return new TimeOfDay({\r\n        hour: value.getHours(),\r\n        minute: value.getMinutes(),\r\n        second: value.getSeconds(),\r\n      });\r\n    }\r\n    else {\r\n      let [hour, minute, second] = value?.split(\":\") || [\"0\", \"0\", \"0\"];\r\n\r\n      return new TimeOfDay({\r\n        hour: Number.parseInt(hour, 10),\r\n        minute: Number.parseInt(minute, 10),\r\n        second: Number.parseInt(second, 10),\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Treats current value as UTC and converts into current user's timezone\r\n   *\r\n   * @returns\r\n   */\r\n  public toLocal() {\r\n    let localTime = new Date(`${format(new Date(), \"yyyy-MM-dd\")}T${TimeOfDay.toTimeString(this)}:00Z`);\r\n\r\n    return new TimeOfDay({\r\n      hour: localTime.getHours(),\r\n      minute: localTime.getMinutes(),\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Treats current value as in local timezone and converts to UTC\r\n   *\r\n   * @returns\r\n   */\r\n  public toUtc() {\r\n    let utcTime = new Date(`${format(new Date(), \"yyyy-MM-dd\")}T${TimeOfDay.toTimeString(this)}:00`).toUtcDate();\r\n\r\n    return new TimeOfDay({\r\n      hour: utcTime.getHours(),\r\n      minute: utcTime.getMinutes()\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Returns the stored time value in milliseconds.\r\n   *\r\n   * @returns\r\n   */\r\n  public valueOf(): number {\r\n    return (this.hour * 3600_000) +\r\n      (this.minute * 60_000) +\r\n      ((this.second || 0) * 1000);\r\n  }\r\n}\r\n\r\nexport interface DailySchedule {\r\n  days: DayOfWeek[];\r\n\r\n  timeOfDay: TimeOfDay;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["filterPredicate"],"mappings":"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"}