{"version":3,"file":"ngx-reactive-forms-utils.mjs","sources":["../../../../libs/reactive-forms-utils/src/lib/custom-error-message-utils.ts","../../../../libs/reactive-forms-utils/src/lib/control-errors-display/control-errors-display.component.ts","../../../../libs/reactive-forms-utils/src/lib/control-errors-display/control-errors-display.component.html","../../../../libs/reactive-forms-utils/src/lib/birthday.util.ts","../../../../libs/reactive-forms-utils/src/lib/custom-validators.ts","../../../../libs/reactive-forms-utils/src/lib/form-debug.util.ts","../../../../libs/reactive-forms-utils/src/lib/form-debug-display/form-debug-display.component.ts","../../../../libs/reactive-forms-utils/src/lib/form-debug-display/form-debug-display.component.html","../../../../libs/reactive-forms-utils/src/lib/signals.ts","../../../../libs/reactive-forms-utils/src/ngx-reactive-forms-utils.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype CustomErrorMesageFunction = (...args: any[]) => string;\n\nexport interface CustomErrorMessages {\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\t[key: string]: CustomErrorMesageFunction;\n}\n\nexport function addCustomErrorMessage(name: string, fn: CustomErrorMesageFunction) {\n\tdefaultCustomErrorMessages[name] = fn;\n}\n\nexport const defaultCustomErrorMessages: CustomErrorMessages = {\n\trequired: () => `This field is required`,\n\tminlength: ({ requiredLength, actualLength }: { requiredLength: number; actualLength: number }) =>\n\t\t`Expected length of ${requiredLength} but got ${actualLength}`,\n\tmaxlength: ({ requiredLength, actualLength }: { requiredLength: number; actualLength: number }) =>\n\t\t`Expected length of ${requiredLength} but got ${actualLength}`,\n\tmin: ({ min }: { min: number }) => `You must provide a minimum value of ${min}.`,\n\tmax: ({ max, actual }: { max: number; actual: number }) =>\n\t\t`You entered a value of ${actual}, but the max you can enter is ${max}.`,\n\temail: () => `Your email address is not valid.`,\n\tnumber: () => `This field can only contain numbers.`,\n\tconfirmStringMatch: ({ field1, field2 }) => {\n\t\tconst formattedField1: string = field1.replace(/([a-zA-Z])(?=[A-Z])/g, '$1 ').toLowerCase();\n\t\tconst formattedField2: string = field2.replace(/([a-zA-Z])(?=[A-Z])/g, '$1 ').toLowerCase();\n\t\treturn `The values of ${formattedField1} and ${formattedField2} don't match.`;\n\t},\n\tminAge: ({ minAge, actual }) => `You must be at least ${minAge} years old. You are currently ${actual} years old.`,\n\tmaxAge: ({ maxAge, actual }) =>\n\t\t`You must be no more than ${maxAge} years old. You are currently ${actual} years old.`,\n};\n\nexport const FORM_ERRORS = new InjectionToken('FORM_ERRORS', {\n\tprovidedIn: 'root',\n\tfactory: () => defaultCustomErrorMessages,\n});\n\nexport const FORM_ERRORS_DEBOUNCE_TIME = new InjectionToken('FORM_ERRORS_DEBOUNCE_TIME', {\n\tprovidedIn: 'root',\n\tfactory: () => 0,\n});\n","import { Component, contentChild, effect, inject, input, signal } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { debounceTime, map, startWith } from 'rxjs';\nimport { CustomErrorMessages, FORM_ERRORS, FORM_ERRORS_DEBOUNCE_TIME } from '../custom-error-message-utils';\n\n@Component({\n\tselector: 'ngx-control-errors-display',\n\ttemplateUrl: './control-errors-display.component.html',\n\tstyleUrls: ['./control-errors-display.component.scss'],\n\tstandalone: true,\n\timports: [],\n})\nexport class ControlErrorsDisplayComponent {\n\tcontainerClasses = input<string>('');\n\terrorClasses = input<string>('');\n\trules = input<string[]>(['touched']);\n\n\tcontrol = contentChild(NgControl);\n\n\tprivate _errors = inject(FORM_ERRORS);\n\tprivate _debounceTime = inject(FORM_ERRORS_DEBOUNCE_TIME);\n\tprivate _errorMessages: CustomErrorMessages = this._errors;\n\n\tget rulesBroken() {\n\t\tconst control = this.control();\n\t\treturn !!control && this.rules().every((rule) => control[rule as keyof NgControl]);\n\t}\n\n\terrorsList = signal<string[]>([]);\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst control = this.control();\n\t\t\tif (control) {\n\t\t\t\tconst sub = control.statusChanges\n\t\t\t\t\t?.pipe(\n\t\t\t\t\t\tstartWith(control.status),\n\t\t\t\t\t\tdebounceTime(this._debounceTime),\n\t\t\t\t\t\tmap(() => {\n\t\t\t\t\t\t\tconst errors = control.errors;\n\n\t\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\t\treturn Object.keys(errors).map((errorKey) => {\n\t\t\t\t\t\t\t\t\tconst getError = this._errorMessages[errorKey];\n\t\t\t\t\t\t\t\t\treturn getError ? getError(errors[errorKey]) : 'Unknown Error';\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\t.subscribe((errors) => this.errorsList.set(errors));\n\n\t\t\t\tonCleanup(() => sub?.unsubscribe());\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"{{ containerClasses() }}\">\n\t<ng-content></ng-content>\n\n\t@if (rulesBroken) {\n\t\t@if (errorsList(); as errors) {\n\t\t\t@if (errors && errors.length) {\n\t\t\t\t@for (error of errors; track error) {\n\t\t\t\t\t<p class=\"{{ errorClasses() }}\">{{ error }}</p>\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</div>\n","export function calculateAge(birthdate: string | Date) {\n\tconst currentDate = fixTimezoneOffset(new Date());\n\tconst birthDate = fixTimezoneOffset(new Date(birthdate));\n\n\tlet age = currentDate.getFullYear() - birthDate.getFullYear();\n\n\tif (\n\t\tcurrentDate.getMonth() < birthDate.getMonth() ||\n\t\t(currentDate.getMonth() === birthDate.getMonth() && currentDate.getDate() < birthDate.getDate())\n\t) {\n\t\tage--;\n\t}\n\n\treturn age;\n}\n\nfunction fixTimezoneOffset(date: Date) {\n\treturn new Date(date.getTime() - date.getTimezoneOffset() * 60000);\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { calculateAge } from './birthday.util';\n\nexport abstract class CustomValidators {\n\tstatic phoneNumber(control: AbstractControl): ValidationErrors | null {\n\t\tif (!control.value) {\n\t\t\treturn null;\n\t\t}\n\t\t// eslint-disable-next-line no-useless-escape\n\t\tconst PHONE_REGEX = /^(1\\s?)?((\\([2-9][0-9]{2}\\))|[2-9][0-9]{2})[\\s\\-]?[2-9][0-9]{2}[\\s\\-]?[0-9]{4}$/;\n\t\treturn PHONE_REGEX.test(control.value) ? null : { phoneNumber: true };\n\t}\n\n\tstatic number(control: AbstractControl): ValidationErrors | null {\n\t\t// eslint-disable-next-line no-useless-escape\n\t\tconst NUMBER_REGEX = /^([0-9])*([\\.])?[0-9]+$/;\n\t\treturn NUMBER_REGEX.test(control.value) ? null : { number: true };\n\t}\n\n\tstatic validZipCode(control: AbstractControl): ValidationErrors | null {\n\t\tif (!control.value) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// XXXXX or XXXXX-XXXX\n\t\tconst ZIP_REGEX = /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/;\n\t\treturn ZIP_REGEX.test(control.value) ? null : { validZipCode: true };\n\t}\n\n\tstatic confirmStringMatch(field1: string, field2: string): ValidatorFn {\n\t\treturn (form): ValidationErrors | null => {\n\t\t\tconst valueControl = form.get(field1);\n\t\t\tconst confirmValueControl = form.get(field2);\n\n\t\t\tif (!valueControl || !confirmValueControl || !valueControl.value || !confirmValueControl.value) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (confirmValueControl.errors && !confirmValueControl.errors[field2]) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (valueControl.value !== confirmValueControl.value) {\n\t\t\t\tconfirmValueControl.setErrors({ confirmStringMatch: { field1, field2 } });\n\t\t\t\treturn { confirmStringMatch: { field1, field2 } };\n\t\t\t}\n\n\t\t\tconfirmValueControl.setErrors(null);\n\t\t\treturn null;\n\t\t};\n\t}\n\n\tstatic minAge(minAge: number): ValidatorFn {\n\t\treturn (control: AbstractControl) => {\n\t\t\tif (!control.value) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst birthDate = new Date(control.value);\n\t\t\tconst age = calculateAge(birthDate);\n\n\t\t\tif (age < minAge) {\n\t\t\t\treturn { minAge: { minAge, actual: age } };\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n\n\tstatic maxAge(maxAge: number): ValidatorFn {\n\t\treturn (control: AbstractControl) => {\n\t\t\tif (!control.value) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst birthDate = new Date(control.value);\n\t\t\tconst age = calculateAge(birthDate);\n\n\t\t\tif (age > maxAge) {\n\t\t\t\treturn { maxAge: { maxAge, actual: age } };\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n}\n","import { AbstractControl, Form, FormControlStatus, FormGroup, ValidationErrors } from '@angular/forms';\nimport { combineLatest, EMPTY, map, Observable, of, startWith } from 'rxjs';\n\nexport enum FormDebugFieldEnum {\n\tValue = 'Value',\n\tFormErrors = 'FormErrors',\n\tControlErrors = 'ControlErrors',\n\tStatus = 'Status',\n\tValid = 'Valid',\n\tInvalid = 'Invalid',\n}\nexport type FormDebugField =\n\t| FormDebugFieldEnum.Value\n\t| FormDebugFieldEnum.FormErrors\n\t| FormDebugFieldEnum.ControlErrors\n\t| FormDebugFieldEnum.Status\n\t| FormDebugFieldEnum.Valid\n\t| FormDebugFieldEnum.Invalid;\n\nexport interface ControlErrorStatusDisplay {\n\terrors: ValidationErrors | null;\n\tstatus: FormControlStatus;\n}\nexport interface FormDebugValue {\n\tvalue?: Record<string, any>;\n\tformErrors?: ValidationErrors | null;\n\tcontrolErrors?: Record<string, ControlErrorStatusDisplay>;\n\tstatus?: FormControlStatus;\n\tvalid?: boolean;\n\tinvalid?: boolean;\n}\n\nexport const DEFAULT_DEBUG_FIELDS: FormDebugField[] = Object.keys(FormDebugFieldEnum).map(\n\t(key) => key as FormDebugFieldEnum,\n);\n\nexport function debugForm(\n\tform: FormGroup,\n\tdebugFields: FormDebugField[] = [...DEFAULT_DEBUG_FIELDS],\n): Observable<FormDebugValue> {\n\tif (!form) {\n\t\treturn of({});\n\t}\n\n\treturn combineLatest([\n\t\tform.valueChanges.pipe(startWith(form.value)),\n\t\tform.statusChanges.pipe(startWith(form.status)),\n\t]).pipe(\n\t\tmap(() => {\n\t\t\tconst returnObject: FormDebugValue = {};\n\n\t\t\tif (debugFields.includes(FormDebugFieldEnum.Value)) {\n\t\t\t\treturnObject.value = form.value;\n\t\t\t}\n\n\t\t\tif (debugFields.includes(FormDebugFieldEnum.FormErrors)) {\n\t\t\t\treturnObject.formErrors = form.errors;\n\t\t\t}\n\n\t\t\tif (debugFields.includes(FormDebugFieldEnum.ControlErrors)) {\n\t\t\t\tconst controlErrors = Object.keys(form.controls).reduce(\n\t\t\t\t\t(acc, controlName) => {\n\t\t\t\t\t\tconst control = form.get(controlName);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t[controlName]: {\n\t\t\t\t\t\t\t\terrors: control?.errors,\n\t\t\t\t\t\t\t\tstatus: control?.status,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} as Record<string, ControlErrorStatusDisplay>;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<string, ControlErrorStatusDisplay>,\n\t\t\t\t);\n\n\t\t\t\treturnObject.controlErrors = controlErrors;\n\t\t\t}\n\n\t\t\tif (debugFields.includes(FormDebugFieldEnum.Status)) {\n\t\t\t\treturnObject.status = form.status;\n\t\t\t}\n\n\t\t\tif (debugFields.includes(FormDebugFieldEnum.Valid)) {\n\t\t\t\treturnObject.valid = form.valid;\n\t\t\t}\n\n\t\t\treturn returnObject;\n\t\t}),\n\t);\n}\n","import { JsonPipe } from '@angular/common';\nimport { Component, effect, input, signal } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debugForm, DEFAULT_DEBUG_FIELDS, FormDebugField, FormDebugValue } from '../form-debug.util';\n\n@Component({\n\tselector: 'ngx-form-debug-display',\n\tstandalone: true,\n\timports: [JsonPipe],\n\ttemplateUrl: './form-debug-display.component.html',\n\tstyleUrls: ['./form-debug-display.component.scss'],\n})\nexport class FormDebugDisplayComponent {\n\tdebugFields = input<FormDebugField[]>([...DEFAULT_DEBUG_FIELDS]);\n\tform = input.required<FormGroup>();\n\n\tdebugData = signal<FormDebugValue | null>(null);\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst form = this.form();\n\t\t\tconst debugFields = this.debugFields();\n\n\t\t\tconst sub = debugForm(form, debugFields).subscribe((data) => this.debugData.set(data));\n\n\t\t\tonCleanup(() => sub.unsubscribe());\n\t\t});\n\t}\n}\n","@if (form()) {\n\t<pre><code>\n{{ debugData() | json }}\n</code></pre>\n}\n","import { Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControlStatus, ValidationErrors } from '@angular/forms';\nimport { map, startWith } from 'rxjs/operators';\n\nexport interface FormState<T> {\n\tvalue: T;\n\tstatus: FormControlStatus;\n\terrors: ValidationErrors | null;\n\ttouched: boolean;\n\tdirty: boolean;\n\tvalid: boolean;\n\tinvalid: boolean;\n\tpending: boolean;\n\tdisabled: boolean;\n\tenabled: boolean;\n}\n\nexport function formStateSignal<T>(control: AbstractControl<T>): Signal<FormState<T>> {\n\treturn toSignal(\n\t\tcontrol.events.pipe(\n\t\t\tstartWith(null),\n\t\t\tmap(() => ({\n\t\t\t\tvalue: control.value,\n\t\t\t\tstatus: control.status,\n\t\t\t\terrors: control.errors,\n\t\t\t\ttouched: control.touched,\n\t\t\t\tdirty: control.dirty,\n\t\t\t\tvalid: control.valid,\n\t\t\t\tinvalid: control.invalid,\n\t\t\t\tpending: control.pending,\n\t\t\t\tdisabled: control.disabled,\n\t\t\t\tenabled: control.enabled,\n\t\t\t})),\n\t\t),\n\t\t{\n\t\t\tinitialValue: {\n\t\t\t\tvalue: control.value,\n\t\t\t\tstatus: control.status,\n\t\t\t\terrors: control.errors,\n\t\t\t\ttouched: control.touched,\n\t\t\t\tdirty: control.dirty,\n\t\t\t\tvalid: control.valid,\n\t\t\t\tinvalid: control.invalid,\n\t\t\t\tpending: control.pending,\n\t\t\t\tdisabled: control.disabled,\n\t\t\t\tenabled: control.enabled,\n\t\t\t},\n\t\t},\n\t);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["startWith","map"],"mappings":"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"}