@fagon/ngx-intellitoolx 16.0.4 → 16.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/README.md +582 -13
  2. package/esm2022/lib/form-changes/can-component-deactivate.interface.mjs +2 -0
  3. package/esm2022/lib/form-changes/confirm-handler.type.mjs +2 -0
  4. package/esm2022/lib/form-changes/form-changes-tracker.service.mjs +58 -0
  5. package/esm2022/lib/form-changes/form-update-message-config.interface.mjs +2 -0
  6. package/esm2022/lib/form-changes/form-update-message.component.mjs +53 -0
  7. package/esm2022/lib/form-changes/unsaved-changes.guard.mjs +29 -0
  8. package/esm2022/lib/helpers/intellitoolx.helper.mjs +2 -3
  9. package/esm2022/public-api.mjs +15 -14
  10. package/fesm2022/fagon-ngx-intellitoolx.mjs +197 -134
  11. package/fesm2022/fagon-ngx-intellitoolx.mjs.map +1 -1
  12. package/lib/form-changes/can-component-deactivate.interface.d.ts +5 -0
  13. package/lib/form-changes/form-changes-tracker.service.d.ts +15 -0
  14. package/lib/{form-update → form-changes}/unsaved-changes.guard.d.ts +5 -5
  15. package/lib/helpers/intellitoolx.helper.d.ts +1 -1
  16. package/package.json +1 -1
  17. package/public-api.d.ts +11 -9
  18. package/esm2022/lib/form-update/confirm-handler.type.mjs +0 -2
  19. package/esm2022/lib/form-update/form-update-message-config.interface.mjs +0 -2
  20. package/esm2022/lib/form-update/form-update-message.component.mjs +0 -53
  21. package/esm2022/lib/form-update/unsaved-changes.guard.mjs +0 -19
  22. /package/lib/{form-update → form-changes}/confirm-handler.type.d.ts +0 -0
  23. /package/lib/{form-update → form-changes}/form-update-message-config.interface.d.ts +0 -0
  24. /package/lib/{form-update → form-changes}/form-update-message.component.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"fagon-ngx-intellitoolx.mjs","sources":["../../src/lib/ngx-intellitoolx.module.ts","../../src/lib/helpers/intellitoolx.helper.ts","../../src/lib/pipes/json-parse.pipe.ts","../../src/lib/ngx-intellitoolx.component.ts","../../src/lib/form-update/form-update-message.component.ts","../../src/lib/form-errors/form-errors.component.ts","../../src/lib/form-validators/max-amount.validator.ts","../../src/lib/form-validators/max-words.validator.ts","../../src/lib/form-validators/min-amount.validator.ts","../../src/lib/form-validators/password-mismatch.validator.ts","../../src/lib/form-validators/unique-email.validators.ts","../../src/lib/regex/regex.utils.ts","../../src/lib/directives/required-marker/required-marker.token.ts","../../src/lib/directives/required-marker/required-marker.defaults.ts","../../src/lib/directives/required-marker/required-marker.directive.ts","../../src/lib/form-update/unsaved-changes.guard.ts","../../src/public-api.ts","../../src/fagon-ngx-intellitoolx.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n exports: [],\n})\nexport class NgxIntellitoolxModule {}\n","import {\n AbstractControl,\n FormArray,\n FormControl,\n FormGroup,\n} from '@angular/forms';\nimport { ConfirmHandler } from '../form-update/confirm-handler.type';\n\nexport class IntelliToolxHelper {\n static captureInitialFormValue(form: AbstractControl): any {\n const initialValue = (form as any).getRawValue?.() ?? form.value;\n form.markAsPristine();\n return this.clone(initialValue);\n }\n\n static trimFormGroup(control: AbstractControl): void {\n if (control instanceof FormGroup) {\n Object.keys(control.controls).forEach((key) =>\n this.trimFormGroup(control.controls[key]),\n );\n return;\n }\n\n if (control instanceof FormArray) {\n control.controls.forEach((ctrl) => this.trimFormGroup(ctrl));\n return;\n }\n\n if (control instanceof FormControl) {\n const value = control.value;\n if (typeof value === 'string') {\n control.setValue(value.trim(), { emitEvent: false });\n }\n }\n }\n\n static deepEqual(obj1: any, obj2: any): boolean {\n // treat null, undefined, and empty string as equal\n if (this.isEmpty(obj1) && this.isEmpty(obj2)) {\n return true;\n }\n\n // normalize numeric values\n if (typeof obj1 === 'number' && typeof obj2 === 'number') {\n return Number(obj1) === Number(obj2);\n }\n\n // strict equality shortcut\n if (obj1 === obj2) return true;\n\n // File comparison\n if (obj1 instanceof File && obj2 instanceof File) {\n return (\n obj1.name === obj2.name &&\n obj1.size === obj2.size &&\n obj1.type === obj2.type &&\n obj1.lastModified === obj2.lastModified\n );\n }\n\n // if not objects → not equal\n if (\n typeof obj1 !== 'object' ||\n typeof obj2 !== 'object' ||\n obj1 === null ||\n obj2 === null\n ) {\n return false;\n }\n\n // arrays\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n return obj1.every((v, i) => this.deepEqual(v, obj2[i]));\n }\n\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n if (keys1.length !== keys2.length) return false;\n\n for (const key of keys1) {\n if (!keys2.includes(key)) return false;\n if (!this.deepEqual(obj1[key], obj2[key])) return false;\n }\n\n return true;\n }\n\n static isEmpty(value: any): boolean {\n return (\n value === null ||\n value === undefined ||\n (typeof value === 'string' && value.trim() === '')\n );\n }\n\n static clone(value: any): any {\n return structuredClone(value); // Angular 14+ safe\n }\n\n static formHasChanges(initialValue: any, form: AbstractControl): boolean {\n if (!form) return false;\n\n const current = form.getRawValue();\n return !this.deepEqual(initialValue, current);\n }\n\n static async confirmIfChanged(\n hasChanges: boolean,\n confirmHandler?: ConfirmHandler,\n ): Promise<boolean> {\n if (!hasChanges) return true;\n\n if (confirmHandler) {\n const result = confirmHandler();\n return typeof result === 'boolean' ? result : await result;\n }\n\n // fallback (only if handler not provided)\n return confirm('You have unsaved changes. Continue?');\n }\n\n static registerBeforeUnload(shouldBlock: () => boolean, message?: string) {\n const handler = (event: BeforeUnloadEvent) => {\n if (!shouldBlock()) return;\n\n event.preventDefault();\n event.returnValue = message || '';\n };\n\n window.addEventListener('beforeunload', handler);\n\n return () => window.removeEventListener('beforeunload', handler);\n }\n\n static getFormControl<T = any>(\n form: AbstractControl,\n path: string,\n ): FormControl<T> | null {\n if (!form || !path) return null;\n\n const segments = path.split('.');\n let current: AbstractControl | null = form;\n\n for (const segment of segments) {\n if (!current) return null;\n\n // Treat numeric segment as FormArray index\n const index = Number(segment);\n if (!isNaN(index) && current instanceof FormArray) {\n current = current.at(index);\n } else if (current instanceof FormGroup) {\n current = current.get(segment);\n } else {\n return null;\n }\n }\n\n return current instanceof FormControl ? (current as FormControl<T>) : null;\n }\n\n static convertImageToBase64(file: File): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n const base64String = reader.result as string;\n const base64StringArray = base64String.split(',');\n resolve(base64StringArray[1]);\n };\n\n reader.onerror = (error) => {\n reject(error);\n };\n });\n }\n\n static replaceCharacter(\n text: any,\n replaceChar: string,\n replaceWithChar: string,\n ): string {\n return text?.replaceAll(replaceChar, replaceWithChar) || '';\n }\n\n static convertJsonStringToJson<T = any>(\n value: T | string | null | undefined,\n ): T | null {\n if (!value) {\n return null;\n }\n\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n }\n\n return value as T;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IntelliToolxHelper } from '../helpers/intellitoolx.helper';\n\n@Pipe({\n name: 'jsonParse',\n standalone: true,\n})\nexport class JsonParsePipe implements PipeTransform {\n transform<T = any>(value: T | string | null | undefined): T | null {\n return IntelliToolxHelper.convertJsonStringToJson(value);\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ngx-intellitoolx',\n standalone: true,\n template: ` <p>ngx-intellitoolx works!</p> `,\n styles: [],\n})\nexport class NgxIntellitoolxComponent {}\n","import { Component, Input } from '@angular/core';\nimport { IntellitoolxFormUpdateMessageConfig } from './form-update-message-config.interface';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'itx-form-update-message',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./form-update-message.component.css'],\n template: `\n <div class=\"form-update-message\" role=\"alert\" [ngStyle]=\"containerStyles\">\n <span class=\"form-update-icon\" aria-hidden=\"true\" [ngStyle]=\"iconStyles\"\n >⚠</span\n >\n <span>\n {{ itxFormUpdateMessageConfig?.message || defaultMessage }}\n </span>\n </div>\n `,\n})\nexport class IntellitoolxFormUpdateMessage {\n @Input() itxFormUpdateMessageConfig?: IntellitoolxFormUpdateMessageConfig;\n defaultMessage =\n 'There are no changes to save. Please modify a field to continue.';\n\n get containerStyles(): { [key: string]: string } {\n return {\n padding: this.itxFormUpdateMessageConfig?.padding || '1rem',\n gap: this.itxFormUpdateMessageConfig?.iconAndMessageGap || '0.5rem',\n color: this.itxFormUpdateMessageConfig?.textColor || '#963C00',\n border:\n '1px solid ' +\n (this.itxFormUpdateMessageConfig?.borderColor || '#f3cd5a'),\n 'background-color':\n this.itxFormUpdateMessageConfig?.backgroundColor || '#fff3cd',\n 'font-weight': String(this.itxFormUpdateMessageConfig?.fontWeight || 400),\n 'border-radius':\n this.itxFormUpdateMessageConfig?.borderRadius || '0.5rem',\n };\n }\n\n get iconStyles(): { [key: string]: string } {\n return {\n 'font-size': this.itxFormUpdateMessageConfig?.iconSize || '1rem',\n };\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n UntypedFormControl,\n} from '@angular/forms';\n\nexport interface ErrorMessages {\n [key: string]: string;\n required: string;\n email: string;\n minlength: string;\n maxlength: string;\n pattern: string;\n passwordMismatch: string;\n futureDate: string;\n exceededAllowedDateDifference: string;\n startDateAfterEndDate: string;\n duplicateEmail: string;\n maxWords: string;\n maxMonthYear: string;\n minMonthYear: string;\n}\n\n@Component({\n selector: 'itx-form-errors',\n standalone: true,\n imports: [CommonModule],\n template: `\n <ng-container *ngIf=\"control?.touched && control?.invalid\">\n <ng-container *ngFor=\"let error of control?.errors | keyvalue\">\n {{ getErrorMessage(error?.key ?? '', error?.value) }}\n </ng-container>\n </ng-container>\n `,\n})\nexport class IntellitoolxFormErrors {\n @Input() control: FormControl | UntypedFormControl | AbstractControl | null =\n null;\n @Input() componentValidation: Record<string, { message: string }> = {};\n @Input() controlLabel: string | null = null;\n\n errorMessages: ErrorMessages = {\n required: 'This field is required',\n email: 'The email entered is invalid',\n minlength: 'You must enter at least {length} characters',\n maxlength: 'You must not enter more than {length} characters',\n pattern: 'Your entry must match the required pattern',\n passwordMismatch: 'Password and confirm password do not match.',\n futureDate: 'Future date is not allowed.',\n exceededAllowedDateDifference: 'Date difference can only be one month.',\n startDateAfterEndDate: 'Start date cannot be greater than end date',\n duplicateEmail: 'Each email must be unique.',\n maxWords: 'Exceeded maximum number of words.',\n maxMonthYear: 'Date is later than allowed.',\n minMonthYear: 'Date is earlier than allowed.',\n };\n\n getErrorMessage(key: string, value: any): string {\n if (!this.control) return '';\n\n const customMessage = this.componentValidation?.[key]?.message;\n\n if (typeof value === 'boolean') {\n return customMessage || this.errorMessages[key] || '';\n }\n\n if (typeof value === 'string') {\n return customMessage || value;\n }\n\n if (typeof value === 'object') {\n switch (key) {\n case 'pattern':\n return (\n customMessage ||\n `Please provide a valid ${this.controlLabel || 'data'}.`\n );\n case 'min':\n return customMessage\n ? customMessage\n : this.controlLabel\n ? `${this.controlLabel} cannot be less than ${value.min}.`\n : `Number cannot be less than ${value.min}`;\n case 'max':\n return customMessage\n ? customMessage\n : this.controlLabel\n ? `${this.controlLabel} cannot be greater than ${value.max}.`\n : `Number cannot be greater than ${value.max}`;\n case 'minlength':\n return (\n customMessage ||\n this.errorMessages.minlength.replace(\n '{length}',\n value?.requiredLength || '',\n )\n );\n case 'maxlength':\n return (\n customMessage ||\n this.errorMessages.maxlength.replace(\n '{length}',\n value?.requiredLength || '',\n )\n );\n case 'customMinValue':\n case 'customMaxValue':\n return customMessage || value?.message || '';\n case 'ngbDate':\n return (\n customMessage ||\n (this.control.value ? 'Invalid date format provided' : '')\n );\n case 'passwordMismatch':\n case 'futureDate':\n case 'duplicateEmail':\n case 'maxWords':\n case 'maxMonthYear':\n case 'minMonthYear':\n case 'exceededAllowedDateDifference':\n case 'startDateAfterEndDate':\n return customMessage || this.errorMessages[key];\n default:\n return customMessage || '';\n }\n }\n\n return '';\n }\n}\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function customMaxAmountValidator(maxValue: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value !== null && control.value > maxValue) {\n control.setErrors({ exceededMaximumValue: true });\n const maxValueToFloat = maxValue.toFixed(2);\n return {\n customMaxValue: {\n requiredMin: maxValue,\n actual: control.value,\n message: `The value must not exceed ${maxValueToFloat}`,\n },\n };\n }\n\n control.setErrors(null);\n return null;\n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function maxWordsValidator(maxWords: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) return null;\n\n const wordCount = control.value.trim().split(/\\s+/).length;\n return wordCount > maxWords\n ? { maxWords: { actual: wordCount, max: maxWords } }\n : null;\n };\n}\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function customMinAmountValidator(minValue: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value !== null && control.value < minValue) {\n control.setErrors({ exceededMinimumValue: true });\n const minValueToFloat = minValue.toFixed(2);\n return {\n customMinValue: {\n requiredMin: minValue,\n actual: control.value,\n message: `The value must be at least ${minValueToFloat}`,\n },\n };\n }\n\n control.setErrors(null);\n return null;\n };\n}\n","import { UntypedFormGroup } from '@angular/forms';\n\nexport function passwordMismatchValidator(\n controlName: string,\n matchingControlName: string,\n) {\n return (formGroup: UntypedFormGroup) => {\n const control = formGroup.controls[controlName];\n const matchingControl = formGroup.controls[matchingControlName];\n if (matchingControl.errors && !matchingControl.errors['passwordMismatch']) {\n return;\n }\n if (control.value !== matchingControl.value) {\n matchingControl.setErrors({ passwordMismatch: true });\n } else {\n matchingControl.setErrors(null);\n }\n };\n}\n","import {\n AbstractControl,\n ValidationErrors,\n ValidatorFn,\n FormArray,\n FormGroup,\n} from '@angular/forms';\n\nexport function uniqueEmailsValidator(): ValidatorFn {\n return (formArray: AbstractControl): ValidationErrors | null => {\n if (!(formArray instanceof FormArray)) {\n return null;\n }\n\n const controls = formArray.controls as FormGroup[];\n\n // Collect all email values safely\n const emails = controls.map((control: FormGroup) => {\n const value = control.get('email')?.value;\n return typeof value === 'string' ? value.toLowerCase().trim() : '';\n });\n\n // Count occurrences\n const emailCounts: Record<string, number> = {};\n emails.forEach((email: string) => {\n if (email) {\n emailCounts[email] = (emailCounts[email] || 0) + 1;\n }\n });\n\n // Update each control's errors\n controls.forEach((control: FormGroup) => {\n const emailControl = control.get('email');\n const email = emailControl?.value?.toLowerCase()?.trim();\n\n if (emailControl) {\n const currentErrors = emailControl.errors || {};\n\n if (email && emailCounts[email] > 1) {\n emailControl.setErrors({ ...currentErrors, duplicateEmail: true });\n } else if (currentErrors?.['duplicateEmail']) {\n delete currentErrors['duplicateEmail'];\n const hasOtherErrors = Object.keys(currentErrors)?.length > 0;\n emailControl.setErrors(hasOtherErrors ? currentErrors : null);\n }\n }\n });\n\n const hasDuplicates = Object.values(emailCounts)?.some(\n (count) => count > 1,\n );\n return hasDuplicates ? { duplicateEmails: true } : null;\n };\n}\n","export const IntellitoolxRegExps = {\n EMAIL_REGEX: /^(?=.{1,50}$)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[A-Za-z]{2,}$/,\n NUMBER_REGEX: /^\\d+$/,\n AMOUNT_REGEX: /^\\d+(\\.\\d{1,2})?$/,\n DOMAIN_REGEX:\n /^(?=.{1,255}$)(https?|ftp):\\/\\/([\\w.-]+)\\.([a-z\\.]{2,6})(:[0-9]{1,5})?(\\/\\S*)?$/,\n};\n","import { InjectionToken } from '@angular/core';\nimport { RequiredMarkerConfig } from './required-marker.config';\n\nexport const REQUIRED_MARKER_GLOBAL_CONFIG =\n new InjectionToken<RequiredMarkerConfig>('Required Marker Global Config');\n","import { ResolvedRequiredMarkerConfig } from './required-marker.config';\n\nexport const DEFAULT_REQUIRED_MARKER_CONFIG: ResolvedRequiredMarkerConfig = {\n sign: '*',\n color: 'red',\n position: 'after',\n spacing: '2px',\n className: '',\n showIfOptional: false,\n};\n","import {\n Directive,\n ElementRef,\n Renderer2,\n AfterViewInit,\n OnDestroy,\n inject,\n} from '@angular/core';\nimport {\n FormGroupDirective,\n AbstractControl,\n Validators,\n} from '@angular/forms';\nimport { merge, Subscription } from 'rxjs';\n\nimport { ResolvedRequiredMarkerConfig } from './required-marker.config';\nimport { REQUIRED_MARKER_GLOBAL_CONFIG } from './required-marker.token';\nimport { DEFAULT_REQUIRED_MARKER_CONFIG } from './required-marker.defaults';\n\n@Directive({\n selector: 'label[itxRequired]',\n standalone: true,\n})\nexport class RequiredMarkerDirective implements AfterViewInit, OnDestroy {\n private subscription?: Subscription;\n\n private globalConfig = inject(REQUIRED_MARKER_GLOBAL_CONFIG, {\n optional: true,\n });\n\n constructor(\n private el: ElementRef<HTMLLabelElement>,\n private renderer: Renderer2,\n private parentForm: FormGroupDirective,\n ) {}\n\n private resolveConfig(): ResolvedRequiredMarkerConfig {\n return {\n ...DEFAULT_REQUIRED_MARKER_CONFIG,\n ...this.globalConfig,\n };\n }\n\n ngAfterViewInit() {\n const label = this.el.nativeElement;\n const controlId = label.getAttribute('for');\n if (!controlId) return;\n\n const control = this.parentForm.form.get(controlId);\n if (!control) return;\n\n this.updateLabel(label, control);\n\n this.subscription = merge(\n control.valueChanges,\n control.statusChanges,\n ).subscribe(() => this.updateLabel(label, control));\n }\n\n private updateLabel(label: HTMLLabelElement, control: AbstractControl) {\n const config = this.resolveConfig();\n const isRequired = control.hasValidator?.(Validators.required);\n\n const original =\n label.getAttribute('data-original') || label.textContent || '';\n\n if (!label.getAttribute('data-original')) {\n label.setAttribute('data-original', original.trim());\n }\n\n const match = original.match(/^([^\\(]+)(.*)$/);\n const mainText = match ? match[1].trim() : original;\n const extraText = match ? match[2] : '';\n\n this.renderer.setProperty(label, 'textContent', '');\n\n const main = this.renderer.createText(mainText);\n\n const marker = this.renderer.createElement('span');\n this.renderer.setStyle(marker, 'color', config.color);\n this.renderer.setStyle(marker, 'margin-left', config.spacing);\n\n this.renderer.appendChild(marker, this.renderer.createText(config.sign));\n\n if (isRequired) {\n if (config.position === 'before') {\n this.renderer.appendChild(label, marker);\n this.renderer.appendChild(label, main);\n } else {\n this.renderer.appendChild(label, main);\n this.renderer.appendChild(label, marker);\n }\n } else {\n this.renderer.appendChild(label, main);\n }\n\n const extra = this.renderer.createText(extraText);\n this.renderer.appendChild(label, extra);\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\n\nexport interface CanComponentDeactivate {\n hasUnsavedChanges: () => boolean;\n getUnsavedMessage?: () => string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class UnsavedChangesGuard implements CanDeactivate<CanComponentDeactivate> {\n canDeactivate(component: CanComponentDeactivate): boolean {\n if (!component.hasUnsavedChanges()) {\n return true;\n }\n\n const message =\n component.getUnsavedMessage?.() ||\n 'You have unsaved changes. Leave without saving?';\n\n return confirm(message);\n }\n}\n","/*\n * Public API Surface of ngx-intellitoolx\n */\n\n// Moddules\nexport * from './lib/ngx-intellitoolx.module';\n\n// Helpers\nexport * from './lib/helpers/intellitoolx.helper';\n\n// Pipes\nexport * from './lib/pipes/json-parse.pipe';\n\n// Components\nexport * from './lib/ngx-intellitoolx.component';\nexport * from './lib/form-update/form-update-message.component';\nexport * from './lib/form-errors/form-errors.component';\n\n// Validators\nexport * from './lib/form-validators';\n\n// Regular expressions\nexport * from './lib/regex/regex.utils';\n\n// Models/Interfaces\nexport * from './lib/form-update/form-update-message-config.interface';\n\n// Required marker directive\nexport * from './lib/directives/required-marker/required-marker.directive';\nexport * from './lib/directives/required-marker/required-marker.config';\nexport * from './lib/directives/required-marker/required-marker.token';\nexport * from './lib/directives/required-marker/required-marker.defaults';\n\n// Guards\nexport * from './lib/form-update/unsaved-changes.guard';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"fagon-ngx-intellitoolx.mjs","sources":["../../src/lib/helpers/intellitoolx.helper.ts","../../src/lib/form-changes/form-changes-tracker.service.ts","../../src/lib/form-changes/form-update-message.component.ts","../../src/lib/form-changes/unsaved-changes.guard.ts","../../src/lib/form-errors/form-errors.component.ts","../../src/lib/directives/required-marker/required-marker.token.ts","../../src/lib/directives/required-marker/required-marker.defaults.ts","../../src/lib/directives/required-marker/required-marker.directive.ts","../../src/lib/pipes/json-parse.pipe.ts","../../src/lib/ngx-intellitoolx.component.ts","../../src/lib/form-validators/max-amount.validator.ts","../../src/lib/form-validators/max-words.validator.ts","../../src/lib/form-validators/min-amount.validator.ts","../../src/lib/form-validators/password-mismatch.validator.ts","../../src/lib/form-validators/unique-email.validators.ts","../../src/lib/regex/regex.utils.ts","../../src/lib/ngx-intellitoolx.module.ts","../../src/public-api.ts","../../src/fagon-ngx-intellitoolx.ts"],"sourcesContent":["import {\n AbstractControl,\n FormArray,\n FormControl,\n FormGroup,\n} from '@angular/forms';\nimport { ConfirmHandler } from '../form-changes/confirm-handler.type';\n\nexport class IntelliToolxHelper {\n static captureInitialFormValue(form: AbstractControl): any {\n const initialValue = (form as any).getRawValue?.() ?? form.value;\n form.markAsPristine();\n return this.clone(initialValue);\n }\n\n static trimFormGroup(control: AbstractControl): void {\n if (control instanceof FormGroup) {\n Object.keys(control.controls).forEach((key) =>\n this.trimFormGroup(control.controls[key]),\n );\n return;\n }\n\n if (control instanceof FormArray) {\n control.controls.forEach((ctrl) => this.trimFormGroup(ctrl));\n return;\n }\n\n if (control instanceof FormControl) {\n const value = control.value;\n if (typeof value === 'string') {\n control.setValue(value.trim(), { emitEvent: false });\n }\n }\n }\n\n static deepEqual(obj1: any, obj2: any): boolean {\n // treat null, undefined, and empty string as equal\n if (this.isEmpty(obj1) && this.isEmpty(obj2)) {\n return true;\n }\n\n // normalize numeric values\n if (typeof obj1 === 'number' && typeof obj2 === 'number') {\n return Number(obj1) === Number(obj2);\n }\n\n // strict equality shortcut\n if (obj1 === obj2) return true;\n\n // File comparison\n if (obj1 instanceof File && obj2 instanceof File) {\n return (\n obj1.name === obj2.name &&\n obj1.size === obj2.size &&\n obj1.type === obj2.type &&\n obj1.lastModified === obj2.lastModified\n );\n }\n\n // if not objects → not equal\n if (\n typeof obj1 !== 'object' ||\n typeof obj2 !== 'object' ||\n obj1 === null ||\n obj2 === null\n ) {\n return false;\n }\n\n // arrays\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n return obj1.every((v, i) => this.deepEqual(v, obj2[i]));\n }\n\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n if (keys1.length !== keys2.length) return false;\n\n for (const key of keys1) {\n if (!keys2.includes(key)) return false;\n if (!this.deepEqual(obj1[key], obj2[key])) return false;\n }\n\n return true;\n }\n\n static isEmpty(value: any): boolean {\n return (\n value === null ||\n value === undefined ||\n (typeof value === 'string' && value.trim() === '')\n );\n }\n\n static clone(value: any): any {\n return structuredClone(value); // Angular 14+ safe\n }\n\n static formHasChanges(initialValue: any, form: AbstractControl): boolean {\n if (!form) return false;\n\n const current = form.getRawValue();\n return !this.deepEqual(initialValue, current);\n }\n\n static async confirmIfChanged(\n hasChanges: boolean,\n confirmHandler?: ConfirmHandler,\n ): Promise<boolean> {\n if (!hasChanges) return true;\n\n if (confirmHandler) {\n const result = confirmHandler();\n return typeof result === 'boolean' ? result : await result;\n }\n\n return confirm('You have unsaved changes. Continue?');\n }\n\n static registerBeforeUnload(shouldBlock: () => boolean, message?: string) {\n const handler = (event: BeforeUnloadEvent) => {\n if (!shouldBlock()) return;\n event.preventDefault();\n event.returnValue = message ?? '';\n };\n\n window.addEventListener('beforeunload', handler);\n return () => window.removeEventListener('beforeunload', handler);\n }\n\n static getFormControl<T = any>(\n form: AbstractControl,\n path: string,\n ): FormControl<T> | null {\n if (!form || !path) return null;\n\n const segments = path.split('.');\n let current: AbstractControl | null = form;\n\n for (const segment of segments) {\n if (!current) return null;\n\n // Treat numeric segment as FormArray index\n const index = Number(segment);\n if (!isNaN(index) && current instanceof FormArray) {\n current = current.at(index);\n } else if (current instanceof FormGroup) {\n current = current.get(segment);\n } else {\n return null;\n }\n }\n\n return current instanceof FormControl ? (current as FormControl<T>) : null;\n }\n\n static convertImageToBase64(file: File): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n const base64String = reader.result as string;\n const base64StringArray = base64String.split(',');\n resolve(base64StringArray[1]);\n };\n\n reader.onerror = (error) => {\n reject(error);\n };\n });\n }\n\n static replaceCharacter(\n text: any,\n replaceChar: string,\n replaceWithChar: string,\n ): string {\n return text?.replaceAll(replaceChar, replaceWithChar) || '';\n }\n\n static convertJsonStringToJson<T = any>(\n value: T | string | null | undefined,\n ): T | null {\n if (!value) {\n return null;\n }\n\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n }\n\n return value as T;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IntelliToolxHelper } from '../helpers/intellitoolx.helper';\nimport { AbstractControl } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormChangesTrackerService {\n private trackedForms = new Map<\n AbstractControl,\n {\n initialValue: any;\n }\n >();\n\n register(form: AbstractControl) {\n const currentRawValue = (form as any).getRawValue?.() ?? form.value;\n\n this.trackedForms.set(form, {\n initialValue: IntelliToolxHelper.clone(currentRawValue),\n });\n\n form.markAsPristine();\n }\n\n registerForms(forms: AbstractControl[]) {\n forms.forEach((form) => this.register(form));\n }\n\n hasChanges(): boolean {\n // We iterate over entries [form, metadata]\n for (const [form, { initialValue }] of this.trackedForms.entries()) {\n if (IntelliToolxHelper.formHasChanges(initialValue, form)) {\n return true;\n }\n }\n return false;\n }\n\n unregister(form: AbstractControl) {\n this.trackedForms.delete(form);\n }\n\n unregisterForms(forms: AbstractControl[]) {\n forms.forEach((form) => this.unregister(form));\n }\n\n reset(form: AbstractControl) {\n const entry = this.trackedForms.get(form);\n if (!entry) {\n this.register(form);\n return;\n }\n\n const currentRawValue = (form as any).getRawValue?.() ?? form.value;\n entry.initialValue = IntelliToolxHelper.clone(currentRawValue);\n\n form.markAsPristine();\n }\n\n resetForms(forms: AbstractControl[]) {\n forms.forEach((form) => this.reset(form));\n }\n\n clearAll() {\n this.trackedForms.clear();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { IntellitoolxFormUpdateMessageConfig } from './form-update-message-config.interface';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'itx-form-update-message',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./form-update-message.component.css'],\n template: `\n <div class=\"form-update-message\" role=\"alert\" [ngStyle]=\"containerStyles\">\n <span class=\"form-update-icon\" aria-hidden=\"true\" [ngStyle]=\"iconStyles\"\n >⚠</span\n >\n <span>\n {{ itxFormUpdateMessageConfig?.message || defaultMessage }}\n </span>\n </div>\n `,\n})\nexport class IntellitoolxFormUpdateMessage {\n @Input() itxFormUpdateMessageConfig?: IntellitoolxFormUpdateMessageConfig;\n defaultMessage =\n 'There are no changes to save. Please modify a field to continue.';\n\n get containerStyles(): { [key: string]: string } {\n return {\n padding: this.itxFormUpdateMessageConfig?.padding || '1rem',\n gap: this.itxFormUpdateMessageConfig?.iconAndMessageGap || '0.5rem',\n color: this.itxFormUpdateMessageConfig?.textColor || '#963C00',\n border:\n '1px solid ' +\n (this.itxFormUpdateMessageConfig?.borderColor || '#f3cd5a'),\n 'background-color':\n this.itxFormUpdateMessageConfig?.backgroundColor || '#fff3cd',\n 'font-weight': String(this.itxFormUpdateMessageConfig?.fontWeight || 400),\n 'border-radius':\n this.itxFormUpdateMessageConfig?.borderRadius || '0.5rem',\n };\n }\n\n get iconStyles(): { [key: string]: string } {\n return {\n 'font-size': this.itxFormUpdateMessageConfig?.iconSize || '1rem',\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { CanComponentDeactivate } from './can-component-deactivate.interface';\nimport { FormChangesTrackerService } from './form-changes-tracker.service';\n\n@Injectable({ providedIn: 'root' })\nexport class UnsavedChangesGuard implements CanDeactivate<CanComponentDeactivate> {\n constructor(private tracker: FormChangesTrackerService) {}\n\n async canDeactivate(component: CanComponentDeactivate): Promise<boolean> {\n if (!this.tracker.hasChanges()) {\n return true;\n }\n // Component provides its own confirmation (modal)\n if (component.confirmUnsavedChanges) {\n const result = component.confirmUnsavedChanges();\n return typeof result === 'boolean' ? result : await result;\n }\n\n const message =\n component.getUnsavedMessage?.() ||\n 'You have unsaved changes. Leave without saving?';\n // Fallback browser confirm\n return confirm(message);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n UntypedFormControl,\n} from '@angular/forms';\n\nexport interface ErrorMessages {\n [key: string]: string;\n required: string;\n email: string;\n minlength: string;\n maxlength: string;\n pattern: string;\n passwordMismatch: string;\n futureDate: string;\n exceededAllowedDateDifference: string;\n startDateAfterEndDate: string;\n duplicateEmail: string;\n maxWords: string;\n maxMonthYear: string;\n minMonthYear: string;\n}\n\n@Component({\n selector: 'itx-form-errors',\n standalone: true,\n imports: [CommonModule],\n template: `\n <ng-container *ngIf=\"control?.touched && control?.invalid\">\n <ng-container *ngFor=\"let error of control?.errors | keyvalue\">\n {{ getErrorMessage(error?.key ?? '', error?.value) }}\n </ng-container>\n </ng-container>\n `,\n})\nexport class IntellitoolxFormErrors {\n @Input() control: FormControl | UntypedFormControl | AbstractControl | null =\n null;\n @Input() componentValidation: Record<string, { message: string }> = {};\n @Input() controlLabel: string | null = null;\n\n errorMessages: ErrorMessages = {\n required: 'This field is required',\n email: 'The email entered is invalid',\n minlength: 'You must enter at least {length} characters',\n maxlength: 'You must not enter more than {length} characters',\n pattern: 'Your entry must match the required pattern',\n passwordMismatch: 'Password and confirm password do not match.',\n futureDate: 'Future date is not allowed.',\n exceededAllowedDateDifference: 'Date difference can only be one month.',\n startDateAfterEndDate: 'Start date cannot be greater than end date',\n duplicateEmail: 'Each email must be unique.',\n maxWords: 'Exceeded maximum number of words.',\n maxMonthYear: 'Date is later than allowed.',\n minMonthYear: 'Date is earlier than allowed.',\n };\n\n getErrorMessage(key: string, value: any): string {\n if (!this.control) return '';\n\n const customMessage = this.componentValidation?.[key]?.message;\n\n if (typeof value === 'boolean') {\n return customMessage || this.errorMessages[key] || '';\n }\n\n if (typeof value === 'string') {\n return customMessage || value;\n }\n\n if (typeof value === 'object') {\n switch (key) {\n case 'pattern':\n return (\n customMessage ||\n `Please provide a valid ${this.controlLabel || 'data'}.`\n );\n case 'min':\n return customMessage\n ? customMessage\n : this.controlLabel\n ? `${this.controlLabel} cannot be less than ${value.min}.`\n : `Number cannot be less than ${value.min}`;\n case 'max':\n return customMessage\n ? customMessage\n : this.controlLabel\n ? `${this.controlLabel} cannot be greater than ${value.max}.`\n : `Number cannot be greater than ${value.max}`;\n case 'minlength':\n return (\n customMessage ||\n this.errorMessages.minlength.replace(\n '{length}',\n value?.requiredLength || '',\n )\n );\n case 'maxlength':\n return (\n customMessage ||\n this.errorMessages.maxlength.replace(\n '{length}',\n value?.requiredLength || '',\n )\n );\n case 'customMinValue':\n case 'customMaxValue':\n return customMessage || value?.message || '';\n case 'ngbDate':\n return (\n customMessage ||\n (this.control.value ? 'Invalid date format provided' : '')\n );\n case 'passwordMismatch':\n case 'futureDate':\n case 'duplicateEmail':\n case 'maxWords':\n case 'maxMonthYear':\n case 'minMonthYear':\n case 'exceededAllowedDateDifference':\n case 'startDateAfterEndDate':\n return customMessage || this.errorMessages[key];\n default:\n return customMessage || '';\n }\n }\n\n return '';\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { RequiredMarkerConfig } from './required-marker.config';\n\nexport const REQUIRED_MARKER_GLOBAL_CONFIG =\n new InjectionToken<RequiredMarkerConfig>('Required Marker Global Config');\n","import { ResolvedRequiredMarkerConfig } from './required-marker.config';\n\nexport const DEFAULT_REQUIRED_MARKER_CONFIG: ResolvedRequiredMarkerConfig = {\n sign: '*',\n color: 'red',\n position: 'after',\n spacing: '2px',\n className: '',\n showIfOptional: false,\n};\n","import {\n Directive,\n ElementRef,\n Renderer2,\n AfterViewInit,\n OnDestroy,\n inject,\n} from '@angular/core';\nimport {\n FormGroupDirective,\n AbstractControl,\n Validators,\n} from '@angular/forms';\nimport { merge, Subscription } from 'rxjs';\n\nimport { ResolvedRequiredMarkerConfig } from './required-marker.config';\nimport { REQUIRED_MARKER_GLOBAL_CONFIG } from './required-marker.token';\nimport { DEFAULT_REQUIRED_MARKER_CONFIG } from './required-marker.defaults';\n\n@Directive({\n selector: 'label[itxRequired]',\n standalone: true,\n})\nexport class RequiredMarkerDirective implements AfterViewInit, OnDestroy {\n private subscription?: Subscription;\n\n private globalConfig = inject(REQUIRED_MARKER_GLOBAL_CONFIG, {\n optional: true,\n });\n\n constructor(\n private el: ElementRef<HTMLLabelElement>,\n private renderer: Renderer2,\n private parentForm: FormGroupDirective,\n ) {}\n\n private resolveConfig(): ResolvedRequiredMarkerConfig {\n return {\n ...DEFAULT_REQUIRED_MARKER_CONFIG,\n ...this.globalConfig,\n };\n }\n\n ngAfterViewInit() {\n const label = this.el.nativeElement;\n const controlId = label.getAttribute('for');\n if (!controlId) return;\n\n const control = this.parentForm.form.get(controlId);\n if (!control) return;\n\n this.updateLabel(label, control);\n\n this.subscription = merge(\n control.valueChanges,\n control.statusChanges,\n ).subscribe(() => this.updateLabel(label, control));\n }\n\n private updateLabel(label: HTMLLabelElement, control: AbstractControl) {\n const config = this.resolveConfig();\n const isRequired = control.hasValidator?.(Validators.required);\n\n const original =\n label.getAttribute('data-original') || label.textContent || '';\n\n if (!label.getAttribute('data-original')) {\n label.setAttribute('data-original', original.trim());\n }\n\n const match = original.match(/^([^\\(]+)(.*)$/);\n const mainText = match ? match[1].trim() : original;\n const extraText = match ? match[2] : '';\n\n this.renderer.setProperty(label, 'textContent', '');\n\n const main = this.renderer.createText(mainText);\n\n const marker = this.renderer.createElement('span');\n this.renderer.setStyle(marker, 'color', config.color);\n this.renderer.setStyle(marker, 'margin-left', config.spacing);\n\n this.renderer.appendChild(marker, this.renderer.createText(config.sign));\n\n if (isRequired) {\n if (config.position === 'before') {\n this.renderer.appendChild(label, marker);\n this.renderer.appendChild(label, main);\n } else {\n this.renderer.appendChild(label, main);\n this.renderer.appendChild(label, marker);\n }\n } else {\n this.renderer.appendChild(label, main);\n }\n\n const extra = this.renderer.createText(extraText);\n this.renderer.appendChild(label, extra);\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IntelliToolxHelper } from '../helpers/intellitoolx.helper';\n\n@Pipe({\n name: 'jsonParse',\n standalone: true,\n})\nexport class JsonParsePipe implements PipeTransform {\n transform<T = any>(value: T | string | null | undefined): T | null {\n return IntelliToolxHelper.convertJsonStringToJson(value);\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ngx-intellitoolx',\n standalone: true,\n template: ` <p>ngx-intellitoolx works!</p> `,\n styles: [],\n})\nexport class NgxIntellitoolxComponent {}\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function customMaxAmountValidator(maxValue: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value !== null && control.value > maxValue) {\n control.setErrors({ exceededMaximumValue: true });\n const maxValueToFloat = maxValue.toFixed(2);\n return {\n customMaxValue: {\n requiredMin: maxValue,\n actual: control.value,\n message: `The value must not exceed ${maxValueToFloat}`,\n },\n };\n }\n\n control.setErrors(null);\n return null;\n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function maxWordsValidator(maxWords: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) return null;\n\n const wordCount = control.value.trim().split(/\\s+/).length;\n return wordCount > maxWords\n ? { maxWords: { actual: wordCount, max: maxWords } }\n : null;\n };\n}\n","import { ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\n\nexport function customMinAmountValidator(minValue: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value !== null && control.value < minValue) {\n control.setErrors({ exceededMinimumValue: true });\n const minValueToFloat = minValue.toFixed(2);\n return {\n customMinValue: {\n requiredMin: minValue,\n actual: control.value,\n message: `The value must be at least ${minValueToFloat}`,\n },\n };\n }\n\n control.setErrors(null);\n return null;\n };\n}\n","import { UntypedFormGroup } from '@angular/forms';\n\nexport function passwordMismatchValidator(\n controlName: string,\n matchingControlName: string,\n) {\n return (formGroup: UntypedFormGroup) => {\n const control = formGroup.controls[controlName];\n const matchingControl = formGroup.controls[matchingControlName];\n if (matchingControl.errors && !matchingControl.errors['passwordMismatch']) {\n return;\n }\n if (control.value !== matchingControl.value) {\n matchingControl.setErrors({ passwordMismatch: true });\n } else {\n matchingControl.setErrors(null);\n }\n };\n}\n","import {\n AbstractControl,\n ValidationErrors,\n ValidatorFn,\n FormArray,\n FormGroup,\n} from '@angular/forms';\n\nexport function uniqueEmailsValidator(): ValidatorFn {\n return (formArray: AbstractControl): ValidationErrors | null => {\n if (!(formArray instanceof FormArray)) {\n return null;\n }\n\n const controls = formArray.controls as FormGroup[];\n\n // Collect all email values safely\n const emails = controls.map((control: FormGroup) => {\n const value = control.get('email')?.value;\n return typeof value === 'string' ? value.toLowerCase().trim() : '';\n });\n\n // Count occurrences\n const emailCounts: Record<string, number> = {};\n emails.forEach((email: string) => {\n if (email) {\n emailCounts[email] = (emailCounts[email] || 0) + 1;\n }\n });\n\n // Update each control's errors\n controls.forEach((control: FormGroup) => {\n const emailControl = control.get('email');\n const email = emailControl?.value?.toLowerCase()?.trim();\n\n if (emailControl) {\n const currentErrors = emailControl.errors || {};\n\n if (email && emailCounts[email] > 1) {\n emailControl.setErrors({ ...currentErrors, duplicateEmail: true });\n } else if (currentErrors?.['duplicateEmail']) {\n delete currentErrors['duplicateEmail'];\n const hasOtherErrors = Object.keys(currentErrors)?.length > 0;\n emailControl.setErrors(hasOtherErrors ? currentErrors : null);\n }\n }\n });\n\n const hasDuplicates = Object.values(emailCounts)?.some(\n (count) => count > 1,\n );\n return hasDuplicates ? { duplicateEmails: true } : null;\n };\n}\n","export const IntellitoolxRegExps = {\n EMAIL_REGEX: /^(?=.{1,50}$)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[A-Za-z]{2,}$/,\n NUMBER_REGEX: /^\\d+$/,\n AMOUNT_REGEX: /^\\d+(\\.\\d{1,2})?$/,\n DOMAIN_REGEX:\n /^(?=.{1,255}$)(https?|ftp):\\/\\/([\\w.-]+)\\.([a-z\\.]{2,6})(:[0-9]{1,5})?(\\/\\S*)?$/,\n};\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n exports: [],\n})\nexport class NgxIntellitoolxModule {}\n","/*\n * Public API Surface of ngx-intellitoolx\n */\n\n// Form Changes\nexport * from './lib/form-changes/form-changes-tracker.service';\nexport * from './lib/form-changes/form-update-message.component';\nexport * from './lib/form-changes/unsaved-changes.guard';\nexport * from './lib/form-changes/can-component-deactivate.interface';\nexport * from './lib/form-changes/form-update-message-config.interface';\n\n// Form validation\nexport * from './lib/form-errors/form-errors.component';\nexport * from './lib/directives/required-marker/required-marker.directive';\nexport * from './lib/directives/required-marker/required-marker.config';\nexport * from './lib/directives/required-marker/required-marker.token';\nexport * from './lib/directives/required-marker/required-marker.defaults';\n\n// Helpers\nexport * from './lib/helpers/intellitoolx.helper';\n\n// Pipes\nexport * from './lib/pipes/json-parse.pipe';\n\n// Components\nexport * from './lib/ngx-intellitoolx.component';\n\n// Validators\nexport * from './lib/form-validators';\n\n// Regular expressions\nexport * from './lib/regex/regex.utils';\n\n// Moddules\nexport * from './lib/ngx-intellitoolx.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FormChangesTrackerService","i1"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface CanComponentDeactivate {
2
+ hasUnsavedChanges: () => boolean;
3
+ confirmUnsavedChanges?: () => Promise<boolean> | boolean;
4
+ getUnsavedMessage?: () => string;
5
+ }
@@ -0,0 +1,15 @@
1
+ import { AbstractControl } from '@angular/forms';
2
+ import * as i0 from "@angular/core";
3
+ export declare class FormChangesTrackerService {
4
+ private trackedForms;
5
+ register(form: AbstractControl): void;
6
+ registerForms(forms: AbstractControl[]): void;
7
+ hasChanges(): boolean;
8
+ unregister(form: AbstractControl): void;
9
+ unregisterForms(forms: AbstractControl[]): void;
10
+ reset(form: AbstractControl): void;
11
+ resetForms(forms: AbstractControl[]): void;
12
+ clearAll(): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormChangesTrackerService, never>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<FormChangesTrackerService>;
15
+ }
@@ -1,11 +1,11 @@
1
1
  import { CanDeactivate } from '@angular/router';
2
+ import { CanComponentDeactivate } from './can-component-deactivate.interface';
3
+ import { FormChangesTrackerService } from './form-changes-tracker.service';
2
4
  import * as i0 from "@angular/core";
3
- export interface CanComponentDeactivate {
4
- hasUnsavedChanges: () => boolean;
5
- getUnsavedMessage?: () => string;
6
- }
7
5
  export declare class UnsavedChangesGuard implements CanDeactivate<CanComponentDeactivate> {
8
- canDeactivate(component: CanComponentDeactivate): boolean;
6
+ private tracker;
7
+ constructor(tracker: FormChangesTrackerService);
8
+ canDeactivate(component: CanComponentDeactivate): Promise<boolean>;
9
9
  static ɵfac: i0.ɵɵFactoryDeclaration<UnsavedChangesGuard, never>;
10
10
  static ɵprov: i0.ɵɵInjectableDeclaration<UnsavedChangesGuard>;
11
11
  }
@@ -1,5 +1,5 @@
1
1
  import { AbstractControl, FormControl } from '@angular/forms';
2
- import { ConfirmHandler } from '../form-update/confirm-handler.type';
2
+ import { ConfirmHandler } from '../form-changes/confirm-handler.type';
3
3
  export declare class IntelliToolxHelper {
4
4
  static captureInitialFormValue(form: AbstractControl): any;
5
5
  static trimFormGroup(control: AbstractControl): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fagon/ngx-intellitoolx",
3
- "version": "16.0.4",
3
+ "version": "16.0.6",
4
4
  "description": "A comprehensive Angular utility library for reactive forms, validation, form state management, UX messaging, and reusable business-rule validators.",
5
5
  "author": "Kingsley Darko Asomaning",
6
6
  "license": "MIT",
package/public-api.d.ts CHANGED
@@ -1,14 +1,16 @@
1
- export * from './lib/ngx-intellitoolx.module';
2
- export * from './lib/helpers/intellitoolx.helper';
3
- export * from './lib/pipes/json-parse.pipe';
4
- export * from './lib/ngx-intellitoolx.component';
5
- export * from './lib/form-update/form-update-message.component';
1
+ export * from './lib/form-changes/form-changes-tracker.service';
2
+ export * from './lib/form-changes/form-update-message.component';
3
+ export * from './lib/form-changes/unsaved-changes.guard';
4
+ export * from './lib/form-changes/can-component-deactivate.interface';
5
+ export * from './lib/form-changes/form-update-message-config.interface';
6
6
  export * from './lib/form-errors/form-errors.component';
7
- export * from './lib/form-validators';
8
- export * from './lib/regex/regex.utils';
9
- export * from './lib/form-update/form-update-message-config.interface';
10
7
  export * from './lib/directives/required-marker/required-marker.directive';
11
8
  export * from './lib/directives/required-marker/required-marker.config';
12
9
  export * from './lib/directives/required-marker/required-marker.token';
13
10
  export * from './lib/directives/required-marker/required-marker.defaults';
14
- export * from './lib/form-update/unsaved-changes.guard';
11
+ export * from './lib/helpers/intellitoolx.helper';
12
+ export * from './lib/pipes/json-parse.pipe';
13
+ export * from './lib/ngx-intellitoolx.component';
14
+ export * from './lib/form-validators';
15
+ export * from './lib/regex/regex.utils';
16
+ export * from './lib/ngx-intellitoolx.module';
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1oYW5kbGVyLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0tdXBkYXRlL2NvbmZpcm0taGFuZGxlci50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDb25maXJtSGFuZGxlciA9ICgpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS11cGRhdGUtbWVzc2FnZS1jb25maWcuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9mb3JtLXVwZGF0ZS9mb3JtLXVwZGF0ZS1tZXNzYWdlLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSW50ZWxsaXRvb2x4Rm9ybVVwZGF0ZU1lc3NhZ2VDb25maWcge1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIHRleHRDb2xvcj86IHN0cmluZztcbiAgYm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gIGZvbnRXZWlnaHQ/OiBudW1iZXI7XG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcbiAgaWNvbkFuZE1lc3NhZ2VHYXA/OiBzdHJpbmc7XG4gIGljb25TaXplPzogc3RyaW5nO1xufVxuIl19
@@ -1,53 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- export class IntellitoolxFormUpdateMessage {
6
- constructor() {
7
- this.defaultMessage = 'There are no changes to save. Please modify a field to continue.';
8
- }
9
- get containerStyles() {
10
- return {
11
- padding: this.itxFormUpdateMessageConfig?.padding || '1rem',
12
- gap: this.itxFormUpdateMessageConfig?.iconAndMessageGap || '0.5rem',
13
- color: this.itxFormUpdateMessageConfig?.textColor || '#963C00',
14
- border: '1px solid ' +
15
- (this.itxFormUpdateMessageConfig?.borderColor || '#f3cd5a'),
16
- 'background-color': this.itxFormUpdateMessageConfig?.backgroundColor || '#fff3cd',
17
- 'font-weight': String(this.itxFormUpdateMessageConfig?.fontWeight || 400),
18
- 'border-radius': this.itxFormUpdateMessageConfig?.borderRadius || '0.5rem',
19
- };
20
- }
21
- get iconStyles() {
22
- return {
23
- 'font-size': this.itxFormUpdateMessageConfig?.iconSize || '1rem',
24
- };
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IntellitoolxFormUpdateMessage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IntellitoolxFormUpdateMessage, isStandalone: true, selector: "itx-form-update-message", inputs: { itxFormUpdateMessageConfig: "itxFormUpdateMessageConfig" }, ngImport: i0, template: `
28
- <div class="form-update-message" role="alert" [ngStyle]="containerStyles">
29
- <span class="form-update-icon" aria-hidden="true" [ngStyle]="iconStyles"
30
- >⚠</span
31
- >
32
- <span>
33
- {{ itxFormUpdateMessageConfig?.message || defaultMessage }}
34
- </span>
35
- </div>
36
- `, isInline: true, styles: [".form-update-message{display:flex;margin-top:.5rem}.form-update-icon{flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
37
- }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IntellitoolxFormUpdateMessage, decorators: [{
39
- type: Component,
40
- args: [{ selector: 'itx-form-update-message', standalone: true, imports: [CommonModule], template: `
41
- <div class="form-update-message" role="alert" [ngStyle]="containerStyles">
42
- <span class="form-update-icon" aria-hidden="true" [ngStyle]="iconStyles"
43
- >⚠</span
44
- >
45
- <span>
46
- {{ itxFormUpdateMessageConfig?.message || defaultMessage }}
47
- </span>
48
- </div>
49
- `, styles: [".form-update-message{display:flex;margin-top:.5rem}.form-update-icon{flex-shrink:0}\n"] }]
50
- }], propDecorators: { itxFormUpdateMessageConfig: [{
51
- type: Input
52
- }] } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS11cGRhdGUtbWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0tdXBkYXRlL2Zvcm0tdXBkYXRlLW1lc3NhZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBa0IvQyxNQUFNLE9BQU8sNkJBQTZCO0lBaEIxQztRQWtCRSxtQkFBYyxHQUNaLGtFQUFrRSxDQUFDO0tBdUJ0RTtJQXJCQyxJQUFJLGVBQWU7UUFDakIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxJQUFJLE1BQU07WUFDM0QsR0FBRyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxpQkFBaUIsSUFBSSxRQUFRO1lBQ25FLEtBQUssRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsU0FBUyxJQUFJLFNBQVM7WUFDOUQsTUFBTSxFQUNKLFlBQVk7Z0JBQ1osQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQztZQUM3RCxrQkFBa0IsRUFDaEIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLGVBQWUsSUFBSSxTQUFTO1lBQy9ELGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsSUFBSSxHQUFHLENBQUM7WUFDekUsZUFBZSxFQUNiLElBQUksQ0FBQywwQkFBMEIsRUFBRSxZQUFZLElBQUksUUFBUTtTQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFFBQVEsSUFBSSxNQUFNO1NBQ2pFLENBQUM7SUFDSixDQUFDOytHQXpCVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix5SkFYOUI7Ozs7Ozs7OztHQVNULDhKQVhTLFlBQVk7OzRGQWFYLDZCQUE2QjtrQkFoQnpDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUViOzs7Ozs7Ozs7R0FTVDs4QkFHUSwwQkFBMEI7c0JBQWxDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlbGxpdG9vbHhGb3JtVXBkYXRlTWVzc2FnZUNvbmZpZyB9IGZyb20gJy4vZm9ybS11cGRhdGUtbWVzc2FnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0eC1mb3JtLXVwZGF0ZS1tZXNzYWdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tdXBkYXRlLW1lc3NhZ2UuY29tcG9uZW50LmNzcyddLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXVwZGF0ZS1tZXNzYWdlXCIgcm9sZT1cImFsZXJ0XCIgW25nU3R5bGVdPVwiY29udGFpbmVyU3R5bGVzXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZvcm0tdXBkYXRlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbbmdTdHlsZV09XCJpY29uU3R5bGVzXCJcbiAgICAgICAgPuKaoDwvc3BhblxuICAgICAgPlxuICAgICAgPHNwYW4+XG4gICAgICAgIHt7IGl0eEZvcm1VcGRhdGVNZXNzYWdlQ29uZmlnPy5tZXNzYWdlIHx8IGRlZmF1bHRNZXNzYWdlIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEludGVsbGl0b29seEZvcm1VcGRhdGVNZXNzYWdlIHtcbiAgQElucHV0KCkgaXR4Rm9ybVVwZGF0ZU1lc3NhZ2VDb25maWc/OiBJbnRlbGxpdG9vbHhGb3JtVXBkYXRlTWVzc2FnZUNvbmZpZztcbiAgZGVmYXVsdE1lc3NhZ2UgPVxuICAgICdUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzYXZlLiBQbGVhc2UgbW9kaWZ5IGEgZmllbGQgdG8gY29udGludWUuJztcblxuICBnZXQgY29udGFpbmVyU3R5bGVzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWRkaW5nOiB0aGlzLml0eEZvcm1VcGRhdGVNZXNzYWdlQ29uZmlnPy5wYWRkaW5nIHx8ICcxcmVtJyxcbiAgICAgIGdhcDogdGhpcy5pdHhGb3JtVXBkYXRlTWVzc2FnZUNvbmZpZz8uaWNvbkFuZE1lc3NhZ2VHYXAgfHwgJzAuNXJlbScsXG4gICAgICBjb2xvcjogdGhpcy5pdHhGb3JtVXBkYXRlTWVzc2FnZUNvbmZpZz8udGV4dENvbG9yIHx8ICcjOTYzQzAwJyxcbiAgICAgIGJvcmRlcjpcbiAgICAgICAgJzFweCBzb2xpZCAnICtcbiAgICAgICAgKHRoaXMuaXR4Rm9ybVVwZGF0ZU1lc3NhZ2VDb25maWc/LmJvcmRlckNvbG9yIHx8ICcjZjNjZDVhJyksXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6XG4gICAgICAgIHRoaXMuaXR4Rm9ybVVwZGF0ZU1lc3NhZ2VDb25maWc/LmJhY2tncm91bmRDb2xvciB8fCAnI2ZmZjNjZCcsXG4gICAgICAnZm9udC13ZWlnaHQnOiBTdHJpbmcodGhpcy5pdHhGb3JtVXBkYXRlTWVzc2FnZUNvbmZpZz8uZm9udFdlaWdodCB8fCA0MDApLFxuICAgICAgJ2JvcmRlci1yYWRpdXMnOlxuICAgICAgICB0aGlzLml0eEZvcm1VcGRhdGVNZXNzYWdlQ29uZmlnPy5ib3JkZXJSYWRpdXMgfHwgJzAuNXJlbScsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBpY29uU3R5bGVzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAnZm9udC1zaXplJzogdGhpcy5pdHhGb3JtVXBkYXRlTWVzc2FnZUNvbmZpZz8uaWNvblNpemUgfHwgJzFyZW0nLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,19 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class UnsavedChangesGuard {
4
- canDeactivate(component) {
5
- if (!component.hasUnsavedChanges()) {
6
- return true;
7
- }
8
- const message = component.getUnsavedMessage?.() ||
9
- 'You have unsaved changes. Leave without saving?';
10
- return confirm(message);
11
- }
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UnsavedChangesGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UnsavedChangesGuard, providedIn: 'root' }); }
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UnsavedChangesGuard, decorators: [{
16
- type: Injectable,
17
- args: [{ providedIn: 'root' }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zYXZlZC1jaGFuZ2VzLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9mb3JtLXVwZGF0ZS91bnNhdmVkLWNoYW5nZXMuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixhQUFhLENBQUMsU0FBaUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLE9BQU8sR0FDWCxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUMvQixpREFBaUQsQ0FBQztRQUVwRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDOytHQVhVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRE4sTUFBTTs7NEZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5EZWFjdGl2YXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBDYW5Db21wb25lbnREZWFjdGl2YXRlIHtcbiAgaGFzVW5zYXZlZENoYW5nZXM6ICgpID0+IGJvb2xlYW47XG4gIGdldFVuc2F2ZWRNZXNzYWdlPzogKCkgPT4gc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVuc2F2ZWRDaGFuZ2VzR3VhcmQgaW1wbGVtZW50cyBDYW5EZWFjdGl2YXRlPENhbkNvbXBvbmVudERlYWN0aXZhdGU+IHtcbiAgY2FuRGVhY3RpdmF0ZShjb21wb25lbnQ6IENhbkNvbXBvbmVudERlYWN0aXZhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbXBvbmVudC5oYXNVbnNhdmVkQ2hhbmdlcygpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGNvbXBvbmVudC5nZXRVbnNhdmVkTWVzc2FnZT8uKCkgfHxcbiAgICAgICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIExlYXZlIHdpdGhvdXQgc2F2aW5nPyc7XG5cbiAgICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbiAgfVxufVxuIl19