@3kles/kles-material-dynamicforms 1.0.7 → 1.0.8
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/3kles-kles-material-dynamicforms.metadata.json +1 -1
- package/bundles/3kles-kles-material-dynamicforms.umd.js +41 -8
- package/bundles/3kles-kles-material-dynamicforms.umd.js.map +1 -1
- package/bundles/3kles-kles-material-dynamicforms.umd.min.js +2 -2
- package/bundles/3kles-kles-material-dynamicforms.umd.min.js.map +1 -1
- package/esm2015/lib/directive/dynamic-field.directive.js +4 -2
- package/esm2015/lib/fields/button-toogle-group.component.js +37 -0
- package/esm2015/lib/kles-material-dynamicforms.module.js +4 -2
- package/esm2015/lib/modules/material.module.js +6 -3
- package/esm2015/public-api.js +2 -1
- package/esm5/lib/directive/dynamic-field.directive.js +4 -2
- package/esm5/lib/fields/button-toogle-group.component.js +33 -0
- package/esm5/lib/kles-material-dynamicforms.module.js +4 -2
- package/esm5/lib/modules/material.module.js +6 -3
- package/esm5/public-api.js +2 -1
- package/fesm2015/3kles-kles-material-dynamicforms.js +42 -5
- package/fesm2015/3kles-kles-material-dynamicforms.js.map +1 -1
- package/fesm5/3kles-kles-material-dynamicforms.js +38 -5
- package/fesm5/3kles-kles-material-dynamicforms.js.map +1 -1
- package/lib/fields/button-toogle-group.component.d.ts +7 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@3kles/kles-material-dynamicforms/lib/dynamic-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/directive/dynamic-component.directive.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/field.abstract.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/label.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/input.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/button-submit.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/select.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/date.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/radio.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/checkbox.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/list-field.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/color.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/chip.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/group.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/icon.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/select.search.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/line-break.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/link.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/selection-list.component.ts","ng://@3kles/kles-material-dynamicforms/lib/directive/dynamic-field.directive.ts","ng://@3kles/kles-material-dynamicforms/lib/matcher/form-error.matcher.ts","ng://@3kles/kles-material-dynamicforms/lib/modules/material.module.ts","ng://@3kles/kles-material-dynamicforms/lib/forms/button-control.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/button-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/forms/buttonchecker-control.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/buttonchecker-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/forms/buttonfile-control.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/buttonfile-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/textarea.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/text.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/input.clearable.component.ts","ng://@3kles/kles-material-dynamicforms/lib/pipe/transform.pipe.ts","ng://@3kles/kles-material-dynamicforms/lib/pipe/array.pipe.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/slide-toggle.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/badge.component.ts","ng://@3kles/kles-material-dynamicforms/lib/kles-material-dynamicforms.module.ts","ng://@3kles/kles-material-dynamicforms/lib/validators/autocomplete.validator.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","push","KlesDynamicFormComponent","fb","fields","validators","asyncValidators","submit","EventEmitter","_onLoaded","direction","orientationClass","orientationItemClass","form","ngOnInit","createForm","emit","ngOnChanges","changes","_a","firstChange","updateForm","_b","setValidators","map","validator","_c","setAsyncValidators","_d","onSubmit","event","preventDefault","stopPropagation","valid","validateAllFormFields","reset","_this","keys","controls","filter","field","name","includes","forEach","removeControl","type","control","createControl","addControl","array_1","array","data","subGroup","group","collections","subfield","subGroup_1","isArray","bindValidations","validations","bindAsyncValidations","asyncValidations","disabled","disable","validList_1","Validators","compose","validList_2","composeAsync","formGroup","get","markAsTouched","onlySelf","FormBuilder","Input","Output","Component","exportAs","selector","template","KlesComponentDirective","resolver","container","buildComponent","component","isFirstChange","currentValue","componentRef","instance","factory","resolveComponentFactory","destroy","createComponent","ComponentFactoryResolver","ViewContainerRef","Directive","KlesFieldAbstract","valueChanges","siblingFields","pipe","subscribe","val","ngAfterViewInit","applyPipeTransform","control_1","val_1","pipeTransform","pipeVal","options","opt","transform","patchValue","emitEvent","KlesFormLabelComponent","_super","KlesFormInputComponent","Observable","options$","of","filteredOption","startWith","switchMap","filterData","maxLength","isPending","pending","filterValue","toString","toLowerCase","property","option","indexOf","displayFn","displayWith","KlesFormSubmitButtonComponent","KlesFormSelectComponent","openChange","$event","virtualScroll","cdkVirtualScrollViewport","scrollToIndex","checkViewportSize","ViewChild","CdkVirtualScrollViewport","ViewChildren","MatOption","KlesFormDateComponent","KlesFormRadioComponent","KlesFormCheckboxComponent","KlesFormListFieldComponent","formArray","createFormGroup","item","deleteField","index","removeAt","addField","KlesFormColorComponent","invertColor","hex","bw","slice","parseInt","KlesFormChipComponent","KlesFormGroupComponent","KlesFormIconComponent","KlesFormSelectSearchComponent","searchControl","FormControl","selectAllControl","optionsFiltered$","ReplaySubject","_onDestroy","Subject","takeUntil","search_1","searchKeys","some","searchKey","selected","every","o","s","isChecked","setValue","ngOnDestroy","toggleAllSelection","state","checked","take","KlesFormLineBreakComponent","KlesFormLinkComponent","KlesFormSelectionListComponent","componentMapper","input","button","select","date","radio","checkbox","listField","color","chip","icon","selectSearch","lineBreak","link","selectionList","KlesDynamicFieldDirective","previousValue","KlesFormErrorStateMatcher","isErrorState","isSubmitted","submitted","invalid","dirty","touched","MaterialModule","NgModule","imports","CommonModule","MatSliderModule","MatButtonModule","MatToolbarModule","MatIconModule","MatSidenavModule","MatBadgeModule","MatListModule","MatGridListModule","MatFormFieldModule","MatInputModule","MatSelectModule","MatRadioModule","MatDatepickerModule","MatChipsModule","MatTooltipModule","MatTableModule","MatPaginatorModule","MatCardModule","MatMenuModule","MatTabsModule","CdkTableModule","MatProgressSpinnerModule","MatCheckboxModule","MatDialogModule","MatAutocompleteModule","MatProgressBarModule","MatSortModule","MatExpansionModule","MatNativeDateModule","MatSnackBarModule","MatTreeModule","MatSlideToggleModule","ColorPickerModule","exports","ScrollingModule","CdkScrollable","providers","KlesButtonComponent","iconSvg","classButton","onChange","onTouched","click","writeValue","uiButton","class","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","KlesButtonComponent_1","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","KlesFormButtonComponent","KlesButtonCheckerComponent","busy","error","countError","KlesButtonCheckerComponent_1","KlesFormButtonCheckerComponent","KlesButtonFileComponent","accept","fileReader","FileReader","file","nativeElement","onFileLoad","fileLoadedEvent","textFromFileLoaded","fileContent","onFileSelect","files","console","log","size","readUploadedFile","inputFile","temporaryFileReader","onerror","abort","DOMException","onload","readAsArrayBuffer","KlesButtonFileComponent_1","KlesFormButtonFileComponent","KlesFormTextareaComponent","KlesFormTextComponent","KlesFormInputClearableComponent","KlesTransformPipe","pipes","reduce","acc","Pipe","ArrayFormatPipe","values","Boolean","join","KlesFormSlideToggleComponent","KlesFormBadgeComponent","components","directives","KlesMaterialDynamicformsModule","declarations","ReactiveFormsModule","TranslateModule","FlexLayoutModule","FormsModule","NgxMatSelectSearchModule","ErrorStateMatcher","useClass","entryComponents","schemas","CUSTOM_ELEMENTS_SCHEMA","NO_ERRORS_SCHEMA","optional","undefined","invalidAutocompleteObject","validOptions","invalidAutocompleteString"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !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","import { OnInit, Component, Input, Output, EventEmitter, AfterContentInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators, ValidatorFn, AsyncValidatorFn, ValidationErrors, AsyncValidator, AbstractControl } from '@angular/forms';\nimport { KlesFormGroupComponent } from './fields/group.component';\nimport { KlesFormListFieldComponent } from './fields/list-field.component';\nimport { IKlesFieldConfig } from './interfaces/field.config.interface';\nimport { IKlesValidator } from './interfaces/validator.interface';\n\n@Component({\n exportAs: 'klesDynamicForm',\n selector: 'app-kles-dynamic-form',\n template: `\n <form class=\"{{orientationClass}}\" [formGroup]=\"form\" (submit)=\"onSubmit($event)\">\n <ng-container *ngFor=\"let field of fields;\" class=\"{{orientationItemClass}}\" klesDynamicField [field]=\"field\" [group]=\"form\" [siblingFields]=\"fields\">\n </ng-container>\n <!--<button (click)=\"reset()\" mat-raised-button color=\"primary\">RESET</button>-->\n </form>\n `,\n styles: [\n // '.dynamic-form {display: flex; flex-direction: column;}',\n //'.dynamic-form {display: flex;}',\n //'.dynamic-form { width: 100%; }',\n '.dynamic-form-column { display: flex;flex-direction: column; }',\n '.dynamic-form-column > * { width: 100%; }',\n '.dynamic-form-row { display: inline-flex;flex-wrap:wrap;gap:10px }',\n '.dynamic-form-row > * { width: 100%; }',\n '.dynamic-form-row-item { margin-right: 10px; }',\n '.dynamic-form-column-item { margin-bottom: 10px; }',\n ]\n\n})\nexport class KlesDynamicFormComponent implements OnInit, OnChanges {\n @Input() fields: IKlesFieldConfig[] = [];\n @Input() validators: IKlesValidator<ValidatorFn>[] = [];\n @Input() asyncValidators: IKlesValidator<AsyncValidatorFn>[] = [];\n // tslint:disable-next-line: no-output-native\n @Output() submit: EventEmitter<any> = new EventEmitter<any>();\n @Output() _onLoaded = new EventEmitter();\n\n @Input() direction: 'column' | 'row' = 'column';\n\n form: FormGroup;\n orientationClass: 'dynamic-form-column' | 'dynamic-form-row' = 'dynamic-form-column';\n orientationItemClass: 'dynamic-form-column-item' | 'dynamic-form-row-item' = 'dynamic-form-column-item';\n\n get value() {\n return this.form.value;\n }\n\n constructor(private fb: FormBuilder) { }\n\n\n ngOnInit() {\n this.form = this.createForm();\n this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';\n this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';\n this._onLoaded.emit();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.fields?.firstChange) {\n this.updateForm();\n // this.form = this.createControl();\n // this.form.controls = {};\n this._onLoaded.emit();\n }\n\n if (!changes.validators?.firstChange && this.form) {\n this.form.setValidators(this.validators.map(v => v.validator));\n }\n\n if (!changes.asyncValidators?.firstChange && this.form) {\n this.form.setAsyncValidators(this.asyncValidators.map(v => v.validator));\n }\n\n if (!changes.direction?.firstChange) {\n this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';\n this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';\n }\n\n }\n\n onSubmit(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n if (this.form.valid) {\n this.submit.emit(this.form.value);\n } else {\n this.validateAllFormFields(this.form);\n }\n }\n\n reset() {\n this.form.reset();\n }\n\n\n private updateForm() {\n Object.keys(this.form.controls).filter(key => {\n return !this.fields.map(field => field.name).includes(key);\n }).forEach(key => {\n this.form.removeControl(key);\n });\n\n\n this.fields\n .filter(field => !this.form.controls[field.name])\n .forEach(field => {\n if (field.type === 'lineBreak') {\n return;\n }\n const control = this.createControl(field);\n this.form.addControl(field.name, control);\n });\n }\n\n private createControl(field: IKlesFieldConfig): AbstractControl {\n\n if (field.type === 'listField') {\n const array = this.fb.array([]);\n\n field.value.forEach((data: any) => {\n const subGroup = this.fb.group({});\n field.collections.forEach(subfield => {\n const control=this.createControl(subfield);\n subGroup.addControl(subfield.name, control);\n });\n array.push(subGroup);\n });\n return array;\n } else if (field.type === 'group') {\n const subGroup = this.fb.group({});\n if (field.collections && Array.isArray(field.collections)) {\n field.collections.forEach(subfield => {\n const control=this.createControl(subfield);\n subGroup.addControl(subfield.name, control);\n });\n }\n return subGroup;\n\n } else {\n const control = this.fb.control(\n field.value,\n this.bindValidations(field.validations || []),\n this.bindAsyncValidations(field.asyncValidations || [])\n );\n if (field.disabled) {\n control.disable();\n }\n return control;\n }\n }\n\n\n\n // private createControl(field: IKlesFieldConfig): AbstractControl {\n\n // if (field.type === 'listField') {\n // const array = this.fb.array([]);\n\n // field.value.forEach((data: any) => {\n // const subGroup = this.fb.group({});\n // field.collections.forEach(subfield => {\n // const control = this.fb.control(\n // data[subfield.name] ? data[subfield.name] : null,\n // this.bindValidations(subfield.validations || []),\n // this.bindAsyncValidations(subfield.asyncValidations || [])\n // );\n // subGroup.addControl(subfield.name, control);\n // });\n // array.push(subGroup);\n // });\n // return array;\n // } else if (field.type === 'group') {\n // const subGroup = this.fb.group({});\n // if (field.collections && Array.isArray(field.collections)) {\n // field.collections.forEach(subfield => {\n // const control = this.fb.control(\n // subfield.value,\n // this.bindValidations(subfield.validations || []),\n // this.bindAsyncValidations(subfield.asyncValidations || [])\n // );\n // if (subfield.disabled) {\n // control.disable();\n // }\n // subGroup.addControl(subfield.name, control);\n // });\n // }\n // return subGroup;\n\n // } else {\n // const control = this.fb.control(\n // field.value,\n // this.bindValidations(field.validations || []),\n // this.bindAsyncValidations(field.asyncValidations || [])\n // );\n // if (field.disabled) {\n // control.disable();\n // }\n // return control;\n // }\n // }\n\n\n\n private createForm() {\n const group = this.fb.group({});\n\n this.fields.forEach(field => {\n\n if (field.type === 'lineBreak') {\n return;\n }\n const control = this.createControl(field);\n\n group.addControl(field.name, control);\n });\n\n group.setValidators(this.validators.map(v => v.validator));\n group.setAsyncValidators(this.asyncValidators.map(v => v.validator));\n\n return group;\n }\n\n\n private bindValidations(validations: IKlesValidator<ValidatorFn>[]): ValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.compose(validList);\n\n }\n return null;\n }\n\n\n private bindAsyncValidations(validations: IKlesValidator<AsyncValidatorFn>[]): AsyncValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.composeAsync(validList);\n\n }\n return null;\n }\n\n private validateAllFormFields(formGroup: FormGroup) {\n Object.keys(formGroup.controls).forEach(field => {\n const control = formGroup.get(field);\n control.markAsTouched({ onlySelf: true });\n });\n }\n}\n","import { Directive, Input, OnInit, ComponentFactoryResolver, ViewContainerRef, ComponentRef, Type, OnChanges, SimpleChanges } from '@angular/core';\n\n@Directive({\n selector: '[klesComponent]'\n})\nexport class KlesComponentDirective implements OnInit, OnChanges {\n @Input() component: Type<any>;\n @Input() value: any;\n\n componentRef: ComponentRef<any>;\n\n constructor(private resolver: ComponentFactoryResolver,\n private container: ViewContainerRef) { }\n\n ngOnInit() {\n this.buildComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.component && !changes.component.isFirstChange()) {\n this.component = changes.component.currentValue;\n this.buildComponent();\n }\n if (changes.value && !changes.value.isFirstChange()) {\n this.value = changes.value.currentValue;\n this.componentRef.instance.value = this.value;\n }\n }\n\n buildComponent() {\n const factory = this.resolver.resolveComponentFactory(\n this.component\n );\n if (this.componentRef) this.componentRef.destroy();\n this.componentRef = this.container.createComponent(factory);\n this.componentRef.instance.component = this.component;\n this.componentRef.instance.value = this.value;\n }\n}\n","import { IKlesField } from '../interfaces/field.interface';\nimport { IKlesFieldConfig } from '../interfaces/field.config.interface';\nimport { FormGroup } from '@angular/forms';\nimport { AfterViewInit, OnInit } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nexport abstract class KlesFieldAbstract implements IKlesField, OnInit, AfterViewInit {\n field: IKlesFieldConfig;\n group: FormGroup;\n siblingFields: IKlesFieldConfig[];\n\n ngOnInit(): void {\n // this.applyPipeTransform();\n if (this.field.valueChanges) {\n this.field.valueChanges(this.field, this.group, this.siblingFields);\n }\n\n this.group.controls[this.field.name]?.valueChanges\n .pipe()\n .subscribe(val => {\n if (this.field.valueChanges) {\n this.field.valueChanges(this.field, this.group, this.siblingFields, val);\n }\n\n // this.applyPipeTransform();\n });\n }\n\n ngAfterViewInit(): void {\n\n }\n\n applyPipeTransform() {\n if (this.group && this.field) {\n const control = this.group.controls[this.field.name];\n if (control) {\n const val = this.group.controls[this.field.name].value;\n if (this.field.pipeTransform) {\n this.field.pipeTransform.forEach(p => {\n let pipeVal = control.value;\n if (p.options) {\n p.options.forEach(opt => {\n pipeVal = p.pipe.transform(val, opt);\n });\n } else {\n pipeVal = p.pipe.transform(val);\n }\n control.patchValue(pipeVal, { onlySelf: true, emitEvent: false });\n })\n }\n }\n }\n }\n}\n","\nimport { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: \"kles-form-label\",\n template: `\n <div [formGroup]=\"group\" >\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" \n [ngClass]=\"field.ngClass\" \n [ngStyle]=\"{'color':'inherit'}\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\">\n </div>\n`\n})\nexport class KlesFormLabelComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n this.group.controls[this.field.name].disable();\n super.ngOnInit();\n }\n}","import { KlesFieldAbstract } from './field.abstract';\nimport { OnInit, Component } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { startWith, map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'kles-form-input',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n\n <ng-container *ngIf=\"field.autocomplete; else notAutoComplete\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\" \n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\"\n [matAutocomplete]=\"auto\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn.bind(this)\" [panelWidth]=\"this.field.panelWidth\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n {{field.property ? option[field.property] : option}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"option\">\n </ng-container>\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n </ng-container>\n\n <ng-template #notAutoComplete>\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\"\n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\">\n </ng-template>\n\n <mat-spinner matSuffix mode=\"indeterminate\" *ngIf=\"isPending()\" diameter=\"17\"></mat-spinner>\n\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormInputComponent extends KlesFieldAbstract implements OnInit {\n\n filteredOption: Observable<any[]>;\n options$: Observable<any[]>;\n\n ngOnInit(): void {\n\n if (this.field.options instanceof Observable) {\n this.options$ = this.field.options;\n } else {\n this.options$ = of(this.field.options);\n }\n\n\n this.filteredOption = this.group.get(this.field.name).valueChanges\n .pipe(\n startWith(''),\n // map(data => data ? this.filterData(data) : this.field.options.slice())\n switchMap(data => data ? this.filterData(data) : this.options$)\n );\n if (!this.field.maxLength) {\n this.field.maxLength = 524288; // Max default input W3C\n }\n super.ngOnInit();\n }\n\n isPending() {\n return (this.group.controls[this.field.name].pending || this.field.pending);\n }\n\n private filterData(value: any): Observable<any[]> {\n let filterValue;\n\n if (typeof value === 'string' && Object.prototype.toString.call(value) === '[object String]') {\n filterValue = value.toLowerCase();\n } else {\n filterValue = value[this.field.property].toLowerCase();\n }\n\n if (this.field.property) {\n return this.options$\n .pipe(map(options => options.filter(option => option[this.field.property].toLowerCase().indexOf(filterValue) === 0)));\n // return this.field.options\n // .filter(data => data[this.field.property].toLowerCase().indexOf(filterValue) === 0);\n }\n // return this.field.options.filter(data => data.toLowerCase().indexOf(filterValue) === 0);\n return this.options$.pipe(map(options => options.filter(option => option.toLowerCase().indexOf(filterValue) === 0)));\n }\n\n displayFn(value: any) {\n if (this.field.displayWith) {\n return this.field.displayWith(value);\n } else {\n if (value && this.field && this.field.property) {\n return value[this.field.property] ? value[this.field.property] : '';\n }\n return value ? value : '';\n }\n }\n}\n","import { KlesFieldAbstract } from './field.abstract';\nimport { OnInit, Component } from '@angular/core';\n\n\n@Component({\n selector: 'kles-submit-button',\n template: `\n <div [formGroup]=\"group\">\n <button matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" type=\"submit\" [disabled]=\"field.disabled\" mat-raised-button color=\"primary\">{{field.label}}</button>\n </div>\n `,\n styles: []\n})\nexport class KlesFormSubmitButtonComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { CdkVirtualScrollViewport, ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { AfterViewInit, ChangeDetectorRef, Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { MatOption } from '@angular/material/core';\nimport { Observable, of } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-select',\n template: `\n <mat-form-field class=\"margin-top\" [formGroup]=\"group\">\n <mat-select matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\"\n (openedChange)=\"openChange($event)\"\n [ngClass]=\"field.ngClass\" [placeholder]=\"field.placeholder | translate\" [formControlName]=\"field.name\" [multiple]=\"field.multiple\">\n <mat-select-trigger *ngIf=\"field.triggerComponent\">\n <ng-container klesComponent [component]=\"field.triggerComponent\" [value]=\"group.controls[field.name].value\"></ng-container>\n </mat-select-trigger>\n\n\n <ng-container *ngIf=\"!field.virtualScroll\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of options$ | async\" [value]=\"item\">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of options$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"field.virtualScroll\">\n <cdk-virtual-scroll-viewport [itemSize]=\"field.itemSize || 50\" [style.height.px]=5*48>\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *cdkVirtualFor=\"let item of options$ | async\" [value]=\"item\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n\n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *cdkVirtualFor=\"let item of options$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n\n </ng-container>\n\n </mat-select>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n`,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormSelectComponent extends KlesFieldAbstract implements OnInit {\n\n @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewport: CdkVirtualScrollViewport;\n @ViewChildren(MatOption) options: QueryList<MatOption>;\n\n options$: Observable<any[]>;\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n super.ngOnInit();\n\n if (!(this.field.options instanceof Observable)) {\n this.options$ = of(this.field.options);\n } else {\n this.options$ = this.field.options;\n }\n }\n\n openChange($event: boolean) {\n if (this.field.virtualScroll) {\n if ($event) {\n this.cdkVirtualScrollViewport.scrollToIndex(0);\n this.cdkVirtualScrollViewport.checkViewportSize();\n }\n }\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: \"kles-form-datepicker\",\n template: `\n <mat-form-field class=\"demo-full-width margin-top\" [formGroup]=\"group\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [matDatepicker]=\"picker\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-hint></mat-hint>\n \n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: []\n})\nexport class KlesFormDateComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: \"kles-form-radiobutton\",\n template: `\n <div [formGroup]=\"group\">\n <label class=\"radio-label-padding\">{{field.label}}</label>\n <mat-radio-group matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\">\n <mat-radio-button *ngFor=\"let item of field.options\" [value]=\"item\">{{item}}</mat-radio-button>\n </mat-radio-group>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </div>\n`,\n styles: []\n})\nexport class KlesFormRadioComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() { super.ngOnInit(); }\n}","\nimport { Component, OnInit } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { IKlesFieldConfig } from '../interfaces/field.config.interface';\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: \"kles-form-checkbox\",\n template: `\n <div [formGroup]=\"group\" > \n <mat-checkbox matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [indeterminate]=\"field.indeterminate\" [formControlName]=\"field.name\">{{field.label | translate}}</mat-checkbox>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n </div>\n`,\n styles: []\n})\nexport class KlesFormCheckboxComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\nimport { FormGroup, FormArray, FormBuilder, ValidatorFn, Validators, AsyncValidatorFn } from '@angular/forms';\nimport { IKlesValidator } from '../interfaces/validator.interface';\n\n@Component({\n selector: 'kles-form-listfield',\n template: `\n <div [formGroup]=\"group\" class=\"form-element\">\n {{field.label | translate}}\n <button mat-icon-button color=\"primary\" (click)=\"addField()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <div class=\"dynamic-form\" [formGroupName]=\"field.name\">\n <div *ngFor=\"let subGroup of formArray.controls let index = index;\" fxLayout=\"row\" fxLayoutGap=\"5px\">\n <ng-container *ngFor=\"let subfield of field.collections;\"\n dynamicField [field]=\"subfield\" [group]=\"subGroup\">\n </ng-container>\n <button mat-icon-button (click)=\"deleteField(index)\" color=\"primary\">\n <mat-icon>delete_outlined</mat-icon>\n </button>\n </div>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </div>\n </div>\n `,\n styles: []\n})\nexport class KlesFormListFieldComponent extends KlesFieldAbstract implements OnInit {\n\n formArray: FormArray;\n\n constructor(private fb: FormBuilder) {\n super();\n }\n\n ngOnInit(): void {\n this.formArray = this.group.controls[this.field.name] as FormArray;\n super.ngOnInit();\n }\n\n private createFormGroup(): FormGroup {\n const group = this.fb.group({});\n this.field.collections.forEach(item => {\n const control = this.fb.control(\n null,\n this.bindValidations(item.validations || []),\n this.bindAsyncValidations(item.asyncValidations || [])\n );\n group.addControl(item.name, control);\n\n });\n\n return group;\n\n }\n\n deleteField(index: number) {\n this.formArray.removeAt(index);\n }\n\n addField() {\n this.formArray.push(this.createFormGroup());\n }\n\n\n private bindValidations(validations: IKlesValidator<ValidatorFn>[]): ValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.compose(validList);\n\n }\n return null;\n }\n\n\n private bindAsyncValidations(validations: IKlesValidator<AsyncValidatorFn>[]): AsyncValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.composeAsync(validList);\n\n }\n return null;\n }\n\n\n}\n\n","import { KlesFieldAbstract } from './field.abstract';\nimport { OnInit, Component } from '@angular/core';\n@Component({\n selector: 'kles-form-color',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [placeholder]=\"field.placeholder | translate\"\n [colorPicker]=\"group.get(field.name).value\"\n [value]=\"group.get(field.name).value\"\n (colorPickerChange)=\"group.get(field.name).setValue($event)\"\n class=\"colorPicker\"\n [style.background]=\"group.get(field.name).value\"\n [style.color]=\"invertColor(group.get(field.name).value,true)\"\n [formControlName]=\"field.name\">\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormColorComponent extends KlesFieldAbstract implements OnInit {\n\n\n ngOnInit() {super.ngOnInit(); }\n\n invertColor(hex, bw): string {\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n return '#000000';\n }\n let r = parseInt(hex.slice(0, 2), 16);\n let g = parseInt(hex.slice(2, 4), 16);\n let b = parseInt(hex.slice(4, 6), 16);\n if (bw) {\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? '#000000'\n : '#FFFFFF';\n }\n // invert color components\n const r1 = (255 - r).toString(16);\n const g1 = (255 - g).toString(16);\n const b1 = (255 - b).toString(16);\n // pad each with zeros and return\n return \"#\" + r1 + g1 + b1;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: \"kles-form-chip\",\n template: `\n <div [formGroup]=\"group\"> \n <mat-chip-list>\n <mat-chip [color]=\"field.color\" matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" selected [ngClass]=\"field.ngClass\" [ngStyle]=\"field.ngStyle\">\n <mat-icon *ngIf=\"field.icon\">{{field.icon}}</mat-icon>\n {{group.controls[field.name].value | klesTransform:field.pipeTransform}}\n </mat-chip>\n </mat-chip-list>\n </div>\n`,\n styles: []\n})\nexport class KlesFormChipComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { KlesFieldAbstract } from './field.abstract';\n@Component({\n selector: 'kles-group',\n template: `\n <div [formGroup]=\"group\" class=\"group-container\">\n <div [formGroupName]=\"field.name\" class=\"group-container\" [style.flex-direction]=\"field.direction || 'inherit'\" [ngClass]=\"field.ngClass\" >\n <ng-container *ngFor=\"let subfield of field.collections;\" klesDynamicField [field]=\"subfield\" [group]=\"subGroup\">\n </ng-container>\n </div>\n </div>\n`,\n styles: ['mat-form-field {width: calc(100%)}',\n ':host { display:flex; flex-direction: inherit}',\n '.group-container {display:flex; flex-direction: inherit}'\n ]\n})\nexport class KlesFormGroupComponent extends KlesFieldAbstract implements OnInit {\n\n subGroup: FormGroup\n\n ngOnInit() {\n this.subGroup = this.group.controls[this.field.name] as FormGroup;\n super.ngOnInit();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: \"kles-form-icon\",\n template: `\n <mat-icon [color]=\"field.color\" matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [ngStyle]=\"field.ngStyle\">\n {{group.controls[field.name].value}}\n </mat-icon>\n`,\n styles: []\n})\nexport class KlesFormIconComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}\n","import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatOption } from '@angular/material/core';\nimport { Observable, of, ReplaySubject, Subject } from 'rxjs';\nimport { map, startWith, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-select-search',\n template: `\n <mat-form-field class=\"margin-top\" [formGroup]=\"group\">\n <mat-select matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\"\n (openedChange)=\"openChange($event)\" \n [placeholder]=\"field.placeholder | translate\" [formControlName]=\"field.name\" [multiple]=\"field.multiple\">\n <mat-select-trigger *ngIf=\"field.triggerComponent\">\n <ng-container klesComponent [component]=\"field.triggerComponent\" [value]=\"group.controls[field.name].value\"></ng-container>\n </mat-select-trigger>\n\n <ng-container *ngIf=\"field.virtualScroll\">\n <mat-option>\n <ngx-mat-select-search [formControl]=\"searchControl\"\n placeholderLabel=\"\" noEntriesFoundLabel =\"\"></ngx-mat-select-search>\n </mat-option>\n \n <cdk-virtual-scroll-viewport [itemSize]=\"field.itemSize || 50\" [style.height.px]=4*48>\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-checkbox *ngIf=\"field.multiple\" class=\"selectAll\" [formControl]=\"selectAllControl\"\n (change)=\"toggleAllSelection($event)\">\n {{'selectAll' | translate}}\n </mat-checkbox>\n <mat-option *cdkVirtualFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>\n \n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *cdkVirtualFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n\n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n\n </ng-container>\n\n <ng-container *ngIf=\"!field.virtualScroll\">\n \n <mat-option>\n <ngx-mat-select-search [formControl]=\"searchControl\"\n placeholderLabel=\"\" noEntriesFoundLabel =\"\"></ngx-mat-select-search>\n </mat-option>\n \n <mat-checkbox *ngIf=\"field.multiple\" class=\"selectAll\" [formControl]=\"selectAllControl\"\n (change)=\"toggleAllSelection($event)\">\n {{'selectAll' | translate}}\n </mat-checkbox>\n\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n\n\n </mat-select>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n`,\n styles: ['mat-form-field {width: calc(100%)}', '.selectAll {padding: 10px 16px;}']\n})\nexport class KlesFormSelectSearchComponent extends KlesFieldAbstract implements OnInit, OnDestroy {\n\n searchControl = new FormControl();\n selectAllControl = new FormControl(false);\n\n\n options$: Observable<any[]>;\n optionsFiltered$ = new ReplaySubject<any[]>(1);\n\n private _onDestroy = new Subject<void>();\n\n @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewport: CdkVirtualScrollViewport;\n @ViewChildren(MatOption) options: QueryList<MatOption>;\n\n ngOnInit() {\n super.ngOnInit();\n\n if (!(this.field.options instanceof Observable)) {\n this.options$ = of(this.field.options);\n } else {\n this.options$ = this.field.options;\n }\n\n this.searchControl.valueChanges.pipe(\n startWith(this.searchControl.value),\n takeUntil(this._onDestroy),\n switchMap(value => {\n if (value) {\n const search = value.toLowerCase();\n return this.options$.pipe(map(options => {\n return options\n .filter(option => {\n if (this.field.searchKeys && this.field.searchKeys.length) {\n return this.field.searchKeys.some(searchKey => {\n if (option[searchKey]) {\n return option[searchKey].toString().toLowerCase().indexOf(search) > -1;\n }\n return false;\n }) || (this.field.property ?\n option[this.field.property].toString().toLowerCase().indexOf(search) > -1 : false);\n\n } else {\n if (this.field.property) {\n return option[this.field.property].toString().toLowerCase().indexOf(search) > -1;\n }\n }\n return option.toString().toLowerCase().indexOf(search) > -1;\n });\n }));\n } else {\n return this.options$;\n }\n })\n ).subscribe(this.optionsFiltered$);\n\n this.group.controls[this.field.name].valueChanges.pipe(\n takeUntil(this._onDestroy),\n switchMap(selected => {\n return this.optionsFiltered$.pipe(map(options => {\n if (!selected) {\n return false;\n }\n if (options.length < selected.length) {\n return options.length > 0 && options.every(o => selected.includes(o));\n } else {\n return options.length > 0 && options.length === selected.length && selected.every(s => options.includes(s));\n }\n }));\n })\n ).subscribe(isChecked => {\n this.selectAllControl.setValue(isChecked);\n });\n }\n\n ngOnDestroy(): void {\n this._onDestroy.next();\n }\n\n\n toggleAllSelection(state) {\n if (state.checked) {\n this.optionsFiltered$.pipe(take(1)).subscribe(options => {\n if (options.length > 0) {\n this.group.controls[this.field.name].patchValue(options.slice());\n }\n })\n\n } else {\n this.group.controls[this.field.name].patchValue([]);\n }\n }\n\n openChange($event: boolean) {\n if (this.field.virtualScroll) {\n if ($event) {\n this.cdkVirtualScrollViewport.scrollToIndex(0);\n this.cdkVirtualScrollViewport.checkViewportSize();\n }\n }\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: \"kles-form-line-break\",\n template: ``,\n styles: [\n `:host{\n flex-basis: 100%;\n display: flex;\n height:0;\n }`\n ]\n})\nexport class KlesFormLineBreakComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-link',\n template: `\n <a [href]=\"group.controls[field.name].value\" matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\">\n {{field.label}}\n </a>\n`\n})\nexport class KlesFormLinkComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n super.ngOnInit();\n }\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { Component, OnInit } from '@angular/core';\nimport { MatSelectionListChange } from '@angular/material/list';\nimport { Observable, of } from 'rxjs';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-selection-list',\n template: `\n <div class=\"margin-top\" [formGroup]=\"group\">\n <mat-selection-list [formControlName]=\"field.name\" [attr.id]=\"field.id\" [multiple]=\"field.multiple\" [ngClass]=\"field.ngClass\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-list-option [value]=\"item\" *ngFor=\"let item of options$ | async;\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-list-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-list-option *ngFor=\"let item of options$ | async;\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-list-option>\n </ng-container>\n </mat-selection-list>\n\n </div>\n`,\n styles: ['mat-selection-list {width: calc(100%);height: 250px; overflow:auto}'],\n})\nexport class KlesFormSelectionListComponent extends KlesFieldAbstract implements OnInit {\n\n options$: Observable<any[]>;\n\n ngOnInit() {\n super.ngOnInit();\n\n if (!(this.field.options instanceof Observable)) {\n this.options$ = of(this.field.options);\n } else {\n this.options$ = this.field.options;\n }\n }\n}\n","import { Directive, Input, OnInit, ComponentFactoryResolver, ViewContainerRef, ComponentRef, Type, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\n\nimport { FormGroup } from '@angular/forms';\nimport { IKlesFieldConfig } from '../interfaces/field.config.interface';\nimport { KlesFormLabelComponent } from '../fields/label.component';\nimport { KlesFormInputComponent } from '../fields/input.component';\nimport { KlesFormSubmitButtonComponent } from '../fields/button-submit.component';\nimport { KlesFormSelectComponent } from '../fields/select.component';\nimport { KlesFormDateComponent } from '../fields/date.component';\nimport { KlesFormRadioComponent } from '../fields/radio.component';\nimport { KlesFormCheckboxComponent } from '../fields/checkbox.component';\nimport { KlesFormListFieldComponent } from '../fields/list-field.component';\nimport { KlesFormColorComponent } from '../fields/color.component';\nimport { KlesFormChipComponent } from '../fields/chip.component';\nimport { KlesFormGroupComponent } from '../fields/group.component';\nimport { KlesFormIconComponent } from '../fields/icon.component';\nimport { KlesFormSelectSearchComponent } from '../fields/select.search.component';\nimport { KlesFormLineBreakComponent } from '../fields/line-break.component';\nimport { KlesFormLinkComponent } from '../fields/link.component';\nimport { KlesFormSelectionListComponent } from '../fields/selection-list.component';\n\nconst componentMapper = {\n label: KlesFormLabelComponent,\n input: KlesFormInputComponent,\n button: KlesFormSubmitButtonComponent,\n select: KlesFormSelectComponent,\n date: KlesFormDateComponent,\n radio: KlesFormRadioComponent,\n checkbox: KlesFormCheckboxComponent,\n listField: KlesFormListFieldComponent,\n color: KlesFormColorComponent,\n chip: KlesFormChipComponent,\n group: KlesFormGroupComponent,\n icon: KlesFormIconComponent,\n selectSearch: KlesFormSelectSearchComponent,\n lineBreak: KlesFormLineBreakComponent,\n link: KlesFormLinkComponent,\n selectionList: KlesFormSelectionListComponent\n};\n\n@Directive({\n selector: '[klesDynamicField]'\n})\nexport class KlesDynamicFieldDirective implements OnInit, OnChanges, OnDestroy {\n @Input() field: IKlesFieldConfig;\n @Input() group: FormGroup;\n @Input() siblingFields: IKlesFieldConfig[];\n\n componentRef: ComponentRef<any>;\n\n constructor(protected resolver: ComponentFactoryResolver,\n protected container: ViewContainerRef) { }\n\n ngOnDestroy(): void {\n if (this.componentRef) this.componentRef.destroy();\n }\n\n ngOnInit() {\n this.buildComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.group) {\n this.group = changes.group.currentValue;\n }\n if (changes.field) {\n if (changes.field.previousValue && changes.field.currentValue.component !== changes.field.previousValue.component) {\n this.field = changes.field.currentValue;\n this.buildComponent();\n } else {\n this.field = changes.field.currentValue;\n }\n }\n }\n\n buildComponent() {\n const factory = this.resolver.resolveComponentFactory(\n this.field.component || componentMapper[this.field.type]\n );\n if (this.componentRef) this.componentRef.destroy();\n this.componentRef = this.container.createComponent(factory);\n this.componentRef.instance.field = this.field;\n this.componentRef.instance.group = this.group;\n this.componentRef.instance.siblingFields = this.siblingFields;\n }\n}\n","import { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\n\nexport class KlesFormErrorStateMatcher implements ErrorStateMatcher {\n\n constructor() {\n }\n\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n const isSubmitted = form && form.submitted;\n return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n }\n\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatListModule } from '@angular/material/list';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { ColorPickerModule } from 'ngx-color-picker';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\nimport { CdkScrollable } from '@angular/cdk/scrolling';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatSliderModule,\n MatButtonModule,\n MatToolbarModule,\n MatIconModule,\n MatSidenavModule,\n MatBadgeModule,\n MatListModule,\n MatGridListModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatRadioModule,\n MatDatepickerModule,\n MatChipsModule,\n MatTooltipModule,\n MatTableModule,\n MatPaginatorModule,\n MatCardModule,\n MatMenuModule,\n MatTabsModule,\n CdkTableModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n MatDialogModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSortModule,\n MatExpansionModule,\n MatNativeDateModule,\n MatSnackBarModule,\n MatTreeModule,\n MatSliderModule,\n MatButtonModule,\n MatSlideToggleModule,\n ColorPickerModule\n ],\n\n exports: [\n MatButtonModule,\n MatToolbarModule,\n MatIconModule,\n MatSidenavModule,\n MatBadgeModule,\n MatListModule,\n MatGridListModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatRadioModule,\n MatDatepickerModule,\n MatChipsModule,\n MatTooltipModule,\n MatTableModule,\n MatPaginatorModule,\n MatCardModule,\n MatMenuModule,\n MatTabsModule,\n CdkTableModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n MatDialogModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSortModule,\n MatExpansionModule,\n MatNativeDateModule,\n MatSnackBarModule,\n MatTreeModule,\n MatSliderModule,\n MatButtonModule,\n MatSlideToggleModule,\n ColorPickerModule,\n ScrollingModule,\n CdkScrollable \n ],\n providers: [\n MatDatepickerModule,\n MatDialogModule\n ]\n})\n\nexport class MaterialModule { }\n","import { Component, OnInit, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface IButton {\n event?: any;\n uiButton?: IUIButton\n}\n\nexport interface IUIButton {\n label?: string;\n color?: string;\n icon?: string;\n iconSvg?: string;\n disabled?: boolean;\n class?: string\n}\n\n@Component({\n selector: 'kles-button',\n template: `\n <span>\n <button mat-button [ngClass]=\"classButton\" [color]=\"(color)?color:'primary'\" [disabled]=\"disabled\"\n (click)=\"click($event)\" [matTooltip]=\"tooltip\">\n {{label | translate}}\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n <mat-icon svgIcon=\"{{iconSvg}}\" *ngIf=\"iconSvg\"></mat-icon>\n </button>\n </span>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KlesButtonComponent),\n multi: true\n }\n ]\n})\nexport class KlesButtonComponent implements OnInit, ControlValueAccessor {\n @Input() name = '';\n @Input() label = '';\n @Input() color = 'accent';\n @Input() icon = '';\n @Input() iconSvg = '';\n @Input() disabled = false;\n @Input() classButton = '';\n @Input() value: IButton = {};\n @Input() tooltip?: string;\n\n onChange: any = () => { };\n onTouched: any = () => { };\n\n ngOnInit(): void {\n }\n\n click(event) {\n this.value.event = this.name;\n this.onChange(this.value);\n }\n\n writeValue(value: IButton): void {\n if (!value) {\n value = { event: this.name };\n }\n if (!value.event) {\n value.event = this.name;\n }\n if (value.uiButton) {\n const uiButton = value.uiButton;\n this.label = (uiButton.label) ? uiButton.label : this.label;\n this.color = (uiButton.color) ? uiButton.color : this.color;\n this.icon = (uiButton.icon) ? uiButton.icon : this.icon;\n this.iconSvg = (uiButton.iconSvg) ? uiButton.iconSvg : this.iconSvg;\n this.disabled = (uiButton.disabled) ? uiButton.disabled : this.disabled;\n this.classButton = (uiButton.class) ? uiButton.class : this.classButton;\n }\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}","import { OnInit, Component } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: 'kles-form-button',\n template: `\n <div [formGroup]=\"group\">\n <kles-button \n [attr.id]=\"field.id\" [classButton]=\"field.ngClass\" \n [name]=\"field.name\" [label]=\"field.label\" [color]=\"field.color\" \n [icon]=\"field.icon\"\n [iconSvg]=\"field.iconSvg\"\n [value]=\"field.value\"\n [formControlName]=\"field.name\"\n [tooltip]=\"field.tooltip\">\n </kles-button>\n </div>\n `,\n styles: []\n})\nexport class KlesFormButtonComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { Component, OnInit, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IButton, KlesButtonComponent } from './button-control.component';\n\nexport interface IButtonChecker extends IButton {\n busy: boolean;\n error?: any[];\n message?: string;\n}\n\n@Component({\n selector: 'kles-button-checker',\n template: `\n <span *ngIf=\"value.error && !value.busy\">\n <kles-button \n [classButton]=\"classButton\" \n [name]=\"name\" [label]=\"label\" [color]=\"color\" \n [icon]=\"icon\" [iconSvg]=\"iconSvg\"\n [value]=\"value\" \n [tooltip]=\"tooltip\"\n matBadge=\"{{countError()}}\" (click)=\"click($event)\">\n </kles-button>\n </span>\n <span style=\"text-align: center;\" *ngIf=\"value.busy||false\">\n <span style=\"text-align: center;margin-right: 10px\">\n <mat-spinner [diameter]=\"25\"></mat-spinner>\n </span>\n <span *ngIf=\"value.message\" style=\"margin-right: 10px\">\n {{value.message|translate}}...\n </span>\n </span>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KlesButtonCheckerComponent),\n multi: true\n }\n ]\n})\nexport class KlesButtonCheckerComponent extends KlesButtonComponent implements ControlValueAccessor {\n value: IButtonChecker = {\n busy: false,\n error: [],\n event: false\n };\n\n countError(): number {\n return (this.value.error) ? this.value.error.length : 0;\n }\n}","import { OnInit, Component } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-button-checker',\n template: `\n <div [formGroup]=\"group\">\n <kles-button-checker\n [attr.id]=\"field.id\" [classButton]=\"field.ngClass\" \n [name]=\"field.name\" [label]=\"field.label\" [color]=\"field.color\" \n [icon]=\"field.icon\"\n [iconSvg]=\"field.iconSvg\"\n [value]=\"field.value\"\n [formControlName]=\"field.name\"\n [tooltip]=\"field.tooltip\">\n </kles-button-checker>\n </div>\n `,\n styles: []\n})\nexport class KlesFormButtonCheckerComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { Component, OnInit, forwardRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IButton, KlesButtonComponent } from './button-control.component';\n\nexport interface IButtonFile extends IButton {\n fileContent?: string | string[];\n}\n\n@Component({\n selector: 'kles-button-file',\n template: `\n <input type=\"file\" #file style=\"display: none\" accept=\"{{accept}}\" (change)=\"onFileSelect($event.target)\" multiple />\n <kles-button \n [classButton]=\"classButton\" \n [name]=\"name\" [label]=\"label\" [color]=\"color\" \n [icon]=\"icon\" [iconSvg]=\"iconSvg\"\n [value]=\"value\" (click)=\"click($event)\">\n </kles-button>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KlesButtonFileComponent),\n multi: true\n }\n ]\n})\nexport class KlesButtonFileComponent extends KlesButtonComponent implements ControlValueAccessor {\n @ViewChild('file') file;\n accept = '*.*';\n fileReader = new FileReader();\n fileContent: string | string[];\n value: IButtonFile = {};\n\n click(event) {\n this.file.nativeElement.click();\n }\n\n writeValue(value: IButton): void {\n if (!value) {\n value = { event: this.name };\n }\n if (!value.event) {\n value.event = this.name;\n }\n if (value.uiButton) {\n const uiButton = value.uiButton;\n this.label = (uiButton.label) ? uiButton.label : this.label;\n this.color = (uiButton.color) ? uiButton.color : this.color;\n this.icon = (uiButton.icon) ? uiButton.icon : this.icon;\n this.iconSvg = (uiButton.iconSvg) ? uiButton.iconSvg : this.iconSvg;\n this.disabled = (uiButton.disabled) ? uiButton.disabled : this.disabled;\n this.classButton = (uiButton.class) ? uiButton.class : this.classButton;\n }\n this.value = value;\n }\n\n\n onFileLoad(fileLoadedEvent) {\n const textFromFileLoaded = fileLoadedEvent.target.result;\n this.fileContent = textFromFileLoaded;\n }\n\n async onFileSelect(input: HTMLInputElement) {\n if (input.files.length > 0) {\n const files = input.files;\n let fileContent = [];\n if (files && files.length) {\n console.log('Filename: ' + files[0].name);\n console.log('Type: ' + files[0].type);\n console.log('Size: ' + files[0].size + ' bytes');\n\n console.log('Files=', files.length);\n\n for (let i = 0; i < files.length; i++) {\n try {\n fileContent[i] = await this.readUploadedFile(files[i]);\n } catch (e) {\n }\n }\n if (fileContent.length === 1) {\n fileContent = fileContent[0];\n }\n }\n this.value.event = this.name;\n this.value.fileContent = fileContent;\n this.onChange(this.value);\n input.value = '';\n }\n }\n\n readUploadedFile(inputFile): Promise<any> {\n const temporaryFileReader = new FileReader();\n return new Promise((resolve, reject) => {\n temporaryFileReader.onerror = () => {\n temporaryFileReader.abort();\n const error: DOMException = new DOMException('Problem parsing input file.');\n reject(error);\n };\n temporaryFileReader.onload = () => {\n resolve(temporaryFileReader.result);\n };\n temporaryFileReader.readAsArrayBuffer(inputFile);\n });\n }\n}","import { OnInit, Component } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-button-file',\n template: `\n <div [formGroup]=\"group\">\n <kles-button-file\n [attr.id]=\"field.id\" [classButton]=\"field.ngClass\" \n [name]=\"field.name\" [label]=\"field.label\" [color]=\"field.color\" \n [icon]=\"field.icon\"\n [iconSvg]=\"field.iconSvg\"\n [value]=\"field.value\"\n [formControlName]=\"field.name\">\n </kles-button-file>\n </div>\n `,\n styles: []\n})\nexport class KlesFormButtonFileComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-textarea',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n <textarea matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" \n [formControlName]=\"field.name\" cdkTextareaAutosize [placeholder]=\"field.placeholder | translate\"\n [cdkAutosizeMinRows]=\"field.textareaAutoSize?.minRows\" [cdkAutosizeMaxRows]=\"field.textareaAutoSize?.maxRows\">\n </textarea>\n\n\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormTextareaComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit(): void {\n super.ngOnInit();\n }\n}","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-text',\n template: `\n <span matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\">\n {{(field.property ? group.controls[field.name].value[field.property] : group.controls[field.name].value) | klesTransform:field.pipeTransform}}\n </span> \n`\n})\nexport class KlesFormTextComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n super.ngOnInit();\n }\n}\n","import { OnInit, Component } from '@angular/core';\nimport { KlesFormInputComponent } from './input.component';\n\n@Component({\n selector: 'kles-form-input-clearable',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n\n <ng-container *ngIf=\"field.autocomplete; else notAutoComplete\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\"\n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\"\n [matAutocomplete]=\"auto\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn.bind(this)\" [panelWidth]=\"this.field.panelWidth\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n {{field.property ? option[field.property] : option}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"option\">\n </ng-container>\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n </ng-container>\n\n <ng-template #notAutoComplete>\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\"\n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\">\n </ng-template>\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"group.controls[field.name].reset();\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-spinner matSuffix mode=\"indeterminate\" *ngIf=\"isPending()\" diameter=\"17\"></mat-spinner>\n\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormInputClearableComponent extends KlesFormInputComponent implements OnInit {\n\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: 'klesTransform' })\nexport class KlesTransformPipe implements PipeTransform {\n\n transform(value: any, pipes: { pipe: PipeTransform, options?: any[] }[]): any {\n\n if (pipes && pipes.length > 0) {\n return pipes.reduce((acc, p) => {\n if (p.options) {\n p.options.forEach(opt => {\n acc = p.pipe.transform(acc, opt);\n });\n } else {\n acc = p.pipe.transform(acc);\n }\n return acc;\n }, value)\n }\n return value;\n\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: 'arrayFormat' })\nexport class ArrayFormatPipe implements PipeTransform {\n\n transform(values: any[], property?: string): string {\n if (values && Array.isArray(values)) {\n if (property) {\n return values.map(value => value[property]).filter(Boolean).join(', ');\n } else {\n return values.join(', ');\n }\n }\n return '';\n }\n}","\nimport { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: \"kles-form-slide-toggle\",\n template: `\n <div [formGroup]=\"group\" > \n <mat-slide-toggle matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [color]=\"field.color\" [formControlName]=\"field.name\">{{field.label | translate}}</mat-slide-toggle>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n </div>\n`,\n styles: []\n})\nexport class KlesFormSlideToggleComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-badge',\n template: `\n <span matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" \n matBadge=\"{{group.controls[field.name].value}}\" matBadgeOverlap=\"false\" matBadgeColor=\"{{field.color}}\">\n </span> \n`\n})\nexport class KlesFormBadgeComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n super.ngOnInit();\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KlesDynamicFormComponent } from './dynamic-form.component';\nimport { KlesComponentDirective } from './directive/dynamic-component.directive';\nimport { KlesDynamicFieldDirective } from './directive/dynamic-field.directive';\nimport { KlesFormErrorStateMatcher } from './matcher/form-error.matcher';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MaterialModule } from './modules/material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ColorPickerModule } from 'ngx-color-picker';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { KlesFormLabelComponent } from './fields/label.component';\nimport { KlesFormInputComponent } from './fields/input.component';\nimport { KlesFormSubmitButtonComponent } from './fields/button-submit.component';\nimport { KlesFormSelectComponent } from './fields/select.component';\nimport { KlesFormDateComponent } from './fields/date.component';\nimport { KlesFormRadioComponent } from './fields/radio.component';\nimport { KlesFormCheckboxComponent } from './fields/checkbox.component';\nimport { KlesFormListFieldComponent } from './fields/list-field.component';\nimport { KlesFormColorComponent } from './fields/color.component';\nimport { KlesButtonComponent } from './forms/button-control.component';\nimport { KlesFormButtonComponent } from './fields/button-form.component';\nimport { KlesButtonCheckerComponent } from './forms/buttonchecker-control.component';\nimport { KlesFormButtonCheckerComponent } from './fields/buttonchecker-form.component';\nimport { KlesButtonFileComponent } from './forms/buttonfile-control.component';\nimport { KlesFormButtonFileComponent } from './fields/buttonfile-form.component';\nimport { KlesFormTextareaComponent } from './fields/textarea.component';\nimport { KlesFormTextComponent } from './fields/text.component';\nimport { KlesFormChipComponent } from './fields/chip.component';\nimport { KlesFormGroupComponent } from './fields/group.component';\nimport { KlesFormInputClearableComponent } from './fields/input.clearable.component';\nimport { KlesFormIconComponent } from './fields/icon.component';\nimport { KlesTransformPipe } from './pipe/transform.pipe';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { KlesFormSelectSearchComponent } from './fields/select.search.component';\nimport { KlesFormLineBreakComponent } from './fields/line-break.component';\nimport { ArrayFormatPipe } from './pipe/array.pipe';\nimport { KlesFormLinkComponent } from './fields/link.component';\nimport { KlesFormSlideToggleComponent } from './fields/slide-toggle.component';\nimport { KlesFormSelectionListComponent } from './fields/selection-list.component';\nimport { KlesFormBadgeComponent } from './fields/badge.component';\n\nconst components = [\n KlesDynamicFormComponent,\n KlesFormLabelComponent,\n KlesFormInputComponent,\n KlesFormInputClearableComponent,\n KlesFormSubmitButtonComponent,\n KlesFormBadgeComponent,\n KlesButtonComponent,\n KlesFormButtonComponent,\n KlesButtonCheckerComponent,\n KlesFormButtonCheckerComponent,\n KlesButtonFileComponent,\n KlesFormButtonFileComponent,\n KlesFormSelectComponent,\n KlesFormDateComponent,\n KlesFormRadioComponent,\n KlesFormCheckboxComponent,\n KlesFormListFieldComponent,\n KlesFormColorComponent,\n KlesFormTextareaComponent,\n KlesFormTextComponent,\n KlesFormChipComponent,\n KlesFormGroupComponent,\n KlesFormIconComponent,\n KlesFormSelectSearchComponent,\n KlesFormLineBreakComponent,\n KlesFormLinkComponent,\n KlesFormSlideToggleComponent,\n KlesFormSelectionListComponent\n];\n\nconst directives = [KlesDynamicFieldDirective, KlesComponentDirective];\nconst pipes = [KlesTransformPipe, ArrayFormatPipe];\n@NgModule({\n declarations: [\n components,\n directives,\n pipes\n\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n FlexLayoutModule,\n FormsModule,\n MaterialModule,\n ColorPickerModule,\n NgxMatSelectSearchModule\n ],\n providers: [\n { provide: ErrorStateMatcher, useClass: KlesFormErrorStateMatcher },\n pipes\n ],\n entryComponents: [\n components\n ],\n exports: [\n components,\n pipes,\n directives,\n ColorPickerModule\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]\n})\nexport class KlesMaterialDynamicformsModule { }\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\"\n\nexport function autocompleteObjectValidator(optional?: boolean): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n if ((control.value === null || control.value === undefined) && !optional) return { 'invalidAutocompleteObject': { value: control.value } }\n\n if (typeof control.value === 'string') {\n if (control.value === '' && optional) return null;\n return { 'invalidAutocompleteObject': { value: control.value } }\n }\n return null /* valid option selected */\n }\n}\n\nexport function autocompleteStringValidator(validOptions: Array<string>, optional?: boolean): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n if ((control.value === '' || control.value === null) && optional) return null;\n if (validOptions.indexOf(control.value) !== -1) {\n return null /* valid option selected */\n }\n return { 'invalidAutocompleteString': { value: control.value } }\n }\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@3kles/kles-material-dynamicforms/lib/dynamic-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/directive/dynamic-component.directive.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/field.abstract.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/label.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/input.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/button-submit.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/select.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/date.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/radio.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/checkbox.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/list-field.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/color.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/chip.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/group.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/icon.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/select.search.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/line-break.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/link.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/selection-list.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/button-toogle-group.component.ts","ng://@3kles/kles-material-dynamicforms/lib/directive/dynamic-field.directive.ts","ng://@3kles/kles-material-dynamicforms/lib/matcher/form-error.matcher.ts","ng://@3kles/kles-material-dynamicforms/lib/modules/material.module.ts","ng://@3kles/kles-material-dynamicforms/lib/forms/button-control.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/button-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/forms/buttonchecker-control.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/buttonchecker-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/forms/buttonfile-control.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/buttonfile-form.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/textarea.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/text.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/input.clearable.component.ts","ng://@3kles/kles-material-dynamicforms/lib/pipe/transform.pipe.ts","ng://@3kles/kles-material-dynamicforms/lib/pipe/array.pipe.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/slide-toggle.component.ts","ng://@3kles/kles-material-dynamicforms/lib/fields/badge.component.ts","ng://@3kles/kles-material-dynamicforms/lib/kles-material-dynamicforms.module.ts","ng://@3kles/kles-material-dynamicforms/lib/validators/autocomplete.validator.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","push","KlesDynamicFormComponent","fb","fields","validators","asyncValidators","submit","EventEmitter","_onLoaded","direction","orientationClass","orientationItemClass","form","ngOnInit","createForm","emit","ngOnChanges","changes","_a","firstChange","updateForm","_b","setValidators","map","validator","_c","setAsyncValidators","_d","onSubmit","event","preventDefault","stopPropagation","valid","validateAllFormFields","reset","_this","keys","controls","filter","field","name","includes","forEach","removeControl","type","control","createControl","addControl","array_1","array","data","subGroup","group","collections","subfield","subGroup_1","isArray","bindValidations","validations","bindAsyncValidations","asyncValidations","disabled","disable","validList_1","Validators","compose","validList_2","composeAsync","formGroup","get","markAsTouched","onlySelf","FormBuilder","Input","Output","Component","exportAs","selector","template","KlesComponentDirective","resolver","container","buildComponent","component","isFirstChange","currentValue","componentRef","instance","factory","resolveComponentFactory","destroy","createComponent","ComponentFactoryResolver","ViewContainerRef","Directive","KlesFieldAbstract","valueChanges","siblingFields","pipe","subscribe","val","ngAfterViewInit","applyPipeTransform","control_1","val_1","pipeTransform","pipeVal","options","opt","transform","patchValue","emitEvent","KlesFormLabelComponent","_super","KlesFormInputComponent","Observable","options$","of","filteredOption","startWith","switchMap","filterData","maxLength","isPending","pending","filterValue","toString","toLowerCase","property","option","indexOf","displayFn","displayWith","KlesFormSubmitButtonComponent","KlesFormSelectComponent","openChange","$event","virtualScroll","cdkVirtualScrollViewport","scrollToIndex","checkViewportSize","ViewChild","CdkVirtualScrollViewport","ViewChildren","MatOption","KlesFormDateComponent","KlesFormRadioComponent","KlesFormCheckboxComponent","KlesFormListFieldComponent","formArray","createFormGroup","item","deleteField","index","removeAt","addField","KlesFormColorComponent","invertColor","hex","bw","slice","parseInt","KlesFormChipComponent","KlesFormGroupComponent","KlesFormIconComponent","KlesFormSelectSearchComponent","searchControl","FormControl","selectAllControl","optionsFiltered$","ReplaySubject","_onDestroy","Subject","takeUntil","search_1","searchKeys","some","searchKey","selected","every","o","s","isChecked","setValue","ngOnDestroy","toggleAllSelection","state","checked","take","KlesFormLineBreakComponent","KlesFormLinkComponent","KlesFormSelectionListComponent","KlesFormButtonToogleGroupComponent","componentMapper","input","button","select","date","radio","checkbox","listField","color","chip","icon","selectSearch","lineBreak","link","selectionList","buttonToogleGroup","KlesDynamicFieldDirective","previousValue","KlesFormErrorStateMatcher","isErrorState","isSubmitted","submitted","invalid","dirty","touched","MaterialModule","NgModule","imports","CommonModule","MatSliderModule","MatButtonModule","MatToolbarModule","MatIconModule","MatSidenavModule","MatBadgeModule","MatListModule","MatGridListModule","MatFormFieldModule","MatInputModule","MatSelectModule","MatRadioModule","MatDatepickerModule","MatChipsModule","MatTooltipModule","MatTableModule","MatPaginatorModule","MatCardModule","MatMenuModule","MatTabsModule","CdkTableModule","MatProgressSpinnerModule","MatCheckboxModule","MatDialogModule","MatAutocompleteModule","MatProgressBarModule","MatSortModule","MatExpansionModule","MatNativeDateModule","MatSnackBarModule","MatTreeModule","MatSlideToggleModule","ColorPickerModule","MatButtonToggleModule","exports","ScrollingModule","CdkScrollable","providers","KlesButtonComponent","iconSvg","classButton","onChange","onTouched","click","writeValue","uiButton","class","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","KlesButtonComponent_1","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","KlesFormButtonComponent","KlesButtonCheckerComponent","busy","error","countError","KlesButtonCheckerComponent_1","KlesFormButtonCheckerComponent","KlesButtonFileComponent","accept","fileReader","FileReader","file","nativeElement","onFileLoad","fileLoadedEvent","textFromFileLoaded","fileContent","onFileSelect","files","console","log","size","readUploadedFile","inputFile","temporaryFileReader","onerror","abort","DOMException","onload","readAsArrayBuffer","KlesButtonFileComponent_1","KlesFormButtonFileComponent","KlesFormTextareaComponent","KlesFormTextComponent","KlesFormInputClearableComponent","KlesTransformPipe","pipes","reduce","acc","Pipe","ArrayFormatPipe","values","Boolean","join","KlesFormSlideToggleComponent","KlesFormBadgeComponent","components","directives","KlesMaterialDynamicformsModule","declarations","ReactiveFormsModule","TranslateModule","FlexLayoutModule","FormsModule","NgxMatSelectSearchModule","ErrorStateMatcher","useClass","entryComponents","schemas","CUSTOM_ELEMENTS_SCHEMA","NO_ERRORS_SCHEMA","optional","undefined","invalidAutocompleteObject","validOptions","invalidAutocompleteString"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !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","import { OnInit, Component, Input, Output, EventEmitter, AfterContentInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators, ValidatorFn, AsyncValidatorFn, ValidationErrors, AsyncValidator, AbstractControl } from '@angular/forms';\nimport { KlesFormGroupComponent } from './fields/group.component';\nimport { KlesFormListFieldComponent } from './fields/list-field.component';\nimport { IKlesFieldConfig } from './interfaces/field.config.interface';\nimport { IKlesValidator } from './interfaces/validator.interface';\n\n@Component({\n exportAs: 'klesDynamicForm',\n selector: 'app-kles-dynamic-form',\n template: `\n <form class=\"{{orientationClass}}\" [formGroup]=\"form\" (submit)=\"onSubmit($event)\">\n <ng-container *ngFor=\"let field of fields;\" class=\"{{orientationItemClass}}\" klesDynamicField [field]=\"field\" [group]=\"form\" [siblingFields]=\"fields\">\n </ng-container>\n <!--<button (click)=\"reset()\" mat-raised-button color=\"primary\">RESET</button>-->\n </form>\n `,\n styles: [\n // '.dynamic-form {display: flex; flex-direction: column;}',\n //'.dynamic-form {display: flex;}',\n //'.dynamic-form { width: 100%; }',\n '.dynamic-form-column { display: flex;flex-direction: column; }',\n '.dynamic-form-column > * { width: 100%; }',\n '.dynamic-form-row { display: inline-flex;flex-wrap:wrap;gap:10px }',\n '.dynamic-form-row > * { width: 100%; }',\n '.dynamic-form-row-item { margin-right: 10px; }',\n '.dynamic-form-column-item { margin-bottom: 10px; }',\n ]\n\n})\nexport class KlesDynamicFormComponent implements OnInit, OnChanges {\n @Input() fields: IKlesFieldConfig[] = [];\n @Input() validators: IKlesValidator<ValidatorFn>[] = [];\n @Input() asyncValidators: IKlesValidator<AsyncValidatorFn>[] = [];\n // tslint:disable-next-line: no-output-native\n @Output() submit: EventEmitter<any> = new EventEmitter<any>();\n @Output() _onLoaded = new EventEmitter();\n\n @Input() direction: 'column' | 'row' = 'column';\n\n form: FormGroup;\n orientationClass: 'dynamic-form-column' | 'dynamic-form-row' = 'dynamic-form-column';\n orientationItemClass: 'dynamic-form-column-item' | 'dynamic-form-row-item' = 'dynamic-form-column-item';\n\n get value() {\n return this.form.value;\n }\n\n constructor(private fb: FormBuilder) { }\n\n\n ngOnInit() {\n this.form = this.createForm();\n this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';\n this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';\n this._onLoaded.emit();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.fields?.firstChange) {\n this.updateForm();\n // this.form = this.createControl();\n // this.form.controls = {};\n this._onLoaded.emit();\n }\n\n if (!changes.validators?.firstChange && this.form) {\n this.form.setValidators(this.validators.map(v => v.validator));\n }\n\n if (!changes.asyncValidators?.firstChange && this.form) {\n this.form.setAsyncValidators(this.asyncValidators.map(v => v.validator));\n }\n\n if (!changes.direction?.firstChange) {\n this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';\n this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';\n }\n\n }\n\n onSubmit(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n if (this.form.valid) {\n this.submit.emit(this.form.value);\n } else {\n this.validateAllFormFields(this.form);\n }\n }\n\n reset() {\n this.form.reset();\n }\n\n\n private updateForm() {\n Object.keys(this.form.controls).filter(key => {\n return !this.fields.map(field => field.name).includes(key);\n }).forEach(key => {\n this.form.removeControl(key);\n });\n\n\n this.fields\n .filter(field => !this.form.controls[field.name])\n .forEach(field => {\n if (field.type === 'lineBreak') {\n return;\n }\n const control = this.createControl(field);\n this.form.addControl(field.name, control);\n });\n }\n\n private createControl(field: IKlesFieldConfig): AbstractControl {\n\n if (field.type === 'listField') {\n const array = this.fb.array([]);\n\n field.value.forEach((data: any) => {\n const subGroup = this.fb.group({});\n field.collections.forEach(subfield => {\n const control=this.createControl(subfield);\n subGroup.addControl(subfield.name, control);\n });\n array.push(subGroup);\n });\n return array;\n } else if (field.type === 'group') {\n const subGroup = this.fb.group({});\n if (field.collections && Array.isArray(field.collections)) {\n field.collections.forEach(subfield => {\n const control=this.createControl(subfield);\n subGroup.addControl(subfield.name, control);\n });\n }\n return subGroup;\n\n } else {\n const control = this.fb.control(\n field.value,\n this.bindValidations(field.validations || []),\n this.bindAsyncValidations(field.asyncValidations || [])\n );\n if (field.disabled) {\n control.disable();\n }\n return control;\n }\n }\n\n\n\n // private createControl(field: IKlesFieldConfig): AbstractControl {\n\n // if (field.type === 'listField') {\n // const array = this.fb.array([]);\n\n // field.value.forEach((data: any) => {\n // const subGroup = this.fb.group({});\n // field.collections.forEach(subfield => {\n // const control = this.fb.control(\n // data[subfield.name] ? data[subfield.name] : null,\n // this.bindValidations(subfield.validations || []),\n // this.bindAsyncValidations(subfield.asyncValidations || [])\n // );\n // subGroup.addControl(subfield.name, control);\n // });\n // array.push(subGroup);\n // });\n // return array;\n // } else if (field.type === 'group') {\n // const subGroup = this.fb.group({});\n // if (field.collections && Array.isArray(field.collections)) {\n // field.collections.forEach(subfield => {\n // const control = this.fb.control(\n // subfield.value,\n // this.bindValidations(subfield.validations || []),\n // this.bindAsyncValidations(subfield.asyncValidations || [])\n // );\n // if (subfield.disabled) {\n // control.disable();\n // }\n // subGroup.addControl(subfield.name, control);\n // });\n // }\n // return subGroup;\n\n // } else {\n // const control = this.fb.control(\n // field.value,\n // this.bindValidations(field.validations || []),\n // this.bindAsyncValidations(field.asyncValidations || [])\n // );\n // if (field.disabled) {\n // control.disable();\n // }\n // return control;\n // }\n // }\n\n\n\n private createForm() {\n const group = this.fb.group({});\n\n this.fields.forEach(field => {\n\n if (field.type === 'lineBreak') {\n return;\n }\n const control = this.createControl(field);\n\n group.addControl(field.name, control);\n });\n\n group.setValidators(this.validators.map(v => v.validator));\n group.setAsyncValidators(this.asyncValidators.map(v => v.validator));\n\n return group;\n }\n\n\n private bindValidations(validations: IKlesValidator<ValidatorFn>[]): ValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.compose(validList);\n\n }\n return null;\n }\n\n\n private bindAsyncValidations(validations: IKlesValidator<AsyncValidatorFn>[]): AsyncValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.composeAsync(validList);\n\n }\n return null;\n }\n\n private validateAllFormFields(formGroup: FormGroup) {\n Object.keys(formGroup.controls).forEach(field => {\n const control = formGroup.get(field);\n control.markAsTouched({ onlySelf: true });\n });\n }\n}\n","import { Directive, Input, OnInit, ComponentFactoryResolver, ViewContainerRef, ComponentRef, Type, OnChanges, SimpleChanges } from '@angular/core';\n\n@Directive({\n selector: '[klesComponent]'\n})\nexport class KlesComponentDirective implements OnInit, OnChanges {\n @Input() component: Type<any>;\n @Input() value: any;\n\n componentRef: ComponentRef<any>;\n\n constructor(private resolver: ComponentFactoryResolver,\n private container: ViewContainerRef) { }\n\n ngOnInit() {\n this.buildComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.component && !changes.component.isFirstChange()) {\n this.component = changes.component.currentValue;\n this.buildComponent();\n }\n if (changes.value && !changes.value.isFirstChange()) {\n this.value = changes.value.currentValue;\n this.componentRef.instance.value = this.value;\n }\n }\n\n buildComponent() {\n const factory = this.resolver.resolveComponentFactory(\n this.component\n );\n if (this.componentRef) this.componentRef.destroy();\n this.componentRef = this.container.createComponent(factory);\n this.componentRef.instance.component = this.component;\n this.componentRef.instance.value = this.value;\n }\n}\n","import { IKlesField } from '../interfaces/field.interface';\nimport { IKlesFieldConfig } from '../interfaces/field.config.interface';\nimport { FormGroup } from '@angular/forms';\nimport { AfterViewInit, OnInit } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nexport abstract class KlesFieldAbstract implements IKlesField, OnInit, AfterViewInit {\n field: IKlesFieldConfig;\n group: FormGroup;\n siblingFields: IKlesFieldConfig[];\n\n ngOnInit(): void {\n // this.applyPipeTransform();\n if (this.field.valueChanges) {\n this.field.valueChanges(this.field, this.group, this.siblingFields);\n }\n\n this.group.controls[this.field.name]?.valueChanges\n .pipe()\n .subscribe(val => {\n if (this.field.valueChanges) {\n this.field.valueChanges(this.field, this.group, this.siblingFields, val);\n }\n\n // this.applyPipeTransform();\n });\n }\n\n ngAfterViewInit(): void {\n\n }\n\n applyPipeTransform() {\n if (this.group && this.field) {\n const control = this.group.controls[this.field.name];\n if (control) {\n const val = this.group.controls[this.field.name].value;\n if (this.field.pipeTransform) {\n this.field.pipeTransform.forEach(p => {\n let pipeVal = control.value;\n if (p.options) {\n p.options.forEach(opt => {\n pipeVal = p.pipe.transform(val, opt);\n });\n } else {\n pipeVal = p.pipe.transform(val);\n }\n control.patchValue(pipeVal, { onlySelf: true, emitEvent: false });\n })\n }\n }\n }\n }\n}\n","\nimport { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: \"kles-form-label\",\n template: `\n <div [formGroup]=\"group\" >\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" \n [ngClass]=\"field.ngClass\" \n [ngStyle]=\"{'color':'inherit'}\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\">\n </div>\n`\n})\nexport class KlesFormLabelComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n this.group.controls[this.field.name].disable();\n super.ngOnInit();\n }\n}","import { KlesFieldAbstract } from './field.abstract';\nimport { OnInit, Component } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { startWith, map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'kles-form-input',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n\n <ng-container *ngIf=\"field.autocomplete; else notAutoComplete\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\" \n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\"\n [matAutocomplete]=\"auto\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn.bind(this)\" [panelWidth]=\"this.field.panelWidth\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n {{field.property ? option[field.property] : option}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"option\">\n </ng-container>\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n </ng-container>\n\n <ng-template #notAutoComplete>\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\"\n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\">\n </ng-template>\n\n <mat-spinner matSuffix mode=\"indeterminate\" *ngIf=\"isPending()\" diameter=\"17\"></mat-spinner>\n\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormInputComponent extends KlesFieldAbstract implements OnInit {\n\n filteredOption: Observable<any[]>;\n options$: Observable<any[]>;\n\n ngOnInit(): void {\n\n if (this.field.options instanceof Observable) {\n this.options$ = this.field.options;\n } else {\n this.options$ = of(this.field.options);\n }\n\n\n this.filteredOption = this.group.get(this.field.name).valueChanges\n .pipe(\n startWith(''),\n // map(data => data ? this.filterData(data) : this.field.options.slice())\n switchMap(data => data ? this.filterData(data) : this.options$)\n );\n if (!this.field.maxLength) {\n this.field.maxLength = 524288; // Max default input W3C\n }\n super.ngOnInit();\n }\n\n isPending() {\n return (this.group.controls[this.field.name].pending || this.field.pending);\n }\n\n private filterData(value: any): Observable<any[]> {\n let filterValue;\n\n if (typeof value === 'string' && Object.prototype.toString.call(value) === '[object String]') {\n filterValue = value.toLowerCase();\n } else {\n filterValue = value[this.field.property].toLowerCase();\n }\n\n if (this.field.property) {\n return this.options$\n .pipe(map(options => options.filter(option => option[this.field.property].toLowerCase().indexOf(filterValue) === 0)));\n // return this.field.options\n // .filter(data => data[this.field.property].toLowerCase().indexOf(filterValue) === 0);\n }\n // return this.field.options.filter(data => data.toLowerCase().indexOf(filterValue) === 0);\n return this.options$.pipe(map(options => options.filter(option => option.toLowerCase().indexOf(filterValue) === 0)));\n }\n\n displayFn(value: any) {\n if (this.field.displayWith) {\n return this.field.displayWith(value);\n } else {\n if (value && this.field && this.field.property) {\n return value[this.field.property] ? value[this.field.property] : '';\n }\n return value ? value : '';\n }\n }\n}\n","import { KlesFieldAbstract } from './field.abstract';\nimport { OnInit, Component } from '@angular/core';\n\n\n@Component({\n selector: 'kles-submit-button',\n template: `\n <div [formGroup]=\"group\">\n <button matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" type=\"submit\" [disabled]=\"field.disabled\" mat-raised-button color=\"primary\">{{field.label}}</button>\n </div>\n `,\n styles: []\n})\nexport class KlesFormSubmitButtonComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { CdkVirtualScrollViewport, ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { AfterViewInit, ChangeDetectorRef, Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { MatOption } from '@angular/material/core';\nimport { Observable, of } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-select',\n template: `\n <mat-form-field class=\"margin-top\" [formGroup]=\"group\">\n <mat-select matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\"\n (openedChange)=\"openChange($event)\"\n [ngClass]=\"field.ngClass\" [placeholder]=\"field.placeholder | translate\" [formControlName]=\"field.name\" [multiple]=\"field.multiple\">\n <mat-select-trigger *ngIf=\"field.triggerComponent\">\n <ng-container klesComponent [component]=\"field.triggerComponent\" [value]=\"group.controls[field.name].value\"></ng-container>\n </mat-select-trigger>\n\n\n <ng-container *ngIf=\"!field.virtualScroll\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of options$ | async\" [value]=\"item\">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of options$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"field.virtualScroll\">\n <cdk-virtual-scroll-viewport [itemSize]=\"field.itemSize || 50\" [style.height.px]=5*48>\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *cdkVirtualFor=\"let item of options$ | async\" [value]=\"item\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n\n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *cdkVirtualFor=\"let item of options$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n\n </ng-container>\n\n </mat-select>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n`,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormSelectComponent extends KlesFieldAbstract implements OnInit {\n\n @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewport: CdkVirtualScrollViewport;\n @ViewChildren(MatOption) options: QueryList<MatOption>;\n\n options$: Observable<any[]>;\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n super.ngOnInit();\n\n if (!(this.field.options instanceof Observable)) {\n this.options$ = of(this.field.options);\n } else {\n this.options$ = this.field.options;\n }\n }\n\n openChange($event: boolean) {\n if (this.field.virtualScroll) {\n if ($event) {\n this.cdkVirtualScrollViewport.scrollToIndex(0);\n this.cdkVirtualScrollViewport.checkViewportSize();\n }\n }\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: \"kles-form-datepicker\",\n template: `\n <mat-form-field class=\"demo-full-width margin-top\" [formGroup]=\"group\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [matDatepicker]=\"picker\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-hint></mat-hint>\n \n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: []\n})\nexport class KlesFormDateComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: \"kles-form-radiobutton\",\n template: `\n <div [formGroup]=\"group\">\n <label class=\"radio-label-padding\">{{field.label}}</label>\n <mat-radio-group matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\">\n <mat-radio-button *ngFor=\"let item of field.options\" [value]=\"item\">{{item}}</mat-radio-button>\n </mat-radio-group>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </div>\n`,\n styles: []\n})\nexport class KlesFormRadioComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() { super.ngOnInit(); }\n}","\nimport { Component, OnInit } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { IKlesFieldConfig } from '../interfaces/field.config.interface';\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: \"kles-form-checkbox\",\n template: `\n <div [formGroup]=\"group\" > \n <mat-checkbox matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [indeterminate]=\"field.indeterminate\" [formControlName]=\"field.name\">{{field.label | translate}}</mat-checkbox>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n </div>\n`,\n styles: []\n})\nexport class KlesFormCheckboxComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\nimport { FormGroup, FormArray, FormBuilder, ValidatorFn, Validators, AsyncValidatorFn } from '@angular/forms';\nimport { IKlesValidator } from '../interfaces/validator.interface';\n\n@Component({\n selector: 'kles-form-listfield',\n template: `\n <div [formGroup]=\"group\" class=\"form-element\">\n {{field.label | translate}}\n <button mat-icon-button color=\"primary\" (click)=\"addField()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <div class=\"dynamic-form\" [formGroupName]=\"field.name\">\n <div *ngFor=\"let subGroup of formArray.controls let index = index;\" fxLayout=\"row\" fxLayoutGap=\"5px\">\n <ng-container *ngFor=\"let subfield of field.collections;\"\n dynamicField [field]=\"subfield\" [group]=\"subGroup\">\n </ng-container>\n <button mat-icon-button (click)=\"deleteField(index)\" color=\"primary\">\n <mat-icon>delete_outlined</mat-icon>\n </button>\n </div>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </div>\n </div>\n `,\n styles: []\n})\nexport class KlesFormListFieldComponent extends KlesFieldAbstract implements OnInit {\n\n formArray: FormArray;\n\n constructor(private fb: FormBuilder) {\n super();\n }\n\n ngOnInit(): void {\n this.formArray = this.group.controls[this.field.name] as FormArray;\n super.ngOnInit();\n }\n\n private createFormGroup(): FormGroup {\n const group = this.fb.group({});\n this.field.collections.forEach(item => {\n const control = this.fb.control(\n null,\n this.bindValidations(item.validations || []),\n this.bindAsyncValidations(item.asyncValidations || [])\n );\n group.addControl(item.name, control);\n\n });\n\n return group;\n\n }\n\n deleteField(index: number) {\n this.formArray.removeAt(index);\n }\n\n addField() {\n this.formArray.push(this.createFormGroup());\n }\n\n\n private bindValidations(validations: IKlesValidator<ValidatorFn>[]): ValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.compose(validList);\n\n }\n return null;\n }\n\n\n private bindAsyncValidations(validations: IKlesValidator<AsyncValidatorFn>[]): AsyncValidatorFn {\n if (validations.length > 0) {\n const validList = [];\n validations.forEach(valid => {\n validList.push(valid.validator);\n });\n return Validators.composeAsync(validList);\n\n }\n return null;\n }\n\n\n}\n\n","import { KlesFieldAbstract } from './field.abstract';\nimport { OnInit, Component } from '@angular/core';\n@Component({\n selector: 'kles-form-color',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [placeholder]=\"field.placeholder | translate\"\n [colorPicker]=\"group.get(field.name).value\"\n [value]=\"group.get(field.name).value\"\n (colorPickerChange)=\"group.get(field.name).setValue($event)\"\n class=\"colorPicker\"\n [style.background]=\"group.get(field.name).value\"\n [style.color]=\"invertColor(group.get(field.name).value,true)\"\n [formControlName]=\"field.name\">\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormColorComponent extends KlesFieldAbstract implements OnInit {\n\n\n ngOnInit() {super.ngOnInit(); }\n\n invertColor(hex, bw): string {\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n return '#000000';\n }\n let r = parseInt(hex.slice(0, 2), 16);\n let g = parseInt(hex.slice(2, 4), 16);\n let b = parseInt(hex.slice(4, 6), 16);\n if (bw) {\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? '#000000'\n : '#FFFFFF';\n }\n // invert color components\n const r1 = (255 - r).toString(16);\n const g1 = (255 - g).toString(16);\n const b1 = (255 - b).toString(16);\n // pad each with zeros and return\n return \"#\" + r1 + g1 + b1;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: \"kles-form-chip\",\n template: `\n <div [formGroup]=\"group\"> \n <mat-chip-list>\n <mat-chip [color]=\"field.color\" matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" selected [ngClass]=\"field.ngClass\" [ngStyle]=\"field.ngStyle\">\n <mat-icon *ngIf=\"field.icon\">{{field.icon}}</mat-icon>\n {{group.controls[field.name].value | klesTransform:field.pipeTransform}}\n </mat-chip>\n </mat-chip-list>\n </div>\n`,\n styles: []\n})\nexport class KlesFormChipComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { KlesFieldAbstract } from './field.abstract';\n@Component({\n selector: 'kles-group',\n template: `\n <div [formGroup]=\"group\" class=\"group-container\">\n <div [formGroupName]=\"field.name\" class=\"group-container\" [style.flex-direction]=\"field.direction || 'inherit'\" [ngClass]=\"field.ngClass\" >\n <ng-container *ngFor=\"let subfield of field.collections;\" klesDynamicField [field]=\"subfield\" [group]=\"subGroup\">\n </ng-container>\n </div>\n </div>\n`,\n styles: ['mat-form-field {width: calc(100%)}',\n ':host { display:flex; flex-direction: inherit}',\n '.group-container {display:flex; flex-direction: inherit}'\n ]\n})\nexport class KlesFormGroupComponent extends KlesFieldAbstract implements OnInit {\n\n subGroup: FormGroup\n\n ngOnInit() {\n this.subGroup = this.group.controls[this.field.name] as FormGroup;\n super.ngOnInit();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: \"kles-form-icon\",\n template: `\n <mat-icon [color]=\"field.color\" matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [ngStyle]=\"field.ngStyle\">\n {{group.controls[field.name].value}}\n </mat-icon>\n`,\n styles: []\n})\nexport class KlesFormIconComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}\n","import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatOption } from '@angular/material/core';\nimport { Observable, of, ReplaySubject, Subject } from 'rxjs';\nimport { map, startWith, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-select-search',\n template: `\n <mat-form-field class=\"margin-top\" [formGroup]=\"group\">\n <mat-select matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\"\n (openedChange)=\"openChange($event)\" \n [placeholder]=\"field.placeholder | translate\" [formControlName]=\"field.name\" [multiple]=\"field.multiple\">\n <mat-select-trigger *ngIf=\"field.triggerComponent\">\n <ng-container klesComponent [component]=\"field.triggerComponent\" [value]=\"group.controls[field.name].value\"></ng-container>\n </mat-select-trigger>\n\n <ng-container *ngIf=\"field.virtualScroll\">\n <mat-option>\n <ngx-mat-select-search [formControl]=\"searchControl\"\n placeholderLabel=\"\" noEntriesFoundLabel =\"\"></ngx-mat-select-search>\n </mat-option>\n \n <cdk-virtual-scroll-viewport [itemSize]=\"field.itemSize || 50\" [style.height.px]=4*48>\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-checkbox *ngIf=\"field.multiple\" class=\"selectAll\" [formControl]=\"selectAllControl\"\n (change)=\"toggleAllSelection($event)\">\n {{'selectAll' | translate}}\n </mat-checkbox>\n <mat-option *cdkVirtualFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>\n \n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-option>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *cdkVirtualFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n\n <ng-container *ngIf=\"field.multiple\">\n <mat-option *ngFor=\"let item of group.controls[field.name].value | slice:0:30\" [value]=\"item\"\n style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"!field.multiple && group.controls[field.name].value\">\n <mat-option *ngFor=\"let item of [group?.controls[field.name]?.value]\" [value]=\"item\" style=\"display:none\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n\n </ng-container>\n\n <ng-container *ngIf=\"!field.virtualScroll\">\n \n <mat-option>\n <ngx-mat-select-search [formControl]=\"searchControl\"\n placeholderLabel=\"\" noEntriesFoundLabel =\"\"></ngx-mat-select-search>\n </mat-option>\n \n <mat-checkbox *ngIf=\"field.multiple\" class=\"selectAll\" [formControl]=\"selectAllControl\"\n (change)=\"toggleAllSelection($event)\">\n {{'selectAll' | translate}}\n </mat-checkbox>\n\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}</mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let item of optionsFiltered$ | async\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n\n\n </mat-select>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n`,\n styles: ['mat-form-field {width: calc(100%)}', '.selectAll {padding: 10px 16px;}']\n})\nexport class KlesFormSelectSearchComponent extends KlesFieldAbstract implements OnInit, OnDestroy {\n\n searchControl = new FormControl();\n selectAllControl = new FormControl(false);\n\n\n options$: Observable<any[]>;\n optionsFiltered$ = new ReplaySubject<any[]>(1);\n\n private _onDestroy = new Subject<void>();\n\n @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewport: CdkVirtualScrollViewport;\n @ViewChildren(MatOption) options: QueryList<MatOption>;\n\n ngOnInit() {\n super.ngOnInit();\n\n if (!(this.field.options instanceof Observable)) {\n this.options$ = of(this.field.options);\n } else {\n this.options$ = this.field.options;\n }\n\n this.searchControl.valueChanges.pipe(\n startWith(this.searchControl.value),\n takeUntil(this._onDestroy),\n switchMap(value => {\n if (value) {\n const search = value.toLowerCase();\n return this.options$.pipe(map(options => {\n return options\n .filter(option => {\n if (this.field.searchKeys && this.field.searchKeys.length) {\n return this.field.searchKeys.some(searchKey => {\n if (option[searchKey]) {\n return option[searchKey].toString().toLowerCase().indexOf(search) > -1;\n }\n return false;\n }) || (this.field.property ?\n option[this.field.property].toString().toLowerCase().indexOf(search) > -1 : false);\n\n } else {\n if (this.field.property) {\n return option[this.field.property].toString().toLowerCase().indexOf(search) > -1;\n }\n }\n return option.toString().toLowerCase().indexOf(search) > -1;\n });\n }));\n } else {\n return this.options$;\n }\n })\n ).subscribe(this.optionsFiltered$);\n\n this.group.controls[this.field.name].valueChanges.pipe(\n takeUntil(this._onDestroy),\n switchMap(selected => {\n return this.optionsFiltered$.pipe(map(options => {\n if (!selected) {\n return false;\n }\n if (options.length < selected.length) {\n return options.length > 0 && options.every(o => selected.includes(o));\n } else {\n return options.length > 0 && options.length === selected.length && selected.every(s => options.includes(s));\n }\n }));\n })\n ).subscribe(isChecked => {\n this.selectAllControl.setValue(isChecked);\n });\n }\n\n ngOnDestroy(): void {\n this._onDestroy.next();\n }\n\n\n toggleAllSelection(state) {\n if (state.checked) {\n this.optionsFiltered$.pipe(take(1)).subscribe(options => {\n if (options.length > 0) {\n this.group.controls[this.field.name].patchValue(options.slice());\n }\n })\n\n } else {\n this.group.controls[this.field.name].patchValue([]);\n }\n }\n\n openChange($event: boolean) {\n if (this.field.virtualScroll) {\n if ($event) {\n this.cdkVirtualScrollViewport.scrollToIndex(0);\n this.cdkVirtualScrollViewport.checkViewportSize();\n }\n }\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: \"kles-form-line-break\",\n template: ``,\n styles: [\n `:host{\n flex-basis: 100%;\n display: flex;\n height:0;\n }`\n ]\n})\nexport class KlesFormLineBreakComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-link',\n template: `\n <a [href]=\"group.controls[field.name].value\" matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\">\n {{field.label}}\n </a>\n`\n})\nexport class KlesFormLinkComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n super.ngOnInit();\n }\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { Component, OnInit } from '@angular/core';\nimport { MatSelectionListChange } from '@angular/material/list';\nimport { Observable, of } from 'rxjs';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-selection-list',\n template: `\n <div class=\"margin-top\" [formGroup]=\"group\">\n <mat-selection-list [formControlName]=\"field.name\" [attr.id]=\"field.id\" [multiple]=\"field.multiple\" [ngClass]=\"field.ngClass\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-list-option [value]=\"item\" *ngFor=\"let item of options$ | async;\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-list-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-list-option *ngFor=\"let item of options$ | async;\" [value]=\"item\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"item\"></ng-container>\n </mat-list-option>\n </ng-container>\n </mat-selection-list>\n\n </div>\n`,\n styles: ['mat-selection-list {width: calc(100%);height: 250px; overflow:auto}'],\n})\nexport class KlesFormSelectionListComponent extends KlesFieldAbstract implements OnInit {\n\n options$: Observable<any[]>;\n\n ngOnInit() {\n super.ngOnInit();\n\n if (!(this.field.options instanceof Observable)) {\n this.options$ = of(this.field.options);\n } else {\n this.options$ = this.field.options;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-button-toogle-group',\n template: `\n <div [formGroup]=\"group\" class=\"form-element\">\n <mat-button-toggle-group [formControlName]=\"field.name\" [multiple]=\"field.multiple\"\n [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\">\n <mat-button-toggle *ngFor=\"let item of options$ | async\" [value]=\"item\">\n {{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n`\n})\nexport class KlesFormButtonToogleGroupComponent extends KlesFieldAbstract implements OnInit {\n\n options$: Observable<any[]>;\n\n ngOnInit() {\n super.ngOnInit();\n\n if (!(this.field.options instanceof Observable)) {\n this.options$ = of(this.field.options);\n } else {\n this.options$ = this.field.options;\n }\n }\n}\n\n\n// <mat-button-toggle-group [formControlName]=\"field.name\">\n// <mat-button-toggle value=\"bold\">Bold</mat-button-toggle>\n// <mat-button-toggle value=\"italic\">Italic</mat-button-toggle>\n// <mat-button-toggle value=\"underline\">Underline</mat-button-toggle>\n// </mat-button-toggle-group>","import { Directive, Input, OnInit, ComponentFactoryResolver, ViewContainerRef, ComponentRef, Type, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\n\nimport { FormGroup } from '@angular/forms';\nimport { IKlesFieldConfig } from '../interfaces/field.config.interface';\nimport { KlesFormLabelComponent } from '../fields/label.component';\nimport { KlesFormInputComponent } from '../fields/input.component';\nimport { KlesFormSubmitButtonComponent } from '../fields/button-submit.component';\nimport { KlesFormSelectComponent } from '../fields/select.component';\nimport { KlesFormDateComponent } from '../fields/date.component';\nimport { KlesFormRadioComponent } from '../fields/radio.component';\nimport { KlesFormCheckboxComponent } from '../fields/checkbox.component';\nimport { KlesFormListFieldComponent } from '../fields/list-field.component';\nimport { KlesFormColorComponent } from '../fields/color.component';\nimport { KlesFormChipComponent } from '../fields/chip.component';\nimport { KlesFormGroupComponent } from '../fields/group.component';\nimport { KlesFormIconComponent } from '../fields/icon.component';\nimport { KlesFormSelectSearchComponent } from '../fields/select.search.component';\nimport { KlesFormLineBreakComponent } from '../fields/line-break.component';\nimport { KlesFormLinkComponent } from '../fields/link.component';\nimport { KlesFormSelectionListComponent } from '../fields/selection-list.component';\nimport { KlesFormButtonToogleGroupComponent } from '../fields/button-toogle-group.component';\n\nconst componentMapper = {\n label: KlesFormLabelComponent,\n input: KlesFormInputComponent,\n button: KlesFormSubmitButtonComponent,\n select: KlesFormSelectComponent,\n date: KlesFormDateComponent,\n radio: KlesFormRadioComponent,\n checkbox: KlesFormCheckboxComponent,\n listField: KlesFormListFieldComponent,\n color: KlesFormColorComponent,\n chip: KlesFormChipComponent,\n group: KlesFormGroupComponent,\n icon: KlesFormIconComponent,\n selectSearch: KlesFormSelectSearchComponent,\n lineBreak: KlesFormLineBreakComponent,\n link: KlesFormLinkComponent,\n selectionList: KlesFormSelectionListComponent,\n buttonToogleGroup: KlesFormButtonToogleGroupComponent\n};\n\n@Directive({\n selector: '[klesDynamicField]'\n})\nexport class KlesDynamicFieldDirective implements OnInit, OnChanges, OnDestroy {\n @Input() field: IKlesFieldConfig;\n @Input() group: FormGroup;\n @Input() siblingFields: IKlesFieldConfig[];\n\n componentRef: ComponentRef<any>;\n\n constructor(protected resolver: ComponentFactoryResolver,\n protected container: ViewContainerRef) { }\n\n ngOnDestroy(): void {\n if (this.componentRef) this.componentRef.destroy();\n }\n\n ngOnInit() {\n this.buildComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.group) {\n this.group = changes.group.currentValue;\n }\n if (changes.field) {\n if (changes.field.previousValue && changes.field.currentValue.component !== changes.field.previousValue.component) {\n this.field = changes.field.currentValue;\n this.buildComponent();\n } else {\n this.field = changes.field.currentValue;\n }\n }\n }\n\n buildComponent() {\n const factory = this.resolver.resolveComponentFactory(\n this.field.component || componentMapper[this.field.type]\n );\n if (this.componentRef) this.componentRef.destroy();\n this.componentRef = this.container.createComponent(factory);\n this.componentRef.instance.field = this.field;\n this.componentRef.instance.group = this.group;\n this.componentRef.instance.siblingFields = this.siblingFields;\n }\n}\n","import { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\n\nexport class KlesFormErrorStateMatcher implements ErrorStateMatcher {\n\n constructor() {\n }\n\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n const isSubmitted = form && form.submitted;\n return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n }\n\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatListModule } from '@angular/material/list';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { ColorPickerModule } from 'ngx-color-picker';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatSliderModule,\n MatButtonModule,\n MatToolbarModule,\n MatIconModule,\n MatSidenavModule,\n MatBadgeModule,\n MatListModule,\n MatGridListModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatRadioModule,\n MatDatepickerModule,\n MatChipsModule,\n MatTooltipModule,\n MatTableModule,\n MatPaginatorModule,\n MatCardModule,\n MatMenuModule,\n MatTabsModule,\n CdkTableModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n MatDialogModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSortModule,\n MatExpansionModule,\n MatNativeDateModule,\n MatSnackBarModule,\n MatTreeModule,\n MatSliderModule,\n MatButtonModule,\n MatSlideToggleModule,\n ColorPickerModule,\n MatButtonToggleModule\n ],\n\n exports: [\n MatButtonModule,\n MatToolbarModule,\n MatIconModule,\n MatSidenavModule,\n MatBadgeModule,\n MatListModule,\n MatGridListModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatRadioModule,\n MatDatepickerModule,\n MatChipsModule,\n MatTooltipModule,\n MatTableModule,\n MatPaginatorModule,\n MatCardModule,\n MatMenuModule,\n MatTabsModule,\n CdkTableModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n MatDialogModule,\n MatAutocompleteModule,\n MatProgressBarModule,\n MatSortModule,\n MatExpansionModule,\n MatNativeDateModule,\n MatSnackBarModule,\n MatTreeModule,\n MatSliderModule,\n MatButtonModule,\n MatSlideToggleModule,\n ColorPickerModule,\n ScrollingModule,\n CdkScrollable,\n MatButtonToggleModule\n ],\n providers: [\n MatDatepickerModule,\n MatDialogModule\n ]\n})\n\nexport class MaterialModule { }\n","import { Component, OnInit, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface IButton {\n event?: any;\n uiButton?: IUIButton\n}\n\nexport interface IUIButton {\n label?: string;\n color?: string;\n icon?: string;\n iconSvg?: string;\n disabled?: boolean;\n class?: string\n}\n\n@Component({\n selector: 'kles-button',\n template: `\n <span>\n <button mat-button [ngClass]=\"classButton\" [color]=\"(color)?color:'primary'\" [disabled]=\"disabled\"\n (click)=\"click($event)\" [matTooltip]=\"tooltip\">\n {{label | translate}}\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n <mat-icon svgIcon=\"{{iconSvg}}\" *ngIf=\"iconSvg\"></mat-icon>\n </button>\n </span>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KlesButtonComponent),\n multi: true\n }\n ]\n})\nexport class KlesButtonComponent implements OnInit, ControlValueAccessor {\n @Input() name = '';\n @Input() label = '';\n @Input() color = 'accent';\n @Input() icon = '';\n @Input() iconSvg = '';\n @Input() disabled = false;\n @Input() classButton = '';\n @Input() value: IButton = {};\n @Input() tooltip?: string;\n\n onChange: any = () => { };\n onTouched: any = () => { };\n\n ngOnInit(): void {\n }\n\n click(event) {\n this.value.event = this.name;\n this.onChange(this.value);\n }\n\n writeValue(value: IButton): void {\n if (!value) {\n value = { event: this.name };\n }\n if (!value.event) {\n value.event = this.name;\n }\n if (value.uiButton) {\n const uiButton = value.uiButton;\n this.label = (uiButton.label) ? uiButton.label : this.label;\n this.color = (uiButton.color) ? uiButton.color : this.color;\n this.icon = (uiButton.icon) ? uiButton.icon : this.icon;\n this.iconSvg = (uiButton.iconSvg) ? uiButton.iconSvg : this.iconSvg;\n this.disabled = (uiButton.disabled) ? uiButton.disabled : this.disabled;\n this.classButton = (uiButton.class) ? uiButton.class : this.classButton;\n }\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}","import { OnInit, Component } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: 'kles-form-button',\n template: `\n <div [formGroup]=\"group\">\n <kles-button \n [attr.id]=\"field.id\" [classButton]=\"field.ngClass\" \n [name]=\"field.name\" [label]=\"field.label\" [color]=\"field.color\" \n [icon]=\"field.icon\"\n [iconSvg]=\"field.iconSvg\"\n [value]=\"field.value\"\n [formControlName]=\"field.name\"\n [tooltip]=\"field.tooltip\">\n </kles-button>\n </div>\n `,\n styles: []\n})\nexport class KlesFormButtonComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { Component, OnInit, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IButton, KlesButtonComponent } from './button-control.component';\n\nexport interface IButtonChecker extends IButton {\n busy: boolean;\n error?: any[];\n message?: string;\n}\n\n@Component({\n selector: 'kles-button-checker',\n template: `\n <span *ngIf=\"value.error && !value.busy\">\n <kles-button \n [classButton]=\"classButton\" \n [name]=\"name\" [label]=\"label\" [color]=\"color\" \n [icon]=\"icon\" [iconSvg]=\"iconSvg\"\n [value]=\"value\" \n [tooltip]=\"tooltip\"\n matBadge=\"{{countError()}}\" (click)=\"click($event)\">\n </kles-button>\n </span>\n <span style=\"text-align: center;\" *ngIf=\"value.busy||false\">\n <span style=\"text-align: center;margin-right: 10px\">\n <mat-spinner [diameter]=\"25\"></mat-spinner>\n </span>\n <span *ngIf=\"value.message\" style=\"margin-right: 10px\">\n {{value.message|translate}}...\n </span>\n </span>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KlesButtonCheckerComponent),\n multi: true\n }\n ]\n})\nexport class KlesButtonCheckerComponent extends KlesButtonComponent implements ControlValueAccessor {\n value: IButtonChecker = {\n busy: false,\n error: [],\n event: false\n };\n\n countError(): number {\n return (this.value.error) ? this.value.error.length : 0;\n }\n}","import { OnInit, Component } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-button-checker',\n template: `\n <div [formGroup]=\"group\">\n <kles-button-checker\n [attr.id]=\"field.id\" [classButton]=\"field.ngClass\" \n [name]=\"field.name\" [label]=\"field.label\" [color]=\"field.color\" \n [icon]=\"field.icon\"\n [iconSvg]=\"field.iconSvg\"\n [value]=\"field.value\"\n [formControlName]=\"field.name\"\n [tooltip]=\"field.tooltip\">\n </kles-button-checker>\n </div>\n `,\n styles: []\n})\nexport class KlesFormButtonCheckerComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { Component, OnInit, forwardRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IButton, KlesButtonComponent } from './button-control.component';\n\nexport interface IButtonFile extends IButton {\n fileContent?: string | string[];\n}\n\n@Component({\n selector: 'kles-button-file',\n template: `\n <input type=\"file\" #file style=\"display: none\" accept=\"{{accept}}\" (change)=\"onFileSelect($event.target)\" multiple />\n <kles-button \n [classButton]=\"classButton\" \n [name]=\"name\" [label]=\"label\" [color]=\"color\" \n [icon]=\"icon\" [iconSvg]=\"iconSvg\"\n [value]=\"value\" (click)=\"click($event)\">\n </kles-button>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KlesButtonFileComponent),\n multi: true\n }\n ]\n})\nexport class KlesButtonFileComponent extends KlesButtonComponent implements ControlValueAccessor {\n @ViewChild('file') file;\n accept = '*.*';\n fileReader = new FileReader();\n fileContent: string | string[];\n value: IButtonFile = {};\n\n click(event) {\n this.file.nativeElement.click();\n }\n\n writeValue(value: IButton): void {\n if (!value) {\n value = { event: this.name };\n }\n if (!value.event) {\n value.event = this.name;\n }\n if (value.uiButton) {\n const uiButton = value.uiButton;\n this.label = (uiButton.label) ? uiButton.label : this.label;\n this.color = (uiButton.color) ? uiButton.color : this.color;\n this.icon = (uiButton.icon) ? uiButton.icon : this.icon;\n this.iconSvg = (uiButton.iconSvg) ? uiButton.iconSvg : this.iconSvg;\n this.disabled = (uiButton.disabled) ? uiButton.disabled : this.disabled;\n this.classButton = (uiButton.class) ? uiButton.class : this.classButton;\n }\n this.value = value;\n }\n\n\n onFileLoad(fileLoadedEvent) {\n const textFromFileLoaded = fileLoadedEvent.target.result;\n this.fileContent = textFromFileLoaded;\n }\n\n async onFileSelect(input: HTMLInputElement) {\n if (input.files.length > 0) {\n const files = input.files;\n let fileContent = [];\n if (files && files.length) {\n console.log('Filename: ' + files[0].name);\n console.log('Type: ' + files[0].type);\n console.log('Size: ' + files[0].size + ' bytes');\n\n console.log('Files=', files.length);\n\n for (let i = 0; i < files.length; i++) {\n try {\n fileContent[i] = await this.readUploadedFile(files[i]);\n } catch (e) {\n }\n }\n if (fileContent.length === 1) {\n fileContent = fileContent[0];\n }\n }\n this.value.event = this.name;\n this.value.fileContent = fileContent;\n this.onChange(this.value);\n input.value = '';\n }\n }\n\n readUploadedFile(inputFile): Promise<any> {\n const temporaryFileReader = new FileReader();\n return new Promise((resolve, reject) => {\n temporaryFileReader.onerror = () => {\n temporaryFileReader.abort();\n const error: DOMException = new DOMException('Problem parsing input file.');\n reject(error);\n };\n temporaryFileReader.onload = () => {\n resolve(temporaryFileReader.result);\n };\n temporaryFileReader.readAsArrayBuffer(inputFile);\n });\n }\n}","import { OnInit, Component } from '@angular/core';\nimport { KlesFieldAbstract } from './field.abstract';\n\n@Component({\n selector: 'kles-form-button-file',\n template: `\n <div [formGroup]=\"group\">\n <kles-button-file\n [attr.id]=\"field.id\" [classButton]=\"field.ngClass\" \n [name]=\"field.name\" [label]=\"field.label\" [color]=\"field.color\" \n [icon]=\"field.icon\"\n [iconSvg]=\"field.iconSvg\"\n [value]=\"field.value\"\n [formControlName]=\"field.name\">\n </kles-button-file>\n </div>\n `,\n styles: []\n})\nexport class KlesFormButtonFileComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-textarea',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n <textarea matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" \n [formControlName]=\"field.name\" cdkTextareaAutosize [placeholder]=\"field.placeholder | translate\"\n [cdkAutosizeMinRows]=\"field.textareaAutoSize?.minRows\" [cdkAutosizeMaxRows]=\"field.textareaAutoSize?.maxRows\">\n </textarea>\n\n\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormTextareaComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit(): void {\n super.ngOnInit();\n }\n}","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-text',\n template: `\n <span matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\">\n {{(field.property ? group.controls[field.name].value[field.property] : group.controls[field.name].value) | klesTransform:field.pipeTransform}}\n </span> \n`\n})\nexport class KlesFormTextComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n super.ngOnInit();\n }\n}\n","import { OnInit, Component } from '@angular/core';\nimport { KlesFormInputComponent } from './input.component';\n\n@Component({\n selector: 'kles-form-input-clearable',\n template: `\n <mat-form-field [formGroup]=\"group\" class=\"form-element\">\n\n <ng-container *ngIf=\"field.autocomplete; else notAutoComplete\">\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\"\n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\"\n [matAutocomplete]=\"auto\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn.bind(this)\" [panelWidth]=\"this.field.panelWidth\">\n <ng-container *ngIf=\"!field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n {{field.property ? option[field.property] : option}}\n </mat-option>\n </ng-container>\n\n <ng-container *ngIf=\"field.autocompleteComponent\">\n <mat-option *ngFor=\"let option of filteredOption | async\" [value]=\"option\">\n <ng-container klesComponent [component]=\"field.autocompleteComponent\" [value]=\"option\">\n </ng-container>\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n </ng-container>\n\n <ng-template #notAutoComplete>\n <input matInput matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder | translate\" [type]=\"field.inputType\"\n [maxLength]=\"field.maxLength\" [min]=\"field.min\" [max]=\"field.max\" [step]=\"field.step\">\n </ng-template>\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"group.controls[field.name].reset();\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-spinner matSuffix mode=\"indeterminate\" *ngIf=\"isPending()\" diameter=\"17\"></mat-spinner>\n\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message | translate}}</mat-error>\n </ng-container>\n </mat-form-field>\n `,\n styles: ['mat-form-field {width: calc(100%)}']\n})\nexport class KlesFormInputClearableComponent extends KlesFormInputComponent implements OnInit {\n\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: 'klesTransform' })\nexport class KlesTransformPipe implements PipeTransform {\n\n transform(value: any, pipes: { pipe: PipeTransform, options?: any[] }[]): any {\n\n if (pipes && pipes.length > 0) {\n return pipes.reduce((acc, p) => {\n if (p.options) {\n p.options.forEach(opt => {\n acc = p.pipe.transform(acc, opt);\n });\n } else {\n acc = p.pipe.transform(acc);\n }\n return acc;\n }, value)\n }\n return value;\n\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: 'arrayFormat' })\nexport class ArrayFormatPipe implements PipeTransform {\n\n transform(values: any[], property?: string): string {\n if (values && Array.isArray(values)) {\n if (property) {\n return values.map(value => value[property]).filter(Boolean).join(', ');\n } else {\n return values.join(', ');\n }\n }\n return '';\n }\n}","\nimport { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from './field.abstract';\n\n\n@Component({\n selector: \"kles-form-slide-toggle\",\n template: `\n <div [formGroup]=\"group\" > \n <mat-slide-toggle matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" [color]=\"field.color\" [formControlName]=\"field.name\">{{field.label | translate}}</mat-slide-toggle>\n <ng-container *ngFor=\"let validation of field.validations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n <ng-container *ngFor=\"let validation of field.asyncValidations;\" ngProjectAs=\"mat-error\">\n <mat-error *ngIf=\"group.get(field.name).hasError(validation.name)\">{{validation.message}}</mat-error>\n </ng-container>\n </div>\n`,\n styles: []\n})\nexport class KlesFormSlideToggleComponent extends KlesFieldAbstract implements OnInit {\n ngOnInit() { super.ngOnInit(); }\n}","import { Component, OnInit } from \"@angular/core\";\nimport { KlesFieldAbstract } from \"./field.abstract\";\n\n@Component({\n selector: 'kles-form-badge',\n template: `\n <span matTooltip=\"{{field.tooltip}}\" [attr.id]=\"field.id\" [ngClass]=\"field.ngClass\" \n matBadge=\"{{group.controls[field.name].value}}\" matBadgeOverlap=\"false\" matBadgeColor=\"{{field.color}}\">\n </span> \n`\n})\nexport class KlesFormBadgeComponent extends KlesFieldAbstract implements OnInit {\n\n ngOnInit() {\n super.ngOnInit();\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KlesDynamicFormComponent } from './dynamic-form.component';\nimport { KlesComponentDirective } from './directive/dynamic-component.directive';\nimport { KlesDynamicFieldDirective } from './directive/dynamic-field.directive';\nimport { KlesFormErrorStateMatcher } from './matcher/form-error.matcher';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MaterialModule } from './modules/material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ColorPickerModule } from 'ngx-color-picker';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { KlesFormLabelComponent } from './fields/label.component';\nimport { KlesFormInputComponent } from './fields/input.component';\nimport { KlesFormSubmitButtonComponent } from './fields/button-submit.component';\nimport { KlesFormSelectComponent } from './fields/select.component';\nimport { KlesFormDateComponent } from './fields/date.component';\nimport { KlesFormRadioComponent } from './fields/radio.component';\nimport { KlesFormCheckboxComponent } from './fields/checkbox.component';\nimport { KlesFormListFieldComponent } from './fields/list-field.component';\nimport { KlesFormColorComponent } from './fields/color.component';\nimport { KlesButtonComponent } from './forms/button-control.component';\nimport { KlesFormButtonComponent } from './fields/button-form.component';\nimport { KlesButtonCheckerComponent } from './forms/buttonchecker-control.component';\nimport { KlesFormButtonCheckerComponent } from './fields/buttonchecker-form.component';\nimport { KlesButtonFileComponent } from './forms/buttonfile-control.component';\nimport { KlesFormButtonFileComponent } from './fields/buttonfile-form.component';\nimport { KlesFormTextareaComponent } from './fields/textarea.component';\nimport { KlesFormTextComponent } from './fields/text.component';\nimport { KlesFormChipComponent } from './fields/chip.component';\nimport { KlesFormGroupComponent } from './fields/group.component';\nimport { KlesFormInputClearableComponent } from './fields/input.clearable.component';\nimport { KlesFormIconComponent } from './fields/icon.component';\nimport { KlesTransformPipe } from './pipe/transform.pipe';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { KlesFormSelectSearchComponent } from './fields/select.search.component';\nimport { KlesFormLineBreakComponent } from './fields/line-break.component';\nimport { ArrayFormatPipe } from './pipe/array.pipe';\nimport { KlesFormLinkComponent } from './fields/link.component';\nimport { KlesFormSlideToggleComponent } from './fields/slide-toggle.component';\nimport { KlesFormSelectionListComponent } from './fields/selection-list.component';\nimport { KlesFormBadgeComponent } from './fields/badge.component';\nimport { KlesFormButtonToogleGroupComponent } from './fields/button-toogle-group.component';\n\nconst components = [\n KlesDynamicFormComponent,\n KlesFormLabelComponent,\n KlesFormInputComponent,\n KlesFormInputClearableComponent,\n KlesFormSubmitButtonComponent,\n KlesFormBadgeComponent,\n KlesButtonComponent,\n KlesFormButtonComponent,\n KlesButtonCheckerComponent,\n KlesFormButtonCheckerComponent,\n KlesButtonFileComponent,\n KlesFormButtonFileComponent,\n KlesFormSelectComponent,\n KlesFormDateComponent,\n KlesFormRadioComponent,\n KlesFormCheckboxComponent,\n KlesFormListFieldComponent,\n KlesFormColorComponent,\n KlesFormTextareaComponent,\n KlesFormTextComponent,\n KlesFormChipComponent,\n KlesFormGroupComponent,\n KlesFormIconComponent,\n KlesFormSelectSearchComponent,\n KlesFormLineBreakComponent,\n KlesFormLinkComponent,\n KlesFormSlideToggleComponent,\n KlesFormSelectionListComponent,\n KlesFormButtonToogleGroupComponent\n];\n\nconst directives = [KlesDynamicFieldDirective, KlesComponentDirective];\nconst pipes = [KlesTransformPipe, ArrayFormatPipe];\n@NgModule({\n declarations: [\n components,\n directives,\n pipes\n\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n FlexLayoutModule,\n FormsModule,\n MaterialModule,\n ColorPickerModule,\n NgxMatSelectSearchModule\n ],\n providers: [\n { provide: ErrorStateMatcher, useClass: KlesFormErrorStateMatcher },\n pipes\n ],\n entryComponents: [\n components\n ],\n exports: [\n components,\n pipes,\n directives,\n ColorPickerModule\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]\n})\nexport class KlesMaterialDynamicformsModule { }\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\"\n\nexport function autocompleteObjectValidator(optional?: boolean): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n if ((control.value === null || control.value === undefined) && !optional) return { 'invalidAutocompleteObject': { value: control.value } }\n\n if (typeof control.value === 'string') {\n if (control.value === '' && optional) return null;\n return { 'invalidAutocompleteObject': { value: control.value } }\n }\n return null /* valid option selected */\n }\n}\n\nexport function autocompleteStringValidator(validOptions: Array<string>, optional?: boolean): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n if ((control.value === '' || control.value === null) && optional) return null;\n if (validOptions.indexOf(control.value) !== -1) {\n return null /* valid option selected */\n }\n return { 'invalidAutocompleteString': { value: control.value } }\n }\n}"]}
|