@firestitch/form 18.0.34 → 18.0.36
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.
- package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +19 -7
- package/app/directives/form-base/form-base.directive.d.ts +7 -0
- package/app/directives/validators/control.directive.d.ts +14 -1
- package/esm2022/app/components/form-dialog-actions/form-dialog-actions.component.mjs +28 -11
- package/esm2022/app/directives/form-base/form-base.directive.mjs +1 -1
- package/esm2022/app/directives/validators/control.directive.mjs +42 -11
- package/fesm2022/firestitch-form.mjs +68 -20
- package/fesm2022/firestitch-form.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-form.mjs","sources":["../../src/app/components/confirm-unsaved/confirm-unsaved.component.ts","../../src/app/components/confirm-unsaved/confirm-unsaved.component.html","../../src/app/helpers/within-same-dialog.ts","../../src/app/helpers/get-form-errors.ts","../../src/app/enums/confirm-result.ts","../../src/app/enums/form-status.ts","../../src/app/helpers/confirm-result-continue.ts","../../src/app/helpers/get-active-route.ts","../../src/app/services/fsform.service.ts","../../src/app/guards/form-deactivate.guard.ts","../../src/app/directives/form-base/form-base.directive.ts","../../src/app/directives/form-container/form-container.directive.ts","../../src/app/directives/form/form.directive.ts","../../src/app/directives/button.directive.ts","../../src/app/directives/form-dialog-close.directive.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.html","../../src/app/directives/confirm-tabs/confirm-tabs.directive.ts","../../src/app/consts/error-messages.const.ts","../../src/app/providers/validate-messages.provider.ts","../../src/app/directives/validators/control.directive.ts","../../src/app/directives/validators/compare.directive.ts","../../src/app/validators/validators.ts","../../src/app/helpers/is-enabled.ts","../../src/app/directives/validators/daterange.directive.ts","../../src/app/directives/validators/email.directive.ts","../../src/app/directives/validators/emails.directive.ts","../../src/app/directives/validators/function.directive.ts","../../src/app/directives/validators/greater-equal.directive.ts","../../src/app/directives/validators/greater.directive.ts","../../src/app/directives/validators/integer.directive.ts","../../src/app/directives/validators/lesser-equal.directive.ts","../../src/app/directives/validators/lesser.directive.ts","../../src/app/directives/validators/max.directive.ts","../../src/app/directives/validators/maxlength.directive.ts","../../src/app/directives/validators/min.directive.ts","../../src/app/directives/validators/minlength.directive.ts","../../src/app/directives/validators/no-fs-validators.directive.ts","../../src/app/directives/validators/numeric.directive.ts","../../src/app/directives/validators/pattern.directive.ts","../../src/app/directives/validators/phone.directive.ts","../../src/app/directives/validators/required.directive.ts","../../src/app/directives/validators/url.directive.ts","../../src/app/directives/validators/validate.directive.ts","../../src/app/directives/form-template.directive.ts","../../src/app/directives/submit-button.directive.ts","../../src/app/directives/form-template-outlet.directive.ts","../../src/app/fs-form.module.ts","../../src/public_api.ts","../../src/firestitch-form.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport { Subject } from 'rxjs';\n\n\n@Component({\n templateUrl: './confirm-unsaved.component.html',\n styleUrls: ['./confirm-unsaved.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatDialogModule,\n MatButton,\n\n FsDialogModule,\n ],\n})\nexport class ConfirmUnsavedComponent implements OnInit, OnDestroy {\n private _data = inject(MAT_DIALOG_DATA);\n private _dialogRef = inject<MatDialogRef<ConfirmUnsavedComponent>>(MatDialogRef);\n\n\n public saveLabel;\n public discardLabel;\n public cancelLabel;\n public message;\n public title;\n\n private _destroy$ = new Subject<void>();\n\n public ngOnInit(): void {\n this.saveLabel = this._data.saveLabel;\n this.discardLabel = this._data.discardLabel;\n this.cancelLabel = this._data.cancelLabel;\n this.message = this._data.message;\n this.title = this._data.title;\n }\n\n public save(): void {\n this._dialogRef.close('save');\n }\n\n public discard(): void {\n this._dialogRef.close('discard');\n }\n\n public cancel(): void {\n this._dialogRef.close(null);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n {{ title }}\n </h1>\n <mat-dialog-content>\n {{ message }}\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n color=\"primary\"\n (click)=\"save()\"\n mat-button>\n {{ saveLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"discard()\"\n mat-button>\n {{ discardLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"cancel()\"\n mat-button>\n {{ cancelLabel }}\n </button>\n </mat-dialog-actions>\n</fs-dialog>","import { MatDialogRef } from '@angular/material/dialog';\n\nimport type { FsFormBaseDirective } from '../directives/form-base';\n\n\n/**\n * Whether an owner found through DI belongs to the same dialog as whoever found\n * it - and may therefore be joined, or driven by a button.\n *\n * A form set must never span a dialog boundary. Owners are resolved by walking\n * the element injector, and CDK parents a dialog opened with `viewContainerRef`\n * to the opener's injector, so a dialog opened from inside another dialog's form\n * would otherwise register into that form's set: the outer footer would flip to\n * Save the moment the inner dialog opened and would then submit the inner form,\n * while the inner dialog - no longer the owner of its own set - would stop\n * confirming its unsaved changes on backdrop click.\n *\n * Identity of the `MatDialogRef` is the test: everything inside one dialog\n * injects the same instance, and everything outside any dialog gets null.\n */\nexport function withinSameDialog(\n owner: FsFormBaseDirective,\n dialogRef: MatDialogRef<any>,\n): boolean {\n return !!owner && owner.dialogRef === dialogRef;\n}\n","import { AbstractControl, UntypedFormGroup, ValidationErrors } from '@angular/forms';\n\n\nexport function getFormErrors(control: AbstractControl, key: string): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n\n if (control.invalid && control.errors) {\n errors = {\n [key]: { ...control.errors },\n };\n }\n\n if (control instanceof UntypedFormGroup) {\n Object.entries(control.controls)\n .forEach(([name, childControl]) => {\n const childErrors = getFormErrors(childControl, name);\n\n if (childErrors) {\n if (!errors) {\n errors = { ...childErrors };\n } else {\n Object.assign(errors, childErrors);\n }\n }\n });\n }\n\n return errors;\n}\n","export enum ConfirmResult {\n Save = 'save',\n Discard = 'discard',\n Review = 'review',\n Invalid = 'invalid',\n NoChanges = 'noChanges',\n}\n","export enum FormStatus {\n Valid = 'valid',\n Invalid = 'invalid',\n Validating = 'validating',\n Submitting = 'submitting',\n Submitted = 'submitted',\n Error = 'error',\n Success = 'success',\n Completing = 'completing',\n}\n","import { ConfirmResult } from '../enums/confirm-result';\n\nexport function confirmResultContinue(result): boolean {\n return (\n result === ConfirmResult.Discard || \n result === ConfirmResult.Save || \n result === ConfirmResult.NoChanges\n );\n}\n","import { ActivatedRoute } from '@angular/router';\n\n\nexport function getActiveRoute(route: ActivatedRoute): ActivatedRoute {\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n return route;\n}\n","import { inject, Injectable, Type } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { ConfirmUnsavedComponent } from '../components/confirm-unsaved';\nimport { ConfirmResult } from '../enums';\nimport { FsFormOwner } from '../interfaces';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsForm {\n\n // value is array for future possibilities of extension\n private _formDirectiveStore = new WeakMap<Type<any>, FsFormOwner[]>();\n private _dialog = inject(MatDialog);\n\n public registerFormDirective(routeComponent: Type<any>, directive: FsFormOwner) {\n const directives = this.getFormDirectives(routeComponent) || [];\n directives.push(directive);\n\n this._formDirectiveStore.set(routeComponent, directives);\n }\n\n public getFormDirectives(routeComponent): FsFormOwner[] {\n return this._formDirectiveStore.get(routeComponent);\n }\n\n public removeFormDirective(routeComponent) {\n this._formDirectiveStore.delete(routeComponent);\n }\n\n public hasChanges(form: FsFormOwner): boolean {\n // Spans the linked set, so a dialog whose fields live in a nested tab form\n // still knows it has changes. A form linked out with `[link]=\"false\"` is\n // absent from that set and never triggers the prompt - which is the point of\n // an instant-save panel: it has nothing outstanding to warn about.\n return form.linkedForms\n .some((linkedForm) => Object.keys(linkedForm.ngForm.control.controls)\n .some((key) => linkedForm.ngForm.control.controls[key].dirty));\n }\n\n public confirmUnsaved(\n form: FsFormOwner,\n ): Observable<ConfirmResult> {\n if (!form.confirm || !this.hasChanges(form)) {\n return of(ConfirmResult.NoChanges);\n }\n\n let title = 'You have unsaved changes';\n let message = 'What would you like to do with your changes?';\n let saveLabel = 'Save and continue';\n let discardLabel = 'Discard changes and continue';\n let cancelLabel = 'Review changes';\n\n if (typeof form.confirm === 'object') {\n title = form.confirm.title || title;\n message = form.confirm.message || message;\n saveLabel = form.confirm.saveLabel || saveLabel;\n discardLabel = form.confirm.discardLabel || discardLabel;\n cancelLabel = form.confirm.cancelLabel || cancelLabel;\n }\n\n return this._dialog\n .open(ConfirmUnsavedComponent, {\n data: {\n title,\n message,\n saveLabel,\n discardLabel,\n cancelLabel,\n },\n width: 'auto', \n })\n .afterClosed()\n .pipe(\n switchMap((result) => {\n if(!result) {\n return of(ConfirmResult.Review);\n }\n \n if (result === 'discard') {\n form.reset();\n\n return of(ConfirmResult.Discard); \n }\n\n if (result === 'save') {\n form.linkedForms\n .forEach((linkedForm) => linkedForm.ngForm.control.markAsPristine());\n\n return form.submit$({ confirmed: true })\n .pipe(\n map((submitEvent) => {\n if(submitEvent.error) {\n return ConfirmResult.Invalid;\n }\n\n return ConfirmResult.Save;\n }),\n catchError(() => {\n return of(ConfirmResult.Invalid);\n }),\n );\n }\n }),\n );\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { confirmResultContinue } from '../helpers';\nimport { getActiveRoute } from '../helpers/get-active-route';\nimport { FsFormOwner } from '../interfaces';\nimport { FsForm } from '../services/fsform.service';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormDeactivateGuard {\n private _form = inject(FsForm);\n private _route = inject(ActivatedRoute);\n\n\n public canDeactivate(): Observable<boolean> {\n const route = getActiveRoute(this._route);\n\n if (!route) {\n console.error('Can not find route for FormDeactivateGuard checks');\n\n return of(true);\n }\n\n const directives: FsFormOwner[] = this._form\n .getFormDirectives(route.routeConfig.component);\n\n if (!Array.isArray(directives) || directives.length === 0) {\n console.error('Can not find a valid FsFormDirective');\n\n return of(true);\n }\n\n return this._form.confirmUnsaved(directives[0])\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n\n}\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n} from '@angular/core';\nimport { ActivatedRoute, Route } from '@angular/router';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { DrawerRef } from '@firestitch/drawer';\n\nimport { defer, fromEvent, iif, Observable, of, Subject } from 'rxjs';\nimport { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../../enums';\nimport { FormStatus } from '../../enums/form-status';\nimport { FormDeactivateGuard } from '../../guards/form-deactivate.guard';\nimport { confirmResultContinue } from '../../helpers';\nimport { getActiveRoute } from '../../helpers/get-active-route';\nimport { ConfirmConfig, ConfirmTabGroup, SubmitEvent, SubmittedEvent } from '../../interfaces';\nimport { FsForm } from '../../services/fsform.service';\nimport { FsButtonDirective } from '../button.directive';\nimport type { FsFormDirective } from '../form/form.directive';\n\n\n/**\n * Shared by the two things that can own a set of forms: an `fsForm` sitting at\n * the root of its linked set, and an `fsFormContainer` holding forms that are\n * siblings rather than nested.\n *\n * It holds the submit-button registry both of them expose to buttons, and the\n * lifecycle that belongs to the set as a whole rather than to any one form -\n * the dialog backdrop and Escape, Ctrl+S, the browser close prompt, the drawer\n * and tab-switch confirms. Exactly one owner registers that lifecycle; see\n * `_registerOwnerLifecycle`.\n */\n@Directive()\nexport abstract class FsFormBaseDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input()\n public confirmTabs = true;\n\n @Input()\n public confirm: ConfirmConfig | boolean = true;\n\n @Input()\n public confirmDialog = true;\n\n @Input()\n public confirmDrawer = true;\n\n @Input()\n public confirmBrowser = true;\n\n @Input()\n public shortcuts = true; // Ctrl + s\n\n @Input()\n public deactivationGuard = true;\n\n protected _ngZone = inject(NgZone);\n protected _cdRef = inject(ChangeDetectorRef);\n protected _element = inject(ElementRef);\n protected _form = inject(FsForm);\n protected _route = inject(ActivatedRoute);\n protected _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n protected _drawerRef = inject<DrawerRef<any>>(DrawerRef, { optional: true });\n protected _dialogBackdropEscape = false;\n protected _activatedRouteConfig: Route | null;\n\n @ContentChildren(MatTabGroup, { descendants: true })\n private _tabGroups: QueryList<MatTabGroup> = new QueryList();\n\n private _buttons = new QueryList<FsButtonDirective>();\n private _activeSubmitButton: FsButtonDirective;\n private _confirmTabGroups = new WeakSet<MatTabGroup>();\n private _destroy$ = new Subject<void>();\n\n public abstract submitting: boolean;\n\n /** True when anything in the owned set has unsaved changes. */\n public abstract dirtyLinked: boolean;\n\n /** Every form in the owned set, at any depth. */\n public abstract linkedForms: FsFormDirective[];\n\n /** Emits whenever the owned set's dirty state may have moved. */\n public abstract dirtyChange$: Observable<void>;\n\n /** Emits once a submit over the owned set has completed successfully. */\n public abstract submitted$: Observable<SubmittedEvent>;\n\n /** Tracks the owned set's submit lifecycle, so the drawer can wait one out. */\n public abstract status$: Observable<FormStatus>;\n\n /**\n * The dialog this owner lives in, or null outside one. Used to keep a form set\n * from spanning a dialog boundary - see `withinSameDialog`.\n */\n public get dialogRef(): MatDialogRef<any> {\n return this._dialogRef;\n }\n\n public ngOnInit(): void {\n this._registerOwnerLifecycle();\n }\n\n public ngAfterContentInit(): void {\n this._registerOwnerContentLifecycle();\n }\n\n public get destroy$(): Observable<void> {\n return this._destroy$.asObservable();\n }\n\n public ngOnDestroy(): void {\n this._cleanupCanDeactivate();\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public get buttons(): QueryList<FsButtonDirective> {\n return this._buttons;\n }\n\n public get activeSubmitButton(): FsButtonDirective {\n return this._activeSubmitButton;\n }\n\n public set activeSubmitButton(button: FsButtonDirective) {\n this._activeSubmitButton = button;\n }\n\n /**\n * Bring a tab group into this owner's unsaved-changes confirm.\n *\n * `_tabGroups` only reaches groups in this owner's projected content, so a group\n * declared inside a child component's own template has to announce itself.\n * `fsFormConfirmTabs` calls this - consumers never call it directly.\n */\n public registerTabGroup(tabGroup: MatTabGroup): void {\n this._registerConfirmTabGroup(tabGroup);\n }\n\n public addButton(button: FsButtonDirective): void {\n this._buttons\n .reset(\n [\n ...this._buttons.toArray(),\n button,\n ]);\n\n // QueryList.reset() does not emit `changes`; notify so subscribers (e.g. the\n // form's dirty-submit-button tracking) react to buttons being registered.\n this._buttons.notifyOnChanges();\n }\n\n public removeButton(button: FsButtonDirective): void {\n if(this._activeSubmitButton === button) {\n this._activeSubmitButton = null;\n }\n\n this._buttons.reset(\n [\n ...this._buttons.toArray()\n .filter((item) => (button !== item)),\n ]);\n\n this._buttons.notifyOnChanges();\n }\n\n /**\n * Everything here acts on the form set as a whole, so exactly one thing may\n * register it. A form linked into a parent defers to that parent; every form\n * inside a container defers to the container. Registering twice would put two\n * confirms on the same backdrop click and two handlers on the same Ctrl+S.\n */\n protected _registerOwnerLifecycle(): void {\n if (this.deactivationGuard) {\n this._registerCanDeactivateGuard();\n }\n\n this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n }\n\n /** The half of the same ownership that needs projected content resolved. */\n protected _registerOwnerContentLifecycle(): void {\n this._registerConfirmTabs();\n this._registerConfirmDrawerClose();\n this._registerDrawerClose();\n }\n\n /**\n * Whether the element is inside what this owner covers. Overridden by the\n * container, whose own element is a poor proxy: it may be an `<ng-container>`,\n * which is a comment node and contains nothing.\n */\n protected _containsElement(el: Element): boolean {\n return this._nodeContains(this._element.nativeElement, el);\n }\n\n protected _nodeContains(root: Node, el: Element): boolean {\n if (!root || !el) {\n return false;\n }\n\n if (el === root) {\n return true;\n }\n\n return el.parentElement ? this._nodeContains(root, el.parentElement) : false;\n }\n\n protected _formClose(): void {\n if (this.confirm && this.confirmDialog) {\n this.triggerConfirm()\n .pipe(\n filter((result) => confirmResultContinue(result)),\n switchMap((result) => {\n return result === ConfirmResult.NoChanges || result === ConfirmResult.Discard\n ? of(null)\n : this.submitted$;\n }),\n takeUntil(this._destroy$),\n )\n .subscribe((result: SubmittedEvent) => {\n this._dialogRef.close(result?.response);\n });\n } else {\n this._dialogRef.close(null);\n }\n }\n\n private _listenWindowClose(): void {\n fromEvent(window, 'beforeunload')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: Event) => {\n if (this.confirm && this.confirmBrowser && this.dirtyLinked) {\n event.returnValue = false;\n }\n });\n }\n\n private _activeDialog(el: Node, dialog: HTMLElement): boolean {\n return this._nodeContains(dialog, el as Element);\n }\n\n private _listenHotKeys(): void {\n this._ngZone.runOutsideAngular(() => {\n fromEvent(document, 'keydown')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: KeyboardEvent) => {\n if (this._dialogBackdropEscape && event.code === 'Escape') {\n const cdkOverlayPane = Array\n .from(document.querySelectorAll<HTMLElement>('.cdk-overlay-pane')).pop();\n\n const activeDialog = this\n ._activeDialog(document.getElementById(this._dialogRef.id), cdkOverlayPane);\n\n if (activeDialog) {\n this._ngZone.run(() => {\n this._formClose();\n });\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {\n event.preventDefault();\n\n if (this.shortcuts) {\n if (this._containsElement(document.activeElement)) {\n this._ngZone.run(() => {\n this.triggerSubmit();\n });\n }\n }\n }\n });\n });\n }\n\n private _registerConfirmDialogBackdropEscape(): void {\n if(this._dialogRef) {\n this._dialogBackdropEscape = !this._dialogRef?.disableClose;\n\n if (this._dialogBackdropEscape) {\n this._dialogRef.backdropClick()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._formClose();\n });\n\n this._destroy$\n .subscribe(() => {\n this._dialogRef.disableClose = false;\n });\n }\n }\n }\n\n private _registerDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((subscriber) => {\n if (this.submitting) {\n this.status$\n .pipe(\n filter((status) => status === FormStatus.Success || status === FormStatus.Error),\n takeUntil(this._destroy$),\n )\n .subscribe((status) => {\n if (status === FormStatus.Success) {\n subscriber.next(null);\n subscriber.complete();\n } else {\n subscriber.error();\n }\n });\n } else {\n subscriber.next(null);\n subscriber.complete();\n }\n });\n }\n }\n\n private _registerConfirmDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n switchMap((subscriber) => {\n return iif(\n () => !!this.confirm && this.confirmDrawer,\n this.triggerConfirm()\n .pipe(\n map((result) => confirmResultContinue(result)),\n tap((result) => {\n if (result) {\n subscriber.next(null);\n subscriber.complete();\n }\n }),\n ),\n defer(() => {\n subscriber.next(null);\n subscriber.complete();\n\n return of(null);\n }),\n );\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n }\n\n private _registerConfirmTabs(): void {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n this._tabGroups.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n });\n }\n\n private _registerConfirmTabGroups(tabGroups: MatTabGroup[]): void {\n tabGroups.forEach((tabGroup: MatTabGroup) => {\n this._registerConfirmTabGroup(tabGroup);\n });\n }\n\n private _registerConfirmTabGroup(tabGroup: MatTabGroup): void {\n // `_tabGroups.changes` re-emits the whole list, not just what arrived, and it\n // emits every time a lazy tab body mounts a nested group. Groups already\n // wired therefore come back around - so without this the outer group\n // accumulates one subscription per emission, and a single click on it opens\n // that many stacked confirm dialogs.\n if (this._confirmTabGroups.has(tabGroup)) {\n return;\n }\n\n this._confirmTabGroups.add(tabGroup);\n\n const confirmTabGroup = tabGroup as ConfirmTabGroup;\n if (!confirmTabGroup._originalHandleClick) {\n confirmTabGroup._originalHandleClick = tabGroup._handleClick;\n confirmTabGroup._handlClick$ = new Subject<{\n tab: MatTab;\n tabHeader: MatTabHeader;\n idx: number\n }>();\n\n confirmTabGroup._handleClick = (tab: MatTab, tabHeader: MatTabHeader, idx: number) => {\n if (confirmTabGroup._handlClick$.observers.length) {\n confirmTabGroup._handlClick$.next({ tab, tabHeader, idx });\n } else {\n confirmTabGroup._originalHandleClick(tab, tabHeader, idx);\n }\n };\n }\n\n confirmTabGroup._handlClick$\n .pipe(\n filter(() => !this.submitting),\n switchMap((event) => {\n if(this.confirm && this.confirmTabs) {\n return this.triggerConfirm()\n .pipe(\n tap((result) => {\n if (confirmResultContinue(result)) {\n confirmTabGroup.selectedIndex = event.idx;\n }\n }),\n );\n }\n\n confirmTabGroup._originalHandleClick(event.tab, event.tabHeader, event.idx);\n\n return of(null);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n\n\n private _registerCanDeactivateGuard(): void {\n this._activatedRouteConfig = getActiveRoute(this._route)?.routeConfig;\n\n if (!this._activatedRouteConfig) {\n return;\n }\n\n this._form.registerFormDirective(this._activatedRouteConfig.component, this);\n\n if (!Array.isArray(this._activatedRouteConfig.canDeactivate)) {\n this._activatedRouteConfig.canDeactivate = [];\n }\n\n if (this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard) === -1) {\n this._activatedRouteConfig.canDeactivate.push(FormDeactivateGuard);\n }\n }\n\n private _cleanupCanDeactivate(): void {\n if (!this._activatedRouteConfig) {\n return;\n }\n\n const guardIndex = this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard);\n this._activatedRouteConfig.canDeactivate.splice(guardIndex, 1);\n\n this._form.removeFormDirective(this._activatedRouteConfig.component);\n }\n\n\n public abstract triggerSubmit(): void;\n public abstract triggerConfirm(): Observable<ConfirmResult>;\n public abstract reset(): void;\n public abstract submit$(event?: SubmitEvent): Observable<SubmittedEvent>;\n}\n","import { Directive } from '@angular/core';\n\nimport { defer, EMPTY, Observable, of, Subject } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../../enums';\nimport { FormStatus } from '../../enums/form-status';\nimport { FsFormOwner, SubmitEvent, SubmittedEvent } from '../../interfaces';\nimport { FsFormBaseDirective } from '../form-base';\n\nimport type { FsFormDirective } from '../form/form.directive';\n\n\n/**\n * Bounds a set of forms without being one.\n *\n * An `fsForm` can only reach the forms nested inside it through DI, which forces\n * a wrapper carrying `ngForm` around anything that needs to see them - and that\n * wrapper then owns a real, empty `NgForm` whose control namespace every field\n * below it falls into. A container has no `ngForm` and no controls. It only\n * watches: forms register themselves as they mount, buttons resolve to it, and\n * `fs-form-dialog-actions` reads Save-vs-Done off it. Put it on whatever element\n * already frames the layout - or on an `<ng-container>` for no element at all.\n *\n * Forms in a container are siblings rather than nested, so on registration each\n * one is linked into the first. That reproduces exactly the structure DI nesting\n * builds, which is why validation, dirty state, the unsaved-changes confirm and\n * the submit chain all span a container without any of that machinery knowing\n * containers exist.\n *\n * A form marked `[link]=\"false\"` never registers, so an instant-save panel stays\n * out of the set the same way it does when nested.\n */\n@Directive({\n selector: 'fs-form-container,[fsFormContainer]',\n exportAs: 'fsFormContainer',\n standalone: true,\n})\nexport class FsFormContainerDirective extends FsFormBaseDirective implements FsFormOwner {\n\n private _forms: FsFormDirective[] = [];\n private _formsChange$ = new Subject<void>();\n\n /** The forms registered into this container, in registration order. */\n public get forms(): FsFormDirective[] {\n return [...this._forms];\n }\n\n /**\n * The form the rest of the set is linked into, or null while the container\n * holds none - an open tab that has nothing to save, say.\n */\n public get rootForm(): FsFormDirective {\n return this._forms[0] || null;\n }\n\n /** Emits whenever a form registers or deregisters. */\n public get formsChange$(): Observable<void> {\n return this._formsChange$.asObservable();\n }\n\n public get linkedForms(): FsFormDirective[] {\n return this.rootForm?.linkedForms || [];\n }\n\n /**\n * True when anything in the container has a submit handler - i.e. there is\n * something for a Save button to do. `fs-form-dialog-actions` reads this to\n * swap Save for Done as the mounted tab changes, so a dialog never has to keep\n * a list of which tabs happen to be savable.\n */\n public get submits(): boolean {\n return this.linkedForms\n .some((form) => form.hasSubmit);\n }\n\n public get dirtyLinked(): boolean {\n return this.rootForm?.dirtyLinked || false;\n }\n\n public get submitting(): boolean {\n return this.rootForm?.submitting || false;\n }\n\n /**\n * Emits whenever the set's dirty state may have moved, including when the set\n * itself changes. Anything rendering off it - the dialog actions - subscribes\n * once and outlives any particular form, so this has to follow the root across\n * tab switches rather than bind to whichever form happened to be first.\n */\n public get dirtyChange$(): Observable<void> {\n return this._formsChange$\n .pipe(\n startWith(null),\n switchMap(() => (this.rootForm?.dirtyChange$ || EMPTY)\n .pipe(\n startWith(null),\n )),\n map(() => undefined),\n );\n }\n\n // Resolved at subscribe time rather than switch-mapped: a submit in flight has\n // to survive the set changing under it, which is routine when saving unmounts\n // a tab.\n public get submitted$(): Observable<SubmittedEvent> {\n return defer(() => this.rootForm?.submitted$ || EMPTY);\n }\n\n public get status$(): Observable<FormStatus> {\n return defer(() => this.rootForm?.status$ || of(FormStatus.Valid));\n }\n\n /**\n * Take a form into the container. Called by the form on init - consumers never\n * call it directly.\n */\n public registerForm(form: FsFormDirective): void {\n if (this._forms.indexOf(form) !== -1) {\n return;\n }\n\n this._forms = [...this._forms, form];\n\n if (this.rootForm !== form) {\n form.linkTo(this.rootForm);\n }\n\n this._formsChange$.next();\n }\n\n /**\n * Material attaches an incoming tab body before it detaches the outgoing one,\n * so losing the root is a routine reshuffle rather than teardown. Re-elect and\n * re-link the survivors instead of leaving them pointing at a dead root, and\n * only let go of forms actually registered - clearing unconditionally would\n * drop the form that just arrived.\n */\n public deregisterForm(form?: FsFormDirective): void {\n if (form && this._forms.indexOf(form) === -1) {\n return;\n }\n\n const removing = form ? [form] : [...this._forms];\n const rootRemoved = removing.indexOf(this.rootForm) !== -1;\n\n removing.forEach((item) => item.unlinkFrom());\n\n this._forms = this._forms\n .filter((item) => removing.indexOf(item) === -1);\n\n if (rootRemoved) {\n const root = this.rootForm;\n\n this._forms\n .filter((item) => item !== root)\n .forEach((item) => {\n item.unlinkFrom();\n item.linkTo(root);\n });\n }\n\n this._formsChange$.next();\n }\n\n public triggerSubmit(): void {\n this.rootForm?.triggerSubmit();\n }\n\n public triggerConfirm(): Observable<ConfirmResult> {\n return this.rootForm\n ? this.rootForm.triggerConfirm()\n : of(ConfirmResult.NoChanges);\n }\n\n public submit$(event?: SubmitEvent): Observable<SubmittedEvent> {\n return this.rootForm\n ? this.rootForm.submit$(event)\n : of(null);\n }\n\n public reset(): void {\n this.rootForm?.reset();\n }\n\n public validate(): void {\n this.rootForm?.validate();\n }\n\n // The container's own element is a poor proxy for what it covers: it is\n // typically layout chrome wrapping far more than the forms, and on an\n // `<ng-container>` it is a comment node containing nothing at all. Scope to the\n // registered forms instead.\n protected override _containsElement(el: Element): boolean {\n return this._forms\n .some((form) => this._nodeContains(form.element, el));\n }\n}\n","import { AfterContentInit, Directive, EventEmitter, HostBinding, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { AbstractControl, NgForm } from '@angular/forms';\n\nimport { guid } from '@firestitch/common';\nimport { MessageMode } from '@firestitch/message';\nimport { FsMessage } from '@firestitch/message';\n\nimport {\n BehaviorSubject,\n combineLatest,\n concat,\n Observable,\n of,\n Subject,\n throwError,\n} from 'rxjs';\nimport {\n catchError,\n delay,\n filter,\n first,\n map,\n mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n toArray,\n} from 'rxjs/operators';\n\nimport { getFormErrors } from '../../helpers/get-form-errors';\nimport { withinSameDialog } from '../../helpers/within-same-dialog';\nimport { FsButtonDirective } from '../button.directive';\nimport { FsFormBaseDirective } from '../form-base';\nimport { FsFormContainerDirective } from '../form-container';\n\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FormStatus } from './../../enums/form-status';\nimport { SubmittedEvent } from './../../interfaces';\nimport { SubmitEvent } from './../../interfaces/submit-event';\n\n\n@Directive({\n selector: '[fsForm]',\n exportAs: 'fsForm',\n standalone: true,\n})\nexport class FsFormDirective\n extends FsFormBaseDirective\n implements OnInit, OnDestroy, AfterContentInit, OnChanges {\n\n public ngForm = inject<NgForm>(NgForm);\n\n @Input()\n public wrapperSelector = '.fs-form-wrapper,.mat-mdc-form-field';\n\n @Input()\n public messageSelector = '.fs-form-message,.mat-mdc-form-field-subscript-wrapper';\n\n @Input()\n public hintSelector = '.fs-form-hint,.mat-mdc-form-field-hint-wrapper';\n\n @Input()\n public labelSelector = '.fs-form-label,.mdc-floating-label>mat-label';\n\n @Input()\n public autocomplete = false;\n\n @Input()\n public dirtySubmitButton = true;\n\n @Input()\n public set submit(submit$: (event: SubmitEvent) => Observable<any>) {\n this._submit$ = submit$;\n }\n\n public get submit(): (event: SubmitEvent) => Observable<any> {\n return this._submit$;\n }\n\n @Input()\n public successDelay = 0;\n\n @Input()\n public errorDelay = 1000;\n\n /**\n * Whether this form joins the set around it - the `fsForm` it is nested inside,\n * or the `fsFormContainer` enclosing it.\n *\n * Forms in a set behave as one submittable unit: the outermost form is what the\n * submit buttons drive, and validation, dirty state, the unsaved-changes\n * confirm and the pristine reset all span the set. That is what lets a form\n * wrap only one tab's fields while the dialog footer stays outside it.\n *\n * Set `[link]=\"false\"` for a panel that owns its own saving - an instant-save\n * side panel, say. It keeps every fsForm feature for itself, but its dirty\n * state never enables the outer Save button, its validation never blocks the\n * outer submit, and the outer submit never touches it.\n */\n @Input()\n public link = true;\n\n @Output('fsForm')\n public submitEvent: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public invalid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public valid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public submitted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public reseted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public cleared: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @HostBinding('class.fs-form')\n public fsFormClass = true;\n\n private _registerControl;\n private _snapshot: { [key: string]: any } = {};\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _submit$: (event?: SubmitEvent) => Observable<any> = null;\n private _linkedForms = new Set<FsFormDirective>();\n private _containerParent: FsFormDirective = null;\n private _dirtyChange$ = new Subject<void>();\n private _message = inject(FsMessage);\n // Both lookups walk the element injector, which reaches straight through a\n // dialog opened with `viewContainerRef` into whatever opened it. Anything\n // belonging to a different dialog is discarded, so a set never spans two.\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _ancestorForm = this\n ._ownDialogOnly(inject(FsFormDirective, { optional: true, skipSelf: true }));\n\n\n /**\n * Emits whenever the set's dirty state may have moved. Anything outside the\n * form that renders off it - the dialog actions, say - can't watch\n * `ngForm.valueChanges` on its own, because the edits happen in a nested form's\n * NgForm, not this one's.\n */\n public get dirtyChange$(): Observable<void> {\n return this._dirtyChange$.asObservable();\n }\n\n public get submitted$(): Observable<SubmittedEvent> {\n return this.submitted.asObservable() as Observable<SubmittedEvent>;\n }\n\n public get status$(): Observable<FormStatus> {\n return this._status$.asObservable();\n }\n\n public get element(): HTMLElement {\n return this._element.nativeElement;\n }\n\n /** True when a Save button driving this form would have something to run. */\n public get hasSubmit(): boolean {\n return !!this._submit$;\n }\n\n /**\n * The form this one is linked into, or null when it is a root - either because\n * nothing encloses it or because `[link]=\"false\"` cut it loose. A container\n * supplies the parent when the forms are siblings rather than nested.\n */\n public get parentForm(): FsFormDirective {\n if (!this.link) {\n return null;\n }\n\n return this._ancestorForm || this._containerParent;\n }\n\n /** The outermost form of this set. Submit buttons drive this one. */\n public get rootForm(): FsFormDirective {\n return this.parentForm?.rootForm || this;\n }\n\n /** This form plus every form linked into it, at any depth. */\n public get linkedForms(): FsFormDirective[] {\n return [\n this,\n ...[...this._linkedForms]\n .reduce((forms, form) => [...forms, ...form.linkedForms], []),\n ];\n }\n\n /** True when this form or anything linked into it has unsaved changes. */\n public get dirtyLinked(): boolean {\n return this.linkedForms\n .some((form) => form.ngForm.dirty);\n }\n\n /**\n * True when this form or anything linked into it has a submit handler - i.e.\n * there is something for a Save button to do. A dialog footer can bind to this\n * to swap Save for Done as the mounted tab changes, instead of hard-coding\n * which tab names happen to be savable.\n */\n public get submits(): boolean {\n return this.linkedForms\n .some((form) => form.hasSubmit);\n }\n\n public get submitting(): boolean {\n return this._status$.getValue() === FormStatus.Submitting;\n }\n\n public get validating(): boolean {\n return this._status$.getValue() === FormStatus.Validating;\n }\n\n public get completing(): boolean {\n return this._status$.getValue() === FormStatus.Completing;\n }\n\n /**\n * True when nothing above this form speaks for the set it belongs to. Reads the\n * raw injections rather than `parentForm`, so an unlinked panel inside a dialog\n * still defers to whatever encloses it instead of registering a second backdrop\n * confirm on the same dialog.\n */\n private get _owns(): boolean {\n return !this._ancestorForm && !this._container;\n }\n\n private get _submitEvent(): SubmitEvent {\n return {\n ngForm: this.ngForm,\n submitter: this._submitter,\n };\n }\n\n private get _formValidState$(): Observable<SubmittedEvent> {\n this.submitEvent.emit(this._submitEvent);\n this.valid.emit(this._submitEvent);\n\n const submittedEvent: SubmittedEvent = {\n ngForm: this.ngForm,\n submitter: this._submitter,\n response: null,\n };\n\n // Every form in the set gets to save. A form that only frames the layout - a\n // dialog wrapper around a tab group - carries no submit of its own and simply\n // defers to the tab form linked into it. When several are linked they run in\n // nesting order, so an outer save lands before an inner one, and the response\n // of the last is what the submit resolves with.\n const submits = this.linkedForms\n .filter((form) => form.hasSubmit)\n .map((form) => form._submit$(this._submitEvent));\n\n const submit$: Observable<any> = submits.length ?\n concat(...submits).pipe(toArray(), map((responses) => responses[responses.length - 1])) :\n of(submittedEvent);\n\n return submit$\n .pipe(\n map((response) => {\n submittedEvent.response = response;\n\n return submittedEvent;\n }),\n takeUntil(this.destroy$),\n );\n }\n\n private get _formInvalidState$(): Observable<never> {\n if (this.invalid) {\n this.invalid.emit(this._submitEvent);\n }\n\n const message = 'Please review errors highlighted in red';\n this._message.error(message, { mode: MessageMode.Toast });\n\n const el = this._element.nativeElement.querySelector('.ng-invalid');\n\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n return throwError(() => new Error('Form validation error'));\n }\n\n private get _submitter(): string {\n return this._getOwner().activeSubmitButton?.name;\n }\n\n public ngOnInit() {\n // A form already nested inside another links to that one, which is itself in\n // the container - so it joins the set transitively and must not also register\n // as a container sibling.\n if (this.link) {\n if (this._ancestorForm) {\n this._ancestorForm.linkForm(this);\n } else {\n this._container?.registerForm(this);\n }\n }\n\n // The route guard, dialog backdrop, Ctrl+S and browser close prompt all act\n // on the set as a whole, so exactly one thing registers them: a linked child\n // defers to its parent, and every form in a container defers to the container.\n if (this._owns) {\n super.ngOnInit();\n }\n\n this._listenSubmit();\n this._listenFormStatus();\n\n if (!this.autocomplete) {\n this._registerAutocomplete();\n }\n }\n\n /**\n * Take a nested form into this one's set. Called by the child on init, or by a\n * container linking its siblings - consumers never call it directly.\n */\n public linkForm(form: FsFormDirective): void {\n this._linkedForms.add(form);\n\n Promise.resolve()\n .then(() => {\n this.rootForm._updateDirtySubmitButtons();\n this._cdRef.markForCheck();\n });\n }\n\n public unlinkForm(form: FsFormDirective): void {\n this._linkedForms.delete(form);\n\n Promise.resolve()\n .then(() => {\n this.rootForm._updateDirtySubmitButtons();\n this._cdRef.markForCheck();\n });\n }\n\n /**\n * Adopt a parent that DI could not supply. Only a container calls this, to link\n * forms that are siblings in the template into one set.\n */\n public linkTo(form: FsFormDirective): void {\n if (!form || form === this) {\n return;\n }\n\n this._containerParent = form;\n form.linkForm(this);\n }\n\n public unlinkFrom(): void {\n this._containerParent?.unlinkForm(this);\n this._containerParent = null;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.confirm) {\n this._updateDirtySubmitButtons();\n }\n }\n\n public clearSubmit(submit: (event: SubmitEvent) => Observable<any> = null): void {\n if(!submit || submit === this._submit$) {\n this._submit$ = null;\n }\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public registerSubmit(submit$: () => Observable<any>): void {\n this._submit$ = submit$;\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n // Tab and drawer confirmation belong to whoever owns the set. A linked child\n // shares the same tab groups and the same drawer, so letting it register too\n // would put a second confirm on the same click.\n if (this._owns) {\n super.ngAfterContentInit();\n }\n\n this._registerConfirm();\n this._registerDirtySubmitButton();\n }\n\n public ngOnDestroy(): void {\n // Deregister first: it clears the container-supplied parent, so the unlink\n // below falls through to the DI ancestor rather than repeating the same work.\n this._container?.deregisterForm(this);\n this.parentForm?.unlinkForm(this);\n\n super.ngOnDestroy();\n }\n\n public createSnapshot(): void {\n this._snapshot = this.ngForm.value;\n }\n\n public getSnapshot(): { [key: string]: any } {\n return this._snapshot || {};\n }\n\n public reset(): void {\n this.linkedForms\n .forEach((form) => {\n form.ngForm.resetForm();\n\n Object.keys(form.ngForm.controls)\n .forEach((name: string) => {\n const control = form.ngForm.controls[name];\n control.reset(form._snapshot[name]);\n });\n });\n\n this.reseted.emit();\n }\n\n public clear(): void {\n this.ngForm.resetForm();\n this.cleared.emit();\n }\n\n public dirty(): void {\n this.ngForm.form.markAsDirty();\n this._updateDirtySubmitButtons();\n }\n\n public pristine(): void {\n this.ngForm.form.markAsPristine();\n this._updateDirtySubmitButtons();\n }\n\n public triggerSubmit(options?: { confirmed: boolean }): void {\n this.ngForm.ngSubmit.emit();\n }\n\n public triggerConfirm(): Observable<ConfirmResult> {\n const submitted = this.submitting ? this.submitted.asObservable() : of({});\n\n return submitted\n .pipe(\n take(1),\n mergeMap(() => this._form.confirmUnsaved(this)),\n );\n }\n\n public enable(): void {\n this.ngForm.control.enable();\n\n this._updateDirtySubmitButtons();\n }\n\n public disable(): void {\n this.ngForm.control.disable();\n\n this._getOwner()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n public validate(): void {\n this.linkedForms\n .forEach((form) => {\n Object.values(form.ngForm.controls)\n .forEach((control) => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\n });\n }\n\n public submit$(submitEvent?: SubmitEvent): Observable<SubmittedEvent> {\n return of(submitEvent)\n .pipe(\n tap(() => this._statusValidating()),\n tap(() => this.validate()),\n tap(() => this._statusSubmitting()),\n tap(() => this._setupActiveSubmitButton()),\n tap(() => this._disableButtons()),\n switchMap((data) => this._waitUntilStatusPending()\n .pipe(\n map(() => data),\n )),\n mergeMap(() => {\n const invalid = this.linkedForms\n .some((form) => form.ngForm.status === 'INVALID');\n\n if (invalid) {\n return this._formInvalidState$;\n }\n\n return this._formValidState$;\n }),\n catchError((e) => {\n this._handleError(e);\n\n return of({\n ...this._submitEvent,\n error: e?.message,\n });\n }),\n tap((submittedEvent: SubmittedEvent) => {\n if(!submittedEvent.error) {\n this._completeSubmit(true, submittedEvent);\n }\n }),\n );\n }\n\n private _listenSubmit(): void {\n this\n .ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n filter(() => {\n return [FormStatus.Valid, FormStatus.Invalid]\n .includes(this._status$.getValue());\n }),\n switchMap(() => this.submit$(this._submitEvent)),\n takeUntil(this.destroy$),\n )\n .subscribe();\n }\n\n private _listenFormStatus(): void {\n this._status$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((formStatus: FormStatus) => {\n const cls = [FormStatus.Submitting, FormStatus.Validating];\n const classList = this._element.nativeElement.classList;\n classList.remove(...cls);\n if (cls.indexOf(formStatus) !== -1) {\n classList.add(formStatus);\n }\n });\n\n }\n\n private _getActiveSubmitButton(): FsButtonDirective {\n if(this._getOwner().activeSubmitButton) {\n return this._getOwner().activeSubmitButton;\n }\n\n return this._getOwner()\n .buttons\n .filter((button) => button.submit)[0];\n }\n\n private _completeSubmit(success, submitEvent: SubmittedEvent): void {\n if (success) {\n this.linkedForms\n .forEach((form) => {\n form.ngForm.control.markAsPristine();\n form.createSnapshot();\n });\n\n this.submitted.emit(submitEvent);\n } else {\n this._resetButtons();\n }\n\n if (this._getOwner().activeSubmitButton) {\n if (success) {\n this._getOwner().activeSubmitButton.success();\n } else {\n this._getOwner().activeSubmitButton.error();\n }\n }\n\n this._status$.next(FormStatus.Submitted);\n\n if (success) {\n this._status$.next(FormStatus.Success);\n } else {\n this._status$.next(FormStatus.Error);\n }\n\n this._status$.next(FormStatus.Completing);\n\n const resetDelay = success ? this.successDelay : this.errorDelay;\n\n of(true)\n .pipe(\n delay(resetDelay),\n first(),\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n const valid = this.linkedForms\n .every((form) => form.ngForm.form.status === 'VALID');\n\n if (valid) {\n this._status$.next(FormStatus.Valid);\n } else {\n this._status$.next(FormStatus.Invalid);\n }\n\n this._resetButtons();\n this._getOwner().activeSubmitButton = null;\n this._updateDirtySubmitButtons();\n });\n }\n\n /**\n * Whoever holds the submit buttons for this form. A container when one encloses\n * it, otherwise the root of its linked set - the button that saves a tab's form\n * typically sits outside it, down in the dialog footer.\n *\n * Only a form that actually joined the container may drive its buttons. DI\n * hands `_container` to every form inside, including one cut loose with\n * `[link]=\"false\"`, and an instant-save panel is usually `[confirm]=\"false\"`\n * too - so without this it would take the `!confirm` branch below and\n * re-enable the footer's Save button that the linked set had just disabled.\n */\n private _getOwner(): FsFormBaseDirective {\n return (this.link ? this._container : null) || this.rootForm;\n }\n\n /** Keeps a DI-resolved owner only when it belongs to this form's dialog. */\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n\n private _resetButtons(): void {\n this._getOwner()\n .buttons.forEach((button) => {\n button.reset();\n });\n }\n\n private _registerConfirm(): void {\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((changes) => {\n if(this._dialogBackdropEscape && this._dialogRef) {\n this._dialogRef.disableClose = true;\n }\n\n if (this.confirm) {\n const existing = Object.keys(this._snapshot);\n\n Object.keys(changes)\n .forEach((name: string) => {\n if (existing.indexOf(name) === -1) {\n this._snapshot[name] = changes[name];\n }\n });\n }\n });\n }\n\n private _registerAutocomplete(): void {\n this._registerControl = this.ngForm.form.registerControl.bind(this.ngForm.form);\n\n this.ngForm.form.registerControl = (name: string, control: AbstractControl) => {\n\n const el: Element = this._element.nativeElement.querySelector(`input[name='${name}']`);\n\n if (el) {\n if (!el.getAttribute('autocomplete')) {\n el.setAttribute('autocomplete', 'none');\n el.setAttribute('name', `${name}-${guid()}`);\n }\n }\n\n return this._registerControl(name, control);\n };\n }\n\n private _registerDirtySubmitButton(): void {\n if (!this.ngForm) {\n return;\n }\n\n // Report up: a linked child's edits have to reach the root, since that is\n // where the submit buttons live and what decides whether they are enabled.\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this.rootForm._updateDirtySubmitButtons();\n });\n\n this._getOwner()\n .buttons.changes\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n // Buttons (de)register during change detection (their ngOnInit/ngOnDestroy),\n // so defer to a microtask to update the disabled state outside that pass and\n // avoid ExpressionChangedAfterItHasBeenChecked on the button's disabled binding.\n Promise.resolve().then(() => this._updateDirtySubmitButtons());\n });\n\n // The initial content buttons register (addButton) before the subscription above\n // exists, so their `changes` emission is missed. Apply the initial pristine/dirty\n // disabled state once, deferred so it runs after the current change-detection pass.\n Promise.resolve().then(() => this._updateDirtySubmitButtons());\n }\n\n private _updateDirtySubmitButtons(): void {\n if (!this.ngForm) {\n return;\n }\n\n this._dirtyChange$.next();\n\n this._getOwner()\n .buttons\n .filter((button) => button.submit)\n .forEach((submitButton: FsButtonDirective) => {\n if (\n !this.confirm || !this.dirtySubmitButton || this.dirtyLinked || !submitButton.dirtySubmit\n ) {\n submitButton.enable();\n } else {\n submitButton.disable();\n }\n });\n }\n\n private _statusSubmitting(): void {\n this._status$.next(FormStatus.Submitting);\n }\n\n private _statusValidating(): void {\n this._status$.next(FormStatus.Validating);\n }\n\n private _setupActiveSubmitButton(): void {\n this._getOwner()\n .activeSubmitButton = this._getActiveSubmitButton();\n this._resetButtons();\n\n if (this._getOwner().activeSubmitButton) {\n this._getOwner().activeSubmitButton.process();\n }\n }\n\n private _disableButtons(): void {\n this._getOwner()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n private _waitUntilStatusPending(): Observable<string[]> {\n // Async validators can be pending in any linked form, so hold the submit\n // until every one of them has settled - not just this form's.\n return combineLatest(\n this.linkedForms\n .map((form) => form.ngForm.statusChanges\n .pipe(\n startWith(form.ngForm.status),\n )),\n )\n .pipe(\n first((states) => states.every((state) => state !== 'PENDING')),\n );\n }\n\n private _handleError(e: SubmittedEvent) {\n console.log('%c Form Submit ', 'color: white; background-color: #D33F49', 'Error occured');\n console.group('Error Details:');\n console.log('Message: ', e);\n console.log('FormRef: ', this);\n\n if (this.ngForm.invalid) {\n const errors = getFormErrors(this.ngForm.control, null);\n console.log('Validation Errors: ', errors);\n }\n\n console.groupEnd();\n this._completeSubmit(false, null);\n }\n\n}\n","import {\n ChangeDetectorRef, Directive, ElementRef,\n HostBinding, inject, Input, OnDestroy, OnInit,\n} from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { withinSameDialog } from '../helpers/within-same-dialog';\n\nimport { FsFormDirective } from './form';\nimport { FsFormBaseDirective } from './form-base';\nimport { FsFormContainerDirective } from './form-container';\n\n\n@Directive({\n selector: '[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]',\n standalone: true,\n})\nexport class FsButtonDirective implements OnInit, OnDestroy {\n\n @Input()\n public name;\n\n @Input()\n public dirtySubmit = true;\n\n @Input()\n public set submitDisabled(value: boolean) {\n this._submitDisabled = value;\n this._applyDisabled();\n }\n\n public get submitDisabled(): boolean {\n return this._submitDisabled;\n }\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public submit = false;\n\n private _submitDisabled = false;\n private _formDisabled = false;\n private _previousDisabled = false;\n private _destroy$ = new Subject();\n\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));\n private _matButton = inject(MatButton, { optional: true, host: true });\n private _elementRef = inject(ElementRef);\n private _cdRef = inject(ChangeDetectorRef);\n private _formBase: FsFormBaseDirective;\n\n public ngOnInit() {\n this.submit = this._elementRef.nativeElement.getAttribute('type') === 'submit';\n // Prefer the enclosing container over the form: the form's own button\n // management (dirty-submit tracking, activeSubmitButton, reset) resolves its\n // registry the same way, so buttons must register with the same owner.\n // Registering with the form while the form reads the container leaves the\n // container's button list empty and the submit button never gets\n // dirty-disabled.\n //\n // Note this resolves the ROOT of the linked set, not the nearest form: the\n // button that saves a tab's form typically sits outside it, down in the\n // dialog footer, and drives the whole linked set from there.\n this._formBase = this._container || this._form?.rootForm;\n\n if (this._formBase) {\n this._formBase.addButton(this);\n\n if(this.submit) {\n fromEvent(this.element, 'click')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: MouseEvent) => {\n event.preventDefault();\n this._formBase.activeSubmitButton = this;\n this._formBase.triggerSubmit();\n });\n\n this.transitionStyle = 'none';\n setTimeout(() => {\n this.transitionStyle = null;\n this._cdRef.markForCheck();\n }, 500);\n }\n }\n }\n\n public disable() {\n if (this._matButton && !this._formBase.activeSubmitButton) {\n this._previousDisabled = this._matButton.disabled;\n this._formDisabled = true;\n this._matButton.disableRipple = true;\n this._applyDisabled();\n }\n }\n\n public enable() {\n if (this._matButton) {\n this._formDisabled = false;\n this._matButton.disableRipple = true;\n this._applyDisabled();\n }\n }\n\n public process() {\n this.setClass('process');\n if (this._matButton) {\n this._matButton.disableRipple = true;\n }\n }\n\n public success() {\n this.setClass('success');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public error() {\n this.setClass('error');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public setClass(cls) {\n const svg = this._getSvg(cls);\n this._resetClass();\n this.element.classList.add(`fs-form-submit-button-${cls}`);\n this.element.append(svg);\n }\n\n public get element() {\n return this._elementRef.nativeElement;\n }\n\n public reset() {\n if (!this._previousDisabled) {\n this.enable();\n }\n\n this.element.querySelectorAll('.svg-icon')\n .forEach((el) => {\n el.remove();\n });\n\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n this._resetClass();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n this._formBase?.removeButton(this);\n }\n\n /**\n * Keeps a DI-resolved owner only when it belongs to this button's dialog. A\n * dialog opened with `viewContainerRef` resolves through to whatever opened\n * it, so without this the inner dialog's Save would register with - and\n * submit - the outer dialog's form set.\n */\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n\n // Effective disabled combines the consumer-controlled submitDisabled input with\n // the form's submit-lifecycle state, so form enable/disable never clobbers an\n // explicit [submitDisabled] and the two channels stay independent.\n private _applyDisabled() {\n if (this._matButton) {\n this._matButton.disabled = this._submitDisabled || this._formDisabled;\n this._cdRef.markForCheck();\n }\n }\n\n private _resetClass() {\n this.element.classList\n .remove(\n 'fs-form-submit-button-success', \n 'fs-form-submit-button-error', \n 'fs-form-submit-button-process',\n );\n }\n\n private _getSvg(type) {\n if (type === 'success') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-success\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 38 38\" style=\"enable-background:new 0 0 38 38;\" xml:space=\"preserve\" width=\"38px\" height=\"38px\">\n <g>\n <g class=\"check\">\n <g>\n <path d=\"M29.6,11.9c-0.5-0.5-1.3-0.5-1.8,0L16.3,23.4l-6.1-6.1c-0.5-0.5-1.3-0.5-1.8,0s-0.5,1.3,0,1.8l7,7c0.3,0.3,0.6,0.4,0.9,0.4s0.7-0.1,0.9-0.4l12.4-12.4C30.1,13.2,30.1,12.4,29.6,11.9z\"/>\n </g>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'process') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-process\" width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"2\"><circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\"/>\n <path d=\"M36 18c0-9.94-8.06-18-18-18\"><animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 18 18\" to=\"360 18 18\" dur=\".7s\" repeatCount=\"indefinite\"/></path>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'error') {\n return new DOMParser().parseFromString('<svg class=\"svg-icon svg-icon-error\" xmlns=\"http://www.w3.org/2000/svg\" width=\"38px\" height=\"38px\" viewBox=\"0 0 16 16\"><g><path d=\"M8 1c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7zM8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8v0z\" data-original=\"#444444\" data-old_color=\"#444444\"/><path d=\"M12.2 10.8l-2.8-2.8 2.8-2.8-1.4-1.4-2.8 2.8-2.8-2.8-1.4 1.4 2.8 2.8-2.8 2.8 1.4 1.4 2.8-2.8 2.8 2.8z\"/></g> </svg>', 'text/xml').firstChild;\n }\n }\n}\n","import { Directive, HostBinding, HostListener, Input, OnDestroy, inject } from '@angular/core';\n\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../enums/confirm-result';\n\nimport { FsFormDirective } from './form';\n\n\n@Directive({\n selector: '[fsFormDialogClose],[fs-form-dialog-close]',\n standalone: true,\n})\nexport class FsFormDialogCloseDirective implements OnDestroy {\n private _form = inject(FsFormDirective, { optional: true });\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n\n\n @Input() public closeData;\n\n @HostBinding('attr.type') public type = 'button';\n\n private _destroy$ = new Subject();\n\n @HostListener('click', ['$event.target'])\n public closeClick(): void {\n if(this._form) {\n this._form.triggerConfirm()\n .pipe(\n filter((confirmResult: ConfirmResult) => (confirmResult !== ConfirmResult.Review)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._dialogRef.close(this.closeData);\n });\n } else {\n this._dialogRef.close(this.closeData);\n }\n }\n \n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MatDialogClose, MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { delay, takeUntil } from 'rxjs/operators';\n\nimport { FsButtonDirective } from '../../directives/button.directive';\nimport { FsFormBaseDirective } from '../../directives/form-base';\nimport { FsFormContainerDirective } from '../../directives/form-container';\nimport { FsFormDialogCloseDirective } from '../../directives/form-dialog-close.directive';\nimport { FsFormDirective } from '../../directives/form/form.directive';\nimport { withinSameDialog } from '../../helpers/within-same-dialog';\n\n\n@Component({\n selector: 'fs-form-dialog-actions',\n templateUrl: './form-dialog-actions.component.html',\n styleUrls: ['./form-dialog-actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n 'class': 'form-buttons',\n '[class.save-create]': 'showSave || create',\n },\n imports: [\n MatButton,\n FsButtonDirective,\n MatDialogClose,\n NgTemplateOutlet,\n FsFormDialogCloseDirective,\n ],\n})\nexport class FsFormDialogActionsComponent implements OnInit, OnDestroy {\n\n /** Leave unset inside an `fsFormContainer` to follow whether it has anything to save. */\n @Input() public save: boolean;\n @Input() public create = false;\n @Input() public close = false;\n /** Leave unset inside an `fsFormContainer` to fill in whenever Save does not apply. */\n @Input() public done: boolean;\n @Input() public closeData = null;\n @Input() public name: string;\n\n public dirty = false;\n\n private _destroy$ = new Subject<void>();\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n // A dialog opened with `viewContainerRef` resolves through to whatever opened\n // it, so an owner from another dialog is discarded - these actions belong to\n // their own dialog's form set and no one else's.\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));\n private _cdRef = inject(ChangeDetectorRef);\n\n /**\n * Inside a container these default to whether anything mounted can actually\n * save, so a footer left as a bare `<fs-form-dialog-actions>` swaps Save for\n * Done as tabs change without the dialog listing which tabs are savable. An\n * explicit binding always wins, and outside a container Save stays on as it\n * always did.\n */\n public get showSave(): boolean {\n return this.save ?? (this._container ? this._container.submits : true);\n }\n\n public get showDone(): boolean {\n return this.done ?? (this._container ? !this._container.submits && !this.create : false);\n }\n\n public ngOnInit(): void {\n const owner = this._container || this._form?.rootForm;\n\n if(owner) {\n // Track the whole set, not one form's own controls: with a form scoped to a\n // tab's fields, the actions sit outside it in the dialog footer and that\n // form's NgForm holds nothing of its own. Recomputed on every emission\n // rather than latched, so a switch to a pristine tab clears it too.\n owner.dirtyChange$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.dirty = owner.dirtyLinked;\n this._cdRef.markForCheck();\n });\n\n owner.submitted$\n .pipe(\n delay(50),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.dirty = false;\n this._cdRef.markForCheck();\n });\n }\n\n if(this._form) {\n this._form.reseted\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.dirty = false;\n this._cdRef.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n /** Keeps a DI-resolved owner only when it belongs to these actions' dialog. */\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n}\n","@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>","import { Directive, OnInit, inject } from '@angular/core';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTabGroup } from '@angular/material/tabs';\n\nimport { withinSameDialog } from '../../helpers/within-same-dialog';\nimport { FsFormBaseDirective } from '../form-base';\nimport { FsFormContainerDirective } from '../form-container';\nimport { FsFormDirective } from '../form';\n\n\n/**\n * Brings a tab group into the enclosing form set's unsaved-changes confirm.\n *\n * An owner picks up tab groups with `@ContentChildren(MatTabGroup)`, which reaches\n * through its own projected content - including lazily mounted tab bodies - but\n * stops at a child component's view. So a tab group declared inside a child\n * component's own template is invisible to the dialog that contains it, and\n * switching between those tabs never prompts even though switching the outer ones\n * does. That is not a shape worth avoiding: a dialog whose Profile tab is its own\n * component, with its own tabs inside, is the normal way to keep a large dialog\n * readable.\n *\n * DI does cross the boundary a content query cannot, so put this on the nested\n * group and it registers itself with the owner above it:\n *\n * <mat-tab-group fsFormConfirmTabs [(selected)]=\"tab\">\n *\n * Confirming stays gated on the owner's `confirm` and `confirmTabs` inputs, so\n * this only opts the group in - it never forces a prompt on.\n */\n@Directive({\n selector: 'mat-tab-group[fsFormConfirmTabs]',\n standalone: true,\n})\nexport class FsFormConfirmTabsDirective implements OnInit {\n\n private _tabGroup = inject(MatTabGroup, { self: true });\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));\n\n public ngOnInit(): void {\n const owner = this._container || this._form?.rootForm;\n\n owner?.registerTabGroup(this._tabGroup);\n }\n\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n}\n","export const ERROR_MESSAGES = {\n required: 'This field is required',\n email: 'This is not a valid email address',\n emails: 'Input valid email addresses, comma separated',\n phone: 'Invalid phone number',\n numeric: 'Value should be numeric',\n integer: 'Value should be an integer',\n min: 'Value should not be less than $(1)',\n max: 'Value should not be greater than $(1)',\n minlength: 'Should not be shorter than $(1) characters',\n maxlength: 'Should not be longer than $(1) characters',\n compare: 'Inputs do not match',\n pattern: 'Value should match pattern $(1)',\n dateRange: 'Invalid date range',\n url: 'This is not a valid url',\n urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',\n greater: 'Value must be greater than $(1)',\n lesser: 'Value must be less than $(1)',\n greaterEqual: 'Value must be greater than or equal $(1)',\n lesserEqual: 'Value must be less than or equal $(1)',\n};\n","import { InjectionToken } from '@angular/core';\nimport { ERROR_MESSAGES } from '../consts/error-messages.const';\n\nexport const VALIDATE_MESSAGES = new InjectionToken<Record<string, string>>(\n 'fs.form.validate-messages',\n);\n\nexport const VALIDATE_MESSAGE_PROVIDER = {\n provide: VALIDATE_MESSAGES,\n useFactory: messageProviderFactory,\n};\n\nexport function messageProviderFactory() {\n return { ...ERROR_MESSAGES };\n}\n\n","import { AfterContentInit, Directive, ElementRef, Injector, Input, OnDestroy, OnInit, Renderer2, inject } from '@angular/core';\nimport { AbstractControl, NgControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { keys, values } from 'lodash-es';\n\nimport {\n VALIDATE_MESSAGES,\n VALIDATE_MESSAGE_PROVIDER,\n} from '../../providers/validate-messages.provider';\nimport { FsFormDirective } from '../form/form.directive';\n\n\nexport interface FsControlDirective {\n validate?(control: AbstractControl): ValidationErrors | null;\n validateAsync?(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;\n}\n\n\n@Directive({\n selector: '[fsFormControl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsControlDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input() public wrapperSelector: string | false;\n @Input() public messageSelector: string | false;\n @Input() public hintSelector: string | false;\n @Input() public labelSelector: string | false;\n @Input() public appendMessageClass: string;\n @Input() public appendErrorClass: string;\n @Input() public appendHintClass: string;\n\n @Input()\n public set validateMessages(messages: Record<string, string>) {\n this._validateMessages = {\n ...this._validateMessages,\n ...messages,\n };\n }\n\n public errors = [];\n\n protected _control: AbstractControl;\n protected _elementRef = inject(ElementRef);\n protected _renderer2 = inject(Renderer2);\n protected _injector = inject(Injector);\n protected _validateMessages = inject(VALIDATE_MESSAGES, { self: true });\n protected _ngControl = inject(NgControl, { optional: true });\n protected _formDirective = inject<FsFormDirective>(FsFormDirective, { optional: true });\n\n private _destroy$ = new Subject();\n\n constructor() {\n const _ngControl = this._ngControl;\n\n\n if (_ngControl) {\n this._control = _ngControl.control;\n } else {\n console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);\n }\n }\n\n public ngOnInit() {\n this._setupValidators();\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public ngAfterContentInit() {\n this._subscribeToStatusChagnes();\n }\n\n public getMessageSelector(): string {\n if (this.messageSelector === false) {\n return '';\n }\n\n if (this.messageSelector) {\n return this.messageSelector;\n\n } else if (this._formDirective?.messageSelector) {\n return this._formDirective.messageSelector;\n }\n }\n\n public getHintWrapper(): HTMLElement | null {\n return this._elementRef.nativeElement.querySelector(this.getHintWrapperSelector());\n }\n\n public getHintWrapperSelector(): string | null {\n if (this.hintSelector === false) {\n return '';\n }\n\n if (this.hintSelector) {\n return this.hintSelector;\n\n } else if (this._formDirective?.hintSelector) {\n return this._formDirective.hintSelector;\n }\n }\n\n public getWrapperSelector(): string {\n if (this.wrapperSelector === false) {\n return '';\n }\n\n if (this.wrapperSelector) {\n return this.wrapperSelector;\n\n } else if (this._formDirective?.wrapperSelector) {\n return this._formDirective.wrapperSelector;\n }\n }\n\n public getlabelSelector(): string {\n\n if (this.labelSelector === false) {\n return '';\n }\n\n if (this.labelSelector) {\n return this.labelSelector;\n\n } else if (this._formDirective?.labelSelector) {\n return this._formDirective.labelSelector;\n }\n }\n\n public getWrapperElement() {\n const wrapper = this._getWrapper(this._elementRef.nativeElement);\n\n if (wrapper) {\n return wrapper;\n }\n\n return this._elementRef.nativeElement;\n }\n\n /*\n <mat-form-field class=\"mat-form-field\"> <-- Field Wrapper Class. Look for parents from the native element with the matching wrapperSelector. If not found defaults to native element.\n <input>\n <div class=\"fs-form-message\"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector\n <div class=\"fs-form-message\"></div>\n <div class=\"fs-form-hint\"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector\n </div>\n </mat-form-field>\n */\n\n private get _shouldErrorBeRendered() {\n return this._ngControl.invalid\n && (this._ngControl.dirty || this._formDirective?.ngForm?.submitted);\n }\n\n public render() {\n if (this._ngControl) {\n const renderer = this._renderer2;\n const wrapper = this.getWrapperElement();\n const error = this._ngControl.dirty ? this._getError(this._ngControl) : null;\n\n if (this._shouldErrorBeRendered && error) {\n wrapper.classList.add('ng-invalid', 'ng-dirty');\n } else {\n wrapper.classList.remove('ng-invalid');\n }\n\n if (!this.getMessageSelector()) {\n return;\n }\n\n const messageWrapper = wrapper.querySelector(this.getMessageSelector());\n \n if (!messageWrapper) {\n return console\n .warn(`Failed to locate ${ this.getMessageSelector()}`, this._elementRef.nativeElement);\n }\n\n renderer.addClass(messageWrapper, 'fs-form-message');\n\n if (this.appendMessageClass) {\n renderer.addClass(messageWrapper, this.appendMessageClass);\n }\n\n this._renderHint(error, messageWrapper);\n this._renderError(wrapper, messageWrapper, error);\n }\n }\n\n protected _renderHint(error, messageWrapper) {\n const hints = [\n ...messageWrapper.querySelectorAll('.mat-mdc-form-field-hint'),\n ];\n\n const hintWrapper: HTMLElement = this.getHintWrapper();\n if (hintWrapper) {\n hintWrapper.classList.add('fs-form-hint-wrapper');\n }\n\n hints.forEach((hint) => {\n this._renderer2.setStyle(hint, 'display', error ? 'none' : 'block');\n\n if (this.appendHintClass) {\n this._renderer2.addClass(hint, 'fs-form-hint');\n if(this.appendHintClass) {\n this._renderer2.addClass(hint, this.appendHintClass);\n }\n }\n });\n }\n\n protected _renderError(wrapper, messageWrapper, error) {\n let errorWrapper = wrapper.querySelector('.fs-form-error');\n if (errorWrapper) {\n errorWrapper.remove();\n }\n\n if (!this._shouldErrorBeRendered || !error) {\n return;\n }\n\n errorWrapper = this._renderer2.createElement('div');\n this._renderer2.addClass(errorWrapper, 'fs-form-error');\n this._renderer2.addClass(errorWrapper, `fs-form-error-${error.name}`);\n\n if(this.appendErrorClass) {\n this._renderer2.addClass(errorWrapper, this.appendErrorClass);\n this._renderer2.addClass(errorWrapper, `${this.appendErrorClass}-${error.name}`);\n }\n \n const errorText = this._renderer2.createText(error.message);\n\n this._renderer2.appendChild(errorWrapper, errorText);\n\n const hintWrapper: HTMLElement = messageWrapper.querySelector(this.getHintWrapperSelector());\n if (hintWrapper) {\n hintWrapper.prepend(errorWrapper);\n }\n }\n\n protected _subscribeToStatusChagnes():void {\n if (this._control) {\n this._control.statusChanges\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(this.render.bind(this));\n }\n }\n\n protected _getWrapper(node, count = 0) {\n if (!node || count > 10) {\n return null;\n }\n\n if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {\n return node;\n }\n\n return this._getWrapper(node.parentNode, ++count);\n }\n\n protected _parseErrorMessage(message, args): string {\n values(args)\n .forEach((name) => {\n message = message.replace(/\\$\\(\\d\\)/, name);\n });\n\n return message;\n }\n\n protected _getError(controlRef): { name: string, message: string } {\n\n const name = keys(controlRef.control.errors)[0];\n\n if (!name) {\n return null;\n }\n\n let message = controlRef.control.errors[name];\n\n if (this._validateMessages[name]) {\n message = this._parseErrorMessage(this._validateMessages[name], message);\n }\n\n return { name: name, message: message };\n }\n\n private _setupValidators(): void {\n const control = this._control;\n\n if (this.validate) {\n const validators = control.validator\n ? [control.validator, this.validate.bind(this)]\n : this.validate.bind(this);\n\n control.setValidators(validators);\n }\n\n if (this.validateAsync) {\n const asyncValidators = control.asyncValidator\n ? [control.asyncValidator, this.validateAsync.bind(this)]\n : this.validateAsync.bind(this);\n\n control.setAsyncValidators(asyncValidators);\n }\n\n control.updateValueAndValidity();\n }\n\n}\n","import { AfterViewInit, Directive, Input, OnChanges, OnDestroy } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormCompare]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormCompareDirective extends FsControlDirective\n implements OnChanges, AfterViewInit, OnDestroy, FsValidator {\n\n @Input()\n public fsFormCompare;\n\n @Input('fsFormCompareMessage')\n public set validationMessage(value: string) {\n this._validateMessages.compare = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.fsFormCompare.value === this._elementRef.nativeElement.value) {\n return null;\n }\n \n return { compare: true };\n \n }\n\n public ngAfterViewInit() {\n this.fsFormCompare.addEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n\n public ngOnDestroy() {\n this.fsFormCompare.removeEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { email, isEmpty, isNumeric, phone, url } from '@firestitch/common';\n\nimport { Observable, from, isObservable, of, throwError } from 'rxjs';\nimport { catchError, mapTo, take } from 'rxjs/operators';\n\nimport { isValid } from 'date-fns';\nimport { isObject } from 'lodash-es';\n\n\nexport class FsValidators {\n\n public static email(control: AbstractControl): ValidationErrors | null {\n if (!control.value || email(control.value)) {\n return null;\n }\n\n return { email: true };\n }\n\n public static emails(control: AbstractControl): ValidationErrors | null {\n const model = control.value || '';\n\n const hasInvalidEmails = model\n .split(',')\n .some((part) => !email(part));\n\n return hasInvalidEmails ? { email: true } : null;\n }\n\n public static numeric(control: AbstractControl): ValidationErrors | null {\n if (isEmpty(control.value) || isNumeric(control.value)) {\n return null;\n }\n \n return { numeric: true };\n \n }\n\n public static integer(control: AbstractControl): ValidationErrors | null {\n if (!control.value || String(control.value) === '' || (control.value % 1 === 0)) {\n return null;\n }\n \n return { integer: true };\n \n }\n\n public static phone(control: AbstractControl): ValidationErrors | null {\n if (!control.value || phone(control.value)) {\n return null;\n }\n\n return { phone: true };\n }\n\n public static url(control: AbstractControl, protocolRequired = false): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (!url(control.value)) {\n return { url: true };\n }\n\n if (protocolRequired) {\n const pattern = new RegExp(/^http(s)?:\\/\\//gm);\n\n if (!String(control.value).match(pattern)) {\n return { urlProtocol: true };\n }\n }\n\n return null;\n }\n\n public static dateRange(control: AbstractControl): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (isObject(control.value)) {\n\n const start = control.value.start;\n const end = control.value.end;\n\n if ((!start && !end) || (isValid(start) && isValid(end))) {\n return null;\n }\n }\n\n return { dateRange: true };\n }\n\n public static func(\n control: AbstractControl, \n formFunction: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void, data: any,\n ): Observable<unknown> {\n let result: unknown;\n let stream$: Observable<unknown>;\n\n try {\n result = formFunction(control, data);\n } catch (err) {\n const error = err instanceof Error ? err.message : err;\n\n stream$ = throwError(() => error);\n }\n\n if (!stream$) {\n if (result instanceof Promise) {\n stream$ = from(result);\n } else if (isObservable(result)) {\n stream$ = result;\n } else {\n stream$ = of(null);\n }\n }\n\n return stream$\n .pipe(\n mapTo(null),\n catchError((err) => {\n return of({ validationError: err });\n }),\n take(1),\n );\n }\n}\n","export function isEnabled(value: any): boolean {\n return value !== 'false' && (value || value === '');\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormDateRange]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormDateRangeDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormDateRange;\n\n @Input('fsFormDateRangeMessage')\n public set validationMessage(value: string) {\n this._validateMessages.dateRange = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormDateRange)) {\n return FsValidators.dateRange(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmail]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormEmailDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmail;\n\n @Input('fsFormEmailMessage')\n public set validationMessage(value: string) {\n this._validateMessages.email = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmail)) {\n return FsValidators.email(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmails]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormEmailsDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmails;\n\n @Input('fsFormEmailsMessage')\n public set validationMessage(value: string) {\n this._validateMessages.emails = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmails)) {\n return FsValidators.emails(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormFunction]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormFunctionDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input()\n public fsFormFunction;\n\n @Input()\n public fsFormFunctionData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n \n return FsValidators.func(this._control, this.fsFormFunction, this.fsFormFunctionData);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreaterEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormGreaterEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreaterEqual;\n\n @Input('fsFormGreaterEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreaterEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value < greater) {\n return { greaterEqual: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreater]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormGreaterDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreater;\n\n @Input('fsFormGreaterMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreater);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value <= greater) {\n return { greater: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormInteger]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormIntegerDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormInteger;\n\n @Input('fsFormIntegerMessage')\n public set validationMessage(value: string) {\n this._validateMessages.integer = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormInteger)) {\n return FsValidators.integer(this._control);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesserEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormLesserEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesserEqual;\n\n @Input('fsFormLesserEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesserEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value > lesser) {\n return { lesserEqual: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesser]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormLesserDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesser;\n\n @Input('fsFormLesserMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesser);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value >= lesser) {\n return { lesser: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMax]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMaxDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMax: number;\n\n @Input('fsFormMaxMessage')\n public set validationMessage(value: string) {\n this._validateMessages.max = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.max(this.fsFormMax)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMaxLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMaxLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMaxLength: number;\n\n @Input('fsFormMaxLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.maxlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.maxLength(this.fsFormMaxLength)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMin]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMinDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMin;\n\n @Input('fsFormMinMessage')\n public set validationMessage(value: string) {\n this._validateMessages.min = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.min(parseFloat(this.fsFormMin))(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMinLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMinLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMinLength: number;\n\n @Input('fsFormMinLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.minlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.minLength(this.fsFormMinLength)(this._control);\n }\n}\n","import { Directive, OnChanges } from '@angular/core';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\n\n/**\n * This directive required for cases when we have custom Control like <fs-phone-field> but without any of our validators applied\n *\n * This directive required for automatic validation messages\n */\n@Directive({\n selector: '[ngModel]' +\n ':not([required])' +\n ':not([fsFormRequired])' +\n ':not([fsFormCompare])' +\n ':not([fsFormDateRange])' +\n ':not([fsFormEmail])' +\n ':not([fsFormEmails])' +\n ':not([fsFormFunction])' +\n ':not([fsFormGreater])' +\n ':not([fsFormGreaterEqual])' +\n ':not([fsFormInteger])' +\n ':not([fsFormLesser])' +\n ':not([fsFormMax])' +\n ':not([fsFormMaxLength])' +\n ':not([fsFormMin])' +\n ':not([fsFormMinLength])' +\n ':not([fsFormNumeric])' +\n ':not([fsFormPattern])' +\n ':not([fsFormPhone])' +\n ':not([fsFormUrl])' +\n ':not([validate])',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormNoFsValidatorsDirective extends FsControlDirective implements OnChanges {\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n protected _subscribeToStatusChagnes(): void {\n if (!!this._control.validator || !!this._control.asyncValidator) {\n super._subscribeToStatusChagnes();\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormNumeric]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormNumericDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormNumeric;\n\n @Input('fsFormNumericMessage')\n public set validationMessage(value: string) {\n this._validateMessages.numeric = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormNumeric)) {\n return FsValidators.numeric(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormPattern]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormPatternDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPattern: RegExp | string;\n\n @Input('fsFormPatternMessage')\n public set validationMessage(value: string) {\n this._validateMessages.pattern = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.pattern(this.fsFormPattern)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormPhone]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormPhoneDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPhone;\n\n @Input('fsFormPhoneMessage')\n public set validationMessage(value: string) {\n this._validateMessages.phone = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormPhone)) {\n return FsValidators.phone(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormRequired],[ngModel][required]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormRequiredDirective extends FsControlDirective implements OnChanges, FsValidator {\n public required = false;\n\n @Input('fsFormRequired')\n public set setFsFormRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('required')\n public set setRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('fsFormRequiredMessage')\n public set validationMessage(value: string) {\n this._validateMessages.required = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.required) {\n return Validators.required(this._control);\n }\n \n return null;\n \n }\n\n public render() {\n const wrapper = this.getWrapperElement();\n\n if (wrapper && this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n // Adding class fs-form-label-requried adds the * to the label\n if (labelWrapper) {\n if (this.required) {\n this._renderer2.addClass(labelWrapper, 'fs-form-label-required');\n } else {\n this._renderer2.removeClass(labelWrapper, 'fs-form-label-required');\n }\n }\n }\n\n super.render();\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormUrl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormUrlDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormUrl;\n\n @Input()\n public fsFormUrlProtocol = true;\n\n @Input('fsFormUrlMessage')\n public set validationMessage(value: string) {\n this._validateMessages.url = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormUrl)) {\n return FsValidators.url(this._control, this.fsFormUrlProtocol);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[validate]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormValidateDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input('validate')\n public validateFn: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void;\n\n @Input('validateData')\n public validateFnData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n\n return FsValidators.func(this._control, this.validateFn, this.validateFnData);\n }\n\n}\n","import { AfterContentInit, ContentChildren, Directive, inject } from '@angular/core';\nimport { NgForm, NgModel } from '@angular/forms';\n\n\n@Directive({\n selector: '[fsFormTemplate],fs-form-template',\n standalone: true,\n})\nexport class FsFormTemplateDirective implements AfterContentInit {\n\n @ContentChildren(NgModel)\n protected _projectedControls: NgModel[];\n\n protected _ngForm: NgForm = inject(NgForm);\n\n public ngAfterContentInit(): void {\n this._projectedControls.forEach((control: NgModel) => {\n this._ngForm.addControl(control);\n });\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { FsButtonDirective } from './button.directive';\n\n\n@Directive({\n selector: 'dummy-selector',\n standalone: true,\n})\nexport class FsSubmitButtonDirective extends FsButtonDirective {\n}\n","import {\n TemplateRef,\n Directive,\n Input,\n ViewContainerRef,\n Injector,\n inject,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[fsFormTemplateOutlet]',\n standalone: true,\n})\nexport class FsFormTemplateOutletDirective implements OnInit {\n\n @Input()\n public template: TemplateRef<any>;\n\n @Input()\n public context: Record<string, unknown> = {};\n\n protected _viewContainerRef: ViewContainerRef = inject(ViewContainerRef)\n protected _injector: Injector = inject(Injector);\n\n public ngOnInit() {\n this._viewContainerRef.createEmbeddedView(\n this.template,\n this.context,\n {\n injector: this._injector,\n },\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormGroupDirective, FormsModule, NgForm, UntypedFormControl } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport {\n FsFormDialogActionsComponent,\n} from './components';\nimport {\n FsFormGreaterEqualDirective, FsFormLesserEqualDirective,\n FsFormTemplateDirective, FsSubmitButtonDirective,\n} from './directives';\nimport { FsButtonDirective } from './directives/button.directive';\nimport { FsFormDialogCloseDirective } from './directives/form-dialog-close.directive';\nimport { FsFormConfirmTabsDirective } from './directives/confirm-tabs/confirm-tabs.directive';\nimport { FsFormContainerDirective } from './directives/form-container/form-container.directive';\nimport { FsFormDirective } from './directives/form/form.directive';\nimport { FsFormCompareDirective } from './directives/validators/compare.directive';\nimport { FsControlDirective } from './directives/validators/control.directive';\nimport { FsFormDateRangeDirective } from './directives/validators/daterange.directive';\nimport { FsFormEmailDirective } from './directives/validators/email.directive';\nimport { FsFormEmailsDirective } from './directives/validators/emails.directive';\nimport { FsFormFunctionDirective } from './directives/validators/function.directive';\nimport { FsFormGreaterDirective } from './directives/validators/greater.directive';\nimport { FsFormIntegerDirective } from './directives/validators/integer.directive';\nimport { FsFormLesserDirective } from './directives/validators/lesser.directive';\nimport { FsFormMaxDirective } from './directives/validators/max.directive';\nimport { FsFormMaxLengthDirective } from './directives/validators/maxlength.directive';\nimport { FsFormMinDirective } from './directives/validators/min.directive';\nimport { FsFormMinLengthDirective } from './directives/validators/minlength.directive';\nimport { FsFormNoFsValidatorsDirective } from './directives/validators/no-fs-validators.directive';\nimport { FsFormNumericDirective } from './directives/validators/numeric.directive';\nimport { FsFormPatternDirective } from './directives/validators/pattern.directive';\nimport { FsFormPhoneDirective } from './directives/validators/phone.directive';\nimport { FsFormRequiredDirective } from './directives/validators/required.directive';\nimport { FsFormUrlDirective } from './directives/validators/url.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormTemplateOutletDirective } from './directives/form-template-outlet.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatDialogModule,\n MatDialogModule,\n FsDialogModule,\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormContainerDirective,\n FsFormConfirmTabsDirective,\n ],\n exports: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormContainerDirective,\n FsFormConfirmTabsDirective,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n public static forRoot(): ModuleWithProviders<FsFormModule> {\n\n /**\n * Hack: https://github.com/angular/components/issues/20097\n */\n ErrorStateMatcher.prototype\n .isErrorState = (\n control: UntypedFormControl | null,\n form: FormGroupDirective | NgForm | null,\n ): boolean => {\n return control?.invalid && control?.touched && control?.dirty;\n };\n\n return {\n ngModule: FsFormModule,\n };\n }\n}\n","// Modules\nexport { FsFormModule } from './app/fs-form.module';\n\n// Services\nexport { FsForm } from './app/services/fsform.service';\n\n// Directives\nexport { FsFormGreaterDirective, FsFormGreaterEqualDirective, FsFormLesserEqualDirective, FsFormTemplateDirective } from './app/directives';\nexport { FsButtonDirective } from './app/directives/button.directive';\nexport { FsFormDialogCloseDirective } from './app/directives/form-dialog-close.directive';\nexport { FsFormConfirmTabsDirective } from './app/directives/confirm-tabs/confirm-tabs.directive';\nexport { FsFormContainerDirective } from './app/directives/form-container/form-container.directive';\nexport { FsFormDirective } from './app/directives/form/form.directive';\nexport { FsSubmitButtonDirective } from './app/directives/submit-button.directive';\nexport { FsFormCompareDirective } from './app/directives/validators/compare.directive';\nexport { FsControlDirective } from './app/directives/validators/control.directive';\nexport { FsFormDateRangeDirective } from './app/directives/validators/daterange.directive';\nexport { FsFormEmailDirective } from './app/directives/validators/email.directive';\nexport { FsFormEmailsDirective } from './app/directives/validators/emails.directive';\nexport { FsFormFunctionDirective } from './app/directives/validators/function.directive';\nexport { FsFormIntegerDirective } from './app/directives/validators/integer.directive';\nexport { FsFormLesserDirective } from './app/directives/validators/lesser.directive';\nexport { FsFormMaxDirective } from './app/directives/validators/max.directive';\nexport { FsFormMaxLengthDirective } from './app/directives/validators/maxlength.directive';\nexport { FsFormMinDirective } from './app/directives/validators/min.directive';\nexport { FsFormMinLengthDirective } from './app/directives/validators/minlength.directive';\nexport { FsFormNoFsValidatorsDirective } from './app/directives/validators/no-fs-validators.directive';\nexport { FsFormNumericDirective } from './app/directives/validators/numeric.directive';\nexport { FsFormPatternDirective } from './app/directives/validators/pattern.directive';\nexport { FsFormPhoneDirective } from './app/directives/validators/phone.directive';\nexport { FsFormRequiredDirective } from './app/directives/validators/required.directive';\nexport { FsFormUrlDirective } from './app/directives/validators/url.directive';\nexport { FsFormValidateDirective } from './app/directives/validators/validate.directive';\nexport { FsFormTemplateOutletDirective } from './app/directives/form-template-outlet.directive';\n\n// Components\nexport { FsFormDialogActionsComponent } from './app/components';\n\nexport { FsValidators } from './app/validators/validators';\n\nexport { FormDeactivateGuard } from './app/guards/form-deactivate.guard';\n\n// Interfaces\nexport { ConfirmConfig } from './app/interfaces/confirm-config';\nexport { FsFormOwner } from './app/interfaces/form-owner';\nexport { SubmitEvent } from './app/interfaces/submit-event';\nexport { SubmittedEvent } from './app/interfaces/submitted-event';\n\n// Enums\nexport { ConfirmResult } from './app/enums/confirm-result';\nexport { FormStatus } from './app/enums/form-status';\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"firestitch-form.mjs","sources":["../../src/app/components/confirm-unsaved/confirm-unsaved.component.ts","../../src/app/components/confirm-unsaved/confirm-unsaved.component.html","../../src/app/helpers/within-same-dialog.ts","../../src/app/helpers/get-form-errors.ts","../../src/app/enums/confirm-result.ts","../../src/app/enums/form-status.ts","../../src/app/helpers/confirm-result-continue.ts","../../src/app/helpers/get-active-route.ts","../../src/app/services/fsform.service.ts","../../src/app/guards/form-deactivate.guard.ts","../../src/app/directives/form-base/form-base.directive.ts","../../src/app/directives/form-container/form-container.directive.ts","../../src/app/directives/form/form.directive.ts","../../src/app/directives/button.directive.ts","../../src/app/directives/form-dialog-close.directive.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.html","../../src/app/directives/confirm-tabs/confirm-tabs.directive.ts","../../src/app/consts/error-messages.const.ts","../../src/app/providers/validate-messages.provider.ts","../../src/app/directives/validators/control.directive.ts","../../src/app/directives/validators/compare.directive.ts","../../src/app/validators/validators.ts","../../src/app/helpers/is-enabled.ts","../../src/app/directives/validators/daterange.directive.ts","../../src/app/directives/validators/email.directive.ts","../../src/app/directives/validators/emails.directive.ts","../../src/app/directives/validators/function.directive.ts","../../src/app/directives/validators/greater-equal.directive.ts","../../src/app/directives/validators/greater.directive.ts","../../src/app/directives/validators/integer.directive.ts","../../src/app/directives/validators/lesser-equal.directive.ts","../../src/app/directives/validators/lesser.directive.ts","../../src/app/directives/validators/max.directive.ts","../../src/app/directives/validators/maxlength.directive.ts","../../src/app/directives/validators/min.directive.ts","../../src/app/directives/validators/minlength.directive.ts","../../src/app/directives/validators/no-fs-validators.directive.ts","../../src/app/directives/validators/numeric.directive.ts","../../src/app/directives/validators/pattern.directive.ts","../../src/app/directives/validators/phone.directive.ts","../../src/app/directives/validators/required.directive.ts","../../src/app/directives/validators/url.directive.ts","../../src/app/directives/validators/validate.directive.ts","../../src/app/directives/form-template.directive.ts","../../src/app/directives/submit-button.directive.ts","../../src/app/directives/form-template-outlet.directive.ts","../../src/app/fs-form.module.ts","../../src/public_api.ts","../../src/firestitch-form.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport { Subject } from 'rxjs';\n\n\n@Component({\n templateUrl: './confirm-unsaved.component.html',\n styleUrls: ['./confirm-unsaved.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatDialogModule,\n MatButton,\n\n FsDialogModule,\n ],\n})\nexport class ConfirmUnsavedComponent implements OnInit, OnDestroy {\n private _data = inject(MAT_DIALOG_DATA);\n private _dialogRef = inject<MatDialogRef<ConfirmUnsavedComponent>>(MatDialogRef);\n\n\n public saveLabel;\n public discardLabel;\n public cancelLabel;\n public message;\n public title;\n\n private _destroy$ = new Subject<void>();\n\n public ngOnInit(): void {\n this.saveLabel = this._data.saveLabel;\n this.discardLabel = this._data.discardLabel;\n this.cancelLabel = this._data.cancelLabel;\n this.message = this._data.message;\n this.title = this._data.title;\n }\n\n public save(): void {\n this._dialogRef.close('save');\n }\n\n public discard(): void {\n this._dialogRef.close('discard');\n }\n\n public cancel(): void {\n this._dialogRef.close(null);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n {{ title }}\n </h1>\n <mat-dialog-content>\n {{ message }}\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n color=\"primary\"\n (click)=\"save()\"\n mat-button>\n {{ saveLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"discard()\"\n mat-button>\n {{ discardLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"cancel()\"\n mat-button>\n {{ cancelLabel }}\n </button>\n </mat-dialog-actions>\n</fs-dialog>","import { MatDialogRef } from '@angular/material/dialog';\n\nimport type { FsFormBaseDirective } from '../directives/form-base';\n\n\n/**\n * Whether an owner found through DI belongs to the same dialog as whoever found\n * it - and may therefore be joined, or driven by a button.\n *\n * A form set must never span a dialog boundary. Owners are resolved by walking\n * the element injector, and CDK parents a dialog opened with `viewContainerRef`\n * to the opener's injector, so a dialog opened from inside another dialog's form\n * would otherwise register into that form's set: the outer footer would flip to\n * Save the moment the inner dialog opened and would then submit the inner form,\n * while the inner dialog - no longer the owner of its own set - would stop\n * confirming its unsaved changes on backdrop click.\n *\n * Identity of the `MatDialogRef` is the test: everything inside one dialog\n * injects the same instance, and everything outside any dialog gets null.\n */\nexport function withinSameDialog(\n owner: FsFormBaseDirective,\n dialogRef: MatDialogRef<any>,\n): boolean {\n return !!owner && owner.dialogRef === dialogRef;\n}\n","import { AbstractControl, UntypedFormGroup, ValidationErrors } from '@angular/forms';\n\n\nexport function getFormErrors(control: AbstractControl, key: string): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n\n if (control.invalid && control.errors) {\n errors = {\n [key]: { ...control.errors },\n };\n }\n\n if (control instanceof UntypedFormGroup) {\n Object.entries(control.controls)\n .forEach(([name, childControl]) => {\n const childErrors = getFormErrors(childControl, name);\n\n if (childErrors) {\n if (!errors) {\n errors = { ...childErrors };\n } else {\n Object.assign(errors, childErrors);\n }\n }\n });\n }\n\n return errors;\n}\n","export enum ConfirmResult {\n Save = 'save',\n Discard = 'discard',\n Review = 'review',\n Invalid = 'invalid',\n NoChanges = 'noChanges',\n}\n","export enum FormStatus {\n Valid = 'valid',\n Invalid = 'invalid',\n Validating = 'validating',\n Submitting = 'submitting',\n Submitted = 'submitted',\n Error = 'error',\n Success = 'success',\n Completing = 'completing',\n}\n","import { ConfirmResult } from '../enums/confirm-result';\n\nexport function confirmResultContinue(result): boolean {\n return (\n result === ConfirmResult.Discard || \n result === ConfirmResult.Save || \n result === ConfirmResult.NoChanges\n );\n}\n","import { ActivatedRoute } from '@angular/router';\n\n\nexport function getActiveRoute(route: ActivatedRoute): ActivatedRoute {\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n return route;\n}\n","import { inject, Injectable, Type } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { ConfirmUnsavedComponent } from '../components/confirm-unsaved';\nimport { ConfirmResult } from '../enums';\nimport { FsFormOwner } from '../interfaces';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsForm {\n\n // value is array for future possibilities of extension\n private _formDirectiveStore = new WeakMap<Type<any>, FsFormOwner[]>();\n private _dialog = inject(MatDialog);\n\n public registerFormDirective(routeComponent: Type<any>, directive: FsFormOwner) {\n const directives = this.getFormDirectives(routeComponent) || [];\n directives.push(directive);\n\n this._formDirectiveStore.set(routeComponent, directives);\n }\n\n public getFormDirectives(routeComponent): FsFormOwner[] {\n return this._formDirectiveStore.get(routeComponent);\n }\n\n public removeFormDirective(routeComponent) {\n this._formDirectiveStore.delete(routeComponent);\n }\n\n public hasChanges(form: FsFormOwner): boolean {\n // Spans the linked set, so a dialog whose fields live in a nested tab form\n // still knows it has changes. A form linked out with `[link]=\"false\"` is\n // absent from that set and never triggers the prompt - which is the point of\n // an instant-save panel: it has nothing outstanding to warn about.\n return form.linkedForms\n .some((linkedForm) => Object.keys(linkedForm.ngForm.control.controls)\n .some((key) => linkedForm.ngForm.control.controls[key].dirty));\n }\n\n public confirmUnsaved(\n form: FsFormOwner,\n ): Observable<ConfirmResult> {\n if (!form.confirm || !this.hasChanges(form)) {\n return of(ConfirmResult.NoChanges);\n }\n\n let title = 'You have unsaved changes';\n let message = 'What would you like to do with your changes?';\n let saveLabel = 'Save and continue';\n let discardLabel = 'Discard changes and continue';\n let cancelLabel = 'Review changes';\n\n if (typeof form.confirm === 'object') {\n title = form.confirm.title || title;\n message = form.confirm.message || message;\n saveLabel = form.confirm.saveLabel || saveLabel;\n discardLabel = form.confirm.discardLabel || discardLabel;\n cancelLabel = form.confirm.cancelLabel || cancelLabel;\n }\n\n return this._dialog\n .open(ConfirmUnsavedComponent, {\n data: {\n title,\n message,\n saveLabel,\n discardLabel,\n cancelLabel,\n },\n width: 'auto', \n })\n .afterClosed()\n .pipe(\n switchMap((result) => {\n if(!result) {\n return of(ConfirmResult.Review);\n }\n \n if (result === 'discard') {\n form.reset();\n\n return of(ConfirmResult.Discard); \n }\n\n if (result === 'save') {\n form.linkedForms\n .forEach((linkedForm) => linkedForm.ngForm.control.markAsPristine());\n\n return form.submit$({ confirmed: true })\n .pipe(\n map((submitEvent) => {\n if(submitEvent.error) {\n return ConfirmResult.Invalid;\n }\n\n return ConfirmResult.Save;\n }),\n catchError(() => {\n return of(ConfirmResult.Invalid);\n }),\n );\n }\n }),\n );\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { confirmResultContinue } from '../helpers';\nimport { getActiveRoute } from '../helpers/get-active-route';\nimport { FsFormOwner } from '../interfaces';\nimport { FsForm } from '../services/fsform.service';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormDeactivateGuard {\n private _form = inject(FsForm);\n private _route = inject(ActivatedRoute);\n\n\n public canDeactivate(): Observable<boolean> {\n const route = getActiveRoute(this._route);\n\n if (!route) {\n console.error('Can not find route for FormDeactivateGuard checks');\n\n return of(true);\n }\n\n const directives: FsFormOwner[] = this._form\n .getFormDirectives(route.routeConfig.component);\n\n if (!Array.isArray(directives) || directives.length === 0) {\n console.error('Can not find a valid FsFormDirective');\n\n return of(true);\n }\n\n return this._form.confirmUnsaved(directives[0])\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n\n}\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n} from '@angular/core';\nimport { ActivatedRoute, Route } from '@angular/router';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { DrawerRef } from '@firestitch/drawer';\n\nimport { defer, fromEvent, iif, Observable, of, Subject } from 'rxjs';\nimport { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../../enums';\nimport { FormStatus } from '../../enums/form-status';\nimport { FormDeactivateGuard } from '../../guards/form-deactivate.guard';\nimport { confirmResultContinue } from '../../helpers';\nimport { getActiveRoute } from '../../helpers/get-active-route';\nimport { ConfirmConfig, ConfirmTabGroup, SubmitEvent, SubmittedEvent } from '../../interfaces';\nimport { FsForm } from '../../services/fsform.service';\nimport { FsButtonDirective } from '../button.directive';\nimport type { FsFormDirective } from '../form/form.directive';\n\n\n/**\n * Shared by the two things that can own a set of forms: an `fsForm` sitting at\n * the root of its linked set, and an `fsFormContainer` holding forms that are\n * siblings rather than nested.\n *\n * It holds the submit-button registry both of them expose to buttons, and the\n * lifecycle that belongs to the set as a whole rather than to any one form -\n * the dialog backdrop and Escape, Ctrl+S, the browser close prompt, the drawer\n * and tab-switch confirms. Exactly one owner registers that lifecycle; see\n * `_registerOwnerLifecycle`.\n */\n@Directive()\nexport abstract class FsFormBaseDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input()\n public confirmTabs = true;\n\n @Input()\n public confirm: ConfirmConfig | boolean = true;\n\n @Input()\n public confirmDialog = true;\n\n @Input()\n public confirmDrawer = true;\n\n @Input()\n public confirmBrowser = true;\n\n @Input()\n public shortcuts = true; // Ctrl + s\n\n @Input()\n public deactivationGuard = true;\n\n protected _ngZone = inject(NgZone);\n protected _cdRef = inject(ChangeDetectorRef);\n protected _element = inject(ElementRef);\n protected _form = inject(FsForm);\n protected _route = inject(ActivatedRoute);\n protected _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n protected _drawerRef = inject<DrawerRef<any>>(DrawerRef, { optional: true });\n protected _dialogBackdropEscape = false;\n protected _activatedRouteConfig: Route | null;\n\n @ContentChildren(MatTabGroup, { descendants: true })\n private _tabGroups: QueryList<MatTabGroup> = new QueryList();\n\n private _buttons = new QueryList<FsButtonDirective>();\n private _activeSubmitButton: FsButtonDirective;\n private _confirmTabGroups = new WeakSet<MatTabGroup>();\n private _destroy$ = new Subject<void>();\n\n public abstract submitting: boolean;\n\n /**\n * True when anything in the owned set has a submit handler - i.e. there is\n * something for a Save button to do. Both a form and a container answer this\n * over their linked set, so whichever one owns a footer can be asked the same\n * question without knowing which it got.\n */\n public abstract submits: boolean;\n\n /** True when anything in the owned set has unsaved changes. */\n public abstract dirtyLinked: boolean;\n\n /** Every form in the owned set, at any depth. */\n public abstract linkedForms: FsFormDirective[];\n\n /** Emits whenever the owned set's dirty state may have moved. */\n public abstract dirtyChange$: Observable<void>;\n\n /** Emits once a submit over the owned set has completed successfully. */\n public abstract submitted$: Observable<SubmittedEvent>;\n\n /** Tracks the owned set's submit lifecycle, so the drawer can wait one out. */\n public abstract status$: Observable<FormStatus>;\n\n /**\n * The dialog this owner lives in, or null outside one. Used to keep a form set\n * from spanning a dialog boundary - see `withinSameDialog`.\n */\n public get dialogRef(): MatDialogRef<any> {\n return this._dialogRef;\n }\n\n public ngOnInit(): void {\n this._registerOwnerLifecycle();\n }\n\n public ngAfterContentInit(): void {\n this._registerOwnerContentLifecycle();\n }\n\n public get destroy$(): Observable<void> {\n return this._destroy$.asObservable();\n }\n\n public ngOnDestroy(): void {\n this._cleanupCanDeactivate();\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public get buttons(): QueryList<FsButtonDirective> {\n return this._buttons;\n }\n\n public get activeSubmitButton(): FsButtonDirective {\n return this._activeSubmitButton;\n }\n\n public set activeSubmitButton(button: FsButtonDirective) {\n this._activeSubmitButton = button;\n }\n\n /**\n * Bring a tab group into this owner's unsaved-changes confirm.\n *\n * `_tabGroups` only reaches groups in this owner's projected content, so a group\n * declared inside a child component's own template has to announce itself.\n * `fsFormConfirmTabs` calls this - consumers never call it directly.\n */\n public registerTabGroup(tabGroup: MatTabGroup): void {\n this._registerConfirmTabGroup(tabGroup);\n }\n\n public addButton(button: FsButtonDirective): void {\n this._buttons\n .reset(\n [\n ...this._buttons.toArray(),\n button,\n ]);\n\n // QueryList.reset() does not emit `changes`; notify so subscribers (e.g. the\n // form's dirty-submit-button tracking) react to buttons being registered.\n this._buttons.notifyOnChanges();\n }\n\n public removeButton(button: FsButtonDirective): void {\n if(this._activeSubmitButton === button) {\n this._activeSubmitButton = null;\n }\n\n this._buttons.reset(\n [\n ...this._buttons.toArray()\n .filter((item) => (button !== item)),\n ]);\n\n this._buttons.notifyOnChanges();\n }\n\n /**\n * Everything here acts on the form set as a whole, so exactly one thing may\n * register it. A form linked into a parent defers to that parent; every form\n * inside a container defers to the container. Registering twice would put two\n * confirms on the same backdrop click and two handlers on the same Ctrl+S.\n */\n protected _registerOwnerLifecycle(): void {\n if (this.deactivationGuard) {\n this._registerCanDeactivateGuard();\n }\n\n this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n }\n\n /** The half of the same ownership that needs projected content resolved. */\n protected _registerOwnerContentLifecycle(): void {\n this._registerConfirmTabs();\n this._registerConfirmDrawerClose();\n this._registerDrawerClose();\n }\n\n /**\n * Whether the element is inside what this owner covers. Overridden by the\n * container, whose own element is a poor proxy: it may be an `<ng-container>`,\n * which is a comment node and contains nothing.\n */\n protected _containsElement(el: Element): boolean {\n return this._nodeContains(this._element.nativeElement, el);\n }\n\n protected _nodeContains(root: Node, el: Element): boolean {\n if (!root || !el) {\n return false;\n }\n\n if (el === root) {\n return true;\n }\n\n return el.parentElement ? this._nodeContains(root, el.parentElement) : false;\n }\n\n protected _formClose(): void {\n if (this.confirm && this.confirmDialog) {\n this.triggerConfirm()\n .pipe(\n filter((result) => confirmResultContinue(result)),\n switchMap((result) => {\n return result === ConfirmResult.NoChanges || result === ConfirmResult.Discard\n ? of(null)\n : this.submitted$;\n }),\n takeUntil(this._destroy$),\n )\n .subscribe((result: SubmittedEvent) => {\n this._dialogRef.close(result?.response);\n });\n } else {\n this._dialogRef.close(null);\n }\n }\n\n private _listenWindowClose(): void {\n fromEvent(window, 'beforeunload')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: Event) => {\n if (this.confirm && this.confirmBrowser && this.dirtyLinked) {\n event.returnValue = false;\n }\n });\n }\n\n private _activeDialog(el: Node, dialog: HTMLElement): boolean {\n return this._nodeContains(dialog, el as Element);\n }\n\n private _listenHotKeys(): void {\n this._ngZone.runOutsideAngular(() => {\n fromEvent(document, 'keydown')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: KeyboardEvent) => {\n if (this._dialogBackdropEscape && event.code === 'Escape') {\n const cdkOverlayPane = Array\n .from(document.querySelectorAll<HTMLElement>('.cdk-overlay-pane')).pop();\n\n const activeDialog = this\n ._activeDialog(document.getElementById(this._dialogRef.id), cdkOverlayPane);\n\n if (activeDialog) {\n this._ngZone.run(() => {\n this._formClose();\n });\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {\n event.preventDefault();\n\n if (this.shortcuts) {\n if (this._containsElement(document.activeElement)) {\n this._ngZone.run(() => {\n this.triggerSubmit();\n });\n }\n }\n }\n });\n });\n }\n\n private _registerConfirmDialogBackdropEscape(): void {\n if(this._dialogRef) {\n this._dialogBackdropEscape = !this._dialogRef?.disableClose;\n\n if (this._dialogBackdropEscape) {\n this._dialogRef.backdropClick()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._formClose();\n });\n\n this._destroy$\n .subscribe(() => {\n this._dialogRef.disableClose = false;\n });\n }\n }\n }\n\n private _registerDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((subscriber) => {\n if (this.submitting) {\n this.status$\n .pipe(\n filter((status) => status === FormStatus.Success || status === FormStatus.Error),\n takeUntil(this._destroy$),\n )\n .subscribe((status) => {\n if (status === FormStatus.Success) {\n subscriber.next(null);\n subscriber.complete();\n } else {\n subscriber.error();\n }\n });\n } else {\n subscriber.next(null);\n subscriber.complete();\n }\n });\n }\n }\n\n private _registerConfirmDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n switchMap((subscriber) => {\n return iif(\n () => !!this.confirm && this.confirmDrawer,\n this.triggerConfirm()\n .pipe(\n map((result) => confirmResultContinue(result)),\n tap((result) => {\n if (result) {\n subscriber.next(null);\n subscriber.complete();\n }\n }),\n ),\n defer(() => {\n subscriber.next(null);\n subscriber.complete();\n\n return of(null);\n }),\n );\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n }\n\n private _registerConfirmTabs(): void {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n this._tabGroups.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n });\n }\n\n private _registerConfirmTabGroups(tabGroups: MatTabGroup[]): void {\n tabGroups.forEach((tabGroup: MatTabGroup) => {\n this._registerConfirmTabGroup(tabGroup);\n });\n }\n\n private _registerConfirmTabGroup(tabGroup: MatTabGroup): void {\n // `_tabGroups.changes` re-emits the whole list, not just what arrived, and it\n // emits every time a lazy tab body mounts a nested group. Groups already\n // wired therefore come back around - so without this the outer group\n // accumulates one subscription per emission, and a single click on it opens\n // that many stacked confirm dialogs.\n if (this._confirmTabGroups.has(tabGroup)) {\n return;\n }\n\n this._confirmTabGroups.add(tabGroup);\n\n const confirmTabGroup = tabGroup as ConfirmTabGroup;\n if (!confirmTabGroup._originalHandleClick) {\n confirmTabGroup._originalHandleClick = tabGroup._handleClick;\n confirmTabGroup._handlClick$ = new Subject<{\n tab: MatTab;\n tabHeader: MatTabHeader;\n idx: number\n }>();\n\n confirmTabGroup._handleClick = (tab: MatTab, tabHeader: MatTabHeader, idx: number) => {\n if (confirmTabGroup._handlClick$.observers.length) {\n confirmTabGroup._handlClick$.next({ tab, tabHeader, idx });\n } else {\n confirmTabGroup._originalHandleClick(tab, tabHeader, idx);\n }\n };\n }\n\n confirmTabGroup._handlClick$\n .pipe(\n filter(() => !this.submitting),\n switchMap((event) => {\n if(this.confirm && this.confirmTabs) {\n return this.triggerConfirm()\n .pipe(\n tap((result) => {\n if (confirmResultContinue(result)) {\n confirmTabGroup.selectedIndex = event.idx;\n }\n }),\n );\n }\n\n confirmTabGroup._originalHandleClick(event.tab, event.tabHeader, event.idx);\n\n return of(null);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n\n\n private _registerCanDeactivateGuard(): void {\n this._activatedRouteConfig = getActiveRoute(this._route)?.routeConfig;\n\n if (!this._activatedRouteConfig) {\n return;\n }\n\n this._form.registerFormDirective(this._activatedRouteConfig.component, this);\n\n if (!Array.isArray(this._activatedRouteConfig.canDeactivate)) {\n this._activatedRouteConfig.canDeactivate = [];\n }\n\n if (this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard) === -1) {\n this._activatedRouteConfig.canDeactivate.push(FormDeactivateGuard);\n }\n }\n\n private _cleanupCanDeactivate(): void {\n if (!this._activatedRouteConfig) {\n return;\n }\n\n const guardIndex = this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard);\n this._activatedRouteConfig.canDeactivate.splice(guardIndex, 1);\n\n this._form.removeFormDirective(this._activatedRouteConfig.component);\n }\n\n\n public abstract triggerSubmit(): void;\n public abstract triggerConfirm(): Observable<ConfirmResult>;\n public abstract reset(): void;\n public abstract submit$(event?: SubmitEvent): Observable<SubmittedEvent>;\n}\n","import { Directive } from '@angular/core';\n\nimport { defer, EMPTY, Observable, of, Subject } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../../enums';\nimport { FormStatus } from '../../enums/form-status';\nimport { FsFormOwner, SubmitEvent, SubmittedEvent } from '../../interfaces';\nimport { FsFormBaseDirective } from '../form-base';\n\nimport type { FsFormDirective } from '../form/form.directive';\n\n\n/**\n * Bounds a set of forms without being one.\n *\n * An `fsForm` can only reach the forms nested inside it through DI, which forces\n * a wrapper carrying `ngForm` around anything that needs to see them - and that\n * wrapper then owns a real, empty `NgForm` whose control namespace every field\n * below it falls into. A container has no `ngForm` and no controls. It only\n * watches: forms register themselves as they mount, buttons resolve to it, and\n * `fs-form-dialog-actions` reads Save-vs-Done off it. Put it on whatever element\n * already frames the layout - or on an `<ng-container>` for no element at all.\n *\n * Forms in a container are siblings rather than nested, so on registration each\n * one is linked into the first. That reproduces exactly the structure DI nesting\n * builds, which is why validation, dirty state, the unsaved-changes confirm and\n * the submit chain all span a container without any of that machinery knowing\n * containers exist.\n *\n * A form marked `[link]=\"false\"` never registers, so an instant-save panel stays\n * out of the set the same way it does when nested.\n */\n@Directive({\n selector: 'fs-form-container,[fsFormContainer]',\n exportAs: 'fsFormContainer',\n standalone: true,\n})\nexport class FsFormContainerDirective extends FsFormBaseDirective implements FsFormOwner {\n\n private _forms: FsFormDirective[] = [];\n private _formsChange$ = new Subject<void>();\n\n /** The forms registered into this container, in registration order. */\n public get forms(): FsFormDirective[] {\n return [...this._forms];\n }\n\n /**\n * The form the rest of the set is linked into, or null while the container\n * holds none - an open tab that has nothing to save, say.\n */\n public get rootForm(): FsFormDirective {\n return this._forms[0] || null;\n }\n\n /** Emits whenever a form registers or deregisters. */\n public get formsChange$(): Observable<void> {\n return this._formsChange$.asObservable();\n }\n\n public get linkedForms(): FsFormDirective[] {\n return this.rootForm?.linkedForms || [];\n }\n\n /**\n * True when anything in the container has a submit handler - i.e. there is\n * something for a Save button to do. `fs-form-dialog-actions` reads this to\n * swap Save for Done as the mounted tab changes, so a dialog never has to keep\n * a list of which tabs happen to be savable.\n */\n public get submits(): boolean {\n return this.linkedForms\n .some((form) => form.hasSubmit);\n }\n\n public get dirtyLinked(): boolean {\n return this.rootForm?.dirtyLinked || false;\n }\n\n public get submitting(): boolean {\n return this.rootForm?.submitting || false;\n }\n\n /**\n * Emits whenever the set's dirty state may have moved, including when the set\n * itself changes. Anything rendering off it - the dialog actions - subscribes\n * once and outlives any particular form, so this has to follow the root across\n * tab switches rather than bind to whichever form happened to be first.\n */\n public get dirtyChange$(): Observable<void> {\n return this._formsChange$\n .pipe(\n startWith(null),\n switchMap(() => (this.rootForm?.dirtyChange$ || EMPTY)\n .pipe(\n startWith(null),\n )),\n map(() => undefined),\n );\n }\n\n // Resolved at subscribe time rather than switch-mapped: a submit in flight has\n // to survive the set changing under it, which is routine when saving unmounts\n // a tab.\n public get submitted$(): Observable<SubmittedEvent> {\n return defer(() => this.rootForm?.submitted$ || EMPTY);\n }\n\n public get status$(): Observable<FormStatus> {\n return defer(() => this.rootForm?.status$ || of(FormStatus.Valid));\n }\n\n /**\n * Take a form into the container. Called by the form on init - consumers never\n * call it directly.\n */\n public registerForm(form: FsFormDirective): void {\n if (this._forms.indexOf(form) !== -1) {\n return;\n }\n\n this._forms = [...this._forms, form];\n\n if (this.rootForm !== form) {\n form.linkTo(this.rootForm);\n }\n\n this._formsChange$.next();\n }\n\n /**\n * Material attaches an incoming tab body before it detaches the outgoing one,\n * so losing the root is a routine reshuffle rather than teardown. Re-elect and\n * re-link the survivors instead of leaving them pointing at a dead root, and\n * only let go of forms actually registered - clearing unconditionally would\n * drop the form that just arrived.\n */\n public deregisterForm(form?: FsFormDirective): void {\n if (form && this._forms.indexOf(form) === -1) {\n return;\n }\n\n const removing = form ? [form] : [...this._forms];\n const rootRemoved = removing.indexOf(this.rootForm) !== -1;\n\n removing.forEach((item) => item.unlinkFrom());\n\n this._forms = this._forms\n .filter((item) => removing.indexOf(item) === -1);\n\n if (rootRemoved) {\n const root = this.rootForm;\n\n this._forms\n .filter((item) => item !== root)\n .forEach((item) => {\n item.unlinkFrom();\n item.linkTo(root);\n });\n }\n\n this._formsChange$.next();\n }\n\n public triggerSubmit(): void {\n this.rootForm?.triggerSubmit();\n }\n\n public triggerConfirm(): Observable<ConfirmResult> {\n return this.rootForm\n ? this.rootForm.triggerConfirm()\n : of(ConfirmResult.NoChanges);\n }\n\n public submit$(event?: SubmitEvent): Observable<SubmittedEvent> {\n return this.rootForm\n ? this.rootForm.submit$(event)\n : of(null);\n }\n\n public reset(): void {\n this.rootForm?.reset();\n }\n\n public validate(): void {\n this.rootForm?.validate();\n }\n\n // The container's own element is a poor proxy for what it covers: it is\n // typically layout chrome wrapping far more than the forms, and on an\n // `<ng-container>` it is a comment node containing nothing at all. Scope to the\n // registered forms instead.\n protected override _containsElement(el: Element): boolean {\n return this._forms\n .some((form) => this._nodeContains(form.element, el));\n }\n}\n","import { AfterContentInit, Directive, EventEmitter, HostBinding, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { AbstractControl, NgForm } from '@angular/forms';\n\nimport { guid } from '@firestitch/common';\nimport { MessageMode } from '@firestitch/message';\nimport { FsMessage } from '@firestitch/message';\n\nimport {\n BehaviorSubject,\n combineLatest,\n concat,\n Observable,\n of,\n Subject,\n throwError,\n} from 'rxjs';\nimport {\n catchError,\n delay,\n filter,\n first,\n map,\n mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n toArray,\n} from 'rxjs/operators';\n\nimport { getFormErrors } from '../../helpers/get-form-errors';\nimport { withinSameDialog } from '../../helpers/within-same-dialog';\nimport { FsButtonDirective } from '../button.directive';\nimport { FsFormBaseDirective } from '../form-base';\nimport { FsFormContainerDirective } from '../form-container';\n\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FormStatus } from './../../enums/form-status';\nimport { SubmittedEvent } from './../../interfaces';\nimport { SubmitEvent } from './../../interfaces/submit-event';\n\n\n@Directive({\n selector: '[fsForm]',\n exportAs: 'fsForm',\n standalone: true,\n})\nexport class FsFormDirective\n extends FsFormBaseDirective\n implements OnInit, OnDestroy, AfterContentInit, OnChanges {\n\n public ngForm = inject<NgForm>(NgForm);\n\n @Input()\n public wrapperSelector = '.fs-form-wrapper,.mat-mdc-form-field';\n\n @Input()\n public messageSelector = '.fs-form-message,.mat-mdc-form-field-subscript-wrapper';\n\n @Input()\n public hintSelector = '.fs-form-hint,.mat-mdc-form-field-hint-wrapper';\n\n @Input()\n public labelSelector = '.fs-form-label,.mdc-floating-label>mat-label';\n\n @Input()\n public autocomplete = false;\n\n @Input()\n public dirtySubmitButton = true;\n\n @Input()\n public set submit(submit$: (event: SubmitEvent) => Observable<any>) {\n this._submit$ = submit$;\n }\n\n public get submit(): (event: SubmitEvent) => Observable<any> {\n return this._submit$;\n }\n\n @Input()\n public successDelay = 0;\n\n @Input()\n public errorDelay = 1000;\n\n /**\n * Whether this form joins the set around it - the `fsForm` it is nested inside,\n * or the `fsFormContainer` enclosing it.\n *\n * Forms in a set behave as one submittable unit: the outermost form is what the\n * submit buttons drive, and validation, dirty state, the unsaved-changes\n * confirm and the pristine reset all span the set. That is what lets a form\n * wrap only one tab's fields while the dialog footer stays outside it.\n *\n * Set `[link]=\"false\"` for a panel that owns its own saving - an instant-save\n * side panel, say. It keeps every fsForm feature for itself, but its dirty\n * state never enables the outer Save button, its validation never blocks the\n * outer submit, and the outer submit never touches it.\n */\n @Input()\n public link = true;\n\n @Output('fsForm')\n public submitEvent: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public invalid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public valid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public submitted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public reseted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public cleared: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @HostBinding('class.fs-form')\n public fsFormClass = true;\n\n private _registerControl;\n private _snapshot: { [key: string]: any } = {};\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _submit$: (event?: SubmitEvent) => Observable<any> = null;\n private _linkedForms = new Set<FsFormDirective>();\n private _containerParent: FsFormDirective = null;\n private _dirtyChange$ = new Subject<void>();\n private _message = inject(FsMessage);\n // Both lookups walk the element injector, which reaches straight through a\n // dialog opened with `viewContainerRef` into whatever opened it. Anything\n // belonging to a different dialog is discarded, so a set never spans two.\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _ancestorForm = this\n ._ownDialogOnly(inject(FsFormDirective, { optional: true, skipSelf: true }));\n\n\n /**\n * Emits whenever the set's dirty state may have moved. Anything outside the\n * form that renders off it - the dialog actions, say - can't watch\n * `ngForm.valueChanges` on its own, because the edits happen in a nested form's\n * NgForm, not this one's.\n */\n public get dirtyChange$(): Observable<void> {\n return this._dirtyChange$.asObservable();\n }\n\n public get submitted$(): Observable<SubmittedEvent> {\n return this.submitted.asObservable() as Observable<SubmittedEvent>;\n }\n\n public get status$(): Observable<FormStatus> {\n return this._status$.asObservable();\n }\n\n public get element(): HTMLElement {\n return this._element.nativeElement;\n }\n\n /** True when a Save button driving this form would have something to run. */\n public get hasSubmit(): boolean {\n return !!this._submit$;\n }\n\n /**\n * The form this one is linked into, or null when it is a root - either because\n * nothing encloses it or because `[link]=\"false\"` cut it loose. A container\n * supplies the parent when the forms are siblings rather than nested.\n */\n public get parentForm(): FsFormDirective {\n if (!this.link) {\n return null;\n }\n\n return this._ancestorForm || this._containerParent;\n }\n\n /** The outermost form of this set. Submit buttons drive this one. */\n public get rootForm(): FsFormDirective {\n return this.parentForm?.rootForm || this;\n }\n\n /** This form plus every form linked into it, at any depth. */\n public get linkedForms(): FsFormDirective[] {\n return [\n this,\n ...[...this._linkedForms]\n .reduce((forms, form) => [...forms, ...form.linkedForms], []),\n ];\n }\n\n /** True when this form or anything linked into it has unsaved changes. */\n public get dirtyLinked(): boolean {\n return this.linkedForms\n .some((form) => form.ngForm.dirty);\n }\n\n /**\n * True when this form or anything linked into it has a submit handler - i.e.\n * there is something for a Save button to do. A dialog footer can bind to this\n * to swap Save for Done as the mounted tab changes, instead of hard-coding\n * which tab names happen to be savable.\n */\n public get submits(): boolean {\n return this.linkedForms\n .some((form) => form.hasSubmit);\n }\n\n public get submitting(): boolean {\n return this._status$.getValue() === FormStatus.Submitting;\n }\n\n public get validating(): boolean {\n return this._status$.getValue() === FormStatus.Validating;\n }\n\n public get completing(): boolean {\n return this._status$.getValue() === FormStatus.Completing;\n }\n\n /**\n * True when nothing above this form speaks for the set it belongs to. Reads the\n * raw injections rather than `parentForm`, so an unlinked panel inside a dialog\n * still defers to whatever encloses it instead of registering a second backdrop\n * confirm on the same dialog.\n */\n private get _owns(): boolean {\n return !this._ancestorForm && !this._container;\n }\n\n private get _submitEvent(): SubmitEvent {\n return {\n ngForm: this.ngForm,\n submitter: this._submitter,\n };\n }\n\n private get _formValidState$(): Observable<SubmittedEvent> {\n this.submitEvent.emit(this._submitEvent);\n this.valid.emit(this._submitEvent);\n\n const submittedEvent: SubmittedEvent = {\n ngForm: this.ngForm,\n submitter: this._submitter,\n response: null,\n };\n\n // Every form in the set gets to save. A form that only frames the layout - a\n // dialog wrapper around a tab group - carries no submit of its own and simply\n // defers to the tab form linked into it. When several are linked they run in\n // nesting order, so an outer save lands before an inner one, and the response\n // of the last is what the submit resolves with.\n const submits = this.linkedForms\n .filter((form) => form.hasSubmit)\n .map((form) => form._submit$(this._submitEvent));\n\n const submit$: Observable<any> = submits.length ?\n concat(...submits).pipe(toArray(), map((responses) => responses[responses.length - 1])) :\n of(submittedEvent);\n\n return submit$\n .pipe(\n map((response) => {\n submittedEvent.response = response;\n\n return submittedEvent;\n }),\n takeUntil(this.destroy$),\n );\n }\n\n private get _formInvalidState$(): Observable<never> {\n if (this.invalid) {\n this.invalid.emit(this._submitEvent);\n }\n\n const message = 'Please review errors highlighted in red';\n this._message.error(message, { mode: MessageMode.Toast });\n\n const el = this._element.nativeElement.querySelector('.ng-invalid');\n\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n return throwError(() => new Error('Form validation error'));\n }\n\n private get _submitter(): string {\n return this._getOwner().activeSubmitButton?.name;\n }\n\n public ngOnInit() {\n // A form already nested inside another links to that one, which is itself in\n // the container - so it joins the set transitively and must not also register\n // as a container sibling.\n if (this.link) {\n if (this._ancestorForm) {\n this._ancestorForm.linkForm(this);\n } else {\n this._container?.registerForm(this);\n }\n }\n\n // The route guard, dialog backdrop, Ctrl+S and browser close prompt all act\n // on the set as a whole, so exactly one thing registers them: a linked child\n // defers to its parent, and every form in a container defers to the container.\n if (this._owns) {\n super.ngOnInit();\n }\n\n this._listenSubmit();\n this._listenFormStatus();\n\n if (!this.autocomplete) {\n this._registerAutocomplete();\n }\n }\n\n /**\n * Take a nested form into this one's set. Called by the child on init, or by a\n * container linking its siblings - consumers never call it directly.\n */\n public linkForm(form: FsFormDirective): void {\n this._linkedForms.add(form);\n\n Promise.resolve()\n .then(() => {\n this.rootForm._updateDirtySubmitButtons();\n this._cdRef.markForCheck();\n });\n }\n\n public unlinkForm(form: FsFormDirective): void {\n this._linkedForms.delete(form);\n\n Promise.resolve()\n .then(() => {\n this.rootForm._updateDirtySubmitButtons();\n this._cdRef.markForCheck();\n });\n }\n\n /**\n * Adopt a parent that DI could not supply. Only a container calls this, to link\n * forms that are siblings in the template into one set.\n */\n public linkTo(form: FsFormDirective): void {\n if (!form || form === this) {\n return;\n }\n\n this._containerParent = form;\n form.linkForm(this);\n }\n\n public unlinkFrom(): void {\n this._containerParent?.unlinkForm(this);\n this._containerParent = null;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.confirm) {\n this._updateDirtySubmitButtons();\n }\n }\n\n public clearSubmit(submit: (event: SubmitEvent) => Observable<any> = null): void {\n if(!submit || submit === this._submit$) {\n this._submit$ = null;\n }\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public registerSubmit(submit$: () => Observable<any>): void {\n this._submit$ = submit$;\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n // Tab and drawer confirmation belong to whoever owns the set. A linked child\n // shares the same tab groups and the same drawer, so letting it register too\n // would put a second confirm on the same click.\n if (this._owns) {\n super.ngAfterContentInit();\n }\n\n this._registerConfirm();\n this._registerDirtySubmitButton();\n }\n\n public ngOnDestroy(): void {\n // Deregister first: it clears the container-supplied parent, so the unlink\n // below falls through to the DI ancestor rather than repeating the same work.\n this._container?.deregisterForm(this);\n this.parentForm?.unlinkForm(this);\n\n super.ngOnDestroy();\n }\n\n public createSnapshot(): void {\n this._snapshot = this.ngForm.value;\n }\n\n public getSnapshot(): { [key: string]: any } {\n return this._snapshot || {};\n }\n\n public reset(): void {\n this.linkedForms\n .forEach((form) => {\n form.ngForm.resetForm();\n\n Object.keys(form.ngForm.controls)\n .forEach((name: string) => {\n const control = form.ngForm.controls[name];\n control.reset(form._snapshot[name]);\n });\n });\n\n this.reseted.emit();\n }\n\n public clear(): void {\n this.ngForm.resetForm();\n this.cleared.emit();\n }\n\n public dirty(): void {\n this.ngForm.form.markAsDirty();\n this._updateDirtySubmitButtons();\n }\n\n public pristine(): void {\n this.ngForm.form.markAsPristine();\n this._updateDirtySubmitButtons();\n }\n\n public triggerSubmit(options?: { confirmed: boolean }): void {\n this.ngForm.ngSubmit.emit();\n }\n\n public triggerConfirm(): Observable<ConfirmResult> {\n const submitted = this.submitting ? this.submitted.asObservable() : of({});\n\n return submitted\n .pipe(\n take(1),\n mergeMap(() => this._form.confirmUnsaved(this)),\n );\n }\n\n public enable(): void {\n this.ngForm.control.enable();\n\n this._updateDirtySubmitButtons();\n }\n\n public disable(): void {\n this.ngForm.control.disable();\n\n this._getOwner()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n public validate(): void {\n this.linkedForms\n .forEach((form) => {\n Object.values(form.ngForm.controls)\n .forEach((control) => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\n });\n }\n\n public submit$(submitEvent?: SubmitEvent): Observable<SubmittedEvent> {\n return of(submitEvent)\n .pipe(\n tap(() => this._statusValidating()),\n tap(() => this.validate()),\n tap(() => this._statusSubmitting()),\n tap(() => this._setupActiveSubmitButton()),\n tap(() => this._disableButtons()),\n switchMap((data) => this._waitUntilStatusPending()\n .pipe(\n map(() => data),\n )),\n mergeMap(() => {\n const invalid = this.linkedForms\n .some((form) => form.ngForm.status === 'INVALID');\n\n if (invalid) {\n return this._formInvalidState$;\n }\n\n return this._formValidState$;\n }),\n catchError((e) => {\n this._handleError(e);\n\n return of({\n ...this._submitEvent,\n error: e?.message,\n });\n }),\n tap((submittedEvent: SubmittedEvent) => {\n if(!submittedEvent.error) {\n this._completeSubmit(true, submittedEvent);\n }\n }),\n );\n }\n\n private _listenSubmit(): void {\n this\n .ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n filter(() => {\n return [FormStatus.Valid, FormStatus.Invalid]\n .includes(this._status$.getValue());\n }),\n switchMap(() => this.submit$(this._submitEvent)),\n takeUntil(this.destroy$),\n )\n .subscribe();\n }\n\n private _listenFormStatus(): void {\n this._status$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((formStatus: FormStatus) => {\n const cls = [FormStatus.Submitting, FormStatus.Validating];\n const classList = this._element.nativeElement.classList;\n classList.remove(...cls);\n if (cls.indexOf(formStatus) !== -1) {\n classList.add(formStatus);\n }\n });\n\n }\n\n private _getActiveSubmitButton(): FsButtonDirective {\n if(this._getOwner().activeSubmitButton) {\n return this._getOwner().activeSubmitButton;\n }\n\n return this._getOwner()\n .buttons\n .filter((button) => button.submit)[0];\n }\n\n private _completeSubmit(success, submitEvent: SubmittedEvent): void {\n if (success) {\n this.linkedForms\n .forEach((form) => {\n form.ngForm.control.markAsPristine();\n form.createSnapshot();\n });\n\n this.submitted.emit(submitEvent);\n } else {\n this._resetButtons();\n }\n\n if (this._getOwner().activeSubmitButton) {\n if (success) {\n this._getOwner().activeSubmitButton.success();\n } else {\n this._getOwner().activeSubmitButton.error();\n }\n }\n\n this._status$.next(FormStatus.Submitted);\n\n if (success) {\n this._status$.next(FormStatus.Success);\n } else {\n this._status$.next(FormStatus.Error);\n }\n\n this._status$.next(FormStatus.Completing);\n\n const resetDelay = success ? this.successDelay : this.errorDelay;\n\n of(true)\n .pipe(\n delay(resetDelay),\n first(),\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n const valid = this.linkedForms\n .every((form) => form.ngForm.form.status === 'VALID');\n\n if (valid) {\n this._status$.next(FormStatus.Valid);\n } else {\n this._status$.next(FormStatus.Invalid);\n }\n\n this._resetButtons();\n this._getOwner().activeSubmitButton = null;\n this._updateDirtySubmitButtons();\n });\n }\n\n /**\n * Whoever holds the submit buttons for this form. A container when one encloses\n * it, otherwise the root of its linked set - the button that saves a tab's form\n * typically sits outside it, down in the dialog footer.\n *\n * Only a form that actually joined the container may drive its buttons. DI\n * hands `_container` to every form inside, including one cut loose with\n * `[link]=\"false\"`, and an instant-save panel is usually `[confirm]=\"false\"`\n * too - so without this it would take the `!confirm` branch below and\n * re-enable the footer's Save button that the linked set had just disabled.\n */\n private _getOwner(): FsFormBaseDirective {\n return (this.link ? this._container : null) || this.rootForm;\n }\n\n /** Keeps a DI-resolved owner only when it belongs to this form's dialog. */\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n\n private _resetButtons(): void {\n this._getOwner()\n .buttons.forEach((button) => {\n button.reset();\n });\n }\n\n private _registerConfirm(): void {\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((changes) => {\n if(this._dialogBackdropEscape && this._dialogRef) {\n this._dialogRef.disableClose = true;\n }\n\n if (this.confirm) {\n const existing = Object.keys(this._snapshot);\n\n Object.keys(changes)\n .forEach((name: string) => {\n if (existing.indexOf(name) === -1) {\n this._snapshot[name] = changes[name];\n }\n });\n }\n });\n }\n\n private _registerAutocomplete(): void {\n this._registerControl = this.ngForm.form.registerControl.bind(this.ngForm.form);\n\n this.ngForm.form.registerControl = (name: string, control: AbstractControl) => {\n\n const el: Element = this._element.nativeElement.querySelector(`input[name='${name}']`);\n\n if (el) {\n if (!el.getAttribute('autocomplete')) {\n el.setAttribute('autocomplete', 'none');\n el.setAttribute('name', `${name}-${guid()}`);\n }\n }\n\n return this._registerControl(name, control);\n };\n }\n\n private _registerDirtySubmitButton(): void {\n if (!this.ngForm) {\n return;\n }\n\n // Report up: a linked child's edits have to reach the root, since that is\n // where the submit buttons live and what decides whether they are enabled.\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this.rootForm._updateDirtySubmitButtons();\n });\n\n this._getOwner()\n .buttons.changes\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n // Buttons (de)register during change detection (their ngOnInit/ngOnDestroy),\n // so defer to a microtask to update the disabled state outside that pass and\n // avoid ExpressionChangedAfterItHasBeenChecked on the button's disabled binding.\n Promise.resolve().then(() => this._updateDirtySubmitButtons());\n });\n\n // The initial content buttons register (addButton) before the subscription above\n // exists, so their `changes` emission is missed. Apply the initial pristine/dirty\n // disabled state once, deferred so it runs after the current change-detection pass.\n Promise.resolve().then(() => this._updateDirtySubmitButtons());\n }\n\n private _updateDirtySubmitButtons(): void {\n if (!this.ngForm) {\n return;\n }\n\n this._dirtyChange$.next();\n\n this._getOwner()\n .buttons\n .filter((button) => button.submit)\n .forEach((submitButton: FsButtonDirective) => {\n if (\n !this.confirm || !this.dirtySubmitButton || this.dirtyLinked || !submitButton.dirtySubmit\n ) {\n submitButton.enable();\n } else {\n submitButton.disable();\n }\n });\n }\n\n private _statusSubmitting(): void {\n this._status$.next(FormStatus.Submitting);\n }\n\n private _statusValidating(): void {\n this._status$.next(FormStatus.Validating);\n }\n\n private _setupActiveSubmitButton(): void {\n this._getOwner()\n .activeSubmitButton = this._getActiveSubmitButton();\n this._resetButtons();\n\n if (this._getOwner().activeSubmitButton) {\n this._getOwner().activeSubmitButton.process();\n }\n }\n\n private _disableButtons(): void {\n this._getOwner()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n private _waitUntilStatusPending(): Observable<string[]> {\n // Async validators can be pending in any linked form, so hold the submit\n // until every one of them has settled - not just this form's.\n return combineLatest(\n this.linkedForms\n .map((form) => form.ngForm.statusChanges\n .pipe(\n startWith(form.ngForm.status),\n )),\n )\n .pipe(\n first((states) => states.every((state) => state !== 'PENDING')),\n );\n }\n\n private _handleError(e: SubmittedEvent) {\n console.log('%c Form Submit ', 'color: white; background-color: #D33F49', 'Error occured');\n console.group('Error Details:');\n console.log('Message: ', e);\n console.log('FormRef: ', this);\n\n if (this.ngForm.invalid) {\n const errors = getFormErrors(this.ngForm.control, null);\n console.log('Validation Errors: ', errors);\n }\n\n console.groupEnd();\n this._completeSubmit(false, null);\n }\n\n}\n","import {\n ChangeDetectorRef, Directive, ElementRef,\n HostBinding, inject, Input, OnDestroy, OnInit,\n} from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { withinSameDialog } from '../helpers/within-same-dialog';\n\nimport { FsFormDirective } from './form';\nimport { FsFormBaseDirective } from './form-base';\nimport { FsFormContainerDirective } from './form-container';\n\n\n@Directive({\n selector: '[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]',\n standalone: true,\n})\nexport class FsButtonDirective implements OnInit, OnDestroy {\n\n @Input()\n public name;\n\n @Input()\n public dirtySubmit = true;\n\n @Input()\n public set submitDisabled(value: boolean) {\n this._submitDisabled = value;\n this._applyDisabled();\n }\n\n public get submitDisabled(): boolean {\n return this._submitDisabled;\n }\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public submit = false;\n\n private _submitDisabled = false;\n private _formDisabled = false;\n private _previousDisabled = false;\n private _destroy$ = new Subject();\n\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));\n private _matButton = inject(MatButton, { optional: true, host: true });\n private _elementRef = inject(ElementRef);\n private _cdRef = inject(ChangeDetectorRef);\n private _formBase: FsFormBaseDirective;\n\n public ngOnInit() {\n this.submit = this._elementRef.nativeElement.getAttribute('type') === 'submit';\n // Prefer the enclosing container over the form: the form's own button\n // management (dirty-submit tracking, activeSubmitButton, reset) resolves its\n // registry the same way, so buttons must register with the same owner.\n // Registering with the form while the form reads the container leaves the\n // container's button list empty and the submit button never gets\n // dirty-disabled.\n //\n // Note this resolves the ROOT of the linked set, not the nearest form: the\n // button that saves a tab's form typically sits outside it, down in the\n // dialog footer, and drives the whole linked set from there.\n this._formBase = this._container || this._form?.rootForm;\n\n if (this._formBase) {\n this._formBase.addButton(this);\n\n if(this.submit) {\n fromEvent(this.element, 'click')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: MouseEvent) => {\n event.preventDefault();\n this._formBase.activeSubmitButton = this;\n this._formBase.triggerSubmit();\n });\n\n this.transitionStyle = 'none';\n setTimeout(() => {\n this.transitionStyle = null;\n this._cdRef.markForCheck();\n }, 500);\n }\n }\n }\n\n public disable() {\n if (this._matButton && !this._formBase.activeSubmitButton) {\n this._previousDisabled = this._matButton.disabled;\n this._formDisabled = true;\n this._matButton.disableRipple = true;\n this._applyDisabled();\n }\n }\n\n public enable() {\n if (this._matButton) {\n this._formDisabled = false;\n this._matButton.disableRipple = true;\n this._applyDisabled();\n }\n }\n\n public process() {\n this.setClass('process');\n if (this._matButton) {\n this._matButton.disableRipple = true;\n }\n }\n\n public success() {\n this.setClass('success');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public error() {\n this.setClass('error');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public setClass(cls) {\n const svg = this._getSvg(cls);\n this._resetClass();\n this.element.classList.add(`fs-form-submit-button-${cls}`);\n this.element.append(svg);\n }\n\n public get element() {\n return this._elementRef.nativeElement;\n }\n\n public reset() {\n if (!this._previousDisabled) {\n this.enable();\n }\n\n this.element.querySelectorAll('.svg-icon')\n .forEach((el) => {\n el.remove();\n });\n\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n this._resetClass();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n this._formBase?.removeButton(this);\n }\n\n /**\n * Keeps a DI-resolved owner only when it belongs to this button's dialog. A\n * dialog opened with `viewContainerRef` resolves through to whatever opened\n * it, so without this the inner dialog's Save would register with - and\n * submit - the outer dialog's form set.\n */\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n\n // Effective disabled combines the consumer-controlled submitDisabled input with\n // the form's submit-lifecycle state, so form enable/disable never clobbers an\n // explicit [submitDisabled] and the two channels stay independent.\n private _applyDisabled() {\n if (this._matButton) {\n this._matButton.disabled = this._submitDisabled || this._formDisabled;\n this._cdRef.markForCheck();\n }\n }\n\n private _resetClass() {\n this.element.classList\n .remove(\n 'fs-form-submit-button-success', \n 'fs-form-submit-button-error', \n 'fs-form-submit-button-process',\n );\n }\n\n private _getSvg(type) {\n if (type === 'success') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-success\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 38 38\" style=\"enable-background:new 0 0 38 38;\" xml:space=\"preserve\" width=\"38px\" height=\"38px\">\n <g>\n <g class=\"check\">\n <g>\n <path d=\"M29.6,11.9c-0.5-0.5-1.3-0.5-1.8,0L16.3,23.4l-6.1-6.1c-0.5-0.5-1.3-0.5-1.8,0s-0.5,1.3,0,1.8l7,7c0.3,0.3,0.6,0.4,0.9,0.4s0.7-0.1,0.9-0.4l12.4-12.4C30.1,13.2,30.1,12.4,29.6,11.9z\"/>\n </g>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'process') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-process\" width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"2\"><circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\"/>\n <path d=\"M36 18c0-9.94-8.06-18-18-18\"><animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 18 18\" to=\"360 18 18\" dur=\".7s\" repeatCount=\"indefinite\"/></path>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'error') {\n return new DOMParser().parseFromString('<svg class=\"svg-icon svg-icon-error\" xmlns=\"http://www.w3.org/2000/svg\" width=\"38px\" height=\"38px\" viewBox=\"0 0 16 16\"><g><path d=\"M8 1c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7zM8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8v0z\" data-original=\"#444444\" data-old_color=\"#444444\"/><path d=\"M12.2 10.8l-2.8-2.8 2.8-2.8-1.4-1.4-2.8 2.8-2.8-2.8-1.4 1.4 2.8 2.8-2.8 2.8 1.4 1.4 2.8-2.8 2.8 2.8z\"/></g> </svg>', 'text/xml').firstChild;\n }\n }\n}\n","import { Directive, HostBinding, HostListener, Input, OnDestroy, inject } from '@angular/core';\n\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../enums/confirm-result';\n\nimport { FsFormDirective } from './form';\n\n\n@Directive({\n selector: '[fsFormDialogClose],[fs-form-dialog-close]',\n standalone: true,\n})\nexport class FsFormDialogCloseDirective implements OnDestroy {\n private _form = inject(FsFormDirective, { optional: true });\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n\n\n @Input() public closeData;\n\n @HostBinding('attr.type') public type = 'button';\n\n private _destroy$ = new Subject();\n\n @HostListener('click', ['$event.target'])\n public closeClick(): void {\n if(this._form) {\n this._form.triggerConfirm()\n .pipe(\n filter((confirmResult: ConfirmResult) => (confirmResult !== ConfirmResult.Review)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._dialogRef.close(this.closeData);\n });\n } else {\n this._dialogRef.close(this.closeData);\n }\n }\n \n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MatDialogClose, MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { delay, takeUntil } from 'rxjs/operators';\n\nimport { FsButtonDirective } from '../../directives/button.directive';\nimport { FsFormBaseDirective } from '../../directives/form-base';\nimport { FsFormContainerDirective } from '../../directives/form-container';\nimport { FsFormDialogCloseDirective } from '../../directives/form-dialog-close.directive';\nimport { FsFormDirective } from '../../directives/form/form.directive';\nimport { withinSameDialog } from '../../helpers/within-same-dialog';\n\n\n@Component({\n selector: 'fs-form-dialog-actions',\n templateUrl: './form-dialog-actions.component.html',\n styleUrls: ['./form-dialog-actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n 'class': 'form-buttons',\n '[class.save-create]': 'showSave || create',\n },\n imports: [\n MatButton,\n FsButtonDirective,\n MatDialogClose,\n NgTemplateOutlet,\n FsFormDialogCloseDirective,\n ],\n})\nexport class FsFormDialogActionsComponent implements OnInit, OnDestroy {\n\n /** Leave unset to follow whether the enclosing form or container has anything to save. */\n @Input() public save: boolean;\n @Input() public create = false;\n @Input() public close = false;\n /** Leave unset to fill in whenever Save does not apply. */\n @Input() public done: boolean;\n @Input() public closeData = null;\n @Input() public name: string;\n\n public dirty = false;\n\n private _destroy$ = new Subject<void>();\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n // A dialog opened with `viewContainerRef` resolves through to whatever opened\n // it, so an owner from another dialog is discarded - these actions belong to\n // their own dialog's form set and no one else's.\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));\n private _cdRef = inject(ChangeDetectorRef);\n\n /**\n * Whatever owns the form set these actions act on, or null when nothing does.\n * A container answers for every form mounted under it; failing that the\n * enclosing form's root answers for itself and anything linked into it.\n */\n private get _owner(): FsFormBaseDirective {\n return this._container || this._form?.rootForm || null;\n }\n\n /**\n * Save and Done are one decision - whether there is anything to save - rather\n * than two independent switches, so a bare `<fs-form-dialog-actions>` resolves\n * it off the form set it sits in and needs no bindings at all. A footer in a\n * container swaps Save for Done as tabs change without the dialog listing\n * which tabs are savable, and a dialog with no form at all - a read-only one\n * of labelled facts - gets Done, because a submit button there has nothing to\n * submit.\n *\n * An explicit binding always wins. `[done]=\"true\"` on its own means Done and\n * only Done: turning Done on while leaving a Save beside it is never what the\n * caller meant, and the two-flag version of this let that happen silently.\n */\n public get showSave(): boolean {\n if(this.save !== undefined) {\n return this.save;\n }\n\n return this.done === true ? false : this._owner?.submits ?? false;\n }\n\n public get showDone(): boolean {\n return this.done ?? (!this.showSave && !this.create);\n }\n\n public ngOnInit(): void {\n const owner = this._owner;\n\n if(owner) {\n // Track the whole set, not one form's own controls: with a form scoped to a\n // tab's fields, the actions sit outside it in the dialog footer and that\n // form's NgForm holds nothing of its own. Recomputed on every emission\n // rather than latched, so a switch to a pristine tab clears it too.\n owner.dirtyChange$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.dirty = owner.dirtyLinked;\n this._cdRef.markForCheck();\n });\n\n owner.submitted$\n .pipe(\n delay(50),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.dirty = false;\n this._cdRef.markForCheck();\n });\n }\n\n if(this._form) {\n this._form.reseted\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.dirty = false;\n this._cdRef.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n /** Keeps a DI-resolved owner only when it belongs to these actions' dialog. */\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n}\n","@if (showSave || create) {\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n}\n@if (showDone) {\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n}\n@if (showSave || create) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n@if (close) {\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n}\n@if (!(showSave || create)) {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n}\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>","import { Directive, OnInit, inject } from '@angular/core';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTabGroup } from '@angular/material/tabs';\n\nimport { withinSameDialog } from '../../helpers/within-same-dialog';\nimport { FsFormBaseDirective } from '../form-base';\nimport { FsFormContainerDirective } from '../form-container';\nimport { FsFormDirective } from '../form';\n\n\n/**\n * Brings a tab group into the enclosing form set's unsaved-changes confirm.\n *\n * An owner picks up tab groups with `@ContentChildren(MatTabGroup)`, which reaches\n * through its own projected content - including lazily mounted tab bodies - but\n * stops at a child component's view. So a tab group declared inside a child\n * component's own template is invisible to the dialog that contains it, and\n * switching between those tabs never prompts even though switching the outer ones\n * does. That is not a shape worth avoiding: a dialog whose Profile tab is its own\n * component, with its own tabs inside, is the normal way to keep a large dialog\n * readable.\n *\n * DI does cross the boundary a content query cannot, so put this on the nested\n * group and it registers itself with the owner above it:\n *\n * <mat-tab-group fsFormConfirmTabs [(selected)]=\"tab\">\n *\n * Confirming stays gated on the owner's `confirm` and `confirmTabs` inputs, so\n * this only opts the group in - it never forces a prompt on.\n */\n@Directive({\n selector: 'mat-tab-group[fsFormConfirmTabs]',\n standalone: true,\n})\nexport class FsFormConfirmTabsDirective implements OnInit {\n\n private _tabGroup = inject(MatTabGroup, { self: true });\n private _dialogRef = inject<MatDialogRef<any>>(MatDialogRef, { optional: true });\n private _container = this._ownDialogOnly(inject(FsFormContainerDirective, { optional: true }));\n private _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));\n\n public ngOnInit(): void {\n const owner = this._container || this._form?.rootForm;\n\n owner?.registerTabGroup(this._tabGroup);\n }\n\n private _ownDialogOnly<T extends FsFormBaseDirective>(owner: T): T {\n return withinSameDialog(owner, this._dialogRef) ? owner : null;\n }\n}\n","export const ERROR_MESSAGES = {\n required: 'This field is required',\n email: 'This is not a valid email address',\n emails: 'Input valid email addresses, comma separated',\n phone: 'Invalid phone number',\n numeric: 'Value should be numeric',\n integer: 'Value should be an integer',\n min: 'Value should not be less than $(1)',\n max: 'Value should not be greater than $(1)',\n minlength: 'Should not be shorter than $(1) characters',\n maxlength: 'Should not be longer than $(1) characters',\n compare: 'Inputs do not match',\n pattern: 'Value should match pattern $(1)',\n dateRange: 'Invalid date range',\n url: 'This is not a valid url',\n urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',\n greater: 'Value must be greater than $(1)',\n lesser: 'Value must be less than $(1)',\n greaterEqual: 'Value must be greater than or equal $(1)',\n lesserEqual: 'Value must be less than or equal $(1)',\n};\n","import { InjectionToken } from '@angular/core';\nimport { ERROR_MESSAGES } from '../consts/error-messages.const';\n\nexport const VALIDATE_MESSAGES = new InjectionToken<Record<string, string>>(\n 'fs.form.validate-messages',\n);\n\nexport const VALIDATE_MESSAGE_PROVIDER = {\n provide: VALIDATE_MESSAGES,\n useFactory: messageProviderFactory,\n};\n\nexport function messageProviderFactory() {\n return { ...ERROR_MESSAGES };\n}\n\n","import { AfterContentInit, Directive, ElementRef, Injector, Input, OnDestroy, OnInit, Renderer2, inject } from '@angular/core';\nimport { AbstractControl, NgControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { keys, values } from 'lodash-es';\n\nimport {\n VALIDATE_MESSAGES,\n VALIDATE_MESSAGE_PROVIDER,\n} from '../../providers/validate-messages.provider';\nimport { FsFormDirective } from '../form/form.directive';\n\n\nconst resolvedPromise = Promise.resolve();\n\n\nexport interface FsControlDirective {\n validate?(control: AbstractControl): ValidationErrors | null;\n validateAsync?(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;\n}\n\n\n@Directive({\n selector: '[fsFormControl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsControlDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input() public wrapperSelector: string | false;\n @Input() public messageSelector: string | false;\n @Input() public hintSelector: string | false;\n @Input() public labelSelector: string | false;\n @Input() public appendMessageClass: string;\n @Input() public appendErrorClass: string;\n @Input() public appendHintClass: string;\n\n @Input()\n public set validateMessages(messages: Record<string, string>) {\n this._validateMessages = {\n ...this._validateMessages,\n ...messages,\n };\n }\n\n public errors = [];\n\n protected _elementRef = inject(ElementRef);\n protected _renderer2 = inject(Renderer2);\n protected _injector = inject(Injector);\n protected _validateMessages = inject(VALIDATE_MESSAGES, { self: true });\n protected _ngControl = inject(NgControl, { optional: true });\n protected _formDirective = inject<FsFormDirective>(FsFormDirective, { optional: true });\n\n private _destroy$ = new Subject();\n private _statusChanges$ = new Subject<void>();\n private _boundControl: AbstractControl;\n\n constructor() {\n if (!this._ngControl) {\n console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);\n }\n }\n\n /**\n * Always read the control through the directive rather than caching it.\n *\n * NgForm.addControl() runs in a microtask and reassigns dir.control to\n * whatever FormGroup.registerControl() returns — and registerControl() hands\n * back the EXISTING control when the name is already taken (two fields\n * sharing a name, or lazily created content re-registering). A control\n * captured in the constructor is then an orphan: it never emits again, so\n * statusChanges never fires and the validation message is never rendered.\n */\n protected get _control(): AbstractControl {\n return this._ngControl?.control;\n }\n\n public ngOnInit() {\n this._setupValidators();\n }\n\n public ngOnDestroy() {\n this._statusChanges$.complete();\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public ngAfterContentInit() {\n this._subscribeToStatusChagnes();\n }\n\n public getMessageSelector(): string {\n if (this.messageSelector === false) {\n return '';\n }\n\n if (this.messageSelector) {\n return this.messageSelector;\n\n } else if (this._formDirective?.messageSelector) {\n return this._formDirective.messageSelector;\n }\n }\n\n public getHintWrapper(): HTMLElement | null {\n return this._elementRef.nativeElement.querySelector(this.getHintWrapperSelector());\n }\n\n public getHintWrapperSelector(): string | null {\n if (this.hintSelector === false) {\n return '';\n }\n\n if (this.hintSelector) {\n return this.hintSelector;\n\n } else if (this._formDirective?.hintSelector) {\n return this._formDirective.hintSelector;\n }\n }\n\n public getWrapperSelector(): string {\n if (this.wrapperSelector === false) {\n return '';\n }\n\n if (this.wrapperSelector) {\n return this.wrapperSelector;\n\n } else if (this._formDirective?.wrapperSelector) {\n return this._formDirective.wrapperSelector;\n }\n }\n\n public getlabelSelector(): string {\n\n if (this.labelSelector === false) {\n return '';\n }\n\n if (this.labelSelector) {\n return this.labelSelector;\n\n } else if (this._formDirective?.labelSelector) {\n return this._formDirective.labelSelector;\n }\n }\n\n public getWrapperElement() {\n const wrapper = this._getWrapper(this._elementRef.nativeElement);\n\n if (wrapper) {\n return wrapper;\n }\n\n return this._elementRef.nativeElement;\n }\n\n /*\n <mat-form-field class=\"mat-form-field\"> <-- Field Wrapper Class. Look for parents from the native element with the matching wrapperSelector. If not found defaults to native element.\n <input>\n <div class=\"fs-form-message\"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector\n <div class=\"fs-form-message\"></div>\n <div class=\"fs-form-hint\"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector\n </div>\n </mat-form-field>\n */\n\n private get _shouldErrorBeRendered() {\n return this._ngControl.invalid\n && (this._ngControl.dirty || this._formDirective?.ngForm?.submitted);\n }\n\n public render() {\n if (this._ngControl) {\n const renderer = this._renderer2;\n const wrapper = this.getWrapperElement();\n const error = this._ngControl.dirty ? this._getError(this._ngControl) : null;\n\n if (this._shouldErrorBeRendered && error) {\n wrapper.classList.add('ng-invalid', 'ng-dirty');\n } else {\n wrapper.classList.remove('ng-invalid');\n }\n\n if (!this.getMessageSelector()) {\n return;\n }\n\n const messageWrapper = wrapper.querySelector(this.getMessageSelector());\n \n if (!messageWrapper) {\n return console\n .warn(`Failed to locate ${ this.getMessageSelector()}`, this._elementRef.nativeElement);\n }\n\n renderer.addClass(messageWrapper, 'fs-form-message');\n\n if (this.appendMessageClass) {\n renderer.addClass(messageWrapper, this.appendMessageClass);\n }\n\n this._renderHint(error, messageWrapper);\n this._renderError(wrapper, messageWrapper, error);\n }\n }\n\n protected _renderHint(error, messageWrapper) {\n const hints = [\n ...messageWrapper.querySelectorAll('.mat-mdc-form-field-hint'),\n ];\n\n const hintWrapper: HTMLElement = this.getHintWrapper();\n if (hintWrapper) {\n hintWrapper.classList.add('fs-form-hint-wrapper');\n }\n\n hints.forEach((hint) => {\n this._renderer2.setStyle(hint, 'display', error ? 'none' : 'block');\n\n if (this.appendHintClass) {\n this._renderer2.addClass(hint, 'fs-form-hint');\n if(this.appendHintClass) {\n this._renderer2.addClass(hint, this.appendHintClass);\n }\n }\n });\n }\n\n protected _renderError(wrapper, messageWrapper, error) {\n let errorWrapper = wrapper.querySelector('.fs-form-error');\n if (errorWrapper) {\n errorWrapper.remove();\n }\n\n if (!this._shouldErrorBeRendered || !error) {\n return;\n }\n\n errorWrapper = this._renderer2.createElement('div');\n this._renderer2.addClass(errorWrapper, 'fs-form-error');\n this._renderer2.addClass(errorWrapper, `fs-form-error-${error.name}`);\n\n if(this.appendErrorClass) {\n this._renderer2.addClass(errorWrapper, this.appendErrorClass);\n this._renderer2.addClass(errorWrapper, `${this.appendErrorClass}-${error.name}`);\n }\n \n const errorText = this._renderer2.createText(error.message);\n\n this._renderer2.appendChild(errorWrapper, errorText);\n\n const hintWrapper: HTMLElement = messageWrapper.querySelector(this.getHintWrapperSelector());\n if (hintWrapper) {\n hintWrapper.prepend(errorWrapper);\n }\n }\n\n protected _subscribeToStatusChagnes():void {\n // Registration is deferred to a microtask by NgForm.addControl(), so wait\n // for it to settle before binding — otherwise we subscribe to the control\n // that is about to be replaced.\n resolvedPromise\n .then(() => this._bindStatusChanges());\n }\n\n private _bindStatusChanges(): void {\n const control = this._control;\n\n if (!control || control === this._boundControl) {\n return;\n }\n\n this._boundControl = control;\n this._statusChanges$.next();\n\n control.statusChanges\n .pipe(\n takeUntil(this._statusChanges$),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n // The control can still be swapped out from under us (a sibling with\n // the same name registering later), so re-bind before rendering.\n if (this._control !== this._boundControl) {\n this._bindStatusChanges();\n }\n\n this.render();\n });\n\n this.render();\n }\n\n protected _getWrapper(node, count = 0) {\n if (!node || count > 10) {\n return null;\n }\n\n if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {\n return node;\n }\n\n return this._getWrapper(node.parentNode, ++count);\n }\n\n protected _parseErrorMessage(message, args): string {\n values(args)\n .forEach((name) => {\n message = message.replace(/\\$\\(\\d\\)/, name);\n });\n\n return message;\n }\n\n protected _getError(controlRef): { name: string, message: string } {\n\n const name = keys(controlRef.control.errors)[0];\n\n if (!name) {\n return null;\n }\n\n let message = controlRef.control.errors[name];\n\n if (this._validateMessages[name]) {\n message = this._parseErrorMessage(this._validateMessages[name], message);\n }\n\n return { name: name, message: message };\n }\n\n private _setupValidators(): void {\n const control = this._control;\n\n if (this.validate) {\n const validators = control.validator\n ? [control.validator, this.validate.bind(this)]\n : this.validate.bind(this);\n\n control.setValidators(validators);\n }\n\n if (this.validateAsync) {\n const asyncValidators = control.asyncValidator\n ? [control.asyncValidator, this.validateAsync.bind(this)]\n : this.validateAsync.bind(this);\n\n control.setAsyncValidators(asyncValidators);\n }\n\n control.updateValueAndValidity();\n }\n\n}\n","import { AfterViewInit, Directive, Input, OnChanges, OnDestroy } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormCompare]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormCompareDirective extends FsControlDirective\n implements OnChanges, AfterViewInit, OnDestroy, FsValidator {\n\n @Input()\n public fsFormCompare;\n\n @Input('fsFormCompareMessage')\n public set validationMessage(value: string) {\n this._validateMessages.compare = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.fsFormCompare.value === this._elementRef.nativeElement.value) {\n return null;\n }\n \n return { compare: true };\n \n }\n\n public ngAfterViewInit() {\n this.fsFormCompare.addEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n\n public ngOnDestroy() {\n this.fsFormCompare.removeEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { email, isEmpty, isNumeric, phone, url } from '@firestitch/common';\n\nimport { Observable, from, isObservable, of, throwError } from 'rxjs';\nimport { catchError, mapTo, take } from 'rxjs/operators';\n\nimport { isValid } from 'date-fns';\nimport { isObject } from 'lodash-es';\n\n\nexport class FsValidators {\n\n public static email(control: AbstractControl): ValidationErrors | null {\n if (!control.value || email(control.value)) {\n return null;\n }\n\n return { email: true };\n }\n\n public static emails(control: AbstractControl): ValidationErrors | null {\n const model = control.value || '';\n\n const hasInvalidEmails = model\n .split(',')\n .some((part) => !email(part));\n\n return hasInvalidEmails ? { email: true } : null;\n }\n\n public static numeric(control: AbstractControl): ValidationErrors | null {\n if (isEmpty(control.value) || isNumeric(control.value)) {\n return null;\n }\n \n return { numeric: true };\n \n }\n\n public static integer(control: AbstractControl): ValidationErrors | null {\n if (!control.value || String(control.value) === '' || (control.value % 1 === 0)) {\n return null;\n }\n \n return { integer: true };\n \n }\n\n public static phone(control: AbstractControl): ValidationErrors | null {\n if (!control.value || phone(control.value)) {\n return null;\n }\n\n return { phone: true };\n }\n\n public static url(control: AbstractControl, protocolRequired = false): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (!url(control.value)) {\n return { url: true };\n }\n\n if (protocolRequired) {\n const pattern = new RegExp(/^http(s)?:\\/\\//gm);\n\n if (!String(control.value).match(pattern)) {\n return { urlProtocol: true };\n }\n }\n\n return null;\n }\n\n public static dateRange(control: AbstractControl): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (isObject(control.value)) {\n\n const start = control.value.start;\n const end = control.value.end;\n\n if ((!start && !end) || (isValid(start) && isValid(end))) {\n return null;\n }\n }\n\n return { dateRange: true };\n }\n\n public static func(\n control: AbstractControl, \n formFunction: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void, data: any,\n ): Observable<unknown> {\n let result: unknown;\n let stream$: Observable<unknown>;\n\n try {\n result = formFunction(control, data);\n } catch (err) {\n const error = err instanceof Error ? err.message : err;\n\n stream$ = throwError(() => error);\n }\n\n if (!stream$) {\n if (result instanceof Promise) {\n stream$ = from(result);\n } else if (isObservable(result)) {\n stream$ = result;\n } else {\n stream$ = of(null);\n }\n }\n\n return stream$\n .pipe(\n mapTo(null),\n catchError((err) => {\n return of({ validationError: err });\n }),\n take(1),\n );\n }\n}\n","export function isEnabled(value: any): boolean {\n return value !== 'false' && (value || value === '');\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormDateRange]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormDateRangeDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormDateRange;\n\n @Input('fsFormDateRangeMessage')\n public set validationMessage(value: string) {\n this._validateMessages.dateRange = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormDateRange)) {\n return FsValidators.dateRange(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmail]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormEmailDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmail;\n\n @Input('fsFormEmailMessage')\n public set validationMessage(value: string) {\n this._validateMessages.email = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmail)) {\n return FsValidators.email(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmails]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormEmailsDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmails;\n\n @Input('fsFormEmailsMessage')\n public set validationMessage(value: string) {\n this._validateMessages.emails = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmails)) {\n return FsValidators.emails(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormFunction]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormFunctionDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input()\n public fsFormFunction;\n\n @Input()\n public fsFormFunctionData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n \n return FsValidators.func(this._control, this.fsFormFunction, this.fsFormFunctionData);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreaterEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormGreaterEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreaterEqual;\n\n @Input('fsFormGreaterEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreaterEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value < greater) {\n return { greaterEqual: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreater]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormGreaterDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreater;\n\n @Input('fsFormGreaterMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreater);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value <= greater) {\n return { greater: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormInteger]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormIntegerDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormInteger;\n\n @Input('fsFormIntegerMessage')\n public set validationMessage(value: string) {\n this._validateMessages.integer = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormInteger)) {\n return FsValidators.integer(this._control);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesserEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormLesserEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesserEqual;\n\n @Input('fsFormLesserEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesserEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value > lesser) {\n return { lesserEqual: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesser]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormLesserDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesser;\n\n @Input('fsFormLesserMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesser);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value >= lesser) {\n return { lesser: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMax]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMaxDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMax: number;\n\n @Input('fsFormMaxMessage')\n public set validationMessage(value: string) {\n this._validateMessages.max = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.max(this.fsFormMax)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMaxLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMaxLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMaxLength: number;\n\n @Input('fsFormMaxLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.maxlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.maxLength(this.fsFormMaxLength)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMin]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMinDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMin;\n\n @Input('fsFormMinMessage')\n public set validationMessage(value: string) {\n this._validateMessages.min = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.min(parseFloat(this.fsFormMin))(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMinLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormMinLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMinLength: number;\n\n @Input('fsFormMinLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.minlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.minLength(this.fsFormMinLength)(this._control);\n }\n}\n","import { Directive, OnChanges } from '@angular/core';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\n\n/**\n * This directive required for cases when we have custom Control like <fs-phone-field> but without any of our validators applied\n *\n * This directive required for automatic validation messages\n */\n@Directive({\n selector: '[ngModel]' +\n ':not([required])' +\n ':not([fsFormRequired])' +\n ':not([fsFormCompare])' +\n ':not([fsFormDateRange])' +\n ':not([fsFormEmail])' +\n ':not([fsFormEmails])' +\n ':not([fsFormFunction])' +\n ':not([fsFormGreater])' +\n ':not([fsFormGreaterEqual])' +\n ':not([fsFormInteger])' +\n ':not([fsFormLesser])' +\n ':not([fsFormMax])' +\n ':not([fsFormMaxLength])' +\n ':not([fsFormMin])' +\n ':not([fsFormMinLength])' +\n ':not([fsFormNumeric])' +\n ':not([fsFormPattern])' +\n ':not([fsFormPhone])' +\n ':not([fsFormUrl])' +\n ':not([validate])',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormNoFsValidatorsDirective extends FsControlDirective implements OnChanges {\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n protected _subscribeToStatusChagnes(): void {\n if (!!this._control.validator || !!this._control.asyncValidator) {\n super._subscribeToStatusChagnes();\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormNumeric]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormNumericDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormNumeric;\n\n @Input('fsFormNumericMessage')\n public set validationMessage(value: string) {\n this._validateMessages.numeric = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormNumeric)) {\n return FsValidators.numeric(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormPattern]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormPatternDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPattern: RegExp | string;\n\n @Input('fsFormPatternMessage')\n public set validationMessage(value: string) {\n this._validateMessages.pattern = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.pattern(this.fsFormPattern)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormPhone]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n standalone: true,\n})\nexport class FsFormPhoneDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPhone;\n\n @Input('fsFormPhoneMessage')\n public set validationMessage(value: string) {\n this._validateMessages.phone = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormPhone)) {\n return FsValidators.phone(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormRequired],[ngModel][required]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormRequiredDirective extends FsControlDirective implements OnChanges, FsValidator {\n public required = false;\n\n @Input('fsFormRequired')\n public set setFsFormRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('required')\n public set setRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('fsFormRequiredMessage')\n public set validationMessage(value: string) {\n this._validateMessages.required = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.required) {\n return Validators.required(this._control);\n }\n \n return null;\n \n }\n\n public render() {\n const wrapper = this.getWrapperElement();\n\n if (wrapper && this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n // Adding class fs-form-label-requried adds the * to the label\n if (labelWrapper) {\n if (this.required) {\n this._renderer2.addClass(labelWrapper, 'fs-form-label-required');\n } else {\n this._renderer2.removeClass(labelWrapper, 'fs-form-label-required');\n }\n }\n }\n\n super.render();\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormUrl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormUrlDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormUrl;\n\n @Input()\n public fsFormUrlProtocol = true;\n\n @Input('fsFormUrlMessage')\n public set validationMessage(value: string) {\n this._validateMessages.url = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormUrl)) {\n return FsValidators.url(this._control, this.fsFormUrlProtocol);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[validate]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n standalone: true,\n})\nexport class FsFormValidateDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input('validate')\n public validateFn: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void;\n\n @Input('validateData')\n public validateFnData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n\n return FsValidators.func(this._control, this.validateFn, this.validateFnData);\n }\n\n}\n","import { AfterContentInit, ContentChildren, Directive, inject } from '@angular/core';\nimport { NgForm, NgModel } from '@angular/forms';\n\n\n@Directive({\n selector: '[fsFormTemplate],fs-form-template',\n standalone: true,\n})\nexport class FsFormTemplateDirective implements AfterContentInit {\n\n @ContentChildren(NgModel)\n protected _projectedControls: NgModel[];\n\n protected _ngForm: NgForm = inject(NgForm);\n\n public ngAfterContentInit(): void {\n this._projectedControls.forEach((control: NgModel) => {\n this._ngForm.addControl(control);\n });\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { FsButtonDirective } from './button.directive';\n\n\n@Directive({\n selector: 'dummy-selector',\n standalone: true,\n})\nexport class FsSubmitButtonDirective extends FsButtonDirective {\n}\n","import {\n TemplateRef,\n Directive,\n Input,\n ViewContainerRef,\n Injector,\n inject,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[fsFormTemplateOutlet]',\n standalone: true,\n})\nexport class FsFormTemplateOutletDirective implements OnInit {\n\n @Input()\n public template: TemplateRef<any>;\n\n @Input()\n public context: Record<string, unknown> = {};\n\n protected _viewContainerRef: ViewContainerRef = inject(ViewContainerRef)\n protected _injector: Injector = inject(Injector);\n\n public ngOnInit() {\n this._viewContainerRef.createEmbeddedView(\n this.template,\n this.context,\n {\n injector: this._injector,\n },\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormGroupDirective, FormsModule, NgForm, UntypedFormControl } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport {\n FsFormDialogActionsComponent,\n} from './components';\nimport {\n FsFormGreaterEqualDirective, FsFormLesserEqualDirective,\n FsFormTemplateDirective, FsSubmitButtonDirective,\n} from './directives';\nimport { FsButtonDirective } from './directives/button.directive';\nimport { FsFormDialogCloseDirective } from './directives/form-dialog-close.directive';\nimport { FsFormConfirmTabsDirective } from './directives/confirm-tabs/confirm-tabs.directive';\nimport { FsFormContainerDirective } from './directives/form-container/form-container.directive';\nimport { FsFormDirective } from './directives/form/form.directive';\nimport { FsFormCompareDirective } from './directives/validators/compare.directive';\nimport { FsControlDirective } from './directives/validators/control.directive';\nimport { FsFormDateRangeDirective } from './directives/validators/daterange.directive';\nimport { FsFormEmailDirective } from './directives/validators/email.directive';\nimport { FsFormEmailsDirective } from './directives/validators/emails.directive';\nimport { FsFormFunctionDirective } from './directives/validators/function.directive';\nimport { FsFormGreaterDirective } from './directives/validators/greater.directive';\nimport { FsFormIntegerDirective } from './directives/validators/integer.directive';\nimport { FsFormLesserDirective } from './directives/validators/lesser.directive';\nimport { FsFormMaxDirective } from './directives/validators/max.directive';\nimport { FsFormMaxLengthDirective } from './directives/validators/maxlength.directive';\nimport { FsFormMinDirective } from './directives/validators/min.directive';\nimport { FsFormMinLengthDirective } from './directives/validators/minlength.directive';\nimport { FsFormNoFsValidatorsDirective } from './directives/validators/no-fs-validators.directive';\nimport { FsFormNumericDirective } from './directives/validators/numeric.directive';\nimport { FsFormPatternDirective } from './directives/validators/pattern.directive';\nimport { FsFormPhoneDirective } from './directives/validators/phone.directive';\nimport { FsFormRequiredDirective } from './directives/validators/required.directive';\nimport { FsFormUrlDirective } from './directives/validators/url.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormTemplateOutletDirective } from './directives/form-template-outlet.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatDialogModule,\n MatDialogModule,\n FsDialogModule,\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormContainerDirective,\n FsFormConfirmTabsDirective,\n ],\n exports: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormContainerDirective,\n FsFormConfirmTabsDirective,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n public static forRoot(): ModuleWithProviders<FsFormModule> {\n\n /**\n * Hack: https://github.com/angular/components/issues/20097\n */\n ErrorStateMatcher.prototype\n .isErrorState = (\n control: UntypedFormControl | null,\n form: FormGroupDirective | NgForm | null,\n ): boolean => {\n return control?.invalid && control?.touched && control?.dirty;\n };\n\n return {\n ngModule: FsFormModule,\n };\n }\n}\n","// Modules\nexport { FsFormModule } from './app/fs-form.module';\n\n// Services\nexport { FsForm } from './app/services/fsform.service';\n\n// Directives\nexport { FsFormGreaterDirective, FsFormGreaterEqualDirective, FsFormLesserEqualDirective, FsFormTemplateDirective } from './app/directives';\nexport { FsButtonDirective } from './app/directives/button.directive';\nexport { FsFormDialogCloseDirective } from './app/directives/form-dialog-close.directive';\nexport { FsFormConfirmTabsDirective } from './app/directives/confirm-tabs/confirm-tabs.directive';\nexport { FsFormContainerDirective } from './app/directives/form-container/form-container.directive';\nexport { FsFormDirective } from './app/directives/form/form.directive';\nexport { FsSubmitButtonDirective } from './app/directives/submit-button.directive';\nexport { FsFormCompareDirective } from './app/directives/validators/compare.directive';\nexport { FsControlDirective } from './app/directives/validators/control.directive';\nexport { FsFormDateRangeDirective } from './app/directives/validators/daterange.directive';\nexport { FsFormEmailDirective } from './app/directives/validators/email.directive';\nexport { FsFormEmailsDirective } from './app/directives/validators/emails.directive';\nexport { FsFormFunctionDirective } from './app/directives/validators/function.directive';\nexport { FsFormIntegerDirective } from './app/directives/validators/integer.directive';\nexport { FsFormLesserDirective } from './app/directives/validators/lesser.directive';\nexport { FsFormMaxDirective } from './app/directives/validators/max.directive';\nexport { FsFormMaxLengthDirective } from './app/directives/validators/maxlength.directive';\nexport { FsFormMinDirective } from './app/directives/validators/min.directive';\nexport { FsFormMinLengthDirective } from './app/directives/validators/minlength.directive';\nexport { FsFormNoFsValidatorsDirective } from './app/directives/validators/no-fs-validators.directive';\nexport { FsFormNumericDirective } from './app/directives/validators/numeric.directive';\nexport { FsFormPatternDirective } from './app/directives/validators/pattern.directive';\nexport { FsFormPhoneDirective } from './app/directives/validators/phone.directive';\nexport { FsFormRequiredDirective } from './app/directives/validators/required.directive';\nexport { FsFormUrlDirective } from './app/directives/validators/url.directive';\nexport { FsFormValidateDirective } from './app/directives/validators/validate.directive';\nexport { FsFormTemplateOutletDirective } from './app/directives/form-template-outlet.directive';\n\n// Components\nexport { FsFormDialogActionsComponent } from './app/components';\n\nexport { FsValidators } from './app/validators/validators';\n\nexport { FormDeactivateGuard } from './app/guards/form-deactivate.guard';\n\n// Interfaces\nexport { ConfirmConfig } from './app/interfaces/confirm-config';\nexport { FsFormOwner } from './app/interfaces/form-owner';\nexport { SubmitEvent } from './app/interfaces/submit-event';\nexport { SubmittedEvent } from './app/interfaces/submitted-event';\n\n// Enums\nexport { ConfirmResult } from './app/enums/confirm-result';\nexport { FormStatus } from './app/enums/form-status';\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|