@firestitch/form 9.7.4 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +21 -18
- package/app/consts/error-messages.const.d.ts +19 -19
- package/app/directives/form/form.directive.d.ts +105 -102
- package/app/directives/form-dialog-close.directive.d.ts +12 -9
- package/app/directives/submit-button.directive.d.ts +31 -28
- package/app/directives/validators/compare.directive.d.ts +15 -12
- package/app/directives/validators/control.directive.d.ts +48 -45
- package/app/directives/validators/daterange.directive.d.ts +13 -10
- package/app/directives/validators/email.directive.d.ts +13 -10
- package/app/directives/validators/emails.directive.d.ts +13 -10
- package/app/directives/validators/function.directive.d.ts +14 -11
- package/app/directives/validators/greater.directive.d.ts +13 -10
- package/app/directives/validators/integer.directive.d.ts +13 -10
- package/app/directives/validators/lesser.directive.d.ts +13 -10
- package/app/directives/validators/max.directive.d.ts +13 -10
- package/app/directives/validators/maxlength.directive.d.ts +13 -10
- package/app/directives/validators/min.directive.d.ts +13 -10
- package/app/directives/validators/minlength.directive.d.ts +13 -10
- package/app/directives/validators/numeric.directive.d.ts +13 -10
- package/app/directives/validators/pattern.directive.d.ts +13 -10
- package/app/directives/validators/phone.directive.d.ts +13 -10
- package/app/directives/validators/required.directive.d.ts +16 -13
- package/app/directives/validators/url.directive.d.ts +14 -11
- package/app/directives/validators/validate.directive.d.ts +14 -11
- package/app/enums/confirm-result.d.ts +7 -7
- package/app/enums/form-status.d.ts +9 -9
- package/app/fs-form.module.d.ts +35 -4
- package/app/guards/form-deactivate.guard.d.ts +12 -9
- package/app/helpers/confirm-result-continue.d.ts +1 -1
- package/app/helpers/confirm-unsaved.d.ts +5 -5
- package/app/helpers/get-form-errors.d.ts +2 -2
- package/app/helpers/index.d.ts +2 -2
- package/app/helpers/is-enabled.d.ts +1 -1
- package/app/interfaces/async-validator.d.ts +14 -14
- package/app/interfaces/confirm-config.d.ts +7 -7
- package/app/interfaces/confirm-tab-group.d.ts +10 -10
- package/app/interfaces/form-deactivate.d.ts +4 -4
- package/app/interfaces/index.d.ts +4 -4
- package/app/interfaces/submit-event.d.ts +5 -5
- package/app/interfaces/submitted-event.d.ts +6 -6
- package/app/interfaces/validator.d.ts +13 -13
- package/app/providers/validate-messages.provider.d.ts +25 -25
- package/app/services/fsform.service.d.ts +10 -7
- package/app/validators/validators.d.ts +12 -12
- package/bundles/firestitch-form.umd.js +2672 -2545
- package/bundles/firestitch-form.umd.js.map +1 -1
- package/esm2015/app/components/form-dialog-actions/form-dialog-actions.component.js +86 -91
- package/esm2015/app/consts/error-messages.const.js +20 -20
- package/esm2015/app/directives/form/form.directive.js +619 -668
- package/esm2015/app/directives/form-dialog-close.directive.js +31 -33
- package/esm2015/app/directives/submit-button.directive.js +131 -138
- package/esm2015/app/directives/validators/compare.directive.js +49 -49
- package/esm2015/app/directives/validators/control.directive.js +257 -273
- package/esm2015/app/directives/validators/daterange.directive.js +41 -41
- package/esm2015/app/directives/validators/email.directive.js +41 -41
- package/esm2015/app/directives/validators/emails.directive.js +41 -41
- package/esm2015/app/directives/validators/function.directive.js +31 -31
- package/esm2015/app/directives/validators/greater.directive.js +40 -40
- package/esm2015/app/directives/validators/integer.directive.js +41 -41
- package/esm2015/app/directives/validators/lesser.directive.js +40 -40
- package/esm2015/app/directives/validators/max.directive.js +36 -36
- package/esm2015/app/directives/validators/maxlength.directive.js +35 -35
- package/esm2015/app/directives/validators/min.directive.js +36 -36
- package/esm2015/app/directives/validators/minlength.directive.js +35 -35
- package/esm2015/app/directives/validators/numeric.directive.js +41 -41
- package/esm2015/app/directives/validators/pattern.directive.js +35 -35
- package/esm2015/app/directives/validators/phone.directive.js +41 -41
- package/esm2015/app/directives/validators/required.directive.js +71 -73
- package/esm2015/app/directives/validators/url.directive.js +47 -49
- package/esm2015/app/directives/validators/validate.directive.js +33 -31
- package/esm2015/app/enums/confirm-result.js +9 -9
- package/esm2015/app/enums/form-status.js +11 -11
- package/esm2015/app/fs-form.module.js +165 -106
- package/esm2015/app/guards/form-deactivate.guard.js +40 -44
- package/esm2015/app/helpers/confirm-result-continue.js +5 -5
- package/esm2015/app/helpers/confirm-unsaved.js +70 -70
- package/esm2015/app/helpers/get-form-errors.js +25 -25
- package/esm2015/app/helpers/index.js +3 -3
- package/esm2015/app/helpers/is-enabled.js +4 -4
- package/esm2015/app/interfaces/async-validator.js +2 -1
- package/esm2015/app/interfaces/confirm-config.js +2 -1
- package/esm2015/app/interfaces/confirm-tab-group.js +2 -1
- package/esm2015/app/interfaces/form-deactivate.js +2 -1
- package/esm2015/app/interfaces/index.js +5 -1
- package/esm2015/app/interfaces/submit-event.js +2 -1
- package/esm2015/app/interfaces/submitted-event.js +2 -1
- package/esm2015/app/interfaces/validator.js +2 -1
- package/esm2015/app/providers/validate-messages.provider.js +11 -11
- package/esm2015/app/services/fsform.service.js +25 -26
- package/esm2015/app/validators/validators.js +97 -97
- package/esm2015/firestitch-form.js +5 -28
- package/esm2015/public_api.js +35 -14
- package/fesm2015/firestitch-form.js +2100 -2108
- package/fesm2015/firestitch-form.js.map +1 -1
- package/firestitch-form.d.ts +5 -27
- package/package.json +7 -8
- package/public_api.d.ts +33 -12
- package/styles.scss +4 -4
- package/app/components/form-dialog-actions/index.d.ts +0 -1
- package/bundles/firestitch-form.umd.min.js +0 -16
- package/bundles/firestitch-form.umd.min.js.map +0 -1
- package/esm2015/app/components/form-dialog-actions/index.js +0 -2
- package/esm5/app/components/form-dialog-actions/form-dialog-actions.component.js +0 -94
- package/esm5/app/components/form-dialog-actions/index.js +0 -2
- package/esm5/app/consts/error-messages.const.js +0 -20
- package/esm5/app/directives/form/form.directive.js +0 -709
- package/esm5/app/directives/form-dialog-close.directive.js +0 -34
- package/esm5/app/directives/submit-button.directive.js +0 -144
- package/esm5/app/directives/validators/compare.directive.js +0 -60
- package/esm5/app/directives/validators/control.directive.js +0 -279
- package/esm5/app/directives/validators/daterange.directive.js +0 -50
- package/esm5/app/directives/validators/email.directive.js +0 -50
- package/esm5/app/directives/validators/emails.directive.js +0 -50
- package/esm5/app/directives/validators/function.directive.js +0 -36
- package/esm5/app/directives/validators/greater.directive.js +0 -49
- package/esm5/app/directives/validators/integer.directive.js +0 -50
- package/esm5/app/directives/validators/lesser.directive.js +0 -49
- package/esm5/app/directives/validators/max.directive.js +0 -45
- package/esm5/app/directives/validators/maxlength.directive.js +0 -44
- package/esm5/app/directives/validators/min.directive.js +0 -45
- package/esm5/app/directives/validators/minlength.directive.js +0 -44
- package/esm5/app/directives/validators/numeric.directive.js +0 -50
- package/esm5/app/directives/validators/pattern.directive.js +0 -44
- package/esm5/app/directives/validators/phone.directive.js +0 -50
- package/esm5/app/directives/validators/required.directive.js +0 -88
- package/esm5/app/directives/validators/url.directive.js +0 -56
- package/esm5/app/directives/validators/validate.directive.js +0 -36
- package/esm5/app/enums/confirm-result.js +0 -9
- package/esm5/app/enums/form-status.js +0 -11
- package/esm5/app/fs-form.module.js +0 -110
- package/esm5/app/guards/form-deactivate.guard.js +0 -45
- package/esm5/app/helpers/confirm-result-continue.js +0 -5
- package/esm5/app/helpers/confirm-unsaved.js +0 -70
- package/esm5/app/helpers/get-form-errors.js +0 -28
- package/esm5/app/helpers/index.js +0 -3
- package/esm5/app/helpers/is-enabled.js +0 -4
- package/esm5/app/interfaces/async-validator.js +0 -1
- package/esm5/app/interfaces/confirm-config.js +0 -1
- package/esm5/app/interfaces/confirm-tab-group.js +0 -1
- package/esm5/app/interfaces/form-deactivate.js +0 -1
- package/esm5/app/interfaces/index.js +0 -1
- package/esm5/app/interfaces/submit-event.js +0 -1
- package/esm5/app/interfaces/submitted-event.js +0 -1
- package/esm5/app/interfaces/validator.js +0 -1
- package/esm5/app/providers/validate-messages.provider.js +0 -12
- package/esm5/app/services/fsform.service.js +0 -27
- package/esm5/app/validators/validators.js +0 -102
- package/esm5/firestitch-form.js +0 -28
- package/esm5/public_api.js +0 -14
- package/fesm5/firestitch-form.js +0 -2397
- package/fesm5/firestitch-form.js.map +0 -1
- package/firestitch-form.metadata.json +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://@firestitch/form/app/enums/confirm-result.ts","ng://@firestitch/form/app/helpers/confirm-unsaved.ts","ng://@firestitch/form/app/enums/form-status.ts","ng://@firestitch/form/app/directives/form-dialog-close.directive.ts","ng://@firestitch/form/app/services/fsform.service.ts","ng://@firestitch/form/app/helpers/confirm-result-continue.ts","ng://@firestitch/form/app/directives/form/form.directive.ts","ng://@firestitch/form/app/helpers/get-form-errors.ts","ng://@firestitch/form/app/consts/error-messages.const.ts","ng://@firestitch/form/app/providers/validate-messages.provider.ts","ng://@firestitch/form/app/directives/validators/control.directive.ts","ng://@firestitch/form/app/helpers/is-enabled.ts","ng://@firestitch/form/app/directives/validators/required.directive.ts","ng://@firestitch/form/app/validators/validators.ts","ng://@firestitch/form/app/directives/validators/min.directive.ts","ng://@firestitch/form/app/directives/validators/max.directive.ts","ng://@firestitch/form/app/directives/validators/minlength.directive.ts","ng://@firestitch/form/app/directives/validators/maxlength.directive.ts","ng://@firestitch/form/app/directives/validators/email.directive.ts","ng://@firestitch/form/app/directives/validators/emails.directive.ts","ng://@firestitch/form/app/directives/validators/phone.directive.ts","ng://@firestitch/form/app/directives/validators/compare.directive.ts","ng://@firestitch/form/app/directives/validators/integer.directive.ts","ng://@firestitch/form/app/directives/validators/numeric.directive.ts","ng://@firestitch/form/app/directives/validators/pattern.directive.ts","ng://@firestitch/form/app/directives/validators/function.directive.ts","ng://@firestitch/form/app/directives/validators/greater.directive.ts","ng://@firestitch/form/app/directives/validators/daterange.directive.ts","ng://@firestitch/form/app/directives/validators/lesser.directive.ts","ng://@firestitch/form/app/directives/validators/url.directive.ts","ng://@firestitch/form/app/directives/submit-button.directive.ts","ng://@firestitch/form/app/directives/validators/validate.directive.ts","ng://@firestitch/form/app/components/form-dialog-actions/form-dialog-actions.component.ts","ng://@firestitch/form/app/fs-form.module.ts","ng://@firestitch/form/app/guards/form-deactivate.guard.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","ConfirmResult","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__read","o","m","Symbol","iterator","e","ar","next","done","push","value","error","__spread","concat","confirmUnsaved","form","prompt","Observable","observer","confirm","ngForm","dirty","Pristine","complete","title","message","saveLabel","discardLabel","cancelLabel","template","dialogConfig","width","buttons","label","color","cancel","subscribe","Discard","reset","submitted","pipe","first","Save","invalid","Invalid","control","markAsPristine","ngSubmit","emit","Review","FormStatus","FsFormDialogCloseDirective","clicked$","Subject","registered","type","click","ngOnDestroy","HostBinding","HostListener","Directive","selector","FsForm","_eventBus","broadcast","data","on","asObservable","filter","event","map","Injectable","providedIn","confirmResultContinue","result","FsFormDirective","_form","_element","_message","_prompt","_ngZone","_dialogRef","_drawerRef","wrapperSelector","messageSelector","hintSelector","labelSelector","autocomplete","shortcuts","confirmDialog","confirmDrawer","confirmBrowser","confirmTabs","dirtySubmitButton","successDelay","errorDelay","submitEvent","EventEmitter","valid","reseted","cleared","fsformClass","_tabGroups","QueryList","_submitButtons","_dialogBackdropEscape","_snapshot","_status$","BehaviorSubject","Valid","_destroy$","getValue","Submitting","Completing","submitter","_submitter","_submitEvent","submittedEvent","response","submit","of","isObservable","mode","MessageMode","Toast","el","nativeElement","querySelector","scrollIntoView","behavior","block","throwError","_activeSubmitButton","name","ngOnInit","_registerConfirmDialogBackdropEscape","_listenHotKeys","_listenWindowClose","_listenSubmit","_registerAutocomplete","ngOnChanges","changes","_updateDirtySubmitButtons","ngAfterContentInit","_registerConfirm","_registerConfirmDialogClose","_registerConfirmDrawerClose","_registerConfirmTabs","_registerDrawerClose","_registerDirtySubmitButton","createSnapshot","_this","resetForm","keys","controls","forEach","clear","markAsDirty","triggerSubmit","triggerConfirm","submitting","take","mergeMap","enable","disable","button","addSubmitButton","submitButton","toArray","removeSubmitButton","submitButton_","tap","preventDefault","includes","_markControlsAsTouchedAndUpdateValidity","_broadcastSubmittingEvents","switchMap","_waitUntilStatusPending","_setupActiveSubmitButton","status","_formInvalidState$","_formValidState$","catchError","source$","_handleError","_completeSubmit","takeUntil","fromEvent","window","returnValue","runOutsideAngular","document","code","dialog_1","getElementById","id","paths","composedPath","item","run","_formClose","ctrlKey","metaKey","_elementInForm","activeElement","close","_registerDialogClose","directive","_getActiveButton","activeButton","find","active","isSameNode","parentElement","success","_resetButtons","Submitted","Success","Error","resetDelay","delay","valueChanges","existing_1","indexOf","closeStart$","subscriber","iif","defer","tabGroup","registerConfirmTabGroup","registerConfirmTabGroups","tabGroups","confirmTabGroup","_originalHandleClick","_handleClick","_handlClick$","tab","tabHeader","idx","observers","selectedIndex","formDialogClose","disableClose","backdropClick","_registerControl","registerControl","bind","setAttribute","guid","getAttribute","dirtySubmit","values","markAsTouched","updateValueAndValidity","process","statusChanges","startWith","state","console","log","group","errors","getFormErrors","_a","FormGroup","entries","_b","childErrors","groupEnd","NgForm","Inject","args","ElementRef","FsMessage","FsPrompt","NgZone","MatDialogRef","Optional","DrawerRef","Input","MatTabGroup","Output","ContentChildren","descendants","ERROR_MESSAGES","required","email","emails","phone","numeric","integer","min","max","minlength","maxlength","compare","pattern","dateRange","url","urlProtocol","greater","lesser","VALIDATE_MESSAGES","InjectionToken","VALIDATE_MESSAGE_PROVIDER","provide","useFactory","messageProviderFactory","FsControlDirective","elementRef","renderer2","injector","_validateMessages","ngControl","formDirective","appendMessageClass","appendLabelClass","appendErrorClass","appendHintClass","_control","messages","_setupValidators","statusChangesSubscribe","render","getMessageSelector","getHintWrapperSelector","getWrapperSelector","getlabelSelector","getWrapperElement","wrapper","getWrapper","renderer","getError","messageWrapper","warn","labelWrapper","addClass","hint","setStyle","errorWrapper","remove","classList","add","createElement","errorText","createText","appendChild","node","count","parentNode","parseErrorMessage","replace","controlRef","validate","validators","validator","setValidators","validateAsync","asyncValidators","asyncValidator","setAsyncValidators","Renderer2","Injector","Self","NgControl","providers","isEnabled","FsFormRequiredDirective","_super","Validators","removeClass","FsValidators","split","some","part","isEmpty","isNumeric","String","protocolRequired","RegExp","match","isObject","start","end","isValid","func","formFunction","stream$","err","Promise","from","validationError","FsFormMinDirective","parseFloat","fsFormMin","FsFormMaxDirective","fsFormMax","FsFormMinLengthDirective","minLength","fsFormMinLength","FsFormMaxLengthDirective","maxLength","fsFormMaxLength","FsFormEmailDirective","fsFormEmail","FsFormEmailsDirective","fsFormEmails","FsFormPhoneDirective","fsFormPhone","FsFormCompareDirective","fsFormCompare","ngAfterViewInit","addEventListener","removeEventListener","FsFormIntegerDirective","fsFormInteger","FsFormNumericDirective","fsFormNumeric","FsFormPatternDirective","fsFormPattern","FsFormFunctionDirective","fsFormFunction","fsFormFunctionData","FsFormGreaterDirective","fsFormGreater","isNaN","actual","FsFormDateRangeDirective","fsFormDateRange","FsFormLesserDirective","fsFormLesser","FsFormUrlDirective","fsFormUrlProtocol","fsFormUrl","FsSubmitButtonDirective","_matButton","_elementRef","_cdRef","transitionStyle","element","setTimeout","disabled","markForCheck","disableRipple","setClass","cls","svg","_getSvg","_resetClass","_disableShadowAnimation","append","querySelectorAll","DOMParser","parseFromString","firstChild","MatButton","Host","ChangeDetectorRef","FsFormValidateDirective","validateFn","validateFnData","FsFormDialogActionsComponent","save","closeClick","confirmResult","Component","changeDetection","ChangeDetectionStrategy","OnPush","FsFormModule","forRoot","ngModule","FsFormModule_1","NgModule","imports","CommonModule","FormsModule","MatButtonModule","MatDialogModule","declarations","exports","ErrorStateMatcher","useClass","ShowOnDirtyErrorStateMatcher","FormDeactivateGuard","canDeactivate","getForm"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","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(form: FsFormDirective, prompt: FsPrompt): Observable<ConfirmResult> {\n return new Observable(observer => {\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.ngForm.ngSubmit.emit();\n }\n\n }, (error: any) => {\n observer.next(ConfirmResult.Review);\n observer.complete();\n });\n });\n}\n","export enum FormStatus {\n Valid = 'valid',\n Invalid = 'invalid',\n Submitting = 'submitting',\n Submitted = 'submitted',\n Error = 'error',\n Success = 'success',\n Completing = 'completing',\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","import { Injectable } from '@angular/core';\n\nimport { Subject, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\ninterface BroadcastEvent {\n key: any;\n data?: any;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsForm {\n private _eventBus: Subject<BroadcastEvent>;\n\n constructor() {\n this._eventBus = new Subject<BroadcastEvent>();\n }\n\n broadcast(key: any, data?: any) {\n this._eventBus.next({key, data});\n }\n\n 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","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 {\n AfterContentInit,\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';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { FsMessage, MessageMode } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { guid } from '@firestitch/common';\nimport { DrawerRef } from '@firestitch/drawer';\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 mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\n\nimport { confirmUnsaved } from '../../helpers/confirm-unsaved';\nimport { FsFormDialogCloseDirective } from '../form-dialog-close.directive';\nimport { FsSubmitButtonDirective } from '../submit-button.directive';\nimport { ConfirmConfig, SubmittedEvent, ConfirmTabGroup } from './../../interfaces';\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FsForm } from '../../services/fsform.service';\nimport { SubmitEvent } from './../../interfaces/submit-event';\nimport { FormStatus } from './../../enums/form-status';\nimport { confirmResultContinue } from '../../helpers/confirm-result-continue';\nimport { getFormErrors } from '../../helpers/get-form-errors';\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 @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 _submitButtons: QueryList<FsSubmitButtonDirective> = new QueryList();\n private _registerControl;\n private _activeSubmitButton: FsSubmitButtonDirective;\n private _dialogBackdropEscape = false;\n private _snapshot: { [key: string]: unknown } = {};\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _destroy$ = new Subject();\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\n @Optional() @Inject(MatDialogRef)\n private _dialogRef: MatDialogRef<any>,\n\n @Optional() @Inject(DrawerRef)\n private _drawerRef: DrawerRef<any>,\n ) {}\n\n public get submitting(): boolean {\n return this._status$.getValue() === FormStatus.Submitting;\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 = 'Changes not saved. 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: 'center' });\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 this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n this._listenSubmit();\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 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._destroy$.next();\n this._destroy$.complete();\n }\n\n public createSnapshot(): void {\n this._snapshot = this.ngForm.value;\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(): void {\n this.ngForm.ngSubmit.next();\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._submitButtons.forEach((button) => {\n button.disable();\n });\n }\n\n public addSubmitButton(submitButton: FsSubmitButtonDirective): void {\n this._submitButtons.reset(\n [\n ...this._submitButtons.toArray(),\n submitButton,\n ]);\n }\n\n public removeSubmitButton(submitButton: FsSubmitButtonDirective): void {\n this._submitButtons.reset(\n [\n ...this._submitButtons.toArray()\n .filter((submitButton_) => (submitButton !== submitButton_)),\n ]);\n }\n\n private _listenSubmit(): void {\n this.ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n filter(() => {\n return [ FormStatus.Valid, FormStatus.Invalid ]\n .includes(this._status$.getValue());\n }),\n tap(() => this._markControlsAsTouchedAndUpdateValidity()),\n tap(() => this._broadcastSubmittingEvents()),\n switchMap(() => this._waitUntilStatusPending()),\n tap(() => this._setupActiveSubmitButton()),\n mergeMap(() => {\n return this.ngForm.status === 'INVALID'\n ? this._formInvalidState$\n : this._formValidState$;\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 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 _getActiveButton(): FsSubmitButtonDirective {\n const activeButton = this._submitButtons.find(button => {\n return button.active;\n });\n\n return activeButton ? activeButton : this._submitButtons.first;\n }\n\n private _elementInForm(el: Element): boolean {\n\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._updateDirtySubmitButtons();\n });\n }\n\n private _resetButtons(): void {\n this._submitButtons.forEach((button) => {\n button.reset();\n });\n }\n\n private _registerConfirm(): void {\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe((changes) => {\n if (this.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 } else {\n subscriber.error();\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\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._submitButtons.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n }\n\n private _updateDirtySubmitButtons(): void {\n this._submitButtons\n .forEach((submitButton: FsSubmitButtonDirective) => {\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 _markControlsAsTouchedAndUpdateValidity(): void {\n Object.values(this.ngForm.controls)\n .forEach(control => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\n }\n\n private _setupActiveSubmitButton(): void {\n this._activeSubmitButton = this._getActiveButton();\n this._resetButtons();\n\n if (this._activeSubmitButton) {\n this._activeSubmitButton.process();\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}\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","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) private 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\n /*\n Ensure that statusChanges has one subscription per control. Multiple can happen\n when multiple fsForm validation directives are applied to the same element\n */\n if (!(<any>this._control).statusChangesSubscribe) {\n\n this._control.statusChanges\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe(this.render.bind(this));\n\n (<any>this._control).statusChangesSubscribe = true;\n }\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 && 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 && 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 && 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 && 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\n const renderer = this.renderer2;\n const wrapper = this.getWrapperElement();\n const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;\n\n if (!this.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 wrapper.classList.remove('ng-invalid');\n\n const shouldErrorBeRendered = this.ngControl.invalid\n && (this.ngControl.dirty || this.formDirective.ngForm?.submitted);\n\n if (!shouldErrorBeRendered || !error) {\n return;\n }\n\n wrapper.classList.add('ng-invalid');\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 { catchError, map, take } from 'rxjs/operators';\nimport { from, isObservable, Observable, of, throwError } from 'rxjs';\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 map(() => null),\n catchError((err) => {\n return of({ validationError: err });\n }),\n take(1),\n );\n }\n\n // static compare(a, b): ValidatorFn {\n // return (control: AbstractControl): ValidationErrors | null => {\n // if (a === b) {\n // return null;\n // } else {\n // return { compare: true };\n // }\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;\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 } 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 public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\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 '../directives/form/form.directive';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n\n@Directive({\n selector: 'button[type=\"submit\"]',\n})\nexport class FsSubmitButtonDirective implements OnInit, OnDestroy {\n\n @Input()\n public name;\n\n @Input()\n public dirtySubmit = true;\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public active = false;\n\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 if (this._form) {\n this._form.addSubmitButton(this); \n\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 public disable() {\n if (this._matButton) {\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 this._matButton.disableRipple = true;\n }\n\n public success() {\n this.setClass('success');\n this._matButton.disableRipple = false;\n }\n\n public error() {\n this.setClass('error');\n this._matButton.disableRipple = false;\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 reset() {\n this.active = false;\n this.enable();\n this.element.querySelectorAll('.svg-icon')\n .forEach((el) => {\n el.remove();\n });\n this._matButton.disableRipple = false;\n this._resetClass();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n this._form.removeSubmitButton(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 } 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 @Input('validate')\n public validateFn;\n\n @Input('validateData')\n public validateFnData;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\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 changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./form-dialog-actions.component.scss'],\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 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 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 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(null);\r\n });\r\n } else {\r\n this._dialogRef.close(null);\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","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } 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 { FsSubmitButtonDirective } from './directives/submit-button.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormDialogActionsComponent } from './components/form-dialog-actions';\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 FsSubmitButtonDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\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 FsSubmitButtonDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n static forRoot(): ModuleWithProviders<FsFormModule> {\n return {\n ngModule: FsFormModule,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { Observable, of } from 'rxjs';\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { FormDeactivate } from '../interfaces/form-deactivate';\nimport { confirmUnsaved } from '../helpers/confirm-unsaved';\nimport { map } from 'rxjs/operators';\nimport { confirmResultContinue } from '../helpers';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormDeactivateGuard implements CanDeactivate<any> {\n\n constructor(private _prompt: FsPrompt) {}\n\n canDeactivate(directive: FormDeactivate): Observable<boolean> {\n\n if (!('getForm' in directive)) {\n const error = `Directive ${(<any>directive).constructor.name} does not property implement interface FormDeactivate`;\n console.error(error);\n return of(true);\n }\n\n const form: FsFormDirective = directive.getForm();\n\n if (!(form instanceof FsFormDirective)) {\n const error = `Directive ${directive.constructor.name}.getForm() does not return a valid FsFormDirective`;\n console.error(error);\n return of(true);\n }\n\n return confirmUnsaved(form, this._prompt)\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n}\n"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './form-dialog-actions.component';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9mb3JtLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudCc7XHJcbiJdfQ==
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { Component, OnInit, ChangeDetectionStrategy, Input, Optional, ChangeDetectorRef, OnDestroy } from '@angular/core';
|
|
3
|
-
import { MatDialogRef } from '@angular/material/dialog';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { delay, filter, takeUntil } from 'rxjs/operators';
|
|
6
|
-
import { FsFormDirective } from '../../directives/form/form.directive';
|
|
7
|
-
import { ConfirmResult } from '../../enums/confirm-result';
|
|
8
|
-
var FsFormDialogActionsComponent = /** @class */ (function () {
|
|
9
|
-
function FsFormDialogActionsComponent(_form, _dialogRef, _cdRef) {
|
|
10
|
-
this._form = _form;
|
|
11
|
-
this._dialogRef = _dialogRef;
|
|
12
|
-
this._cdRef = _cdRef;
|
|
13
|
-
this.save = true;
|
|
14
|
-
this.create = false;
|
|
15
|
-
this.close = false;
|
|
16
|
-
this.dirty = false;
|
|
17
|
-
this._destroy$ = new Subject();
|
|
18
|
-
}
|
|
19
|
-
FsFormDialogActionsComponent.prototype.ngOnInit = function () {
|
|
20
|
-
var _this = this;
|
|
21
|
-
this._form.ngForm.valueChanges
|
|
22
|
-
.pipe(filter(function () { return (!_this.dirty); }), takeUntil(this._destroy$))
|
|
23
|
-
.subscribe(function () {
|
|
24
|
-
_this.dirty = _this._form.ngForm.dirty;
|
|
25
|
-
_this._cdRef.markForCheck();
|
|
26
|
-
});
|
|
27
|
-
this._form.submitted
|
|
28
|
-
.pipe(delay(50), takeUntil(this._destroy$))
|
|
29
|
-
.subscribe(function () {
|
|
30
|
-
_this.dirty = false;
|
|
31
|
-
_this._cdRef.markForCheck();
|
|
32
|
-
});
|
|
33
|
-
this._form.reseted
|
|
34
|
-
.pipe(takeUntil(this._destroy$))
|
|
35
|
-
.subscribe(function () {
|
|
36
|
-
_this.dirty = false;
|
|
37
|
-
_this._cdRef.markForCheck();
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
FsFormDialogActionsComponent.prototype.closeClick = function () {
|
|
41
|
-
var _this = this;
|
|
42
|
-
if (this._form) {
|
|
43
|
-
this._form.triggerConfirm()
|
|
44
|
-
.pipe(filter(function (confirmResult) { return (confirmResult !== ConfirmResult.Review); }), takeUntil(this._destroy$))
|
|
45
|
-
.subscribe(function () {
|
|
46
|
-
_this._dialogRef.close(null);
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
this._dialogRef.close(null);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
FsFormDialogActionsComponent.prototype.ngOnDestroy = function () {
|
|
54
|
-
this._destroy$.next();
|
|
55
|
-
this._destroy$.complete();
|
|
56
|
-
};
|
|
57
|
-
FsFormDialogActionsComponent.ctorParameters = function () { return [
|
|
58
|
-
{ type: FsFormDirective, decorators: [{ type: Optional }] },
|
|
59
|
-
{ type: MatDialogRef, decorators: [{ type: Optional }] },
|
|
60
|
-
{ type: ChangeDetectorRef }
|
|
61
|
-
]; };
|
|
62
|
-
__decorate([
|
|
63
|
-
Input(),
|
|
64
|
-
__metadata("design:type", Object)
|
|
65
|
-
], FsFormDialogActionsComponent.prototype, "save", void 0);
|
|
66
|
-
__decorate([
|
|
67
|
-
Input(),
|
|
68
|
-
__metadata("design:type", Object)
|
|
69
|
-
], FsFormDialogActionsComponent.prototype, "create", void 0);
|
|
70
|
-
__decorate([
|
|
71
|
-
Input(),
|
|
72
|
-
__metadata("design:type", Object)
|
|
73
|
-
], FsFormDialogActionsComponent.prototype, "close", void 0);
|
|
74
|
-
__decorate([
|
|
75
|
-
Input(),
|
|
76
|
-
__metadata("design:type", String)
|
|
77
|
-
], FsFormDialogActionsComponent.prototype, "name", void 0);
|
|
78
|
-
FsFormDialogActionsComponent = __decorate([
|
|
79
|
-
Component({
|
|
80
|
-
selector: 'fs-form-dialog-actions',
|
|
81
|
-
template: "<div class=\"buttons\">\r\n <ng-container *ngIf=\"save\">\r\n <button \r\n mat-button \r\n type=\"submit\"\r\n color=\"primary\" \r\n [name]=\"name\">\r\n {{create ? 'Create' : 'Save'}}\r\n </button>\r\n <button \r\n mat-button \r\n type=\"button\"\r\n [disabled]=\"close && !dirty && !create\"\r\n [matDialogClose]=\"null\">\r\n Cancel\r\n </button>\r\n </ng-container>\r\n\r\n <ng-content></ng-content>\r\n <div class=\"close\" *ngIf=\"close\">\r\n <button \r\n mat-button \r\n type=\"button\"\r\n [color]=\"dirty ? 'basic' : 'primary'\"\r\n (click)=\"closeClick()\">\r\n Close\r\n </button>\r\n </div>\r\n</div>",
|
|
82
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
83
|
-
styles: [".buttons{display:flex;flex-grow:1;align-items:center}.buttons .close{display:flex;flex-grow:1;justify-content:flex-end}:host{display:flex;flex-grow:1}"]
|
|
84
|
-
}),
|
|
85
|
-
__param(0, Optional()),
|
|
86
|
-
__param(1, Optional()),
|
|
87
|
-
__metadata("design:paramtypes", [FsFormDirective,
|
|
88
|
-
MatDialogRef,
|
|
89
|
-
ChangeDetectorRef])
|
|
90
|
-
], FsFormDialogActionsComponent);
|
|
91
|
-
return FsFormDialogActionsComponent;
|
|
92
|
-
}());
|
|
93
|
-
export { FsFormDialogActionsComponent };
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9mb3JtLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVMzRDtJQVdFLHNDQUNzQixLQUFzQixFQUN0QixVQUE2QixFQUN6QyxNQUF5QjtRQUZiLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQ3pDLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBWm5CLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUd2QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFNckMsQ0FBQztJQUVHLCtDQUFRLEdBQWY7UUFBQSxpQkE2QkM7UUE1QkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWTthQUM3QixJQUFJLENBQ0gsTUFBTSxDQUFDLGNBQU0sT0FBQSxDQUFDLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxFQUFiLENBQWEsQ0FBQyxFQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQztZQUNULEtBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3JDLEtBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7YUFDbkIsSUFBSSxDQUNILEtBQUssQ0FBQyxFQUFFLENBQUMsRUFDVCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQztZQUNULEtBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLEtBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87YUFDakIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxDQUFDO1lBQ1QsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxpREFBVSxHQUFqQjtRQUFBLGlCQWFDO1FBWkMsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUU7aUJBQzFCLElBQUksQ0FDSCxNQUFNLENBQUMsVUFBQyxhQUE0QixJQUFLLE9BQUEsQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUF4QyxDQUF3QyxDQUFDLEVBQ2xGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQztnQkFDVCxLQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTSxrREFBVyxHQUFsQjtRQUNFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDOztnQkF0RDRCLGVBQWUsdUJBQXpDLFFBQVE7Z0JBQ3VCLFlBQVksdUJBQTNDLFFBQVE7Z0JBQ08saUJBQWlCOztJQVoxQjtRQUFSLEtBQUssRUFBRTs7OERBQW9CO0lBQ25CO1FBQVIsS0FBSyxFQUFFOztnRUFBdUI7SUFDdEI7UUFBUixLQUFLLEVBQUU7OytEQUFzQjtJQUNyQjtRQUFSLEtBQUssRUFBRTs7OERBQXFCO0lBTGxCLDRCQUE0QjtRQU54QyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsd0JBQXdCO1lBQ2xDLDR1QkFBbUQ7WUFDbkQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBRWhELENBQUM7UUFhRyxXQUFBLFFBQVEsRUFBRSxDQUFBO1FBQ1YsV0FBQSxRQUFRLEVBQUUsQ0FBQTt5Q0FEZ0IsZUFBZTtZQUNWLFlBQVk7WUFDNUIsaUJBQWlCO09BZHhCLDRCQUE0QixDQW1FeEM7SUFBRCxtQ0FBQztDQUFBLEFBbkVELElBbUVDO1NBbkVZLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsIE9wdGlvbmFsLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0vZm9ybS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb25maXJtUmVzdWx0IH0gZnJvbSAnLi4vLi4vZW51bXMvY29uZmlybS1yZXN1bHQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnMtZm9ybS1kaWFsb2ctYWN0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZzRm9ybURpYWxvZ0FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzYXZlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGNsb3NlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGRpcnR5ID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm06IEZzRm9ybURpcmVjdGl2ZSxcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsICAgXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb3JtLm5nRm9ybS52YWx1ZUNoYW5nZXNcclxuICAgIC5waXBlKCAgXHJcbiAgICAgIGZpbHRlcigoKSA9PiAoIXRoaXMuZGlydHkpKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgIClcclxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRpcnR5ID0gdGhpcy5fZm9ybS5uZ0Zvcm0uZGlydHk7XHJcbiAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZm9ybS5zdWJtaXR0ZWRcclxuICAgIC5waXBlKFxyXG4gICAgICBkZWxheSg1MCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXHJcbiAgICApXHJcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2Zvcm0ucmVzZXRlZFxyXG4gICAgLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXHJcbiAgICApXHJcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBwdWJsaWMgY2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcclxuICAgICAgdGhpcy5fZm9ybS50cmlnZ2VyQ29uZmlybSgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoY29uZmlybVJlc3VsdDogQ29uZmlybVJlc3VsdCkgPT4gKGNvbmZpcm1SZXN1bHQgIT09IENvbmZpcm1SZXN1bHQuUmV2aWV3KSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobnVsbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './form-dialog-actions.component';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9mb3JtLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudCc7XHJcbiJdfQ==
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export var ERROR_MESSAGES = {
|
|
2
|
-
required: 'This field is required',
|
|
3
|
-
email: 'This is not a valid email address',
|
|
4
|
-
emails: 'Input valid email addresses, comma separated',
|
|
5
|
-
phone: 'Invalid phone number',
|
|
6
|
-
numeric: 'Value should be numeric',
|
|
7
|
-
integer: 'Value should be an integer',
|
|
8
|
-
min: 'Value should not be less than $(1)',
|
|
9
|
-
max: 'Value should not be greater than $(1)',
|
|
10
|
-
minlength: 'Should not be shorter than $(1) characters',
|
|
11
|
-
maxlength: 'Should not be longer than $(1) characters',
|
|
12
|
-
compare: 'Inputs do not match',
|
|
13
|
-
pattern: 'Value should match pattern $(1)',
|
|
14
|
-
dateRange: 'Invalid date range',
|
|
15
|
-
url: 'This is not a valid url',
|
|
16
|
-
urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',
|
|
17
|
-
greater: 'Value must be greater than $(1)',
|
|
18
|
-
lesser: 'Value must be less than $(1)',
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZXMuY29uc3QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9mb3JtLyIsInNvdXJjZXMiOlsiYXBwL2NvbnN0cy9lcnJvci1tZXNzYWdlcy5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsSUFBTSxjQUFjLEdBQUc7SUFDNUIsUUFBUSxFQUFFLHdCQUF3QjtJQUNsQyxLQUFLLEVBQUUsbUNBQW1DO0lBQzFDLE1BQU0sRUFBRSw4Q0FBOEM7SUFDdEQsS0FBSyxFQUFFLHNCQUFzQjtJQUM3QixPQUFPLEVBQUUseUJBQXlCO0lBQ2xDLE9BQU8sRUFBRSw0QkFBNEI7SUFDckMsR0FBRyxFQUFFLG9DQUFvQztJQUN6QyxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFNBQVMsRUFBRSw0Q0FBNEM7SUFDdkQsU0FBUyxFQUFFLDJDQUEyQztJQUN0RCxPQUFPLEVBQUUscUJBQXFCO0lBQzlCLE9BQU8sRUFBRSxpQ0FBaUM7SUFDMUMsU0FBUyxFQUFFLG9CQUFvQjtJQUMvQixHQUFHLEVBQUUseUJBQXlCO0lBQzlCLFdBQVcsRUFBRSx1RUFBdUU7SUFDcEYsT0FBTyxFQUFFLGlDQUFpQztJQUMxQyxNQUFNLEVBQUUsOEJBQThCO0NBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgRVJST1JfTUVTU0FHRVMgPSB7XG4gIHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcsXG4gIGVtYWlsOiAnVGhpcyBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJyxcbiAgZW1haWxzOiAnSW5wdXQgdmFsaWQgZW1haWwgYWRkcmVzc2VzLCBjb21tYSBzZXBhcmF0ZWQnLFxuICBwaG9uZTogJ0ludmFsaWQgcGhvbmUgbnVtYmVyJyxcbiAgbnVtZXJpYzogJ1ZhbHVlIHNob3VsZCBiZSBudW1lcmljJyxcbiAgaW50ZWdlcjogJ1ZhbHVlIHNob3VsZCBiZSBhbiBpbnRlZ2VyJyxcbiAgbWluOiAnVmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gJCgxKScsXG4gIG1heDogJ1ZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuICQoMSknLFxuICBtaW5sZW5ndGg6ICdTaG91bGQgbm90IGJlIHNob3J0ZXIgdGhhbiAkKDEpIGNoYXJhY3RlcnMnLFxuICBtYXhsZW5ndGg6ICdTaG91bGQgbm90IGJlIGxvbmdlciB0aGFuICQoMSkgY2hhcmFjdGVycycsXG4gIGNvbXBhcmU6ICdJbnB1dHMgZG8gbm90IG1hdGNoJyxcbiAgcGF0dGVybjogJ1ZhbHVlIHNob3VsZCBtYXRjaCBwYXR0ZXJuICQoMSknLFxuICBkYXRlUmFuZ2U6ICdJbnZhbGlkIGRhdGUgcmFuZ2UnLFxuICB1cmw6ICdUaGlzIGlzIG5vdCBhIHZhbGlkIHVybCcsXG4gIHVybFByb3RvY29sOiAnSW52YWxpZCBVUkwuIFByb3BlciBodHRwIHByb3RvY29sIGlzIHJlcXVpcmVkLiBlZy4gaHR0cHM6Ly9nb29nbGUuY29tJyxcbiAgZ3JlYXRlcjogJ1ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICQoMSknLFxuICBsZXNzZXI6ICdWYWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAkKDEpJyxcbn07XG4iXX0=
|