@firestitch/form 12.4.20 → 12.4.22

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.
@@ -1 +1 @@
1
- {"version":3,"file":"firestitch-form.js","sources":["../../src/app/enums/confirm-result.ts","../../src/app/helpers/confirm-unsaved.ts","../../src/app/helpers/confirm-result-continue.ts","../../src/app/services/fsform.service.ts","../../src/app/helpers/get-active-route.ts","../../src/app/guards/form-deactivate.guard.ts","../../src/app/helpers/get-form-errors.ts","../../src/app/directives/form-dialog-close.directive.ts","../../src/app/enums/form-status.ts","../../src/app/directives/form/form.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/helpers/is-enabled.ts","../../src/app/directives/validators/required.directive.ts","../../src/app/validators/validators.ts","../../src/app/directives/validators/min.directive.ts","../../src/app/directives/validators/max.directive.ts","../../src/app/directives/validators/minlength.directive.ts","../../src/app/directives/validators/maxlength.directive.ts","../../src/app/directives/validators/email.directive.ts","../../src/app/directives/validators/emails.directive.ts","../../src/app/directives/validators/phone.directive.ts","../../src/app/directives/validators/compare.directive.ts","../../src/app/directives/validators/integer.directive.ts","../../src/app/directives/validators/numeric.directive.ts","../../src/app/directives/validators/pattern.directive.ts","../../src/app/directives/validators/function.directive.ts","../../src/app/directives/validators/greater.directive.ts","../../src/app/directives/validators/daterange.directive.ts","../../src/app/directives/validators/lesser.directive.ts","../../src/app/directives/validators/url.directive.ts","../../src/app/directives/button.directive.ts","../../src/app/directives/validators/validate.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/validators/no-fs-validators.directive.ts","../../src/app/directives/submit-button.directive.ts","../../src/app/fs-form.module.ts","../../src/public_api.ts","../../src/firestitch-form.ts"],"sourcesContent":["export enum ConfirmResult {\n Save = 'save',\n Discard = 'discard',\n Review = 'review',\n Invalid = 'invalid',\n Pristine = 'pristine',\n}\n","import { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { ConfirmResult } from '../enums/confirm-result';\n\n\nexport function confirmUnsaved(directives: FsFormDirective[], prompt: FsPrompt): Observable<ConfirmResult> {\n return new Observable(observer => {\n // TODO support for multiple directives per page\n const form = directives[0];\n\n if (!form.confirm || !form.ngForm.dirty) {\n observer.next(ConfirmResult.Pristine);\n observer.complete();\n return;\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 & Continue';\n let discardLabel = 'Discard Changes & 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 prompt.confirm({\n title: title,\n template: message,\n dialogConfig: { width: 'auto' },\n buttons: [\n {\n label: saveLabel,\n color: 'primary',\n value: 'save'\n },\n {\n label: discardLabel,\n value: 'discard'\n },\n {\n label: cancelLabel,\n cancel: true\n }\n ]\n }).subscribe((value) => {\n\n if (value === 'discard') {\n observer.next(ConfirmResult.Discard);\n observer.complete();\n form.reset();\n }\n\n if (value === 'save') {\n\n form.submitted\n .pipe(\n first()\n )\n .subscribe(() => {\n observer.next(ConfirmResult.Save);\n observer.complete();\n });\n\n form.invalid\n .pipe(\n first()\n )\n .subscribe(() => {\n observer.next(ConfirmResult.Invalid);\n observer.complete();\n });\n\n form.ngForm.control.markAsPristine();\n form.triggerSubmit({ confirmed: true });\n }\n\n }, (error: any) => {\n observer.next(ConfirmResult.Review);\n observer.complete();\n });\n });\n}\n","import { ConfirmResult } from '../enums/confirm-result';\n\nexport function confirmResultContinue(result) {\n return result === ConfirmResult.Discard || result === ConfirmResult.Save || result === ConfirmResult.Pristine;\n}\n","import { Injectable, Type } from '@angular/core';\n\nimport { Subject, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\n\ninterface BroadcastEvent {\n key: any;\n data?: any;\n}\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>, FsFormDirective[]>();\n\n private _eventBus: Subject<BroadcastEvent>;\n\n constructor() {\n this._eventBus = new Subject<BroadcastEvent>();\n }\n\n // @deprecated\n public broadcast(key: any, data?: any) {\n this._eventBus.next({key, data});\n }\n\n // @deprecated\n public on<T>(key: any): Observable<T> {\n return this._eventBus.asObservable()\n .pipe(\n filter(event => event.key === key),\n map(event => <T>event.data)\n );\n }\n\n public registerFormDirective(routeComponent: Type<any>, directive: FsFormDirective) {\n const directives = this.getFormDirectives(routeComponent) || [];\n directives.push(directive);\n\n this._formDirectiveStore.set(routeComponent, directives);\n }\n\n public getFormDirectives(routeComponent): FsFormDirective[] {\n return this._formDirectiveStore.get(routeComponent);\n }\n\n public removeFormDirective(routeComponent) {\n this._formDirectiveStore.delete(routeComponent);\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 { Injectable } from '@angular/core';\nimport { ActivatedRoute, CanDeactivate } from '@angular/router';\n\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { confirmUnsaved } from '../helpers/confirm-unsaved';\nimport { confirmResultContinue } from '../helpers';\nimport { FsForm } from '../services/fsform.service';\nimport { getActiveRoute } from '../helpers/get-active-route';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormDeactivateGuard implements CanDeactivate<any> {\n\n constructor(\n private _prompt: FsPrompt,\n private _fsForm: FsForm,\n private _route: ActivatedRoute,\n ) {}\n\n 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: FsFormDirective[] = this._fsForm.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 confirmUnsaved(directives, this._prompt)\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n\n}\n","import { AbstractControl, FormGroup, 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 FormGroup) {\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","import { Directive, HostListener, OnDestroy, HostBinding } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n\n@Directive({\n selector: '[fsFormDialogClose],[fs-form-dialog-close]'\n})\nexport class FsFormDialogCloseDirective implements OnDestroy {\n\n public clicked$ = new Subject();\n public registered = false;\n\n @HostBinding('attr.type') type = 'button';\n\n @HostListener('click', ['$event.target'])\n public click() {\n this.clicked$.next();\n }\n\n public ngOnDestroy() {\n this.clicked$.complete();\n }\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 {\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, NgForm } from '@angular/forms';\nimport { ActivatedRoute, Route } from '@angular/router';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { guid } from '@firestitch/common';\nimport { DrawerRef } from '@firestitch/drawer';\nimport { FsMessage, MessageMode } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport {\n BehaviorSubject,\n defer,\n fromEvent,\n iif,\n isObservable,\n Observable,\n of,\n Subject,\n throwError\n} from 'rxjs';\nimport {\n catchError,\n delay,\n filter,\n first,\n map,\n mapTo,\n mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\n\nimport { FormDeactivateGuard } from '../../guards/form-deactivate.guard';\nimport { confirmResultContinue } from '../../helpers/confirm-result-continue';\nimport { confirmUnsaved } from '../../helpers/confirm-unsaved';\nimport { getActiveRoute } from '../../helpers/get-active-route';\nimport { getFormErrors } from '../../helpers/get-form-errors';\nimport { FsForm } from '../../services/fsform.service';\nimport { FsButtonDirective } from '../button.directive';\nimport { FsFormDialogCloseDirective } from '../form-dialog-close.directive';\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FormStatus } from './../../enums/form-status';\nimport { ConfirmConfig, ConfirmTabGroup, SubmittedEvent } from './../../interfaces';\nimport { SubmitEvent } from './../../interfaces/submit-event';\n\n\n@Directive({\n selector: '[fsForm]',\n})\nexport class FsFormDirective implements OnInit, OnDestroy, AfterContentInit, OnChanges {\n\n @Input()\n public wrapperSelector = '.fs-form-wrapper,.mat-form-field';\n\n @Input()\n public messageSelector = '.fs-form-message,.mat-form-field-subscript-wrapper';\n\n @Input()\n public hintSelector = '.fs-form-hint,.mat-form-field-hint-wrapper';\n\n @Input()\n public labelSelector = '.fs-form-label,.mat-form-field-label';\n\n @Input()\n public autocomplete = false;\n\n @Input()\n public shortcuts = true; // Ctrl + s\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 confirmTabs = true;\n\n @Input()\n public dirtySubmitButton = true;\n\n @Input()\n public submit: (event: SubmitEvent) => Observable<any>;\n\n @Input()\n public successDelay = 0;\n\n @Input()\n public errorDelay = 1000;\n\n @Input()\n public tabGroup: MatTabGroup;\n\n @Input()\n public deactivationGuard = 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 @Output()\n public submitRegistered: EventEmitter<any> = new EventEmitter();\n\n @HostBinding('class.fs-form')\n public fsFormClass = true;\n\n @ContentChildren(FsFormDialogCloseDirective, { descendants: true })\n public formDialogClose: QueryList<FsFormDialogCloseDirective>;\n\n @ContentChildren(MatTabGroup, { descendants: true })\n private _tabGroups: QueryList<MatTabGroup> = new QueryList();\n\n private _buttons = new QueryList<FsButtonDirective>();\n private _registerControl;\n private _activeSubmitButton: FsButtonDirective;\n private _dialogBackdropEscape = false;\n private _snapshot: { [key: string]: any } = {};\n private _activatedRouteConfig: Route | null;\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _destroy$ = new Subject();\n private _confirmed = false;\n\n constructor(\n @Inject(NgForm)\n public ngForm: NgForm,\n private _form: FsForm,\n private _element: ElementRef,\n private _message: FsMessage,\n private _prompt: FsPrompt,\n private _ngZone: NgZone,\n private _cdRef: ChangeDetectorRef,\n\n @Optional() @Inject(MatDialogRef)\n private _dialogRef: MatDialogRef<any>,\n\n @Optional() @Inject(DrawerRef)\n private _drawerRef: DrawerRef<any>,\n\n private _route: ActivatedRoute,\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 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._form.broadcast('valid', this._submitEvent);\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 if (!this.submit) {\n return of(submittedEvent);\n }\n\n const result = this.submit(this._submitEvent);\n\n if (!isObservable(result)) {\n return of(submittedEvent);\n }\n\n return result\n .pipe(\n map((response) => {\n submittedEvent.response = response;\n\n return submittedEvent;\n })\n );\n }\n\n private get _formInvalidState$(): Observable<never> {\n this._form.broadcast('invalid', this._submitEvent);\n\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('Form validation error');\n }\n\n private get _submitter(): string {\n return this._activeSubmitButton\n ? this._activeSubmitButton.name\n : null;\n }\n\n public ngOnInit() {\n if (this.deactivationGuard) {\n this._registerCanDeactivateGuard();\n }\n\n this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n this._listenSubmit();\n this._listenFormStatus();\n\n if (!this.autocomplete) {\n this._registerAutocomplete();\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.confirm) {\n this._updateDirtySubmitButtons();\n }\n }\n\n public registerSubmit(fn: () => Observable<any>): void {\n this.submit = fn;\n setTimeout(() => {\n this.submitRegistered.emit();\n this._cdRef.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n this._registerConfirm();\n this._registerConfirmDialogClose();\n this._registerConfirmDrawerClose();\n this._registerConfirmTabs();\n this._registerDrawerClose();\n this._registerDirtySubmitButton();\n }\n\n public ngOnDestroy(): void {\n this._cleanupCanDeactivate();\n this._destroy$.next();\n this._destroy$.complete();\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.ngForm.resetForm();\n\n Object.keys(this.ngForm.controls)\n .forEach((name: string) => {\n const control = this.ngForm.controls[name];\n control.reset(this._snapshot[name]);\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 triggerSubmit(options?: { confirmed: boolean }): void {\n this._confirmed = options?.confirmed;\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(() => confirmUnsaved([this], this._prompt)),\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._buttons.forEach((button) => {\n button.disable();\n });\n }\n\n public addButton(button: FsButtonDirective): void {\n this._buttons.reset(\n [\n ...this._buttons.toArray(),\n button,\n ]);\n }\n\n public removeButton(button: FsButtonDirective): void {\n this._buttons.reset(\n [\n ...this._buttons.toArray()\n .filter((item) => (button !== item)),\n ]);\n }\n\n private _listenSubmit(): void {\n this.ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n map((event) => {\n return { event, confirmed: this._confirmed };\n }),\n tap(() => this._confirmed = false),\n filter(() => {\n return [FormStatus.Valid, FormStatus.Invalid]\n .includes(this._status$.getValue());\n }),\n tap(() => this._broadcasValidatingEvents()),\n tap(() => this.validate()),\n tap(() => this._broadcastSubmittingEvents()),\n switchMap((data) => this._waitUntilStatusPending()\n .pipe(\n mapTo(data),\n )),\n tap(() => this._setupActiveSubmitButton()),\n tap(() => this._disableButtons()),\n mergeMap((data) => {\n if (this.ngForm.status === 'INVALID') {\n return this._formInvalidState$;\n }\n\n return this._formValidState$\n .pipe(\n map((submitEvent) => ({\n ...submitEvent,\n confirmed: data.confirmed\n })\n )\n )\n }),\n catchError((e, source$) => {\n this._handleError(e);\n\n return source$;\n }),\n tap((submittedEvent: SubmittedEvent) => {\n this._completeSubmit(true, submittedEvent);\n }),\n takeUntil(this._destroy$)\n )\n .subscribe(() => { });\n }\n\n public validate(): void {\n Object.values(this.ngForm.controls)\n .forEach((control) => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\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 _listenWindowClose(): void {\n fromEvent(window, 'beforeunload')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: Event) => {\n if (this.confirm && this.confirmBrowser && this.ngForm.dirty) {\n event.returnValue = false;\n }\n });\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 dialog = document.getElementById(this._dialogRef.id);\n const paths = event.composedPath();\n\n if (paths) {\n paths.forEach(item => {\n if (dialog === item) {\n this._ngZone.run(() => {\n this._formClose();\n });\n }\n });\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {\n event.preventDefault();\n\n if (this.shortcuts) {\n if (this._elementInForm(document.activeElement)) {\n this.ngForm.ngSubmit.next();\n }\n }\n }\n });\n });\n }\n\n private _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.Pristine || result === ConfirmResult.Discard\n ? of(null)\n : this.submitted.asObservable();\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 _registerDialogClose(directive: FsFormDialogCloseDirective): void {\n if (!directive.registered) {\n directive.registered = true;\n\n directive.clicked$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._formClose();\n });\n }\n }\n\n private _getActiveSubmitButton(): FsButtonDirective {\n const submitButtons = this._buttons\n .filter((button) => button.submit);\n\n const activeButton = submitButtons\n .find(button => {\n return button.active;\n });\n\n return activeButton ? activeButton : submitButtons[0];\n }\n\n private _elementInForm(el: Element): boolean {\n if (el.isSameNode(this._element.nativeElement)) {\n return true;\n } else if (el.parentElement) {\n return this._elementInForm(el.parentElement);\n }\n\n return false;\n }\n\n private _completeSubmit(success, submitEvent: SubmittedEvent): void {\n if (success) {\n this.ngForm.control.markAsPristine();\n this.createSnapshot();\n this.submitted.emit(submitEvent);\n } else {\n this._resetButtons();\n }\n\n if (this._activeSubmitButton) {\n if (success) {\n this._activeSubmitButton.success();\n } else {\n this._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 ).subscribe(() => {\n if (this.ngForm.form.status === 'VALID') {\n this._status$.next(FormStatus.Valid);\n } else {\n this._status$.next(FormStatus.Invalid);\n }\n\n this._resetButtons();\n this._resetActiveButtons();\n this._updateDirtySubmitButtons();\n });\n }\n\n private _resetButtons(): void {\n this._buttons.forEach((button) => {\n button.reset();\n });\n }\n\n private _resetActiveButtons(): void {\n this._buttons.forEach((button) => {\n button.resetActive();\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.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 _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();\n subscriber.complete();\n } else {\n subscriber.error();\n }\n });\n } else {\n subscriber.next();\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();\n subscriber.complete();\n }\n })\n ),\n defer(() => {\n subscriber.next();\n subscriber.complete();\n }),\n )\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n }\n\n private _registerConfirmTabs(): void {\n if (this.tabGroup) {\n this.registerConfirmTabGroup(this.tabGroup);\n }\n\n this.registerConfirmTabGroups(this._tabGroups.toArray());\n\n this._tabGroups.changes\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe(() => {\n this.registerConfirmTabGroups(this._tabGroups.toArray());\n });\n }\n\n public registerConfirmTabGroups(tabGroups: MatTabGroup[]): void {\n tabGroups.forEach((tabGroup: MatTabGroup) => {\n this.registerConfirmTabGroup(tabGroup);\n });\n }\n\n public registerConfirmTabGroup(tabGroup: MatTabGroup): void {\n const confirmTabGroup = tabGroup as ConfirmTabGroup;\n if (!confirmTabGroup._originalHandleClick) {\n confirmTabGroup._originalHandleClick = tabGroup._handleClick;\n confirmTabGroup._handlClick$ = new Subject<{ tab: MatTab; tabHeader: MatTabHeader; idx: number }>();\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 takeUntil(this._destroy$),\n )\n .subscribe((event) => {\n if (!this.submitting) {\n if (this.confirm && this.confirmTabs) {\n this.triggerConfirm()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((result) => {\n if (confirmResultContinue(result)) {\n confirmTabGroup.selectedIndex = event.idx;\n }\n });\n } else {\n confirmTabGroup._originalHandleClick(event.tab, event.tabHeader, event.idx);\n }\n }\n });\n }\n\n private _registerConfirmDialogClose(): void {\n if (this._dialogRef) {\n this.formDialogClose.forEach(item => {\n this._registerDialogClose(item);\n });\n\n this.formDialogClose.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((e) => {\n e.forEach(item => {\n this._registerDialogClose(item);\n });\n });\n }\n }\n\n private _registerConfirmDialogBackdropEscape(): void {\n this._dialogBackdropEscape = this._dialogRef && this._dialogRef.disableClose !== true;\n\n if (this._dialogRef && !this._dialogRef.disableClose) {\n this._dialogRef.disableClose = true;\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 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 el.setAttribute('name', name + '_' + guid());\n\n if (!el.getAttribute('autocomplete')) {\n el.setAttribute('autocomplete', 'none');\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 this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n\n this._buttons.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n }\n\n private _updateDirtySubmitButtons(): void {\n this._buttons\n .filter((button) => button.submit)\n .forEach((submitButton: FsButtonDirective) => {\n if (!this.confirm || !this.dirtySubmitButton || this.ngForm.dirty || !submitButton.dirtySubmit) {\n submitButton.enable();\n } else {\n submitButton.disable();\n }\n });\n }\n\n private _broadcastSubmittingEvents(): void {\n this._status$.next(FormStatus.Submitting);\n this._form.broadcast('submit', this.ngForm);\n }\n\n private _broadcasValidatingEvents(): void {\n this._status$.next(FormStatus.Validating);\n }\n\n private _setupActiveSubmitButton(): void {\n this._activeSubmitButton = this._getActiveSubmitButton();\n this._resetButtons();\n\n if (this._activeSubmitButton) {\n this._activeSubmitButton.process();\n }\n }\n\n private _disableButtons(): void {\n this._buttons.forEach((button) => {\n button.disable();\n });\n }\n\n private _waitUntilStatusPending(): Observable<string> {\n return this.ngForm.statusChanges\n .pipe(\n startWith(this.ngForm.status),\n first((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\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\n this._completeSubmit(false, null);\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","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};\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 {\n Input,\n ElementRef,\n Renderer2,\n Directive,\n Injector,\n Optional,\n Inject,\n Self,\n OnInit,\n OnDestroy,\n AfterContentInit,\n} from '@angular/core';\nimport { NgControl, AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { values, keys } from 'lodash-es';\n\nimport { FsFormDirective } from '../form/form.directive';\nimport {\n VALIDATE_MESSAGE_PROVIDER,\n VALIDATE_MESSAGES\n} from '../../providers/validate-messages.provider';\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})\nexport class FsControlDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input() wrapperSelector: string | false;\n @Input() messageSelector: string | false;\n @Input() hintSelector: string | false;\n @Input() labelSelector: string | false;\n @Input() appendMessageClass = 'fs-form-message';\n @Input() appendLabelClass = 'fs-form-label';\n @Input() appendErrorClass = 'fs-form-error';\n @Input() appendHintClass = 'fs-form-hint';\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 _validateMessages = { ...ERROR_MESSAGES };\n protected _destroy$ = new Subject();\n protected _control: AbstractControl;\n\n constructor(\n protected elementRef: ElementRef,\n protected renderer2: Renderer2,\n protected injector: Injector,\n @Self() @Inject(VALIDATE_MESSAGES) protected _validateMessages,\n @Optional() protected ngControl: NgControl,\n @Optional() @Inject(FsFormDirective) protected formDirective: FsFormDirective,\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 ngOnInit() {\n this._setupValidators();\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n ngAfterContentInit() {\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 getMessageSelector(): string {\n\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 protected getHintWrapperSelector(): string {\n\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 protected getWrapperSelector(): string {\n\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 protected 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 protected getWrapperElement() {\n\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 protected 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 const shouldErrorBeRendered = this.ngControl.invalid\n && (this.ngControl.dirty || this.formDirective?.ngForm?.submitted);\n\n if (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.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);\n }\n\n if (this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n if (labelWrapper) {\n if (this.appendLabelClass) {\n this.renderer2.addClass(labelWrapper, this.appendLabelClass);\n }\n }\n }\n\n if (this.appendMessageClass) {\n renderer.addClass(messageWrapper, this.appendMessageClass);\n }\n\n if (this.getHintWrapperSelector()) {\n const hint = messageWrapper.querySelector(this.getHintWrapperSelector());\n\n if (hint) {\n renderer.setStyle(hint, 'display', error ? 'none' : 'block');\n\n if (this.appendHintClass) {\n renderer.addClass(hint, this.appendHintClass);\n }\n }\n }\n\n let errorWrapper = wrapper.querySelector('.fs-form-error-target');\n if (errorWrapper) {\n errorWrapper.remove();\n }\n\n if (!shouldErrorBeRendered || !error) {\n return;\n }\n\n errorWrapper = renderer.createElement('div');\n renderer.addClass(errorWrapper, 'fs-form-error-target');\n renderer.addClass(errorWrapper, this.appendErrorClass);\n renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);\n\n const errorText = renderer.createText(error.message);\n\n renderer.appendChild(errorWrapper, errorText);\n messageWrapper.appendChild(errorWrapper);\n }\n }\n\n protected getWrapper(node, count = 0) {\n\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","export function isEnabled(value: any): boolean {\n return value !== 'false' && (value || value === '');\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 { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormRequired],[ngModel][required]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 } else {\n return null;\n }\n }\n\n protected render() {\n\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 { AbstractControl, ValidationErrors } from '@angular/forms';\nimport { email, isEmpty, isNumeric, phone, url } from '@firestitch/common';\nimport { isValid } from 'date-fns';\nimport { isObject } from 'lodash-es';\nimport { Observable, from, isObservable, of, throwError } from 'rxjs';\nimport { catchError, mapTo, take } from 'rxjs/operators';\n\nexport class FsValidators {\n\n 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 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 static numeric(control: AbstractControl): ValidationErrors | null {\n if (isEmpty(control.value) || isNumeric(control.value)) {\n return null;\n } else {\n return { numeric: true }\n }\n }\n\n static integer(control: AbstractControl): ValidationErrors | null {\n if (!control.value || String(control.value) === '' || (control.value % 1 === 0)) {\n return null;\n } else {\n return { integer: true }\n }\n }\n\n 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 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 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 static func(control: AbstractControl, formFunction, data: any) {\n let result: unknown;\n let stream$: Observable<unknown>\n\n try {\n result = formFunction(control, data);\n } catch (err) {\n err = err instanceof Error ? err.message : err;\n\n stream$ = throwError(err);\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","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})\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';\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})\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: '[fsFormMinLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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, 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})\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 } 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})\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})\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 { 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})\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, OnDestroy, AfterViewInit, OnChanges } from '@angular/core';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormCompare]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\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 } else {\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 { 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: '[fsFormInteger]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 } else {\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';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormNumeric]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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})\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 { Observable, of } from 'rxjs';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\n\n\n@Directive({\n selector: '[fsFormFunction]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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: '[fsFormGreater]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 { 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})\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';\n\n\n@Directive({\n selector: '[fsFormLesser]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 } 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: '[fsFormUrl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormUrlDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormUrl;\n\n @Input()\n public fsFormUrlProtocol = false;\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 } else {\n return null;\n }\n }\n\n}\n","import { Directive, OnInit, Host, ElementRef, HostBinding, Optional, Input, OnDestroy, ChangeDetectorRef } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { FsFormDirective } from './form/form.directive';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n\n@Directive({\n selector: '[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]',\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 form: FsFormDirective;\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public active = false;\n public submit = false;\n\n private _previousDisabled = false;\n private _destroy$ = new Subject();\n\n constructor(\n @Optional() @Host() private _matButton: MatButton,\n @Optional() private _form: FsFormDirective,\n private _elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n ) {}\n\n public ngOnInit() {\n this.submit = this._elementRef.nativeElement.getAttribute('type') === 'submit';\n this.form = this.form || this._form;\n\n if (this.form) {\n this.form.addButton(this);\n\n if(this.submit) {\n fromEvent(this.element, 'click')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.active = true;\n });\n\n if (this.dirtySubmit) {\n if (this.form.dirtySubmitButton) {\n if(!this.form.ngForm.dirty) {\n this.disable();\n }\n }\n }\n\n this.transitionStyle = 'none';\n setTimeout(() => {\n this.transitionStyle = null;\n }, 500);\n }\n }\n }\n\n public disable() { \n if (this._matButton && !this.active) {\n this._previousDisabled = this._matButton.disabled;\n this._matButton.disabled = true;\n this._cdRef.markForCheck(); \n }\n }\n\n public enable() {\n if (this._matButton) {\n this._matButton.disabled = false;\n this._matButton.disableRipple = true;\n this._cdRef.markForCheck();\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._disableShadowAnimation();\n this.element.classList.add(`submit-${cls}`);\n this.element.append(svg);\n }\n\n public get element() {\n return this._elementRef.nativeElement;\n }\n\n public resetActive() {\n this.active = false;\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();\n this._destroy$.complete();\n this.form?.removeButton(this);\n }\n\n private _disableShadowAnimation() {\n // .mat-elevation-z2 removes the click shadow animation\n //this.element.classList.add('mat-elevation-z2');\n }\n\n private _resetClass() {\n this.element.classList.remove('submit-success', 'submit-error', 'submit-process', 'mat-elevation-z2');\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, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\n\n\n@Directive({\n selector: '[validate]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormValidateDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input('validate')\n public validateFn;\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 { Component, OnInit, ChangeDetectionStrategy, Input, Optional, ChangeDetectorRef, OnDestroy } from '@angular/core';\r\n\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { delay, filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { FsFormDirective } from '../../directives/form/form.directive';\r\nimport { ConfirmResult } from '../../enums/confirm-result';\r\n\r\n\r\n@Component({\r\n selector: 'fs-form-dialog-actions',\r\n templateUrl: './form-dialog-actions.component.html',\r\n styleUrls: ['./form-dialog-actions.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FsFormDialogActionsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() public save = true;\r\n @Input() public create = false;\r\n @Input() public close = false;\r\n @Input() public done = false;\r\n @Input() public closeData = null;\r\n @Input() public name: string;\r\n\r\n public dirty = false;\r\n\r\n private _destroy$ = new Subject<void>();\r\n \r\n constructor(\r\n @Optional() private _form: FsFormDirective,\r\n @Optional() private _dialogRef: MatDialogRef<any>,\r\n private _cdRef: ChangeDetectorRef, \r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n if(this._form) {\r\n this._form.ngForm.valueChanges\r\n .pipe( \r\n filter(() => (!this.dirty)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = this._form.ngForm.dirty;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.submitted\r\n .pipe(\r\n delay(50),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.reseted\r\n .pipe(\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n }\r\n }\r\n \r\n public closeClick(): void {\r\n if(this._form) {\r\n this._form.triggerConfirm()\r\n .pipe(\r\n filter((confirmResult: ConfirmResult) => (confirmResult !== ConfirmResult.Review)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this._dialogRef.close(this.closeData);\r\n });\r\n } else {\r\n this._dialogRef.close(this.closeData);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroy$.next();\r\n this._destroy$.complete();\r\n }\r\n}\r\n","<div class=\"form-buttons\" [ngClass]=\"{ 'save-create': save || create }\">\n <ng-container *ngIf=\"save || 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 [disabled]=\"close && !dirty && !create\"\n [matDialogClose]=\"null\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"done\">\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [matDialogClose]=\"null\">\n Done\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"save || create\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"close\">\n <button\n mat-button\n type=\"button\"\n class=\"close\"\n [color]=\"dirty ? 'basic' : 'primary'\"\n (click)=\"closeClick()\">\n Close\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"!(save || create)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n</div>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Directive, Input, 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([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})\nexport class FsFormNoFsValidatorsDirective extends FsControlDirective implements OnChanges {\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n}\n","import { Directive } from '@angular/core';\n\nimport { FsButtonDirective } from './button.directive';\n\n\n@Directive({\n selector: 'dummy-selector',\n})\nexport class FsSubmitButtonDirective extends FsButtonDirective {\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormGroupDirective, FormsModule, NgForm } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';\n\nimport { FsFormDirective } from './directives/form/form.directive';\nimport { FsControlDirective } from './directives/validators/control.directive';\nimport { FsFormRequiredDirective } from './directives/validators/required.directive';\nimport { FsFormMinDirective } from './directives/validators/min.directive';\nimport { FsFormMaxDirective } from './directives/validators/max.directive';\nimport { FsFormMinLengthDirective } from './directives/validators/minlength.directive';\nimport { FsFormMaxLengthDirective } from './directives/validators/maxlength.directive';\nimport { FsFormEmailDirective } from './directives/validators/email.directive';\nimport { FsFormEmailsDirective } from './directives/validators/emails.directive';\nimport { FsFormPhoneDirective } from './directives/validators/phone.directive';\nimport { FsFormCompareDirective } from './directives/validators/compare.directive';\nimport { FsFormIntegerDirective } from './directives/validators/integer.directive';\nimport { FsFormNumericDirective } from './directives/validators/numeric.directive';\nimport { FsFormPatternDirective } from './directives/validators/pattern.directive';\nimport { FsFormFunctionDirective } from './directives/validators/function.directive';\nimport { FsFormGreaterDirective } from './directives/validators/greater.directive';\nimport { FsFormDateRangeDirective } from './directives/validators/daterange.directive';\nimport { FsFormLesserDirective } from './directives/validators/lesser.directive';\nimport { FsFormUrlDirective } from './directives/validators/url.directive';\nimport { FsFormDialogCloseDirective } from './directives/form-dialog-close.directive';\nimport { FsButtonDirective } from './directives/button.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormDialogActionsComponent } from './components/form-dialog-actions/form-dialog-actions.component';\nimport { FsFormNoFsValidatorsDirective } from './directives/validators/no-fs-validators.directive';\nimport { FsSubmitButtonDirective } from './directives';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatButtonModule,\n MatDialogModule,\n ],\n declarations: [\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 FsFormLesserDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\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 FsFormLesserDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n static forRoot(): ModuleWithProviders<FsFormModule> {\n\n /**\n * Hack: https://github.com/angular/components/issues/20097\n */\n ErrorStateMatcher.prototype.isErrorState = (control: FormControl | null, form: FormGroupDirective | NgForm | null): 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 { FsFormDirective } from './app/directives/form/form.directive';\nexport { FsControlDirective } from './app/directives/validators/control.directive';\nexport { FsFormRequiredDirective } from './app/directives/validators/required.directive';\nexport { FsFormMinDirective } from './app/directives/validators/min.directive';\nexport { FsFormMaxDirective } from './app/directives/validators/max.directive';\nexport { FsFormMinLengthDirective } from './app/directives/validators/minlength.directive';\nexport { FsFormMaxLengthDirective } from './app/directives/validators/maxlength.directive';\nexport { FsFormEmailDirective } from './app/directives/validators/email.directive';\nexport { FsFormEmailsDirective } from './app/directives/validators/emails.directive';\nexport { FsFormPhoneDirective } from './app/directives/validators/phone.directive';\nexport { FsFormCompareDirective } from './app/directives/validators/compare.directive';\nexport { FsFormIntegerDirective } from './app/directives/validators/integer.directive';\nexport { FsFormNumericDirective } from './app/directives/validators/numeric.directive';\nexport { FsFormPatternDirective } from './app/directives/validators/pattern.directive';\nexport { FsFormFunctionDirective } from './app/directives/validators/function.directive';\nexport { FsFormDateRangeDirective } from './app/directives/validators/daterange.directive';\nexport { FsFormGreaterDirective } from './app/directives/validators/greater.directive';\nexport { FsFormLesserDirective } from './app/directives/validators/lesser.directive';\nexport { FsFormUrlDirective } from './app/directives/validators/url.directive';\nexport { FsFormDialogCloseDirective } from './app/directives/form-dialog-close.directive';\nexport { FsButtonDirective } from './app/directives/button.directive';\nexport { FsSubmitButtonDirective } from './app/directives/submit-button.directive';\nexport { FsFormValidateDirective } from './app/directives/validators/validate.directive';\nexport { FsFormNoFsValidatorsDirective } from './app/directives/validators/no-fs-validators.directive';\n\n// Components\nexport { FsFormDialogActionsComponent } from './app/components/form-dialog-actions/form-dialog-actions.component';\n\nexport { FsValidators } from './app/validators/validators';\n\nexport { FormDeactivateGuard } from './app/guards/form-deactivate.guard';\n\n// Interfaces\nexport { SubmitEvent } from './app/interfaces/submit-event';\nexport { SubmittedEvent } from './app/interfaces/submitted-event';\nexport { ConfirmConfig } from './app/interfaces/confirm-config';\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.js","sources":["../../src/app/enums/confirm-result.ts","../../src/app/helpers/confirm-unsaved.ts","../../src/app/helpers/confirm-result-continue.ts","../../src/app/services/fsform.service.ts","../../src/app/helpers/get-active-route.ts","../../src/app/guards/form-deactivate.guard.ts","../../src/app/helpers/get-form-errors.ts","../../src/app/directives/form-dialog-close.directive.ts","../../src/app/enums/form-status.ts","../../src/app/directives/form/form.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/helpers/is-enabled.ts","../../src/app/directives/validators/required.directive.ts","../../src/app/validators/validators.ts","../../src/app/directives/validators/min.directive.ts","../../src/app/directives/validators/max.directive.ts","../../src/app/directives/validators/minlength.directive.ts","../../src/app/directives/validators/maxlength.directive.ts","../../src/app/directives/validators/email.directive.ts","../../src/app/directives/validators/emails.directive.ts","../../src/app/directives/validators/phone.directive.ts","../../src/app/directives/validators/compare.directive.ts","../../src/app/directives/validators/integer.directive.ts","../../src/app/directives/validators/numeric.directive.ts","../../src/app/directives/validators/pattern.directive.ts","../../src/app/directives/validators/function.directive.ts","../../src/app/directives/validators/greater.directive.ts","../../src/app/directives/validators/daterange.directive.ts","../../src/app/directives/validators/lesser.directive.ts","../../src/app/directives/validators/url.directive.ts","../../src/app/directives/button.directive.ts","../../src/app/directives/validators/validate.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/validators/no-fs-validators.directive.ts","../../src/app/directives/submit-button.directive.ts","../../src/app/fs-form.module.ts","../../src/public_api.ts","../../src/firestitch-form.ts"],"sourcesContent":["export enum ConfirmResult {\n Save = 'save',\n Discard = 'discard',\n Review = 'review',\n Invalid = 'invalid',\n Pristine = 'pristine',\n}\n","import { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { ConfirmResult } from '../enums/confirm-result';\n\n\nexport function confirmUnsaved(directives: FsFormDirective[], prompt: FsPrompt): Observable<ConfirmResult> {\n return new Observable(observer => {\n // TODO support for multiple directives per page\n const form = directives[0];\n\n if (!form.confirm || !form.ngForm.dirty) {\n observer.next(ConfirmResult.Pristine);\n observer.complete();\n return;\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 & Continue';\n let discardLabel = 'Discard Changes & 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 prompt.confirm({\n title: title,\n template: message,\n dialogConfig: { width: 'auto' },\n buttons: [\n {\n label: saveLabel,\n color: 'primary',\n value: 'save'\n },\n {\n label: discardLabel,\n value: 'discard'\n },\n {\n label: cancelLabel,\n cancel: true\n }\n ]\n }).subscribe((value) => {\n\n if (value === 'discard') {\n observer.next(ConfirmResult.Discard);\n observer.complete();\n form.reset();\n }\n\n if (value === 'save') {\n\n form.submitted\n .pipe(\n first()\n )\n .subscribe(() => {\n observer.next(ConfirmResult.Save);\n observer.complete();\n });\n\n form.invalid\n .pipe(\n first()\n )\n .subscribe(() => {\n observer.next(ConfirmResult.Invalid);\n observer.complete();\n });\n\n form.ngForm.control.markAsPristine();\n form.triggerSubmit({ confirmed: true });\n }\n\n }, (error: any) => {\n observer.next(ConfirmResult.Review);\n observer.complete();\n });\n });\n}\n","import { ConfirmResult } from '../enums/confirm-result';\n\nexport function confirmResultContinue(result) {\n return result === ConfirmResult.Discard || result === ConfirmResult.Save || result === ConfirmResult.Pristine;\n}\n","import { Injectable, Type } from '@angular/core';\n\nimport { Subject, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\n\ninterface BroadcastEvent {\n key: any;\n data?: any;\n}\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>, FsFormDirective[]>();\n\n private _eventBus: Subject<BroadcastEvent>;\n\n constructor() {\n this._eventBus = new Subject<BroadcastEvent>();\n }\n\n // @deprecated\n public broadcast(key: any, data?: any) {\n this._eventBus.next({key, data});\n }\n\n // @deprecated\n public on<T>(key: any): Observable<T> {\n return this._eventBus.asObservable()\n .pipe(\n filter(event => event.key === key),\n map(event => <T>event.data)\n );\n }\n\n public registerFormDirective(routeComponent: Type<any>, directive: FsFormDirective) {\n const directives = this.getFormDirectives(routeComponent) || [];\n directives.push(directive);\n\n this._formDirectiveStore.set(routeComponent, directives);\n }\n\n public getFormDirectives(routeComponent): FsFormDirective[] {\n return this._formDirectiveStore.get(routeComponent);\n }\n\n public removeFormDirective(routeComponent) {\n this._formDirectiveStore.delete(routeComponent);\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 { Injectable } from '@angular/core';\nimport { ActivatedRoute, CanDeactivate } from '@angular/router';\n\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { confirmUnsaved } from '../helpers/confirm-unsaved';\nimport { confirmResultContinue } from '../helpers';\nimport { FsForm } from '../services/fsform.service';\nimport { getActiveRoute } from '../helpers/get-active-route';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormDeactivateGuard implements CanDeactivate<any> {\n\n constructor(\n private _prompt: FsPrompt,\n private _fsForm: FsForm,\n private _route: ActivatedRoute,\n ) {}\n\n 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: FsFormDirective[] = this._fsForm.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 confirmUnsaved(directives, this._prompt)\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n\n}\n","import { AbstractControl, FormGroup, 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 FormGroup) {\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","import { Directive, HostListener, OnDestroy, HostBinding } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n\n@Directive({\n selector: '[fsFormDialogClose],[fs-form-dialog-close]'\n})\nexport class FsFormDialogCloseDirective implements OnDestroy {\n\n public clicked$ = new Subject();\n public registered = false;\n\n @HostBinding('attr.type') type = 'button';\n\n @HostListener('click', ['$event.target'])\n public click() {\n this.clicked$.next();\n }\n\n public ngOnDestroy() {\n this.clicked$.complete();\n }\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 {\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, NgForm } from '@angular/forms';\nimport { ActivatedRoute, Route } from '@angular/router';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { guid } from '@firestitch/common';\nimport { DrawerRef } from '@firestitch/drawer';\nimport { FsMessage, MessageMode } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport {\n BehaviorSubject,\n defer,\n fromEvent,\n iif,\n Observable,\n of,\n Subject,\n throwError,\n} from 'rxjs';\nimport {\n catchError,\n delay,\n filter,\n first,\n map,\n mapTo,\n mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nimport { FormDeactivateGuard } from '../../guards/form-deactivate.guard';\nimport { confirmResultContinue } from '../../helpers/confirm-result-continue';\nimport { confirmUnsaved } from '../../helpers/confirm-unsaved';\nimport { getActiveRoute } from '../../helpers/get-active-route';\nimport { getFormErrors } from '../../helpers/get-form-errors';\nimport { FsForm } from '../../services/fsform.service';\nimport { FsButtonDirective } from '../button.directive';\nimport { FsFormDialogCloseDirective } from '../form-dialog-close.directive';\n\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FormStatus } from './../../enums/form-status';\nimport { ConfirmConfig, ConfirmTabGroup, SubmittedEvent } from './../../interfaces';\nimport { SubmitEvent } from './../../interfaces/submit-event';\n\n\n@Directive({\n selector: '[fsForm]',\n})\nexport class FsFormDirective implements OnInit, OnDestroy, AfterContentInit, OnChanges {\n\n @Input()\n public wrapperSelector = '.fs-form-wrapper,.mat-form-field';\n\n @Input()\n public messageSelector = '.fs-form-message,.mat-form-field-subscript-wrapper';\n\n @Input()\n public hintSelector = '.fs-form-hint,.mat-form-field-hint-wrapper';\n\n @Input()\n public labelSelector = '.fs-form-label,.mat-form-field-label';\n\n @Input()\n public autocomplete = false;\n\n @Input()\n public shortcuts = true; // Ctrl + s\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 confirmTabs = true;\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 @Input()\n public successDelay = 0;\n\n @Input()\n public errorDelay = 1000;\n\n @Input()\n public tabGroup: MatTabGroup;\n\n @Input()\n public deactivationGuard = 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 @ContentChildren(FsFormDialogCloseDirective, { descendants: true })\n public formDialogClose: QueryList<FsFormDialogCloseDirective>;\n\n @ContentChildren(MatTabGroup, { descendants: true })\n private _tabGroups: QueryList<MatTabGroup> = new QueryList();\n\n private _buttons = new QueryList<FsButtonDirective>();\n private _registerControl;\n private _activeSubmitButton: FsButtonDirective;\n private _dialogBackdropEscape = false;\n private _snapshot: { [key: string]: any } = {};\n private _activatedRouteConfig: Route | null;\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _destroy$ = new Subject();\n private _confirmed = false;\n private _submit$: (event: SubmitEvent) => Observable<any> = null;\n\n constructor(\n @Inject(NgForm)\n public ngForm: NgForm,\n private _form: FsForm,\n private _element: ElementRef,\n private _message: FsMessage,\n private _prompt: FsPrompt,\n private _ngZone: NgZone,\n private _cdRef: ChangeDetectorRef,\n\n @Optional() @Inject(MatDialogRef)\n private _dialogRef: MatDialogRef<any>,\n\n @Optional() @Inject(DrawerRef)\n private _drawerRef: DrawerRef<any>,\n\n private _route: ActivatedRoute,\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 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._form.broadcast('valid', this._submitEvent);\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 const submit$: Observable<any> = this._submit$ ?\n this._submit$(this._submitEvent) : 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 this._form.broadcast('invalid', this._submitEvent);\n\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('Form validation error');\n }\n\n private get _submitter(): string {\n return this._activeSubmitButton\n ? this._activeSubmitButton.name\n : null;\n }\n\n public ngOnInit() {\n if (this.deactivationGuard) {\n this._registerCanDeactivateGuard();\n }\n\n this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n this._listenSubmit();\n this._listenFormStatus();\n\n if (!this.autocomplete) {\n this._registerAutocomplete();\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.confirm) {\n this._updateDirtySubmitButtons();\n }\n }\n\n public get hasSubmit(): boolean {\n return this._submit$ !== null;\n }\n\n public clearSubmit(): void {\n this._submit$ = null;\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 this._registerConfirm();\n this._registerConfirmDialogClose();\n this._registerConfirmDrawerClose();\n this._registerConfirmTabs();\n this._registerDrawerClose();\n this._registerDirtySubmitButton();\n }\n\n public ngOnDestroy(): void {\n this._cleanupCanDeactivate();\n this._destroy$.next();\n this._destroy$.complete();\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.ngForm.resetForm();\n\n Object.keys(this.ngForm.controls)\n .forEach((name: string) => {\n const control = this.ngForm.controls[name];\n control.reset(this._snapshot[name]);\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 triggerSubmit(options?: { confirmed: boolean }): void {\n this._confirmed = options?.confirmed;\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(() => confirmUnsaved([this], this._prompt)),\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._buttons.forEach((button) => {\n button.disable();\n });\n }\n\n public addButton(button: FsButtonDirective): void {\n this._buttons.reset(\n [\n ...this._buttons.toArray(),\n button,\n ]);\n }\n\n public removeButton(button: FsButtonDirective): void {\n this._buttons.reset(\n [\n ...this._buttons.toArray()\n .filter((item) => (button !== item)),\n ]);\n }\n\n private _listenSubmit(): void {\n this.ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n map((event) => {\n return { event, confirmed: this._confirmed };\n }),\n tap(() => this._confirmed = false),\n filter(() => {\n return [FormStatus.Valid, FormStatus.Invalid]\n .includes(this._status$.getValue());\n }),\n tap(() => this._broadcasValidatingEvents()),\n tap(() => this.validate()),\n tap(() => this._broadcastSubmittingEvents()),\n switchMap((data) => this._waitUntilStatusPending()\n .pipe(\n mapTo(data),\n )),\n tap(() => this._setupActiveSubmitButton()),\n tap(() => this._disableButtons()),\n mergeMap((data) => {\n if (this.ngForm.status === 'INVALID') {\n return this._formInvalidState$;\n }\n\n return this._formValidState$\n .pipe(\n map((submitEvent) => ({\n ...submitEvent,\n confirmed: data.confirmed,\n }),\n ),\n );\n }),\n catchError((e, source$) => {\n this._handleError(e);\n\n return source$;\n }),\n tap((submittedEvent: SubmittedEvent) => {\n this._completeSubmit(true, submittedEvent);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe(() => { });\n }\n\n public validate(): void {\n Object.values(this.ngForm.controls)\n .forEach((control) => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\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 _listenWindowClose(): void {\n fromEvent(window, 'beforeunload')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: Event) => {\n if (this.confirm && this.confirmBrowser && this.ngForm.dirty) {\n event.returnValue = false;\n }\n });\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 dialog = document.getElementById(this._dialogRef.id);\n const paths = event.composedPath();\n\n if (paths) {\n paths.forEach((item) => {\n if (dialog === item) {\n this._ngZone.run(() => {\n this._formClose();\n });\n }\n });\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {\n event.preventDefault();\n\n if (this.shortcuts) {\n if (this._elementInForm(document.activeElement)) {\n this.ngForm.ngSubmit.next();\n }\n }\n }\n });\n });\n }\n\n private _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.Pristine || result === ConfirmResult.Discard\n ? of(null)\n : this.submitted.asObservable();\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 _registerDialogClose(directive: FsFormDialogCloseDirective): void {\n if (!directive.registered) {\n directive.registered = true;\n\n directive.clicked$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._formClose();\n });\n }\n }\n\n private _getActiveSubmitButton(): FsButtonDirective {\n const submitButtons = this._buttons\n .filter((button) => button.submit);\n\n const activeButton = submitButtons\n .find((button) => {\n return button.active;\n });\n\n return activeButton ? activeButton : submitButtons[0];\n }\n\n private _elementInForm(el: Element): boolean {\n if (el.isSameNode(this._element.nativeElement)) {\n return true;\n } else if (el.parentElement) {\n return this._elementInForm(el.parentElement);\n }\n\n return false;\n }\n\n private _completeSubmit(success, submitEvent: SubmittedEvent): void {\n if (success) {\n this.ngForm.control.markAsPristine();\n this.createSnapshot();\n this.submitted.emit(submitEvent);\n } else {\n this._resetButtons();\n }\n\n if (this._activeSubmitButton) {\n if (success) {\n this._activeSubmitButton.success();\n } else {\n this._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 ).subscribe(() => {\n if (this.ngForm.form.status === 'VALID') {\n this._status$.next(FormStatus.Valid);\n } else {\n this._status$.next(FormStatus.Invalid);\n }\n\n this._resetButtons();\n this._resetActiveButtons();\n this._updateDirtySubmitButtons();\n });\n }\n\n private _resetButtons(): void {\n this._buttons.forEach((button) => {\n button.reset();\n });\n }\n\n private _resetActiveButtons(): void {\n this._buttons.forEach((button) => {\n button.resetActive();\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.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 _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();\n subscriber.complete();\n } else {\n subscriber.error();\n }\n });\n } else {\n subscriber.next();\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();\n subscriber.complete();\n }\n }),\n ),\n defer(() => {\n subscriber.next();\n subscriber.complete();\n }),\n );\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n }\n\n private _registerConfirmTabs(): void {\n if (this.tabGroup) {\n this.registerConfirmTabGroup(this.tabGroup);\n }\n\n this.registerConfirmTabGroups(this._tabGroups.toArray());\n\n this._tabGroups.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.registerConfirmTabGroups(this._tabGroups.toArray());\n });\n }\n\n public registerConfirmTabGroups(tabGroups: MatTabGroup[]): void {\n tabGroups.forEach((tabGroup: MatTabGroup) => {\n this.registerConfirmTabGroup(tabGroup);\n });\n }\n\n public registerConfirmTabGroup(tabGroup: MatTabGroup): void {\n const confirmTabGroup = tabGroup as ConfirmTabGroup;\n if (!confirmTabGroup._originalHandleClick) {\n confirmTabGroup._originalHandleClick = tabGroup._handleClick;\n confirmTabGroup._handlClick$ = new Subject<{ tab: MatTab; tabHeader: MatTabHeader; idx: number }>();\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 takeUntil(this._destroy$),\n )\n .subscribe((event) => {\n if (!this.submitting) {\n if (this.confirm && this.confirmTabs) {\n this.triggerConfirm()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((result) => {\n if (confirmResultContinue(result)) {\n confirmTabGroup.selectedIndex = event.idx;\n }\n });\n } else {\n confirmTabGroup._originalHandleClick(event.tab, event.tabHeader, event.idx);\n }\n }\n });\n }\n\n private _registerConfirmDialogClose(): void {\n if (this._dialogRef) {\n this.formDialogClose.forEach((item) => {\n this._registerDialogClose(item);\n });\n\n this.formDialogClose.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((e) => {\n e.forEach((item) => {\n this._registerDialogClose(item);\n });\n });\n }\n }\n\n private _registerConfirmDialogBackdropEscape(): void {\n this._dialogBackdropEscape = this._dialogRef && !this._dialogRef.disableClose;\n\n if (this._dialogRef && !this._dialogRef.disableClose) {\n this._dialogRef.disableClose = true;\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 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 el.setAttribute('name', `${name}_${guid()}`);\n\n if (!el.getAttribute('autocomplete')) {\n el.setAttribute('autocomplete', 'none');\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 this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n\n this._buttons.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n }\n\n private _updateDirtySubmitButtons(): void {\n this._buttons\n .filter((button) => button.submit)\n .forEach((submitButton: FsButtonDirective) => {\n if (!this.confirm || !this.dirtySubmitButton || this.ngForm.dirty || !submitButton.dirtySubmit) {\n submitButton.enable();\n } else {\n submitButton.disable();\n }\n });\n }\n\n private _broadcastSubmittingEvents(): void {\n this._status$.next(FormStatus.Submitting);\n this._form.broadcast('submit', this.ngForm);\n }\n\n private _broadcasValidatingEvents(): void {\n this._status$.next(FormStatus.Validating);\n }\n\n private _setupActiveSubmitButton(): void {\n this._activeSubmitButton = this._getActiveSubmitButton();\n this._resetButtons();\n\n if (this._activeSubmitButton) {\n this._activeSubmitButton.process();\n }\n }\n\n private _disableButtons(): void {\n this._buttons.forEach((button) => {\n button.disable();\n });\n }\n\n private _waitUntilStatusPending(): Observable<string> {\n return this.ngForm.statusChanges\n .pipe(\n startWith(this.ngForm.status),\n first((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 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","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};\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 {\n Input,\n ElementRef,\n Renderer2,\n Directive,\n Injector,\n Optional,\n Inject,\n Self,\n OnInit,\n OnDestroy,\n AfterContentInit,\n} from '@angular/core';\nimport { NgControl, AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { values, keys } from 'lodash-es';\n\nimport { FsFormDirective } from '../form/form.directive';\nimport {\n VALIDATE_MESSAGE_PROVIDER,\n VALIDATE_MESSAGES\n} from '../../providers/validate-messages.provider';\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})\nexport class FsControlDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input() wrapperSelector: string | false;\n @Input() messageSelector: string | false;\n @Input() hintSelector: string | false;\n @Input() labelSelector: string | false;\n @Input() appendMessageClass = 'fs-form-message';\n @Input() appendLabelClass = 'fs-form-label';\n @Input() appendErrorClass = 'fs-form-error';\n @Input() appendHintClass = 'fs-form-hint';\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 _validateMessages = { ...ERROR_MESSAGES };\n protected _destroy$ = new Subject();\n protected _control: AbstractControl;\n\n constructor(\n protected elementRef: ElementRef,\n protected renderer2: Renderer2,\n protected injector: Injector,\n @Self() @Inject(VALIDATE_MESSAGES) protected _validateMessages,\n @Optional() protected ngControl: NgControl,\n @Optional() @Inject(FsFormDirective) protected formDirective: FsFormDirective,\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 ngOnInit() {\n this._setupValidators();\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n ngAfterContentInit() {\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 getMessageSelector(): string {\n\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 protected getHintWrapperSelector(): string {\n\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 protected getWrapperSelector(): string {\n\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 protected 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 protected getWrapperElement() {\n\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 protected 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 const shouldErrorBeRendered = this.ngControl.invalid\n && (this.ngControl.dirty || this.formDirective?.ngForm?.submitted);\n\n if (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.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);\n }\n\n if (this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n if (labelWrapper) {\n if (this.appendLabelClass) {\n this.renderer2.addClass(labelWrapper, this.appendLabelClass);\n }\n }\n }\n\n if (this.appendMessageClass) {\n renderer.addClass(messageWrapper, this.appendMessageClass);\n }\n\n if (this.getHintWrapperSelector()) {\n const hint = messageWrapper.querySelector(this.getHintWrapperSelector());\n\n if (hint) {\n renderer.setStyle(hint, 'display', error ? 'none' : 'block');\n\n if (this.appendHintClass) {\n renderer.addClass(hint, this.appendHintClass);\n }\n }\n }\n\n let errorWrapper = wrapper.querySelector('.fs-form-error-target');\n if (errorWrapper) {\n errorWrapper.remove();\n }\n\n if (!shouldErrorBeRendered || !error) {\n return;\n }\n\n errorWrapper = renderer.createElement('div');\n renderer.addClass(errorWrapper, 'fs-form-error-target');\n renderer.addClass(errorWrapper, this.appendErrorClass);\n renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);\n\n const errorText = renderer.createText(error.message);\n\n renderer.appendChild(errorWrapper, errorText);\n messageWrapper.appendChild(errorWrapper);\n }\n }\n\n protected getWrapper(node, count = 0) {\n\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","export function isEnabled(value: any): boolean {\n return value !== 'false' && (value || value === '');\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 { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormRequired],[ngModel][required]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 } else {\n return null;\n }\n }\n\n protected render() {\n\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 { AbstractControl, ValidationErrors } from '@angular/forms';\nimport { email, isEmpty, isNumeric, phone, url } from '@firestitch/common';\nimport { isValid } from 'date-fns';\nimport { isObject } from 'lodash-es';\nimport { Observable, from, isObservable, of, throwError } from 'rxjs';\nimport { catchError, mapTo, take } from 'rxjs/operators';\n\nexport class FsValidators {\n\n 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 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 static numeric(control: AbstractControl): ValidationErrors | null {\n if (isEmpty(control.value) || isNumeric(control.value)) {\n return null;\n } else {\n return { numeric: true }\n }\n }\n\n static integer(control: AbstractControl): ValidationErrors | null {\n if (!control.value || String(control.value) === '' || (control.value % 1 === 0)) {\n return null;\n } else {\n return { integer: true }\n }\n }\n\n 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 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 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 static func(control: AbstractControl, formFunction, data: any) {\n let result: unknown;\n let stream$: Observable<unknown>\n\n try {\n result = formFunction(control, data);\n } catch (err) {\n err = err instanceof Error ? err.message : err;\n\n stream$ = throwError(err);\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","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})\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';\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})\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: '[fsFormMinLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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, 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})\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 } 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})\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})\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 { 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})\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, OnDestroy, AfterViewInit, OnChanges } from '@angular/core';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormCompare]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\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 } else {\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 { 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: '[fsFormInteger]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 } else {\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';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormNumeric]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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})\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 { Observable, of } from 'rxjs';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\n\n\n@Directive({\n selector: '[fsFormFunction]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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: '[fsFormGreater]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 { 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})\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';\n\n\n@Directive({\n selector: '[fsFormLesser]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\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 } 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: '[fsFormUrl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormUrlDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormUrl;\n\n @Input()\n public fsFormUrlProtocol = false;\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 } else {\n return null;\n }\n }\n\n}\n","import { Directive, OnInit, Host, ElementRef, HostBinding, Optional, Input, OnDestroy, ChangeDetectorRef } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { FsFormDirective } from './form/form.directive';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n\n@Directive({\n selector: '[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]',\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 form: FsFormDirective;\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public active = false;\n public submit = false;\n\n private _previousDisabled = false;\n private _destroy$ = new Subject();\n\n constructor(\n @Optional() @Host() private _matButton: MatButton,\n @Optional() private _form: FsFormDirective,\n private _elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n ) {}\n\n public ngOnInit() {\n this.submit = this._elementRef.nativeElement.getAttribute('type') === 'submit';\n this.form = this.form || this._form;\n\n if (this.form) {\n this.form.addButton(this);\n\n if(this.submit) {\n fromEvent(this.element, 'click')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.active = true;\n });\n\n if (this.dirtySubmit) {\n if (this.form.dirtySubmitButton) {\n if(!this.form.ngForm.dirty) {\n this.disable();\n }\n }\n }\n\n this.transitionStyle = 'none';\n setTimeout(() => {\n this.transitionStyle = null;\n }, 500);\n }\n }\n }\n\n public disable() { \n if (this._matButton && !this.active) {\n this._previousDisabled = this._matButton.disabled;\n this._matButton.disabled = true;\n this._cdRef.markForCheck(); \n }\n }\n\n public enable() {\n if (this._matButton) {\n this._matButton.disabled = false;\n this._matButton.disableRipple = true;\n this._cdRef.markForCheck();\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._disableShadowAnimation();\n this.element.classList.add(`submit-${cls}`);\n this.element.append(svg);\n }\n\n public get element() {\n return this._elementRef.nativeElement;\n }\n\n public resetActive() {\n this.active = false;\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();\n this._destroy$.complete();\n this.form?.removeButton(this);\n }\n\n private _disableShadowAnimation() {\n // .mat-elevation-z2 removes the click shadow animation\n //this.element.classList.add('mat-elevation-z2');\n }\n\n private _resetClass() {\n this.element.classList.remove('submit-success', 'submit-error', 'submit-process', 'mat-elevation-z2');\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, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\n\n\n@Directive({\n selector: '[validate]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormValidateDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input('validate')\n public validateFn;\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 { Component, OnInit, ChangeDetectionStrategy, Input, Optional, ChangeDetectorRef, OnDestroy } from '@angular/core';\r\n\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { delay, filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { FsFormDirective } from '../../directives/form/form.directive';\r\nimport { ConfirmResult } from '../../enums/confirm-result';\r\n\r\n\r\n@Component({\r\n selector: 'fs-form-dialog-actions',\r\n templateUrl: './form-dialog-actions.component.html',\r\n styleUrls: ['./form-dialog-actions.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FsFormDialogActionsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() public save = true;\r\n @Input() public create = false;\r\n @Input() public close = false;\r\n @Input() public done = false;\r\n @Input() public closeData = null;\r\n @Input() public name: string;\r\n\r\n public dirty = false;\r\n\r\n private _destroy$ = new Subject<void>();\r\n \r\n constructor(\r\n @Optional() private _form: FsFormDirective,\r\n @Optional() private _dialogRef: MatDialogRef<any>,\r\n private _cdRef: ChangeDetectorRef, \r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n if(this._form) {\r\n this._form.ngForm.valueChanges\r\n .pipe( \r\n filter(() => (!this.dirty)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = this._form.ngForm.dirty;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.submitted\r\n .pipe(\r\n delay(50),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.reseted\r\n .pipe(\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n }\r\n }\r\n \r\n public closeClick(): void {\r\n if(this._form) {\r\n this._form.triggerConfirm()\r\n .pipe(\r\n filter((confirmResult: ConfirmResult) => (confirmResult !== ConfirmResult.Review)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this._dialogRef.close(this.closeData);\r\n });\r\n } else {\r\n this._dialogRef.close(this.closeData);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroy$.next();\r\n this._destroy$.complete();\r\n }\r\n}\r\n","<div class=\"form-buttons\" [ngClass]=\"{ 'save-create': save || create }\">\n <ng-container *ngIf=\"save || 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 [disabled]=\"close && !dirty && !create\"\n [matDialogClose]=\"null\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"done\">\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [matDialogClose]=\"null\">\n Done\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"save || create\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"close\">\n <button\n mat-button\n type=\"button\"\n class=\"close\"\n [color]=\"dirty ? 'basic' : 'primary'\"\n (click)=\"closeClick()\">\n Close\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"!(save || create)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n</div>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Directive, Input, 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([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})\nexport class FsFormNoFsValidatorsDirective extends FsControlDirective implements OnChanges {\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n}\n","import { Directive } from '@angular/core';\n\nimport { FsButtonDirective } from './button.directive';\n\n\n@Directive({\n selector: 'dummy-selector',\n})\nexport class FsSubmitButtonDirective extends FsButtonDirective {\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormGroupDirective, FormsModule, NgForm } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';\n\nimport { FsFormDirective } from './directives/form/form.directive';\nimport { FsControlDirective } from './directives/validators/control.directive';\nimport { FsFormRequiredDirective } from './directives/validators/required.directive';\nimport { FsFormMinDirective } from './directives/validators/min.directive';\nimport { FsFormMaxDirective } from './directives/validators/max.directive';\nimport { FsFormMinLengthDirective } from './directives/validators/minlength.directive';\nimport { FsFormMaxLengthDirective } from './directives/validators/maxlength.directive';\nimport { FsFormEmailDirective } from './directives/validators/email.directive';\nimport { FsFormEmailsDirective } from './directives/validators/emails.directive';\nimport { FsFormPhoneDirective } from './directives/validators/phone.directive';\nimport { FsFormCompareDirective } from './directives/validators/compare.directive';\nimport { FsFormIntegerDirective } from './directives/validators/integer.directive';\nimport { FsFormNumericDirective } from './directives/validators/numeric.directive';\nimport { FsFormPatternDirective } from './directives/validators/pattern.directive';\nimport { FsFormFunctionDirective } from './directives/validators/function.directive';\nimport { FsFormGreaterDirective } from './directives/validators/greater.directive';\nimport { FsFormDateRangeDirective } from './directives/validators/daterange.directive';\nimport { FsFormLesserDirective } from './directives/validators/lesser.directive';\nimport { FsFormUrlDirective } from './directives/validators/url.directive';\nimport { FsFormDialogCloseDirective } from './directives/form-dialog-close.directive';\nimport { FsButtonDirective } from './directives/button.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormDialogActionsComponent } from './components/form-dialog-actions/form-dialog-actions.component';\nimport { FsFormNoFsValidatorsDirective } from './directives/validators/no-fs-validators.directive';\nimport { FsSubmitButtonDirective } from './directives';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatButtonModule,\n MatDialogModule,\n ],\n declarations: [\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 FsFormLesserDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\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 FsFormLesserDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n static forRoot(): ModuleWithProviders<FsFormModule> {\n\n /**\n * Hack: https://github.com/angular/components/issues/20097\n */\n ErrorStateMatcher.prototype.isErrorState = (control: FormControl | null, form: FormGroupDirective | NgForm | null): 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 { FsFormDirective } from './app/directives/form/form.directive';\nexport { FsControlDirective } from './app/directives/validators/control.directive';\nexport { FsFormRequiredDirective } from './app/directives/validators/required.directive';\nexport { FsFormMinDirective } from './app/directives/validators/min.directive';\nexport { FsFormMaxDirective } from './app/directives/validators/max.directive';\nexport { FsFormMinLengthDirective } from './app/directives/validators/minlength.directive';\nexport { FsFormMaxLengthDirective } from './app/directives/validators/maxlength.directive';\nexport { FsFormEmailDirective } from './app/directives/validators/email.directive';\nexport { FsFormEmailsDirective } from './app/directives/validators/emails.directive';\nexport { FsFormPhoneDirective } from './app/directives/validators/phone.directive';\nexport { FsFormCompareDirective } from './app/directives/validators/compare.directive';\nexport { FsFormIntegerDirective } from './app/directives/validators/integer.directive';\nexport { FsFormNumericDirective } from './app/directives/validators/numeric.directive';\nexport { FsFormPatternDirective } from './app/directives/validators/pattern.directive';\nexport { FsFormFunctionDirective } from './app/directives/validators/function.directive';\nexport { FsFormDateRangeDirective } from './app/directives/validators/daterange.directive';\nexport { FsFormGreaterDirective } from './app/directives/validators/greater.directive';\nexport { FsFormLesserDirective } from './app/directives/validators/lesser.directive';\nexport { FsFormUrlDirective } from './app/directives/validators/url.directive';\nexport { FsFormDialogCloseDirective } from './app/directives/form-dialog-close.directive';\nexport { FsButtonDirective } from './app/directives/button.directive';\nexport { FsSubmitButtonDirective } from './app/directives/submit-button.directive';\nexport { FsFormValidateDirective } from './app/directives/validators/validate.directive';\nexport { FsFormNoFsValidatorsDirective } from './app/directives/validators/no-fs-validators.directive';\n\n// Components\nexport { FsFormDialogActionsComponent } from './app/components/form-dialog-actions/form-dialog-actions.component';\n\nexport { FsValidators } from './app/validators/validators';\n\nexport { FormDeactivateGuard } from './app/guards/form-deactivate.guard';\n\n// Interfaces\nexport { SubmitEvent } from './app/interfaces/submit-event';\nexport { SubmittedEvent } from './app/interfaces/submitted-event';\nexport { ConfirmConfig } from './app/interfaces/confirm-config';\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":";;;;;;;;;;;;;;;;;;;;;;;;IAAY;AAAZ,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,oCAAmB,CAAA;IACnB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;IACnB,sCAAqB,CAAA;AACvB,CAAC,EANW,aAAa,KAAb,aAAa;;SCST,cAAc,CAAC,UAA6B,EAAE,MAAgB;IAC5E,OAAO,IAAI,UAAU,CAAC,QAAQ;;QAE5B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACvC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACtC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,0BAA0B,CAAC;QACvC,IAAI,OAAO,GAAG,8CAA8C,CAAC;QAC7D,IAAI,SAAS,GAAG,iBAAiB,CAAC;QAClC,IAAI,YAAY,GAAG,4BAA4B,CAAC;QAChD,IAAI,WAAW,GAAG,gBAAgB,CAAC;QAEnC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;YACpC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;YAC1C,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;YAChD,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC;YACzD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;SACvD;QAED,MAAM,CAAC,OAAO,CAAC;YACb,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/B,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,MAAM;iBACd;gBACD;oBACE,KAAK,EAAE,YAAY;oBACnB,KAAK,EAAE,SAAS;iBACjB;gBACD;oBACE,KAAK,EAAE,WAAW;oBAClB,MAAM,EAAE,IAAI;iBACb;aACF;SACF,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK;YAEjB,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;YAED,IAAI,KAAK,KAAK,MAAM,EAAE;gBAEpB,IAAI,CAAC,SAAS;qBACb,IAAI,CACH,KAAK,EAAE,CACR;qBACA,SAAS,CAAC;oBACT,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAClC,QAAQ,CAAC,QAAQ,EAAE,CAAC;iBACrB,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO;qBACX,IAAI,CACH,KAAK,EAAE,CACR;qBACA,SAAS,CAAC;oBACT,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC;iBACrB,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBACrC,IAAI,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;aACzC;SAEF,EAAE,CAAC,KAAU;YACZ,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC,CAAC;AACL;;SCxFgB,qBAAqB,CAAC,MAAM;IAC1C,OAAO,MAAM,KAAK,aAAa,CAAC,OAAO,IAAI,MAAM,KAAK,aAAa,CAAC,IAAI,IAAI,MAAM,KAAK,aAAa,CAAC,QAAQ,CAAC;AAChH;;MCYa,MAAM;IAOjB;;QAJQ,wBAAmB,GAAG,IAAI,OAAO,EAAgC,CAAC;QAKxE,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,EAAkB,CAAC;KAChD;;IAGM,SAAS,CAAC,GAAQ,EAAE,IAAU;QACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAC;KAClC;;IAGM,EAAE,CAAI,GAAQ;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;aACjC,IAAI,CACH,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAClC,GAAG,CAAC,KAAK,IAAO,KAAK,CAAC,IAAI,CAAC,CAC5B,CAAC;KACL;IAEM,qBAAqB,CAAC,cAAyB,EAAE,SAA0B;QAChF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAChE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE3B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;KAC1D;IAEM,iBAAiB,CAAC,cAAc;QACrC,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;KACrD;IAEM,mBAAmB,CAAC,cAAc;QACvC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;KACjD;;oGAtCU,MAAM;wGAAN,MAAM,cAFL,MAAM;4FAEP,MAAM;kBAHlB,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;SCZe,cAAc,CAAC,KAAqB;IAClD,OAAO,KAAK,CAAC,UAAU,EAAE;QACvB,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;KAC1B;IAED,OAAO,KAAK,CAAC;AACf;;MCSa,mBAAmB;IAE9B,YACU,OAAiB,EACjB,OAAe,EACf,MAAsB;QAFtB,YAAO,GAAP,OAAO,CAAU;QACjB,YAAO,GAAP,OAAO,CAAQ;QACf,WAAM,GAAN,MAAM,CAAgB;KAC5B;IAEJ,aAAa;QACX,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAEnE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,MAAM,UAAU,GAAsB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAElG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YACzD,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAEtD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,OAAO,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;aAC5C,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;SACtC,CAAC,CACH,CAAC;KACL;;iHA/BU,mBAAmB;qHAAnB,mBAAmB,cAFlB,MAAM;4FAEP,mBAAmB;kBAH/B,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;SCde,aAAa,CAAC,OAAwB,EAAE,GAAW;IACjE,IAAI,MAAM,GAA4B,IAAI,CAAC;IAE3C,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;QACrC,MAAM,GAAG;YACP,CAAC,GAAG,qBAAQ,OAAO,CAAC,MAAM,CAAE;SAC7B,CAAA;KACF;IAED,IAAI,OAAO,YAAY,SAAS,EAAE;QAChC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC7B,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC;YAC5B,MAAM,WAAW,GAAG,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAEtD,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,MAAM,EAAE;oBACX,MAAM,qBAAQ,WAAW,CAAE,CAAC;iBAC7B;qBAAM;oBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;iBACpC;aACF;SACF,CAAC,CAAC;KACN;IAED,OAAO,MAAM,CAAC;AAChB;;MCrBa,0BAA0B;IAHvC;QAKS,aAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,eAAU,GAAG,KAAK,CAAC;QAEA,SAAI,GAAG,QAAQ,CAAC;KAU3C;IAPQ,KAAK;QACV,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;wHAdU,0BAA0B;4GAA1B,0BAA0B;4FAA1B,0BAA0B;kBAHtC,SAAS;mBAAC;oBACT,QAAQ,EAAE,4CAA4C;iBACvD;8BAM2B,IAAI;sBAA7B,WAAW;uBAAC,WAAW;gBAGjB,KAAK;sBADX,YAAY;uBAAC,OAAO,EAAE,CAAC,eAAe,CAAC;;;ICd9B;AAAZ,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,iCAAmB,CAAA;IACnB,uCAAyB,CAAA;IACzB,uCAAyB,CAAA;IACzB,qCAAuB,CAAA;IACvB,6BAAe,CAAA;IACf,iCAAmB,CAAA;IACnB,uCAAyB,CAAA;AAC3B,CAAC,EATW,UAAU,KAAV,UAAU;;MCyET,eAAe;IA6F1B,YAES,MAAc,EACb,KAAa,EACb,QAAoB,EACpB,QAAmB,EACnB,OAAiB,EACjB,OAAe,EACf,MAAyB,EAGzB,UAA6B,EAG7B,UAA0B,EAE1B,MAAsB;QAdvB,WAAM,GAAN,MAAM,CAAQ;QACb,UAAK,GAAL,KAAK,CAAQ;QACb,aAAQ,GAAR,QAAQ,CAAY;QACpB,aAAQ,GAAR,QAAQ,CAAW;QACnB,YAAO,GAAP,OAAO,CAAU;QACjB,YAAO,GAAP,OAAO,CAAQ;QACf,WAAM,GAAN,MAAM,CAAmB;QAGzB,eAAU,GAAV,UAAU,CAAmB;QAG7B,eAAU,GAAV,UAAU,CAAgB;QAE1B,WAAM,GAAN,MAAM,CAAgB;QA1GzB,oBAAe,GAAG,kCAAkC,CAAC;QAGrD,oBAAe,GAAG,oDAAoD,CAAC;QAGvE,iBAAY,GAAG,4CAA4C,CAAC;QAG5D,kBAAa,GAAG,sCAAsC,CAAC;QAGvD,iBAAY,GAAG,KAAK,CAAC;QAGrB,cAAS,GAAG,IAAI,CAAC;QAGjB,YAAO,GAA4B,IAAI,CAAC;QAGxC,kBAAa,GAAG,IAAI,CAAC;QAGrB,kBAAa,GAAG,IAAI,CAAC;QAGrB,mBAAc,GAAG,IAAI,CAAC;QAGtB,gBAAW,GAAG,IAAI,CAAC;QAGnB,sBAAiB,GAAG,IAAI,CAAC;QAQzB,iBAAY,GAAG,CAAC,CAAC;QAGjB,eAAU,GAAG,IAAI,CAAC;QAMlB,sBAAiB,GAAG,IAAI,CAAC;QAGzB,gBAAW,GAA8B,IAAI,YAAY,EAAE,CAAC;QAG5D,YAAO,GAA8B,IAAI,YAAY,EAAE,CAAC;QAGxD,UAAK,GAA8B,IAAI,YAAY,EAAE,CAAC;QAGtD,cAAS,GAA8B,IAAI,YAAY,EAAE,CAAC;QAG1D,YAAO,GAA8B,IAAI,YAAY,EAAE,CAAC;QAGxD,YAAO,GAA8B,IAAI,YAAY,EAAE,CAAC;QAGxD,gBAAW,GAAG,IAAI,CAAC;QAMlB,eAAU,GAA2B,IAAI,SAAS,EAAE,CAAC;QAErD,aAAQ,GAAG,IAAI,SAAS,EAAqB,CAAC;QAG9C,0BAAqB,GAAG,KAAK,CAAC;QAC9B,cAAS,GAA2B,EAAE,CAAC;QAEvC,aAAQ,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACjD,cAAS,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,eAAU,GAAG,KAAK,CAAC;QACnB,aAAQ,GAA4C,IAAI,CAAC;KAmB5D;IAxEL,IACW,MAAM,CAAC,OAAgD;QAChE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;IAuED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,UAAU,CAAC;KAC3D;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,UAAU,CAAC;KAC3D;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,UAAU,CAAC;KAC3D;IAED,IAAY,YAAY;QACtB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC;KACH;IAED,IAAY,gBAAgB;QAC1B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnC,MAAM,cAAc,GAAmB;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,QAAQ,EAAE,IAAI;SACf,CAAC;QAEF,MAAM,OAAO,GAAoB,IAAI,CAAC,QAAQ;YAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;QAExD,OAAO,OAAO;aACX,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ;YACX,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEnC,OAAO,cAAc,CAAC;SACvB,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,CAAC;KACL;IAED,IAAY,kBAAkB;QAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACtC;QAED,MAAM,OAAO,GAAG,yCAAyC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAE1D,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAEpE,IAAI,EAAE,EAAE;YACN,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;SAC7D;QAED,OAAO,UAAU,CAAC,uBAAuB,CAAC,CAAC;KAC5C;IAED,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,mBAAmB;cAC3B,IAAI,CAAC,mBAAmB,CAAC,IAAI;cAC7B,IAAI,CAAC;KACV;IAEM,QAAQ;QACb,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,2BAA2B,EAAE,CAAC;SACpC;QAED,IAAI,CAAC,oCAAoC,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;KACF;IAEM,WAAW,CAAC,OAAsB;QACvC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAClC;KACF;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;KAC/B;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,UAAU,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SAC5B,CAAC,CAAC;KACJ;IAEM,cAAc,CAAC,OAA8B;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,UAAU,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SAC5B,CAAC,CAAC;KACJ;IAEM,kBAAkB;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;IAEM,WAAW;QAChB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC3B;IAEM,cAAc;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KACpC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;KAC7B;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAExB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAC9B,OAAO,CAAC,CAAC,IAAY;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SACrC,CAAC,CAAC;QAEL,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,yBAAyB,EAAE,CAAC;KAClC;IAEM,aAAa,CAAC,OAAgC;QACnD,IAAI,CAAC,UAAU,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC7B;IAEM,cAAc;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAE3E,OAAO,SAAS;aACb,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CACrD,CAAC;KACL;IAEM,MAAM;QACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAE7B,IAAI,CAAC,yBAAyB,EAAE,CAAC;KAClC;IAEM,OAAO;QACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;SAClB,CAAC,CAAC;KACJ;IAEM,SAAS,CAAC,MAAyB;QACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CACjB;YACE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC1B,MAAM;SACP,CAAC,CAAC;KACN;IAEM,YAAY,CAAC,MAAyB;QAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,CACjB;YACE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;iBACvB,MAAM,CAAC,CAAC,IAAI,MAAM,MAAM,KAAK,IAAI,CAAC,CAAC;SACvC,CAAC,CAAC;KACN;IAEO,aAAa;QACnB,IAAI,CAAC,MAAM;aACR,QAAQ;aACR,IAAI,CACH,GAAG,CAAC,CAAC,KAAK;YACR,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC;SACzB,CAAC,EACF,GAAG,CAAC,CAAC,KAAK;YACR,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;SAC9C,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,EAClC,MAAM,CAAC;YACL,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;iBAC1C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;SACvC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAC3C,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC1B,GAAG,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAC5C,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,uBAAuB,EAAE;aAC/C,IAAI,CACH,KAAK,CAAC,IAAI,CAAC,CACZ,CAAC,EACJ,GAAG,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,EAC1C,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,EACjC,QAAQ,CAAC,CAAC,IAAI;YACZ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;gBACpC,OAAO,IAAI,CAAC,kBAAkB,CAAC;aAChC;YAED,OAAO,IAAI,CAAC,gBAAgB;iBACzB,IAAI,CACH,GAAG,CAAC,CAAC,WAAW,sCACX,WAAW,KACd,SAAS,EAAE,IAAI,CAAC,SAAS,IACzB,CACD,CACF,CAAC;SACL,CAAC,EACF,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO;YACpB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAErB,OAAO,OAAO,CAAC;SAChB,CAAC,EACF,GAAG,CAAC,CAAC,cAA8B;YACjC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;SAC5C,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC,SAAS,CAAC,CAAC;KACzB;IAEM,QAAQ;QACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;aAChC,OAAO,CAAC,CAAC,OAAO;YACf,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,CAAC,sBAAsB,EAAE,CAAC;SAClC,CAAC,CAAC;KACN;IAEO,iBAAiB;QACvB,IAAI,CAAC,QAAQ;aACV,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC,CAAC,UAAsB;YAChC,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;YACxD,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YACzB,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;gBAClC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;aAC3B;SACF,CAAC,CAAC;KAEN;IAEO,kBAAkB;QACxB,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;aAC9B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC,CAAC,KAAY;YACtB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC5D,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;aAC3B;SACF,CAAC,CAAC;KACN;IAEO,cAAc;QACpB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAC7B,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;iBAC3B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC,CAAC,KAAoB;gBAC9B,IAAI,IAAI,CAAC,qBAAqB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;oBAEnC,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;4BACjB,IAAI,MAAM,KAAK,IAAI,EAAE;gCACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;oCACf,IAAI,CAAC,UAAU,EAAE,CAAC;iCACnB,CAAC,CAAC;6BACJ;yBACF,CAAC,CAAC;qBACJ;iBACF;gBAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC7D,KAAK,CAAC,cAAc,EAAE,CAAC;oBAEvB,IAAI,IAAI,CAAC,SAAS,EAAE;wBAClB,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;4BAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;yBAC7B;qBACF;iBACF;aACF,CAAC,CAAC;SACN,CAAC,CAAC;KACJ;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE;YACtC,IAAI,CAAC,cAAc,EAAE;iBAClB,IAAI,CACH,MAAM,CAAC,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,CAAC,CAAC,EACjD,SAAS,CAAC,CAAC,MAAM;gBACf,OAAO,MAAM,KAAK,aAAa,CAAC,QAAQ,IAAI,MAAM,KAAK,aAAa,CAAC,OAAO;sBACxE,EAAE,CAAC,IAAI,CAAC;sBACR,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;aACnC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC,CAAC,MAAsB;gBAChC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC,CAAC;aACzC,CAAC,CAAC;SACN;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC7B;KACF;IAEO,oBAAoB,CAAC,SAAqC;QAChE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YACzB,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;YAE5B,SAAS,CAAC,QAAQ;iBACf,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC;gBACT,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB,CAAC,CAAC;SACN;KACF;IAEO,sBAAsB;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ;aAChC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;QAErC,MAAM,YAAY,GAAG,aAAa;aAC/B,IAAI,CAAC,CAAC,MAAM;YACX,OAAO,MAAM,CAAC,MAAM,CAAC;SACtB,CAAC,CAAC;QAEL,OAAO,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;KACvD;IAEO,cAAc,CAAC,EAAW;QAChC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,EAAE,CAAC,aAAa,EAAE;YAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;SAC9C;QAED,OAAO,KAAK,CAAC;KACd;IAEO,eAAe,CAAC,OAAO,EAAE,WAA2B;QAC1D,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAClC;aAAM;YACL,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;aACpC;iBAAM;gBACL,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;aAClC;SACF;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SACxC;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjE,EAAE,CAAC,IAAI,CAAC;aACL,IAAI,CACH,KAAK,CAAC,UAAU,CAAC,EACjB,KAAK,EAAE,EACP,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,CAAC,SAAS,CAAC;YACV,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;gBACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACtC;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aACxC;YAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAClC,CAAC,CAAC;KACN;IAEO,aAAa;QACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAC3B,MAAM,CAAC,KAAK,EAAE,CAAC;SAChB,CAAC,CAAC;KACJ;IAEO,mBAAmB;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAC3B,MAAM,CAAC,WAAW,EAAE,CAAC;SACtB,CAAC,CAAC;KACJ;IAEO,gBAAgB;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;aAC1B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC,CAAC,OAAO;YACjB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAE7C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;qBACjB,OAAO,CAAC,CAAC,IAAY;oBACpB,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;wBACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;qBACtC;iBACF,CAAC,CAAC;aACN;SACF,CAAC,CAAC;KACN;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW;iBACxB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC,CAAC,UAAU;gBACpB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,IAAI,CAAC,QAAQ;yBACV,IAAI,CACH,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,UAAU,CAAC,OAAO,IAAI,MAAM,KAAK,UAAU,CAAC,KAAK,CAAC,EAChF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;yBACA,SAAS,CAAC,CAAC,MAAM;wBAChB,IAAI,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE;4BACjC,UAAU,CAAC,IAAI,EAAE,CAAC;4BAClB,UAAU,CAAC,QAAQ,EAAE,CAAC;yBACvB;6BAAM;4BACL,UAAU,CAAC,KAAK,EAAE,CAAC;yBACpB;qBACF,CAAC,CAAC;iBACN;qBAAM;oBACL,UAAU,CAAC,IAAI,EAAE,CAAC;oBAClB,UAAU,CAAC,QAAQ,EAAE,CAAC;iBACvB;aACF,CAAC,CAAC;SACN;KACF;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW;iBACxB,IAAI,CACH,SAAS,CAAC,CAAC,UAAU;gBACnB,OAAO,GAAG,CACR,MAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EACxC,IAAI,CAAC,cAAc,EAAE;qBAClB,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,CAAC,CAAC,EAC9C,GAAG,CAAC,CAAC,MAAM;oBACT,IAAI,MAAM,EAAE;wBACV,UAAU,CAAC,IAAI,EAAE,CAAC;wBAClB,UAAU,CAAC,QAAQ,EAAE,CAAC;qBACvB;iBACF,CAAC,CACH,EACH,KAAK,CAAC;oBACJ,UAAU,CAAC,IAAI,EAAE,CAAC;oBAClB,UAAU,CAAC,QAAQ,EAAE,CAAC;iBACvB,CAAC,CACH,CAAC;aACH,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,EAAE,CAAC;SAChB;KACF;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC7C;QAED,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC,UAAU,CAAC,OAAO;aACpB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC;YACT,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;SAC1D,CAAC,CAAC;KACN;IAEM,wBAAwB,CAAC,SAAwB;QACtD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAqB;YACtC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;SACxC,CAAC,CAAC;KACJ;IAEM,uBAAuB,CAAC,QAAqB;QAClD,MAAM,eAAe,GAAG,QAA2B,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;YACzC,eAAe,CAAC,oBAAoB,GAAG,QAAQ,CAAC,YAAY,CAAC;YAC7D,eAAe,CAAC,YAAY,GAAG,IAAI,OAAO,EAAyD,CAAC;YACpG,eAAe,CAAC,YAAY,GAAG,CAAC,GAAW,EAAE,SAAuB,EAAE,GAAW;gBAC/E,IAAI,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE;oBACjD,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;iBAC5D;qBAAM;oBACL,eAAe,CAAC,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;iBAC3D;aACF,CAAC;SACH;QAED,eAAe,CAAC,YAAY;aACzB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC,CAAC,KAAK;YACf,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpC,IAAI,CAAC,cAAc,EAAE;yBAClB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;yBACA,SAAS,CAAC,CAAC,MAAM;wBAChB,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE;4BACjC,eAAe,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC;yBAC3C;qBACF,CAAC,CAAC;iBACN;qBAAM;oBACL,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC7E;aACF;SACF,CAAC,CAAC;KACN;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI;gBAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;aACjC,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,CAAC,OAAO;iBACzB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC,CAAC,CAAC;gBACX,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;oBACb,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;iBACjC,CAAC,CAAC;aACJ,CAAC,CAAC;SACN;KACF;IAEO,oCAAoC;QAC1C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAE9E,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;iBAC5B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC;gBACT,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB,CAAC,CAAC;YAEL,IAAI,CAAC,SAAS;iBACX,SAAS,CAAC;gBACT,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;aACtC,CAAC,CAAC;SACN;KACF;IAEO,qBAAqB;QAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAY,EAAE,OAAwB;YAExE,MAAM,EAAE,GAAY,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;YAEvF,IAAI,EAAE,EAAE;gBACN,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;gBAE7C,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;oBACpC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;iBACzC;aACF;YAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC7C,CAAC;KACH;IAEO,0BAA0B;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;aAC1B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC;YACT,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAClC,CAAC,CAAC;QAEL,IAAI,CAAC,QAAQ,CAAC,OAAO;aAClB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;aACA,SAAS,CAAC;YACT,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAClC,CAAC,CAAC;KACN;IAEO,yBAAyB;QAC/B,IAAI,CAAC,QAAQ;aACV,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;aACjC,OAAO,CAAC,CAAC,YAA+B;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;gBAC9F,YAAY,CAAC,MAAM,EAAE,CAAC;aACvB;iBAAM;gBACL,YAAY,CAAC,OAAO,EAAE,CAAC;aACxB;SACF,CAAC,CAAC;KACN;IAEO,0BAA0B;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7C;IAEO,yBAAyB;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KAC3C;IAEO,wBAAwB;QAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;SACpC;KACF;IAEO,eAAe;QACrB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;SAClB,CAAC,CAAC;KACJ;IAEO,uBAAuB;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa;aAC7B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAC7B,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,CACtC,CAAC;KACL;IAEO,YAAY,CAAC,CAAiB;QACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,yCAAyC,EAAE,eAAe,CAAC,CAAC;QAC3F,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACvB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;SAC5C;QAED,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACnC;IAEO,2BAA2B;QACjC,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;QAErE,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC/B,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE;YAC5D,IAAI,CAAC,qBAAqB,CAAC,aAAa,GAAG,EAAE,CAAC;SAC/C;QAED,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE;YAC/E,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACpE;KACF;IAEO,qBAAqB;QAC3B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC/B,OAAO;SACR;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACzF,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAE/D,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;KACtE;;6GAp1BU,eAAe,kBA8FhB,MAAM,kKASM,YAAY,6BAGZ,SAAS;iGA1GpB,eAAe,iyBA4ET,0BAA0B,gEAG1B,WAAW;4FA/EjB,eAAe;kBAH3B,SAAS;mBAAC;oBACT,QAAQ,EAAE,UAAU;iBACrB;;0BA+FI,MAAM;2BAAC,MAAM;;0BASb,QAAQ;;0BAAI,MAAM;2BAAC,YAAY;;0BAG/B,QAAQ;;0BAAI,MAAM;2BAAC,SAAS;yEAvGxB,eAAe;sBADrB,KAAK;gBAIC,eAAe;sBADrB,KAAK;gBAIC,YAAY;sBADlB,KAAK;gBAIC,aAAa;sBADnB,KAAK;gBAIC,YAAY;sBADlB,KAAK;gBAIC,SAAS;sBADf,KAAK;gBAIC,OAAO;sBADb,KAAK;gBAIC,aAAa;sBADnB,KAAK;gBAIC,aAAa;sBADnB,KAAK;gBAIC,cAAc;sBADpB,KAAK;gBAIC,WAAW;sBADjB,KAAK;gBAIC,iBAAiB;sBADvB,KAAK;gBAIK,MAAM;sBADhB,KAAK;gBAMC,YAAY;sBADlB,KAAK;gBAIC,UAAU;sBADhB,KAAK;gBAIC,QAAQ;sBADd,KAAK;gBAIC,iBAAiB;sBADvB,KAAK;gBAIC,WAAW;sBADjB,MAAM;uBAAC,QAAQ;gBAIT,OAAO;sBADb,MAAM;gBAIA,KAAK;sBADX,MAAM;gBAIA,SAAS;sBADf,MAAM;gBAIA,OAAO;sBADb,MAAM;gBAIA,OAAO;sBADb,MAAM;gBAIA,WAAW;sBADjB,WAAW;uBAAC,eAAe;gBAIrB,eAAe;sBADrB,eAAe;uBAAC,0BAA0B,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAI1D,UAAU;sBADjB,eAAe;uBAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;ACxJ9C,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,wBAAwB;IAClC,KAAK,EAAE,mCAAmC;IAC1C,MAAM,EAAE,8CAA8C;IACtD,KAAK,EAAE,sBAAsB;IAC7B,OAAO,EAAE,yBAAyB;IAClC,OAAO,EAAE,4BAA4B;IACrC,GAAG,EAAE,oCAAoC;IACzC,GAAG,EAAE,uCAAuC;IAC5C,SAAS,EAAE,4CAA4C;IACvD,SAAS,EAAE,2CAA2C;IACtD,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,iCAAiC;IAC1C,SAAS,EAAE,oBAAoB;IAC/B,GAAG,EAAE,yBAAyB;IAC9B,WAAW,EAAE,uEAAuE;IACpF,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,8BAA8B;CACvC;;ACfM,MAAM,iBAAiB,GAAG,IAAI,cAAc,CACjD,2BAA2B,CAC5B,CAAC;AAEK,MAAM,yBAAyB,GAAG;IACvC,OAAO,EAAE,iBAAiB;IAC1B,UAAU,EAAE,sBAAsB;CACnC,CAAC;SAEc,sBAAsB;IACpC,yBAAY,cAAc,EAAG;AAC/B;;MCyBa,kBAAkB;IAyB7B,YACY,UAAsB,EACtB,SAAoB,EACpB,QAAkB,EACiB,iBAAiB,EACxC,SAAoB,EACK,aAA8B;QALnE,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAAW;QACpB,aAAQ,GAAR,QAAQ,CAAU;QACiB,sBAAiB,GAAjB,iBAAiB,CAAA;QACxC,cAAS,GAAT,SAAS,CAAW;QACK,kBAAa,GAAb,aAAa,CAAiB;QAzBtE,uBAAkB,GAAG,iBAAiB,CAAC;QACvC,qBAAgB,GAAG,eAAe,CAAC;QACnC,qBAAgB,GAAG,eAAe,CAAC;QACnC,oBAAe,GAAG,cAAc,CAAC;QAUnC,WAAM,GAAG,EAAE,CAAC;;QAGT,cAAS,GAAG,IAAI,OAAO,EAAE,CAAC;QAYlC,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;SACnC;aAAM;YACL,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SAC3F;KACF;IA5BD,IACW,gBAAgB,CAAC,QAAgC;QAC1D,IAAI,CAAC,iBAAiB,mCACjB,IAAI,CAAC,iBAAiB,GACtB,QAAQ,CACZ,CAAC;KACH;IAwBD,QAAQ;QACN,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,WAAW;QACT,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC3B;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,aAAa;iBACxB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACtC;KACF;IAES,kBAAkB;;QAE1B,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE;YAClC,OAAO,EAAE,CAAC;SACX;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO,IAAI,CAAC,eAAe,CAAC;SAE7B;aAAM,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAe,EAAE;YAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;SAC3C;KACF;IAES,sBAAsB;;QAE9B,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE;YAC/B,OAAO,EAAE,CAAC;SACX;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY,CAAC;SAE1B;aAAM,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,YAAY,EAAE;YAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;SACxC;KACF;IAES,kBAAkB;;QAE1B,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE;YAClC,OAAO,EAAE,CAAC;SACX;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO,IAAI,CAAC,eAAe,CAAC;SAE7B;aAAM,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAe,EAAE;YAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;SAC3C;KACF;IAES,gBAAgB;;QAExB,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;YAChC,OAAO,EAAE,CAAC;SACX;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,IAAI,CAAC,aAAa,CAAC;SAE3B;aAAM,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,aAAa,EAAE;YAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;SACzC;KACF;IAES,iBAAiB;QAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE/D,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC;SAChB;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KACtC;;;;;;;;;;IAYS,MAAM;;QACd,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;YAC1E,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO;oBAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,KAAI,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,0CAAE,SAAS,CAAA,CAAC,CAAC;YAErE,IAAI,qBAAqB,IAAI,KAAK,EAAE;gBAClC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;aACjD;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aACxC;YAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC9B,OAAO;aACR;YAED,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAExE,IAAI,CAAC,cAAc,EAAE;gBACnB,OAAO,OAAO,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;aACrG;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAEpE,IAAI,YAAY,EAAE;oBAChB,IAAI,IAAI,CAAC,gBAAgB,EAAE;wBACzB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;qBAC9D;iBACF;aACF;YAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC5D;YAED,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;gBACjC,MAAM,IAAI,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;gBAEzE,IAAI,IAAI,EAAE;oBACR,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;oBAE7D,IAAI,IAAI,CAAC,eAAe,EAAE;wBACxB,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;qBAC/C;iBACF;aACF;YAED,IAAI,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;YAClE,IAAI,YAAY,EAAE;gBAChB,YAAY,CAAC,MAAM,EAAE,CAAC;aACvB;YAED,IAAI,CAAC,qBAAqB,IAAI,CAAC,KAAK,EAAE;gBACpC,OAAO;aACR;YAED,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;YACxD,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvD,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAE1E,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAErD,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC9C,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;SAC1C;KACF;IAES,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;QAElC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE;YAC/E,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;KAClD;IAES,iBAAiB,CAAC,OAAO,EAAE,IAAI;QACvC,MAAM,CAAC,IAAI,CAAC;aACT,OAAO,CAAC,CAAC,IAAI;YACV,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAC/C,CAAC,CAAC;QAEL,OAAO,OAAO,CAAC;KAChB;IAES,QAAQ,CAAC,UAAU;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;SACzE;QAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;KACzC;IAEO,gBAAgB;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS;kBAChC,CAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;kBAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc;kBAC1C,CAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;kBACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElC,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;SAC7C;QAED,OAAO,CAAC,sBAAsB,EAAE,CAAC;KAClC;;gHA3QU,kBAAkB,6FA6BX,iBAAiB,oEAEb,eAAe;oGA/B1B,kBAAkB,4XAJlB;QACT,yBAAyB;KAC1B;4FAEU,kBAAkB;kBAN9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;;0BA8BI,IAAI;;0BAAI,MAAM;2BAAC,iBAAiB;;0BAChC,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,eAAe;4CA7B5B,eAAe;sBAAvB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,kBAAkB;sBAA1B,KAAK;gBACG,gBAAgB;sBAAxB,KAAK;gBACG,gBAAgB;sBAAxB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBAGK,gBAAgB;sBAD1B,KAAK;;;SClDQ,SAAS,CAAC,KAAU;IAClC,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;AACtD;;MCaa,uBAAwB,SAAQ,kBAAkB;IAN/D;;QAOS,aAAQ,GAAG,KAAK,CAAC;KAgDzB;IA9CC,IACW,iBAAiB,CAAC,KAAK;QAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;KAClC;IAED,IACW,WAAW,CAAC,KAAK;QAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;KAClC;IAED,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;KACzC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3C;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;IAES,MAAM;QAEd,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzC,IAAI,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACtC,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;;YAGpE,IAAI,YAAY,EAAE;gBAChB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;iBACjE;qBAAM;oBACL,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;iBACpE;aACF;SACF;QAED,KAAK,CAAC,MAAM,EAAE,CAAC;KAChB;;qHAhDU,uBAAuB;yGAAvB,uBAAuB,oPAJvB;QACT,yBAAyB;KAC1B;4FAEU,uBAAuB;kBANnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,sCAAsC;oBAChD,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAKY,iBAAiB;sBAD3B,KAAK;uBAAC,gBAAgB;gBAMZ,WAAW;sBADrB,KAAK;uBAAC,UAAU;gBAMN,iBAAiB;sBAD3B,KAAK;uBAAC,uBAAuB;;;MCrBnB,YAAY;IAEvB,OAAO,KAAK,CAAC,OAAwB;QACnC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC;SACb;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACxB;IAED,OAAO,MAAM,CAAC,OAAwB;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAElC,MAAM,gBAAgB,GAAG,KAAK;aAC3B,KAAK,CAAC,GAAG,CAAC;aACV,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhC,OAAO,gBAAgB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;KAClD;IAED,OAAO,OAAO,CAAC,OAAwB;QACrC,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;SACzB;KACF;IAED,OAAO,OAAO,CAAC,OAAwB;QACrC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YAC/E,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;SACzB;KACF;IAED,OAAO,KAAK,CAAC,OAAwB;QACnC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC;SACb;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACxB;IAED,OAAO,GAAG,CAAC,OAAwB,EAAE,gBAAgB,GAAG,KAAK;QAC3D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SACtB;QAED,IAAI,gBAAgB,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAE/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;gBACzC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;aAC9B;SACF;QAED,OAAO,IAAI,CAAC;KACb;IAED,OAAO,SAAS,CAAC,OAAwB;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YAE9B,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;gBACxD,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAC5B;IAED,OAAO,IAAI,CAAC,OAAwB,EAAE,YAAY,EAAE,IAAS;QAC3D,IAAI,MAAe,CAAC;QACpB,IAAI,OAA4B,CAAA;QAEhC,IAAI;YACF,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACtC;QAAC,OAAO,GAAG,EAAE;YACZ,GAAG,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;YAE/C,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,MAAM,YAAY,OAAO,EAAE;gBAC7B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;aACvB;iBAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC/B,OAAO,GAAG,MAAM,CAAC;aAClB;iBAAM;gBACL,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;aACpB;SACF;QAED,OAAO,OAAO;aACX,IAAI,CACH,KAAK,CAAC,IAAI,CAAC,EACX,UAAU,CAAC,CAAC,GAAG;YACb,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;SACrC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,CACR,CAAC;KACL;;;MCxGU,kBAAmB,SAAQ,kBAAkB;IAKxD,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,KAAK,CAAC;KACpC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACzG;;gHAhBU,kBAAkB;oGAAlB,kBAAkB,wIAJlB;QACT,yBAAyB;KAC1B;4FAEU,kBAAkB;kBAN9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,SAAS;sBADf,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,kBAAkB;;;MCNd,kBAAmB,SAAQ,kBAAkB;IAKxD,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,KAAK,CAAC;KACpC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC7F;;gHAhBU,kBAAkB;oGAAlB,kBAAkB,wIAJlB;QACT,yBAAyB;KAC1B;4FAEU,kBAAkB;kBAN9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,SAAS;sBADf,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,kBAAkB;;;MCLd,wBAAyB,SAAQ,kBAAkB;IAK9D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1C;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAClE;;sHAhBU,wBAAwB;0GAAxB,wBAAwB,gKAJxB;QACT,yBAAyB;KAC1B;4FAEU,wBAAwB;kBANpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,eAAe;sBADrB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,wBAAwB;;;MCLpB,wBAAyB,SAAQ,kBAAkB;IAK9D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1C;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAClE;;sHAhBU,wBAAwB;0GAAxB,wBAAwB,gKAJxB;QACT,yBAAyB;KAC1B;4FAEU,wBAAwB;kBANpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,eAAe;sBADrB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,wBAAwB;;;MCHpB,oBAAqB,SAAQ,kBAAkB;IAK1D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;KACtC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC/B,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1C;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;kHApBU,oBAAoB;sGAApB,oBAAoB,gJAJpB;QACT,yBAAyB;KAC1B;4FAEU,oBAAoB;kBANhC,SAAS;mBAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,WAAW;sBADjB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,oBAAoB;;;MCLhB,qBAAsB,SAAQ,kBAAkB;IAK3D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,KAAK,CAAC;KACvC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAChC,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3C;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;mHApBU,qBAAqB;uGAArB,qBAAqB,oJAJrB;QACT,yBAAyB;KAC1B;4FAEU,qBAAqB;kBANjC,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,YAAY;sBADlB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,qBAAqB;;;MCLjB,oBAAqB,SAAQ,kBAAkB;IAK1D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;KACtC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC/B,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1C;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;kHApBU,oBAAoB;sGAApB,oBAAoB,gJAJpB;QACT,yBAAyB;KAC1B;4FAEU,oBAAoB;kBANhC,SAAS;mBAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,WAAW;sBADjB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,oBAAoB;;;MCRhB,sBAAuB,SAAQ,kBAAkB;IAM5D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;KACxC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;YACpE,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAC1B;KACF;IAEM,eAAe;QACpB,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE;YAC3C,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;SACxC,EAAE,KAAK,CAAC,CAAC;KACX;IAEM,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE;YAC9C,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;SACxC,EAAE,KAAK,CAAC,CAAC;KACX;;oHAjCU,sBAAsB;wGAAtB,sBAAsB,wJAJtB;QACT,yBAAyB;KAC1B;4FAEU,sBAAsB;kBANlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAKQ,aAAa;sBADnB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,sBAAsB;;;MCHlB,sBAAuB,SAAQ,kBAAkB;IAK5D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;KACxC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YACjC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC5C;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;oHApBU,sBAAsB;wGAAtB,sBAAsB,wJAJtB;QACT,yBAAyB;KAC1B;4FAEU,sBAAsB;kBANlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,aAAa;sBADnB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,sBAAsB;;;MCLlB,sBAAuB,SAAQ,kBAAkB;IAK5D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;KACxC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YACjC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC5C;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;oHApBU,sBAAsB;wGAAtB,sBAAsB,wJAJtB;QACT,yBAAyB;KAC1B;4FAEU,sBAAsB;kBANlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,aAAa;sBADnB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,sBAAsB;;;MCRlB,sBAAuB,SAAQ,kBAAkB;IAK5D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;KACxC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9D;;oHAhBU,sBAAsB;wGAAtB,sBAAsB,wJAJtB;QACT,yBAAyB;KAC1B;4FAEU,sBAAsB;kBANlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,aAAa;sBADnB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,sBAAsB;;;MCDlB,uBAAwB,SAAQ,kBAAkB;IAN/D;;QAeS,qBAAgB,GAAG,KAAK,CAAC;KAcjC;IAZQ,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,aAAa,CAAC,OAAwB;QAC3C,IAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC1D,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACvF;;qHArBU,uBAAuB;yGAAvB,uBAAuB,yKAJvB;QACT,yBAAyB;KAC1B;4FAEU,uBAAuB;kBANnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,cAAc;sBADpB,KAAK;gBAIC,kBAAkB;sBADxB,KAAK;gBAIC,gBAAgB;sBADtB,KAAK;;;MCVK,sBAAuB,SAAQ,kBAAkB;IAK5D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;KACxC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,OAAO,EAAE;YACxD,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;SAChD;QAED,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5C;;oHAvBU,sBAAsB;wGAAtB,sBAAsB,wJAJtB;QACT,yBAAyB;KAC1B;4FAEU,sBAAsB;kBANlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,aAAa;sBADnB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,sBAAsB;;;MCJlB,wBAAyB,SAAQ,kBAAkB;IAK9D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1C;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YACnC,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9C;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;sHApBU,wBAAwB;0GAAxB,wBAAwB,gKAJxB;QACT,yBAAyB;KAC1B;4FAEU,wBAAwB;kBANpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,eAAe;sBADrB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,wBAAwB;;;MCNpB,qBAAsB,SAAQ,kBAAkB;IAK3D,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,KAAK,CAAC;KACvC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,MAAM,EAAE;YACtD,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;SAC9C;QAED,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5C;;mHAvBU,qBAAqB;uGAArB,qBAAqB,oJAJrB;QACT,yBAAyB;KAC1B;4FAEU,qBAAqB;kBANjC,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,YAAY;sBADlB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,qBAAqB;;;MCJjB,kBAAmB,SAAQ,kBAAkB;IAN1D;;QAYS,sBAAiB,GAAG,KAAK,CAAC;KAmBlC;IAjBC,IACW,iBAAiB,CAAC,KAAa;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,KAAK,CAAC;KACpC;IAEM,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC7B,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChE;aAAM;YACL,OAAO,IAAI,CAAC;SACb;KACF;;gHAvBU,kBAAkB;oGAAlB,kBAAkB,gLAJlB;QACT,yBAAyB;KAC1B;4FAEU,kBAAkB;kBAN9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,SAAS;sBADf,KAAK;gBAIC,iBAAiB;sBADvB,KAAK;gBAIK,iBAAiB;sBAD3B,KAAK;uBAAC,kBAAkB;;;MCZd,iBAAiB;IAoB5B,YAC8B,UAAqB,EAC7B,KAAsB,EAClC,WAAuB,EACvB,MAAyB;QAHL,eAAU,GAAV,UAAU,CAAW;QAC7B,UAAK,GAAL,KAAK,CAAiB;QAClC,gBAAW,GAAX,WAAW,CAAY;QACvB,WAAM,GAAN,MAAM,CAAmB;QAlB5B,gBAAW,GAAG,IAAI,CAAC;QAMnB,oBAAe,GAAG,IAAI,CAAC;QAEvB,WAAM,GAAG,KAAK,CAAC;QACf,WAAM,GAAG,KAAK,CAAC;QAEd,sBAAiB,GAAG,KAAK,CAAC;QAC1B,cAAS,GAAG,IAAI,OAAO,EAAE,CAAC;KAO9B;IAEG,QAAQ;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;QAEpC,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAE1B,IAAG,IAAI,CAAC,MAAM,EAAE;gBACd,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;qBAC7B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;qBACA,SAAS,CAAC;oBACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;iBACpB,CAAC,CAAC;gBAEL,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBAC/B,IAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;4BAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;yBAChB;qBACF;iBACF;gBAED,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;gBAC9B,UAAU,CAAC;oBACT,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBAC7B,EAAE,GAAG,CAAC,CAAC;aACT;SACF;KACF;IAEM,OAAO;QACZ,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SAC5B;KACF;IAEM,MAAM;QACX,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SAC5B;KACF;IAEM,OAAO;QACZ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;SACtC;KACF;IAEM,OAAO;QACZ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;SACvC;KACF;IAEM,KAAK;QACV,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;SACvC;KACF;IAEM,QAAQ,CAAC,GAAG;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC1B;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;KACvC;IAEM,WAAW;QAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACrB;IAEM,KAAK;QACV,IAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;SACf;QAED,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC;aACvC,OAAO,CAAC,CAAC,EAAE;YACV,EAAE,CAAC,MAAM,EAAE,CAAC;SACb,CAAC,CAAC;QAEL,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;SACvC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEM,WAAW;;QAChB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAA,IAAI,CAAC,IAAI,0CAAE,YAAY,CAAC,IAAI,CAAC,CAAC;KAC/B;IAEO,uBAAuB;;;KAG9B;IAEO,WAAW;QACjB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;KACvG;IAEO,OAAO,CAAC,IAAI;QAClB,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC;;;;;;;;aAQhC,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC;SACjC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC;;;;;;aAMhC,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC;SACjC;QAED,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,OAAO,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,8ZAA8Z,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC;SAC/d;KACF;;+GAzKU,iBAAiB;mGAAjB,iBAAiB;4FAAjB,iBAAiB;kBAH7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,yEAAyE;iBACpF;;0BAsBI,QAAQ;;0BAAI,IAAI;;0BAChB,QAAQ;qGAnBJ,IAAI;sBADV,KAAK;gBAIC,WAAW;sBADjB,KAAK;gBAIC,IAAI;sBADV,KAAK;gBAIC,eAAe;sBADrB,WAAW;uBAAC,kBAAkB;;;MCNpB,uBAAwB,SAAQ,kBAAkB;IAN/D;;QAeS,qBAAgB,GAAG,KAAK,CAAC;KAcjC;IAZQ,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;IAEM,aAAa,CAAC,OAAwB;QAC3C,IAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC1D,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;KAC/E;;qHArBU,uBAAuB;yGAAvB,uBAAuB,mLAJvB;QACT,yBAAyB;KAC1B;4FAEU,uBAAuB;kBANnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;8BAIQ,UAAU;sBADhB,KAAK;uBAAC,UAAU;gBAIV,cAAc;sBADpB,KAAK;uBAAC,cAAc;gBAId,gBAAgB;sBADtB,KAAK;;;MCRK,4BAA4B;IAavC,YACsB,KAAsB,EACtB,UAA6B,EACzC,MAAyB;QAFb,UAAK,GAAL,KAAK,CAAiB;QACtB,eAAU,GAAV,UAAU,CAAmB;QACzC,WAAM,GAAN,MAAM,CAAmB;QAdnB,SAAI,GAAG,IAAI,CAAC;QACZ,WAAM,GAAG,KAAK,CAAC;QACf,UAAK,GAAG,KAAK,CAAC;QACd,SAAI,GAAG,KAAK,CAAC;QACb,cAAS,GAAG,IAAI,CAAC;QAG1B,UAAK,GAAG,KAAK,CAAC;QAEb,cAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;KAMpC;IAEG,QAAQ;QACb,IAAG,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY;iBAC7B,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAC3B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC;gBACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;aAC5B,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,CAAC,SAAS;iBACnB,IAAI,CACH,KAAK,CAAC,EAAE,CAAC,EACT,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC;gBACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;aAC5B,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,CAAC,OAAO;iBACjB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC;gBACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;aAC5B,CAAC,CAAC;SACJ;KACF;IAEM,UAAU;QACf,IAAG,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;iBAC1B,IAAI,CACH,MAAM,CAAC,CAAC,aAA4B,MAAM,aAAa,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,EAClF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;iBACA,SAAS,CAAC;gBACT,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACvC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACvC;KACF;IAEM,WAAW;QAChB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC3B;;0HAtEU,4BAA4B;8GAA5B,4BAA4B,8KCjBzC,svCAmDA;4FDlCa,4BAA4B;kBANxC,SAAS;mBAAC;oBACT,QAAQ,EAAE,wBAAwB;oBAClC,WAAW,EAAE,sCAAsC;oBACnD,SAAS,EAAE,CAAC,sCAAsC,CAAC;oBACnD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;;0BAeI,QAAQ;;0BACR,QAAQ;4EAbK,IAAI;sBAAnB,KAAK;gBACU,MAAM;sBAArB,KAAK;gBACU,KAAK;sBAApB,KAAK;gBACU,IAAI;sBAAnB,KAAK;gBACU,SAAS;sBAAxB,KAAK;gBACU,IAAI;sBAAnB,KAAK;;;AElBR;;;;;MA8Ba,6BAA8B,SAAQ,kBAAkB;IAE5D,WAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;KACxC;;2HAJU,6BAA6B;+GAA7B,6BAA6B,+ZAJ7B;QACT,yBAAyB;KAC1B;4FAEU,6BAA6B;kBAzBzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,WAAW;wBACnB,kBAAkB;wBAClB,wBAAwB;wBACxB,uBAAuB;wBACvB,yBAAyB;wBACzB,qBAAqB;wBACrB,sBAAsB;wBACtB,wBAAwB;wBACxB,uBAAuB;wBACvB,uBAAuB;wBACvB,sBAAsB;wBACtB,mBAAmB;wBACnB,yBAAyB;wBACzB,mBAAmB;wBACnB,yBAAyB;wBACzB,uBAAuB;wBACvB,uBAAuB;wBACvB,qBAAqB;wBACrB,mBAAmB;wBACnB,kBAAkB;oBACpB,SAAS,EAAE;wBACT,yBAAyB;qBAC1B;iBACF;;;MC3BY,uBAAwB,SAAQ,iBAAiB;;qHAAjD,uBAAuB;yGAAvB,uBAAuB;4FAAvB,uBAAuB;kBAHnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;iBAC3B;;;MCiGY,YAAY;IACvB,OAAO,OAAO;;;;QAKZ,iBAAiB,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,OAA2B,EAAE,IAAwC;YAC/G,OAAO,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAA,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,CAAC;SAC/D,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,YAAY;SACvB,CAAC;KACH;;0GAbU,YAAY;2GAAZ,YAAY,iBA5DrB,eAAe;QACf,kBAAkB;QAClB,uBAAuB;QACvB,kBAAkB;QAClB,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,sBAAsB;QACtB,sBAAsB;QACtB,sBAAsB;QACtB,sBAAsB;QACtB,uBAAuB;QACvB,wBAAwB;QACxB,sBAAsB;QACtB,qBAAqB;QACrB,kBAAkB;QAClB,0BAA0B;QAC1B,uBAAuB;QACvB,4BAA4B;QAC5B,6BAA6B;QAC7B,iBAAiB;QACjB,uBAAuB,aA/BvB,YAAY;QACZ,WAAW;QAEX,eAAe;QACf,eAAe,aA8Bf,eAAe;QACf,kBAAkB;QAClB,uBAAuB;QACvB,kBAAkB;QAClB,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,sBAAsB;QACtB,sBAAsB;QACtB,sBAAsB;QACtB,sBAAsB;QACtB,uBAAuB;QACvB,wBAAwB;QACxB,sBAAsB;QACtB,qBAAqB;QACrB,kBAAkB;QAClB,0BAA0B;QAC1B,uBAAuB;QACvB,4BAA4B;QAC5B,6BAA6B;QAC7B,iBAAiB;QACjB,uBAAuB;2GASd,YAAY,aAPZ;QACT;YACE,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,4BAA4B;SACvC;KACF,YAlEQ;YACP,YAAY;YACZ,WAAW;YAEX,eAAe;YACf,eAAe;SAChB;4FA8DU,YAAY;kBArExB,QAAQ;mBAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBAEX,eAAe;wBACf,eAAe;qBAChB;oBACD,YAAY,EAAE;wBACZ,eAAe;wBACf,kBAAkB;wBAClB,uBAAuB;wBACvB,kBAAkB;wBAClB,kBAAkB;wBAClB,wBAAwB;wBACxB,wBAAwB;wBACxB,oBAAoB;wBACpB,qBAAqB;wBACrB,oBAAoB;wBACpB,sBAAsB;wBACtB,sBAAsB;wBACtB,sBAAsB;wBACtB,sBAAsB;wBACtB,uBAAuB;wBACvB,wBAAwB;wBACxB,sBAAsB;wBACtB,qBAAqB;wBACrB,kBAAkB;wBAClB,0BAA0B;wBAC1B,uBAAuB;wBACvB,4BAA4B;wBAC5B,6BAA6B;wBAC7B,iBAAiB;wBACjB,uBAAuB;qBACxB;oBACD,OAAO,EAAE;wBACP,eAAe;wBACf,kBAAkB;wBAClB,uBAAuB;wBACvB,kBAAkB;wBAClB,kBAAkB;wBAClB,wBAAwB;wBACxB,wBAAwB;wBACxB,oBAAoB;wBACpB,qBAAqB;wBACrB,oBAAoB;wBACpB,sBAAsB;wBACtB,sBAAsB;wBACtB,sBAAsB;wBACtB,sBAAsB;wBACtB,uBAAuB;wBACvB,wBAAwB;wBACxB,sBAAsB;wBACtB,qBAAqB;wBACrB,kBAAkB;wBAClB,0BAA0B;wBAC1B,uBAAuB;wBACvB,4BAA4B;wBAC5B,6BAA6B;wBAC7B,iBAAiB;wBACjB,uBAAuB;qBACxB;oBACD,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,QAAQ,EAAE,4BAA4B;yBACvC;qBACF;iBACF;;;ACvGD;;ACAA;;;;;;"}