@klippa/ngx-enhancy-forms 5.3.2 → 5.3.3
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/bundles/klippa-ngx-enhancy-forms.umd.js +10 -17
- package/bundles/klippa-ngx-enhancy-forms.umd.js.map +1 -1
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js +1 -1
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js.map +1 -1
- package/esm2015/lib/elements/sortable-items/sortable-items.component.js +1 -1
- package/esm2015/lib/form/form.component.js +3 -9
- package/fesm2015/klippa-ngx-enhancy-forms.js +2 -8
- package/fesm2015/klippa-ngx-enhancy-forms.js.map +1 -1
- package/package.json +1 -1
|
@@ -64,4 +64,4 @@ SortableItemsComponent.propDecorators = {
|
|
|
64
64
|
sortableItemSize: [{ type: Input }],
|
|
65
65
|
useCustomScroll: [{ type: Input }]
|
|
66
66
|
};
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGFibGUtaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL25neC1lbmhhbmN5LWZvcm1zL25neC1lbmhhbmN5LWZvcm1zL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvIiwic291cmNlcyI6WyJsaWIvZWxlbWVudHMvc29ydGFibGUtaXRlbXMvc29ydGFibGUtaXRlbXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBUXZGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxpQkFBNkI7SUFOekU7O1FBUVUscUJBQWdCLEdBQWdCLElBQUksQ0FBQztRQUNyQyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUd6QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQVc5QixzQkFBaUIsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUM7UUFFRixlQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixvRUFBb0U7WUFDcEUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDckI7aUJBQU07Z0JBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3JCO1FBQ0YsQ0FBQyxDQUFDO1FBRUYsVUFBSyxHQUFHLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7SUFvQkgsQ0FBQztJQTVDQSxRQUFRO1FBQ1AsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUM7U0FDeEc7YUFBTTtZQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUMsQ0FBQztTQUM1RDtJQUNGLENBQUM7SUFtQk8sVUFBVSxDQUFDLFlBQW9CO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDYixHQUFHLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxZQUFZO29CQUN2RCxRQUFRLEVBQUUsUUFBUTtpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUU7b0JBQy9DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDckI7WUFDRixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDUjtJQUNGLENBQUM7SUFFTyxhQUFhO1FBQ3BCLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQzs7O1lBekRELFNBQVMsU0FBQztnQkFDVixRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyxnd0JBQThDO2dCQUU5QyxTQUFTLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDOzthQUMzRjs7O3VCQUVDLFlBQVksU0FBQyxXQUFXOytCQUN4QixLQUFLOzhCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge09wdGlvbnN9IGZyb20gJ3NvcnRhYmxlanMnO1xuaW1wb3J0IHtpc1ZhbHVlU2V0fSBmcm9tICcuLi8uLi91dGlsL3ZhbHVlcyc7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tc29ydGFibGUtaXRlbXMnLFxuXHR0ZW1wbGF0ZVVybDogJy4vc29ydGFibGUtaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9zb3J0YWJsZS1pdGVtcy5jb21wb25lbnQuc2NzcyddLFxuXHRwcm92aWRlcnM6IFt7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBTb3J0YWJsZUl0ZW1zQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX1dLFxufSlcbmV4cG9ydCBjbGFzcyBTb3J0YWJsZUl0ZW1zQ29tcG9uZW50IGV4dGVuZHMgVmFsdWVBY2Nlc3NvckJhc2U8QXJyYXk8YW55Pj4gaW1wbGVtZW50cyBPbkluaXQge1xuXHRAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKSB0ZW1wbGF0ZTtcblx0QElucHV0KCkgc29ydGFibGVJdGVtU2l6ZTogJ3NtJyB8ICdsZycgPSAnbGcnO1xuXHRASW5wdXQoKSB1c2VDdXN0b21TY3JvbGwgPSBmYWxzZTtcblxuXHRwdWJsaWMgc29ydGFibGVqc09wdGlvbnM6IE9wdGlvbnM7XG5cdHByaXZhdGUgc2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm5nT25Jbml0KCk7XG5cdFx0aWYgKHRoaXMudXNlQ3VzdG9tU2Nyb2xsKSB7XG5cdFx0XHR0aGlzLnNvcnRhYmxlanNPcHRpb25zID0ge29uVXBkYXRlOiB0aGlzLml0ZW1zT3JkZXJDaGFuZ2VkLCBvbk1vdmU6IHRoaXMub25JdGVtRHJhZywgb25FbmQ6IHRoaXMub25FbmR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNvcnRhYmxlanNPcHRpb25zID0ge29uVXBkYXRlOiB0aGlzLml0ZW1zT3JkZXJDaGFuZ2VkfTtcblx0XHR9XG5cdH1cblxuXHRpdGVtc09yZGVyQ2hhbmdlZCA9ICgpID0+IHtcblx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkodGhpcy5pbm5lclZhbHVlKTtcblx0fTtcblxuXHRvbkl0ZW1EcmFnID0gKGRhdGEpID0+IHtcblx0XHQvLyBpZiB0aGUgaXRlbSB5b3UncmUgZHJhZ2dpbmcgaXMgcmVhY2hpbmcgdGhlIHRvcCwgc3RhcnQgc2Nyb2xsaW5nLlxuXHRcdGlmIChkYXRhLnJlbGF0ZWRSZWN0LnRvcCA8IDEwMCkge1xuXHRcdFx0dGhpcy5zY3JvbGxQYWdlKDEwMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3RvcFNjcm9sbGluZygpO1xuXHRcdH1cblx0fTtcblxuXHRvbkVuZCA9ICgpID0+IHtcblx0XHR0aGlzLnN0b3BTY3JvbGxpbmcoKTtcblx0fTtcblxuXHRwcml2YXRlIHNjcm9sbFBhZ2Uoc2Nyb2xsQW1vdW50OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAoIWlzVmFsdWVTZXQodGhpcy5zY3JvbGxJbnRlcnZhbCkpIHtcblx0XHRcdHRoaXMuc2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdHdpbmRvdy5zY3JvbGwoe1xuXHRcdFx0XHRcdHRvcDogZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgLSBzY3JvbGxBbW91bnQsXG5cdFx0XHRcdFx0YmVoYXZpb3I6ICdzbW9vdGgnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wIDw9IDEwMCkge1xuXHRcdFx0XHRcdHRoaXMuc3RvcFNjcm9sbGluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAxMDApO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc3RvcFNjcm9sbGluZygpOiB2b2lkIHtcblx0XHRjbGVhckludGVydmFsKHRoaXMuc2Nyb2xsSW50ZXJ2YWwpO1xuXHRcdHRoaXMuc2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG59XG4iXX0=
|
|
@@ -29,19 +29,13 @@ export class FormComponent {
|
|
|
29
29
|
if (typeof injectAt !== 'number') {
|
|
30
30
|
throw new Error(`cannot index FormArray with ${typeof injectAt}`);
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
setTimeout(() => {
|
|
34
|
-
injectInto.setControl(injectAt, this.formGroup);
|
|
35
|
-
});
|
|
32
|
+
injectInto.setControl(injectAt, this.formGroup);
|
|
36
33
|
}
|
|
37
34
|
else if (injectInto instanceof FormGroup) {
|
|
38
35
|
if (typeof injectAt !== 'string') {
|
|
39
36
|
throw new Error(`cannot index FormGroup with ${typeof injectAt}`);
|
|
40
37
|
}
|
|
41
|
-
|
|
42
|
-
setTimeout(() => {
|
|
43
|
-
injectInto.setControl(injectAt, this.formGroup);
|
|
44
|
-
});
|
|
38
|
+
injectInto.setControl(injectAt, this.formGroup);
|
|
45
39
|
}
|
|
46
40
|
}
|
|
47
41
|
if (isValueSet(this.patchValueInterceptor)) {
|
|
@@ -172,4 +166,4 @@ FormComponent.propDecorators = {
|
|
|
172
166
|
formGroup: [{ type: Input }],
|
|
173
167
|
patchValueInterceptor: [{ type: Input }]
|
|
174
168
|
};
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQWtCLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBRWpHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQU10RSxNQUFNLE9BQU8sZ0JBQWdCOzs7WUFKNUIsU0FBUyxTQUFDO2dCQUNWLDhDQUE4QztnQkFDOUMsUUFBUSxFQUFFLGNBQWM7YUFDeEI7Ozt5QkFFQyxLQUFLO2lCQUNMLEtBQUs7O0FBUVAsTUFBTSxPQUFPLGFBQWE7SUFVekIsWUFBNEMsTUFBcUIsRUFBc0Isa0JBQW9DO1FBQS9FLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBc0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQjtRQU4zSCw4R0FBOEc7UUFDdEcsbUJBQWMsR0FHakIsRUFBRSxDQUFDO0lBR1IsQ0FBQztJQUVELFFBQVE7UUFDUCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxD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TCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIERpcmVjdGl2ZSwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgU2tpcFNlbGZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUdyb3VwTmFtZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVmFsdWVTZXR9IGZyb20gJy4uL3V0aWwvdmFsdWVzJztcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaWVsZHNTeW1ib2wgPSBTeW1ib2woJ05vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCcpO1xuXG5ARGlyZWN0aXZlKHtcblx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxuXHRzZWxlY3RvcjogJ2tscC1zdWItZm9ybScsXG59KVxuZXhwb3J0IGNsYXNzIFN1YkZvcm1EaXJlY3RpdmUge1xuXHRASW5wdXQoKSBpbmplY3RJbnRvOiBGb3JtQXJyYXkgfCBGb3JtR3JvdXA7XG5cdEBJbnB1dCgpIGF0OiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtJyxcblx0dGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cdEBJbnB1dCgpIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcblx0QElucHV0KCkgcHVibGljIHBhdGNoVmFsdWVJbnRlcmNlcHRvcjogKHZhbHVlczogYW55KSA9PiBQcm9taXNlPGFueT47XG5cblx0Ly8gd2Uga2VlcCB0cmFjayBvZiB3aGF0IGZvcm0gY29udHJvbHMgYXJlIGFjdHVhbGx5IHJlbmRlcmVkLiBPbmx5IHRob3NlIGNvdW50IHdoZW4gbG9va2luZyBhdCBmb3JtIHZhbGlkYXRpb25cblx0cHJpdmF0ZSBhY3RpdmVDb250cm9sczogQXJyYXk8e1xuXHRcdGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblx0XHRmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQ7XG5cdH0+ID0gW107XG5cblx0Y29uc3RydWN0b3IoQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwYXJlbnQ6IEZvcm1Db21wb25lbnQsIEBPcHRpb25hbCgpIHByaXZhdGUgc3ViRm9ybVBsYWNlaG9sZGVyOiBTdWJGb3JtRGlyZWN0aXZlKSB7XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLnBhcmVudCkgJiYgaXNWYWx1ZVNldCh0aGlzLnN1YkZvcm1QbGFjZWhvbGRlcikpIHtcblx0XHRcdGNvbnN0IGluamVjdEludG8gPSB0aGlzLnN1YkZvcm1QbGFjZWhvbGRlci5pbmplY3RJbnRvO1xuXHRcdFx0Y29uc3QgaW5qZWN0QXQgPSB0aGlzLnN1YkZvcm1QbGFjZWhvbGRlci5hdDtcblx0XHRcdGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgaW5qZWN0QXQgIT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgaW5kZXggRm9ybUFycmF5IHdpdGggJHt0eXBlb2YgaW5qZWN0QXR9YCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBkbyB0aGlzIG5leHQgY3ljbGUgdG8gYXZvaWQgJ0V4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3InXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgdGhpcy5mb3JtR3JvdXApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZG8gdGhpcyBuZXh0IGN5Y2xlIHRvIGF2b2lkICdFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yJ1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRpbmplY3RJbnRvLnNldENvbnRyb2woaW5qZWN0QXQsIHRoaXMuZm9ybUdyb3VwKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMucGF0Y2hWYWx1ZUludGVyY2VwdG9yKSkge1xuXHRcdFx0dGhpcy5hZGRTdXBwb3J0Rm9yUGF0Y2hWYWx1ZUludGVyY2VwdG9yKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXJlbnQpICYmIGlzVmFsdWVTZXQodGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuYXQ7XG5cdFx0XHRpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHRjb25zdCBpZHggPSBpbmplY3RJbnRvLmNvbnRyb2xzLmZpbmRJbmRleChlID0+IGUgPT09IHRoaXMuZm9ybUdyb3VwKTtcblx0XHRcdFx0aW5qZWN0SW50by5yZW1vdmVBdChpZHgpO1xuXHRcdFx0fSBlbHNlIGlmIChpbmplY3RJbnRvIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgaW5qZWN0QXQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgaW5kZXggRm9ybUdyb3VwIHdpdGggJHt0eXBlb2YgaW5qZWN0QXR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5qZWN0SW50by5yZW1vdmVDb250cm9sKGluamVjdEF0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFkZFN1cHBvcnRGb3JQYXRjaFZhbHVlSW50ZXJjZXB0b3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZm4gPSB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlO1xuXHRcdGNvbnN0IG5ld0ZuID0gKFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0W2tleTogc3RyaW5nXTogYW55O1xuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRcdG9ubHlTZWxmPzogYm9vbGVhbjtcblx0XHRcdFx0ZW1pdEV2ZW50PzogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMucGF0Y2hWYWx1ZUludGVyY2VwdG9yKHZhbHVlKS50aGVuKCh2YWwpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Zm4uY2FsbCh0aGlzLmZvcm1Hcm91cCwgdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUgPSBuZXdGbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sLCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnRDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzLnB1c2goe2Zvcm1Db250cm9sLCBmb3JtRWxlbWVudH0pO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCBmb3JtRWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlQ29udHJvbHMgPSB0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbHRlcigoZSkgPT4gZS5mb3JtQ29udHJvbCAhPT0gZm9ybUNvbnRyb2wpO1xuXHRcdGlmICh0aGlzLnBhcmVudCkge1xuXHRcdFx0dGhpcy5wYXJlbnQudW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUdyb3VwQ29udHJvbHMoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHJlc3VsdDogQXJyYXk8Rm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0T2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Db250cm9sKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRGb3JtQXJyYXlDb250cm9scyhmb3JtQXJyYXk6IEZvcm1BcnJheSwgcmVzdWx0OiBBcnJheTxGb3JtQ29udHJvbD4pOiB2b2lkIHtcblx0XHRmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1BcnJheUNvbnRyb2xzKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUNvbnRyb2wodmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldEFsbEZvcm1Db250cm9scygpOiBBcnJheTxGb3JtQ29udHJvbD4ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModGhpcy5mb3JtR3JvdXAsIHJlc3VsdCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUNvbnRyb2woY29udHJvbDogRm9ybUNvbnRyb2wsIHJlc3VsdDogQXJyYXk8Rm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0cmVzdWx0LnB1c2goY29udHJvbCk7XG5cdH1cblxuXHRwcml2YXRlIGRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmFjdGl2ZUNvbnRyb2xzLnNvbWUoKGUpID0+IGUuZm9ybUNvbnRyb2wgPT09IGNvbnRyb2wpKSB7XG5cdFx0XHRjb250cm9sLmRpc2FibGUoKTtcblx0XHR9XG5cdH1cblxuXHR0cnlTdWJtaXQoKTogUHJvbWlzZTxhbnk+IHtcblx0XHR0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0Y29uc3QgYWxsQ29udHJvbHM6IEFycmF5PEZvcm1Db250cm9sPiA9IHRoaXMuZ2V0QWxsRm9ybUNvbnRyb2xzKCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxEaXNhYmxlZFN0YXRlcyA9IGFsbENvbnRyb2xzLm1hcChlID0+IHtcblx0XHRcdHJldHVybiB7Y29udHJvbDogZSwgZGlzYWJsZWQ6IGUuZGlzYWJsZWR9O1xuXHRcdH0pO1xuXHRcdGFsbENvbnRyb2xzLmZvckVhY2goZSA9PiB0aGlzLmRpc2FibGVJbmFjdGl2ZUZvcm1Db250cm9sKGUpKTtcblx0XHRhbGxDb250cm9scy5mb3JFYWNoKGUgPT4gZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkpO1xuXHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlO1xuXHRcdGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzLmZpbmQoKGUpID0+ICFlLmZvcm1Db250cm9sLnZhbGlkKT8uZm9ybUVsZW1lbnQ/LnNjcm9sbFRvKCk7XG5cdFx0XHR0aGlzLnNldERpc2FibGVkU3RhdGVzRm9yQWxsQ29udHJvbHMob3JpZ2luYWxEaXNhYmxlZFN0YXRlcyk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoaW52YWxpZEZpZWxkc1N5bWJvbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXM6IEFycmF5PHsgY29udHJvbDogQWJzdHJhY3RDb250cm9sOyBkaXNhYmxlZDogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0aWYgKGUuZGlzYWJsZWQpIHtcblx0XHRcdFx0ZS5jb250cm9sLmRpc2FibGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGUuY29udHJvbC5lbmFibGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl19
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbmd4LWVuaGFuY3ktZm9ybXMvbmd4LWVuaGFuY3ktZm9ybXMvcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQWtCLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBRWpHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQU10RSxNQUFNLE9BQU8sZ0JBQWdCOzs7WUFKNUIsU0FBUyxTQUFDO2dCQUNWLDhDQUE4QztnQkFDOUMsUUFBUSxFQUFFLGNBQWM7YUFDeEI7Ozt5QkFFQyxLQUFLO2lCQUNMLEtBQUs7O0FBUVAsTUFBTSxPQUFPLGFBQWE7SUFVekIsWUFBNEMsTUFBcUIsRUFBc0Isa0JBQW9DO1FBQS9FLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBc0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQjtRQU4zSCw4R0FBOEc7UUFDdEcsbUJBQWMsR0FHakIsRUFBRSxDQUFDO0lBR1IsQ0FBQztJQUVELFFBQVE7UUFDUCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxD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QUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDekIsSUFBSSxDQUFDLCtCQUErQixDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDN0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDTixZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLDBDQUFFLFdBQVcsMENBQUUsUUFBUSxHQUFHO1lBQy9FLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzdELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQzNDO0lBQ0YsQ0FBQztJQUVPLCtCQUErQixDQUFDLHNCQUE4RTtRQUNySCxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNwQjtpQkFBTTtnQkFDTixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ25CO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzs7WUE5SkQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxVQUFVO2dCQUNwQiw4REFBb0M7O2FBRXBDOzs7WUFXb0QsYUFBYSx1QkFBcEQsUUFBUSxZQUFJLFFBQVE7WUFBMEUsZ0JBQWdCLHVCQUF2RCxRQUFROzs7d0JBVDNFLEtBQUs7b0NBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFNraXBTZWxmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1Hcm91cE5hbWV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Rm9ybUVsZW1lbnRDb21wb25lbnR9IGZyb20gJy4vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtpc1ZhbHVlU2V0fSBmcm9tICcuLi91dGlsL3ZhbHVlcyc7XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkRmllbGRzU3ltYm9sID0gU3ltYm9sKCdOb3QgYWxsIGZpZWxkcyBhcmUgdmFsaWQnKTtcblxuQERpcmVjdGl2ZSh7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3Jcblx0c2VsZWN0b3I6ICdrbHAtc3ViLWZvcm0nLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJGb3JtRGlyZWN0aXZlIHtcblx0QElucHV0KCkgaW5qZWN0SW50bzogRm9ybUFycmF5IHwgRm9ybUdyb3VwO1xuXHRASW5wdXQoKSBhdDogbnVtYmVyIHwgc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybScsXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHRASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cdEBJbnB1dCgpIHB1YmxpYyBwYXRjaFZhbHVlSW50ZXJjZXB0b3I6ICh2YWx1ZXM6IGFueSkgPT4gUHJvbWlzZTxhbnk+O1xuXG5cdC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hhdCBmb3JtIGNvbnRyb2xzIGFyZSBhY3R1YWxseSByZW5kZXJlZC4gT25seSB0aG9zZSBjb3VudCB3aGVuIGxvb2tpbmcgYXQgZm9ybSB2YWxpZGF0aW9uXG5cdHByaXZhdGUgYWN0aXZlQ29udHJvbHM6IEFycmF5PHtcblx0XHRmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG5cdFx0Zm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50O1xuXHR9PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50OiBGb3JtQ29tcG9uZW50LCBAT3B0aW9uYWwoKSBwcml2YXRlIHN1YkZvcm1QbGFjZWhvbGRlcjogU3ViRm9ybURpcmVjdGl2ZSkge1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5wYXJlbnQpICYmIGlzVmFsdWVTZXQodGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRjb25zdCBpbmplY3RJbnRvID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuaW5qZWN0SW50bztcblx0XHRcdGNvbnN0IGluamVjdEF0ID0gdGhpcy5zdWJGb3JtUGxhY2Vob2xkZXIuYXQ7XG5cdFx0XHRpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1BcnJheSB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5qZWN0SW50by5zZXRDb250cm9sKGluamVjdEF0LCB0aGlzLmZvcm1Hcm91cCk7XG5cdFx0XHR9IGVsc2UgaWYgKGluamVjdEludG8gaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbmplY3RBdCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBpbmRleCBGb3JtR3JvdXAgd2l0aCAke3R5cGVvZiBpbmplY3RBdH1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluamVjdEludG8uc2V0Q29udHJvbChpbmplY3RBdCwgdGhpcy5mb3JtR3JvdXApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLnBhdGNoVmFsdWVJbnRlcmNlcHRvcikpIHtcblx0XHRcdHRoaXMuYWRkU3VwcG9ydEZvclBhdGNoVmFsdWVJbnRlcmNlcHRvcigpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMucGFyZW50KSAmJiBpc1ZhbHVlU2V0KHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyKSkge1xuXHRcdFx0Y29uc3QgaW5qZWN0SW50byA9IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmluamVjdEludG87XG5cdFx0XHRjb25zdCBpbmplY3RBdCA9IHRoaXMuc3ViRm9ybVBsYWNlaG9sZGVyLmF0O1xuXHRcdFx0aWYgKGluamVjdEludG8gaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gaW5qZWN0SW50by5jb250cm9scy5maW5kSW5kZXgoZSA9PiBlID09PSB0aGlzLmZvcm1Hcm91cCk7XG5cdFx0XHRcdGluamVjdEludG8ucmVtb3ZlQXQoaWR4KTtcblx0XHRcdH0gZWxzZSBpZiAoaW5qZWN0SW50byBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGluamVjdEF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2Fubm90IGluZGV4IEZvcm1Hcm91cCB3aXRoICR7dHlwZW9mIGluamVjdEF0fWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluamVjdEludG8ucmVtb3ZlQ29udHJvbChpbmplY3RBdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhZGRTdXBwb3J0Rm9yUGF0Y2hWYWx1ZUludGVyY2VwdG9yKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZuID0gdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZTtcblx0XHRjb25zdCBuZXdGbiA9IChcblx0XHRcdHZhbHVlOiB7XG5cdFx0XHRcdFtrZXk6IHN0cmluZ106IGFueTtcblx0XHRcdH0sXG5cdFx0XHRvcHRpb25zPzoge1xuXHRcdFx0XHRvbmx5U2VsZj86IGJvb2xlYW47XG5cdFx0XHRcdGVtaXRFdmVudD86IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLnBhdGNoVmFsdWVJbnRlcmNlcHRvcih2YWx1ZSkudGhlbigodmFsKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGZuLmNhbGwodGhpcy5mb3JtR3JvdXAsIHZhbCwgb3B0aW9ucyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHR0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlID0gbmV3Rm47XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCwgZm9ybUVsZW1lbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5hY3RpdmVDb250cm9scy5wdXNoKHtmb3JtQ29udHJvbCwgZm9ybUVsZW1lbnR9KTtcblx0XHRpZiAodGhpcy5wYXJlbnQpIHtcblx0XHRcdHRoaXMucGFyZW50LnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCwgZm9ybUVsZW1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLmFjdGl2ZUNvbnRyb2xzID0gdGhpcy5hY3RpdmVDb250cm9scy5maWx0ZXIoKGUpID0+IGUuZm9ybUNvbnRyb2wgIT09IGZvcm1Db250cm9sKTtcblx0XHRpZiAodGhpcy5wYXJlbnQpIHtcblx0XHRcdHRoaXMucGFyZW50LnVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFkZEZvcm1Hcm91cENvbnRyb2xzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCByZXN1bHQ6IEFycmF5PEZvcm1Db250cm9sPik6IHZvaWQge1xuXHRcdE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUdyb3VwQ29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG5cdFx0XHRcdHRoaXMuYWRkRm9ybUFycmF5Q29udHJvbHModmFsdWUsIHJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQ29udHJvbCh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYWRkRm9ybUFycmF5Q29udHJvbHMoZm9ybUFycmF5OiBGb3JtQXJyYXksIHJlc3VsdDogQXJyYXk8Rm9ybUNvbnRyb2w+KTogdm9pZCB7XG5cdFx0Zm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtR3JvdXBDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcblx0XHRcdFx0dGhpcy5hZGRGb3JtQXJyYXlDb250cm9scyh2YWx1ZSwgcmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuXHRcdFx0XHR0aGlzLmFkZEZvcm1Db250cm9sKHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRBbGxGb3JtQ29udHJvbHMoKTogQXJyYXk8Rm9ybUNvbnRyb2w+IHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHR0aGlzLmFkZEZvcm1Hcm91cENvbnRyb2xzKHRoaXMuZm9ybUdyb3VwLCByZXN1bHQpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGFkZEZvcm1Db250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sLCByZXN1bHQ6IEFycmF5PEZvcm1Db250cm9sPik6IHZvaWQge1xuXHRcdHJlc3VsdC5wdXNoKGNvbnRyb2wpO1xuXHR9XG5cblx0cHJpdmF0ZSBkaXNhYmxlSW5hY3RpdmVGb3JtQ29udHJvbChjb250cm9sOiBGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5hY3RpdmVDb250cm9scy5zb21lKChlKSA9PiBlLmZvcm1Db250cm9sID09PSBjb250cm9sKSkge1xuXHRcdFx0Y29udHJvbC5kaXNhYmxlKCk7XG5cdFx0fVxuXHR9XG5cblx0dHJ5U3VibWl0KCk6IFByb21pc2U8YW55PiB7XG5cdFx0dGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuXHRcdGNvbnN0IGFsbENvbnRyb2xzOiBBcnJheTxGb3JtQ29udHJvbD4gPSB0aGlzLmdldEFsbEZvcm1Db250cm9scygpO1xuXHRcdGNvbnN0IG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMgPSBhbGxDb250cm9scy5tYXAoZSA9PiB7XG5cdFx0XHRyZXR1cm4ge2NvbnRyb2w6IGUsIGRpc2FibGVkOiBlLmRpc2FibGVkfTtcblx0XHR9KTtcblx0XHRhbGxDb250cm9scy5mb3JFYWNoKGUgPT4gdGhpcy5kaXNhYmxlSW5hY3RpdmVGb3JtQ29udHJvbChlKSk7XG5cdFx0YWxsQ29udHJvbHMuZm9yRWFjaChlID0+IGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKTtcblx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcblx0XHRpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3RpdmVDb250cm9scy5maW5kKChlKSA9PiAhZS5mb3JtQ29udHJvbC52YWxpZCk/LmZvcm1FbGVtZW50Py5zY3JvbGxUbygpO1xuXHRcdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlc0ZvckFsbENvbnRyb2xzKG9yaWdpbmFsRGlzYWJsZWRTdGF0ZXMpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGludmFsaWRGaWVsZHNTeW1ib2wpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0RGlzYWJsZWRTdGF0ZXNGb3JBbGxDb250cm9scyhvcmlnaW5hbERpc2FibGVkU3RhdGVzOiBBcnJheTx7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRvcmlnaW5hbERpc2FibGVkU3RhdGVzLmZvckVhY2goKGUpID0+IHtcblx0XHRcdGlmIChlLmRpc2FibGVkKSB7XG5cdFx0XHRcdGUuY29udHJvbC5kaXNhYmxlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmNvbnRyb2wuZW5hYmxlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -70,19 +70,13 @@ class FormComponent {
|
|
|
70
70
|
if (typeof injectAt !== 'number') {
|
|
71
71
|
throw new Error(`cannot index FormArray with ${typeof injectAt}`);
|
|
72
72
|
}
|
|
73
|
-
|
|
74
|
-
setTimeout(() => {
|
|
75
|
-
injectInto.setControl(injectAt, this.formGroup);
|
|
76
|
-
});
|
|
73
|
+
injectInto.setControl(injectAt, this.formGroup);
|
|
77
74
|
}
|
|
78
75
|
else if (injectInto instanceof FormGroup) {
|
|
79
76
|
if (typeof injectAt !== 'string') {
|
|
80
77
|
throw new Error(`cannot index FormGroup with ${typeof injectAt}`);
|
|
81
78
|
}
|
|
82
|
-
|
|
83
|
-
setTimeout(() => {
|
|
84
|
-
injectInto.setControl(injectAt, this.formGroup);
|
|
85
|
-
});
|
|
79
|
+
injectInto.setControl(injectAt, this.formGroup);
|
|
86
80
|
}
|
|
87
81
|
}
|
|
88
82
|
if (isValueSet(this.patchValueInterceptor)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"klippa-ngx-enhancy-forms.js","sources":["../../../../projects/klippa/ngx-enhancy-forms/src/lib/util/values.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-element/form-element.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/value-accessor-base/value-accessor-base.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/button/button.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/checkbox/checkbox.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/email/email-input.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/loading-indicator/loading-indicator.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/number-input/number-input.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/password-field/password-field.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/select/select.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/select/select-footer/select-footer.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/sortable-items/sortable-items.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/text-input/text-input.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/toggle/toggle.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-caption/form-caption.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-error/form-error.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-submit-button/form-submit-button.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/value-accessor-base/multiple-value-accessor-base.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/validators/dateValidator.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/date-picker/date-picker.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/date-time-picker/date-time-picker.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/material.module.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/ngx-enhancy-forms.module.ts","../../../../projects/klippa/ngx-enhancy-forms/src/public-api.ts","../../../../projects/klippa/ngx-enhancy-forms/src/klippa-ngx-enhancy-forms.ts"],"sourcesContent":["import { isString } from 'lodash';\n\nexport function stringIsSetAndFilled(s: string) {\n\treturn isString(s) && s.length > 0;\n}\n\nexport function isNullOrUndefined(value: any) {\n\treturn value === null || value === undefined;\n}\n\nexport function numberIsSet(value: any) {\n\treturn isValueSet(value) && typeof value === 'number';\n}\n\nexport function isValueSet(value: any) {\n\treturn value !== null && value !== undefined;\n}\n\nexport function removeDuplicatesFromArray(array: Array<any>) {\n\treturn array.filter((c, i) => {\n\t\tconst firstOccurrenceIndex = array.findIndex((c2) => c2 === c);\n\t\treturn i === firstOccurrenceIndex;\n\t});\n}\n\nexport function stringOrArrayIsSetAndEmpty(value: any[] | string) {\n\treturn value !== null && value !== undefined && value.length === 0;\n}\n\nexport function truncateString(s: string, length: number) {\n\tif (s.length < length) {\n\t\treturn s;\n\t}\n\treturn s.substring(0, length) + '...';\n}\n\nexport function arrayIsSetAndFilled(arr: Array<any>) {\n\treturn arr !== null && arr !== undefined && arr.length > 0;\n}\n","import {Component, Directive, Input, OnDestroy, OnInit, Optional, SkipSelf} from '@angular/core';\nimport {AbstractControl, FormArray, FormControl, FormGroup, FormGroupName} from '@angular/forms';\nimport {FormElementComponent} from './form-element/form-element.component';\nimport {isValueSet} from '../util/values';\n\nexport const invalidFieldsSymbol = Symbol('Not all fields are valid');\n\n@Directive({\n\t// tslint:disable-next-line:directive-selector\n\tselector: 'klp-sub-form',\n})\nexport class SubFormDirective {\n\t@Input() injectInto: FormArray | FormGroup;\n\t@Input() at: number | string;\n}\n\n@Component({\n\tselector: 'klp-form',\n\ttemplateUrl: './form.component.html',\n\tstyleUrls: ['./form.component.scss'],\n})\nexport class FormComponent implements OnInit, OnDestroy {\n\t@Input() public formGroup: FormGroup;\n\t@Input() public patchValueInterceptor: (values: any) => Promise<any>;\n\n\t// we keep track of what form controls are actually rendered. Only those count when looking at form validation\n\tprivate activeControls: Array<{\n\t\tformControl: FormControl;\n\t\tformElement: FormElementComponent;\n\t}> = [];\n\n\tconstructor(@SkipSelf() @Optional() private parent: FormComponent, @Optional() private subFormPlaceholder: SubFormDirective) {\n\t}\n\n\tngOnInit(): void {\n\t\tif (isValueSet(this.parent) && isValueSet(this.subFormPlaceholder)) {\n\t\t\tconst injectInto = this.subFormPlaceholder.injectInto;\n\t\t\tconst injectAt = this.subFormPlaceholder.at;\n\t\t\tif (injectInto instanceof FormArray) {\n\t\t\t\tif (typeof injectAt !== 'number') {\n\t\t\t\t\tthrow new Error(`cannot index FormArray with ${typeof injectAt}`);\n\t\t\t\t}\n\n\t\t\t\t// do this next cycle to avoid 'ExpressionChangedAfterItHasBeenCheckedError'\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tinjectInto.setControl(injectAt, this.formGroup);\n\t\t\t\t});\n\t\t\t} else if (injectInto instanceof FormGroup) {\n\t\t\t\tif (typeof injectAt !== 'string') {\n\t\t\t\t\tthrow new Error(`cannot index FormGroup with ${typeof injectAt}`);\n\t\t\t\t}\n\n\t\t\t\t// do this next cycle to avoid 'ExpressionChangedAfterItHasBeenCheckedError'\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tinjectInto.setControl(injectAt, this.formGroup);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (isValueSet(this.patchValueInterceptor)) {\n\t\t\tthis.addSupportForPatchValueInterceptor();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (isValueSet(this.parent) && isValueSet(this.subFormPlaceholder)) {\n\t\t\tconst injectInto = this.subFormPlaceholder.injectInto;\n\t\t\tconst injectAt = this.subFormPlaceholder.at;\n\t\t\tif (injectInto instanceof FormArray) {\n\t\t\t\tconst idx = injectInto.controls.findIndex(e => e === this.formGroup);\n\t\t\t\tinjectInto.removeAt(idx);\n\t\t\t} else if (injectInto instanceof FormGroup) {\n\t\t\t\tif (typeof injectAt !== 'string') {\n\t\t\t\t\tthrow new Error(`cannot index FormGroup with ${typeof injectAt}`);\n\t\t\t\t}\n\t\t\t\tinjectInto.removeControl(injectAt);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addSupportForPatchValueInterceptor(): void {\n\t\tconst fn = this.formGroup.patchValue;\n\t\tconst newFn = (\n\t\t\tvalue: {\n\t\t\t\t[key: string]: any;\n\t\t\t},\n\t\t\toptions?: {\n\t\t\t\tonlySelf?: boolean;\n\t\t\t\temitEvent?: boolean;\n\t\t\t}\n\t\t): void => {\n\t\t\tthis.patchValueInterceptor(value).then((val) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tfn.call(this.formGroup, val, options);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t\tthis.formGroup.patchValue = newFn;\n\t}\n\n\tpublic registerControl(formControl: FormControl, formElement: FormElementComponent): void {\n\t\tthis.activeControls.push({formControl, formElement});\n\t\tif (this.parent) {\n\t\t\tthis.parent.registerControl(formControl, formElement);\n\t\t}\n\t}\n\n\tpublic unregisterControl(formControl: FormControl): void {\n\t\tthis.activeControls = this.activeControls.filter((e) => e.formControl !== formControl);\n\t\tif (this.parent) {\n\t\t\tthis.parent.unregisterControl(formControl);\n\t\t}\n\t}\n\n\tprivate addFormGroupControls(formGroup: FormGroup, result: Array<FormControl>): void {\n\t\tObject.values(formGroup.controls).forEach((value) => {\n\t\t\tif (value instanceof FormGroup) {\n\t\t\t\tthis.addFormGroupControls(value, result);\n\t\t\t} else if (value instanceof FormArray) {\n\t\t\t\tthis.addFormArrayControls(value, result);\n\t\t\t} else if (value instanceof FormControl) {\n\t\t\t\tthis.addFormControl(value, result);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate addFormArrayControls(formArray: FormArray, result: Array<FormControl>): void {\n\t\tformArray.controls.forEach((value) => {\n\t\t\tif (value instanceof FormGroup) {\n\t\t\t\tthis.addFormGroupControls(value, result);\n\t\t\t} else if (value instanceof FormArray) {\n\t\t\t\tthis.addFormArrayControls(value, result);\n\t\t\t} else if (value instanceof FormControl) {\n\t\t\t\tthis.addFormControl(value, result);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getAllFormControls(): Array<FormControl> {\n\t\tconst result = [];\n\t\tthis.addFormGroupControls(this.formGroup, result);\n\t\treturn result;\n\t}\n\n\tprivate addFormControl(control: FormControl, result: Array<FormControl>): void {\n\t\tresult.push(control);\n\t}\n\n\tprivate disableInactiveFormControl(control: FormControl): void {\n\t\tif (!this.activeControls.some((e) => e.formControl === control)) {\n\t\t\tcontrol.disable();\n\t\t}\n\t}\n\n\ttrySubmit(): Promise<any> {\n\t\tthis.formGroup.markAllAsTouched();\n\t\tconst allControls: Array<FormControl> = this.getAllFormControls();\n\t\tconst originalDisabledStates = allControls.map(e => {\n\t\t\treturn {control: e, disabled: e.disabled};\n\t\t});\n\t\tallControls.forEach(e => this.disableInactiveFormControl(e));\n\t\tallControls.forEach(e => e.updateValueAndValidity());\n\t\tconst values = this.formGroup.value;\n\t\tif (this.formGroup.valid) {\n\t\t\tthis.setDisabledStatesForAllControls(originalDisabledStates);\n\t\t\treturn Promise.resolve(values);\n\t\t} else {\n\t\t\tthis.activeControls.find((e) => !e.formControl.valid)?.formElement?.scrollTo();\n\t\t\tthis.setDisabledStatesForAllControls(originalDisabledStates);\n\t\t\treturn Promise.reject(invalidFieldsSymbol);\n\t\t}\n\t}\n\n\tprivate setDisabledStatesForAllControls(originalDisabledStates: Array<{ control: AbstractControl; disabled: boolean }>): void {\n\t\toriginalDisabledStates.forEach((e) => {\n\t\t\tif (e.disabled) {\n\t\t\t\te.control.disable();\n\t\t\t} else {\n\t\t\t\te.control.enable();\n\t\t\t}\n\t\t});\n\t}\n}\n","import {Component, ElementRef, Host, Inject, InjectionToken, Input, OnInit, Optional, ViewChild} from '@angular/core';\nimport {AbstractControl, FormControl} from '@angular/forms';\nimport {FormComponent} from '../form.component';\nimport {CustomErrorMessages, FormErrorMessages} from '../../types';\nimport { ValueAccessorBase } from '../../elements/value-accessor-base/value-accessor-base.component';\nimport { isValueSet } from '../../util/values';\n\nexport const FORM_ERROR_MESSAGES = new InjectionToken<CustomErrorMessages>('form.error.messages');\n\nexport const DEFAULT_ERROR_MESSAGES: FormErrorMessages = {\n\tmin: 'Use a number larger than %min%',\n\tmax: 'Use a number smaller than %max%',\n\trequired: 'This field is required',\n\temail: 'Use a valid email address',\n\tminLength: 'Has to be longer than %minLength% character(s)',\n\tmaxLength: 'Has to be shorter than %maxLength% character(s)',\n\tpattern: 'This input is not valid',\n\tmatchPassword: 'Passwords must match',\n\tdate: 'Enter a valid date',\n};\n\n@Component({\n\tselector: 'klp-form-element',\n\ttemplateUrl: './form-element.component.html',\n\tstyleUrls: ['./form-element.component.scss'],\n})\nexport class FormElementComponent {\n\tpublic attachedControl: AbstractControl;\n\t@Input() public caption: string;\n\t@Input() public direction: 'horizontal' | 'vertical' = 'horizontal';\n\t@Input() public captionSpacing: 'percentages' | 'none' = 'percentages';\n\t@Input() public spaceDistribution: '40-60' | '30-70' = '40-60';\n\t@Input() public swapInputAndCaption: boolean = false;\n\t@ViewChild('internalComponentRef') public internalComponentRef: ElementRef;\n\n\tpublic captionRef: ElementRef;\n\tpublic errorMessages: FormErrorMessages = DEFAULT_ERROR_MESSAGES;\n\tpublic customErrorHandlers: Array<{ error: string; templateRef: ElementRef }> = [];\n\tprivate input: ValueAccessorBase<any>;\n\n\tconstructor(\n\t\t@Host() @Optional() private parent: FormComponent,\n\t\t@Inject(FORM_ERROR_MESSAGES) @Optional() private customMessages: CustomErrorMessages\n\t) {\n\t}\n\n\tpublic substituteParameters(message: string, parameters: Record<string, any>): string {\n\t\treturn Object.keys(parameters).reduce((msg, key) => {\n\t\t\treturn msg.replace(`%${key}%`, parameters[key]);\n\t\t}, message);\n\t}\n\n\tpublic registerControl(formControl: FormControl, input: ValueAccessorBase<any> = null): void {\n\t\tthis.attachedControl = formControl;\n\t\tthis.parent.registerControl(formControl, this);\n\t\tthis.input = input;\n\t}\n\n\tpublic unregisterControl(formControl: FormControl): void {\n\t\tthis.attachedControl = null;\n\t\tthis.parent.unregisterControl(formControl);\n\t}\n\n\tpublic getAttachedControl(): AbstractControl {\n\t\treturn this.attachedControl;\n\t}\n\n\tpublic registerErrorHandler(error: string, templateRef: ElementRef): void {\n\t\tthis.customErrorHandlers.push({error, templateRef});\n\t}\n\n\tpublic registerCaption(templateRef: ElementRef): void {\n\t\tthis.captionRef = templateRef;\n\t}\n\n\tgetErrorToShow(): string {\n\t\tif (this.attachedControl?.touched === true && this.attachedControl?.errors) {\n\t\t\treturn Object.keys(this.attachedControl?.errors)[0];\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetCustomErrorHandler(error: string): { error: string; templateRef: ElementRef } {\n\t\treturn this.customErrorHandlers.find((e) => e.error === error);\n\t}\n\n\tshowDefaultError(error: string): boolean {\n\t\treturn this.getErrorToShow() === error && !this.customErrorHandlers.some((e) => e.error === error);\n\t}\n\n\tgetScrollableParent(node): any {\n\t\tif (node == null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (node.scrollHeight > node.clientHeight) {\n\t\t\treturn node;\n\t\t} else {\n\t\t\treturn this.getScrollableParent(node.parentNode);\n\t\t}\n\t}\n\n\tscrollTo(): void{\n\t\tthis.internalComponentRef.nativeElement.scrollIntoView(true);\n\t\t// to give some breathing room, we scroll 100px more to the top\n\t\tthis.getScrollableParent(this.internalComponentRef.nativeElement)?.scrollBy(0, -100);\n\t}\n\n\tisRequired(): boolean {\n\t\tif (isValueSet(this.input)) {\n\t\t\treturn this.input.hasValidator('required');\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetErrorMessage(key: keyof FormErrorMessages): string {\n\t\treturn this.customMessages?.[key]?.() ?? this.errorMessages[key];\n\t}\n}\n","import { ControlContainer, ControlValueAccessor, FormControl } from '@angular/forms';\nimport {Component, EventEmitter, Host, Input, OnDestroy, OnInit, Optional, Output} from '@angular/core';\nimport { FormElementComponent } from '../../form/form-element/form-element.component';\nimport {arrayIsSetAndFilled, isNullOrUndefined, isValueSet, stringIsSetAndFilled} from '../../util/values';\n\n/**\n * This component is a base in order to create a component that supports ngModel.\n * Some important things to know about it:\n *\n * innerValue = your own inner state, which you should use to store the current state of what ngModel should be.\n * writeValue() = called by angular, when ngModel is changed from OUTSIDE of the component. Feel free to patch this method if you need inner logic to happen when ngModel is altered from the outside. Always remember to also call the super.writeValue if you do!\n * setInnerValueAndNotify() = call this when you want your ngModel to be updated from INSIDE of your component, and provide it to the OUTSIDE.\n * ngOnInit() = Used to support the angular reactive forms framework. If you use ngOnInit in your own component (which happens fairly often) you must not forget to call the super.ngOnInit() method.\n */\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n})\nexport class ValueAccessorBase<T> implements ControlValueAccessor, OnInit, OnDestroy {\n\tpublic innerValue: T;\n\tpublic changed = new Array<(value: T) => void>();\n\tprivate touched = new Array<() => void>();\n\n\t@Input() public disabled = false;\n\t// we support both providing just the formControlName and the full formControl\n\t@Input() public formControlName: string = null;\n\t@Input() public formControl: FormControl = null;\n\t@Output() public onTouch = new EventEmitter<void>();\n\n\tprivate attachedFormControl: FormControl;\n\tprivate validators: Array<string> = [];\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer\n\t) {}\n\n\tngOnInit(): void {\n\t\tif (this.formControl) {\n\t\t\tthis.attachedFormControl = this.formControl;\n\t\t} else if (stringIsSetAndFilled(this.formControlName)) {\n\t\t\tthis.attachedFormControl = this.controlContainer?.control.get(this.formControlName) as FormControl;\n\t\t\tif (isNullOrUndefined(this.attachedFormControl)) {\n\t\t\t\tthrow new Error(`Form element '${this.formControlName}' with caption '${this.parent?.caption}' is not declared in your FormGroup.`);\n\t\t\t}\n\t\t}\n\t\tif (this.attachedFormControl) {\n\t\t\tthis.disabled = this.attachedFormControl.disabled;\n\t\t\tthis.attachedFormControl.statusChanges.subscribe(() => {\n\t\t\t\tthis.disabled = this.attachedFormControl.disabled;\n\t\t\t});\n\t\t\tthis.parent?.registerControl(this.attachedFormControl, this);\n\t\t\tif (this.attachedFormControl?.validator) {\n\t\t\t\tconst vals = this.attachedFormControl.validator({} as any);\n\t\t\t\tif (isValueSet(vals)) {\n\t\t\t\t\tthis.validators = Object.keys(vals);\n\t\t\t\t} else {\n\t\t\t\t\tthis.validators = [];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tisInErrorState(): boolean {\n\t\treturn this.attachedFormControl && this.attachedFormControl.status === 'INVALID' && this.attachedFormControl.touched;\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (this.attachedFormControl) {\n\t\t\tthis.parent?.unregisterControl(this.attachedFormControl);\n\t\t}\n\t}\n\n\ttouch(): void {\n\t\tthis.touched.forEach((f) => f());\n\t}\n\n\twriteValue(value: T): void {\n\t\tthis.innerValue = value;\n\t}\n\n\tregisterOnChange(fn: (value: T) => void): void {\n\t\tthis.changed.push(fn);\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.touched.push(fn);\n\t}\n\n\tsetInnerValueAndNotify(value): void {\n\t\tthis.innerValue = value;\n\t\tthis.changed.forEach((fn) => fn(value));\n\t}\n\n\tresetToNull(): void {\n\t\tthis.setInnerValueAndNotify(null);\n\t}\n\n\thasValidator(validatorName: string): boolean {\n\t\tif (arrayIsSetAndFilled(this.validators)) {\n\t\t\treturn this.validators.includes(validatorName);\n\t\t}\n\t\treturn false;\n\t}\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n\tselector: 'klp-form-button',\n\ttemplateUrl: './button.component.html',\n\tstyleUrls: ['./button.component.scss'],\n})\nexport class ButtonComponent {\n\t@Input() variant:\n\t\t| 'white'\n\t\t| 'greenFilled'\n\t\t| 'greenOutlined'\n\t\t| 'greenLink'\n\t\t| 'contextMenuItem'\n\t\t| 'redFilled'\n\t\t| 'redOutlined'\n\t\t| 'orangeFilled' = 'white';\n\t@Input() size: 'small' | 'medium' | 'large' = 'medium';\n\t@Input() fullWidth = false;\n\t@Input() hasBorder = true;\n\t@Input() disabled = false;\n\t@Input() isLoading = false;\n\t@Input() type: 'button' | 'submit' = 'button';\n\n\t@HostBinding('class._fullWidth') get _() {\n\t\treturn this.fullWidth;\n\t}\n\n\tonClick(event: Event) {\n\t\tif (this.disabled) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t}\n}\n","import { Component, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-checkbox',\n\ttemplateUrl: './checkbox.component.html',\n\tstyleUrls: ['./checkbox.component.scss'],\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true }],\n})\nexport class CheckboxComponent extends ValueAccessorBase<boolean> {\n\t@Input() caption: string;\n\t@Input() disabled: boolean;\n}\n","import {Component, Input} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-email-input',\n\ttemplateUrl: './email-input.component.html',\n\tstyleUrls: ['./email-input.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: EmailInputComponent, multi: true}],\n})\nexport class EmailInputComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder = '';\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n\tselector: 'klp-form-loading-indicator',\n\ttemplateUrl: './loading-indicator.component.html',\n\tstyleUrls: ['./loading-indicator.component.scss'],\n})\nexport class LoadingIndicatorComponent {\n\t@Input() public variant: '3dots' | 'spinner' | 'textInput' | 'picker' = '3dots';\n\t@Input() public size: 'tiny' | 'small' | 'medium' | 'large' | 'huge' = 'medium';\n}\n","import { Component, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {ValueAccessorBase} from \"../value-accessor-base/value-accessor-base.component\";\n\n@Component({\n\tselector: 'klp-form-number-input',\n\ttemplateUrl: './number-input.component.html',\n\tstyleUrls: ['./number-input.component.scss'],\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: NumberInputComponent, multi: true }],\n})\nexport class NumberInputComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder: string;\n}\n","import {Component, Input} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-password-field',\n\ttemplateUrl: './password-field.component.html',\n\tstyleUrls: ['./password-field.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: PasswordFieldComponent, multi: true}],\n})\nexport class PasswordFieldComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder = 'Password';\n\t@Input() isPasswordConfirm = false;\n}\n","import {Component, EventEmitter, Host, Inject, InjectionToken, Input, Optional, Output, TemplateRef} from '@angular/core';\nimport {ControlContainer, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\nimport {format as formatDate} from 'date-fns';\nimport {DATE_TIME_PICKER_TRANSLATIONS} from '../date-time-picker/date-time-picker.component';\nimport {isValueSet, stringIsSetAndFilled} from '../../util/values';\n\nexport type AppSelectOptions = Array<{\n\tid: any;\n\tname: string;\n\tdescription?: string;\n\tdisabled?: boolean;\n}>;\n\nexport const SELECT_TRANSLATIONS = new InjectionToken<any>('klp.form.select.translations');\n\n@Component({\n\tselector: 'klp-form-select',\n\ttemplateUrl: './select.component.html',\n\tstyleUrls: ['./select.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true}],\n})\nexport class SelectComponent extends ValueAccessorBase<string | string[]> {\n\t@Input() placeholder: string;\n\t@Input() options: AppSelectOptions;\n\t@Input() multiple = false;\n\t@Input() multipleDisplayedAsAmount = false;\n\t@Input() clearable = true;\n\t@Input() public dropdownPosition: string;\n\t@Input() public customSearchFn: (term: string, item: { id: string; name: string; description: string }) => boolean;\n\t@Input() public footerElement: TemplateRef<any>;\n\t@Output() public onSearch = new EventEmitter<string>();\n\tpublic currentQueryString: string;\n\n\tconstructor(\n\t\t@Optional() @Host() protected parent: FormElementComponent,\n\t\t@Optional() @Host() protected controlContainer: ControlContainer,\n\t\t@Inject(SELECT_TRANSLATIONS) @Optional() private translations: any,\n\t) {\n\t\tsuper(parent, controlContainer);\n\t}\n\n\tonTextInput(value: string): void {\n\t\tthis.currentQueryString = value;\n\t\tthis.onSearch.emit(value);\n\t}\n\n\tgetDefaultTranslation(key: string): (x: any) => string {\n\t\tswitch (key) {\n\t\t\tcase 'placeholder':\n\t\t\t\treturn () => 'Pick an option';\n\t\t\tcase 'amountSelected':\n\t\t\t\treturn (amount) => `${amount} selected`;\n\t\t}\n\t}\n\n\tgetTranslation(key: string, params: any = null): string {\n\t\tif (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {\n\t\t\treturn this.placeholder;\n\t\t}\n\t\treturn this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);\n\t}\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n\tselector: 'klp-select-footer',\n\ttemplateUrl: './select-footer.component.html',\n\tstyleUrls: ['./select-footer.component.scss'],\n})\nexport class SelectFooterComponent {\n\t@Input() public prefix: string;\n\t@Input() public text: string;\n}\n","import {Component, ContentChild, Input, OnInit, TemplateRef} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Options} from 'sortablejs';\nimport {isValueSet} from '../../util/values';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-sortable-items',\n\ttemplateUrl: './sortable-items.component.html',\n\tstyleUrls: ['./sortable-items.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: SortableItemsComponent, multi: true}],\n})\nexport class SortableItemsComponent extends ValueAccessorBase<Array<any>> implements OnInit {\n\t@ContentChild(TemplateRef) template;\n\t@Input() sortableItemSize: 'sm' | 'lg' = 'lg';\n\t@Input() useCustomScroll = false;\n\n\tpublic sortablejsOptions: Options;\n\tprivate scrollInterval: number = null;\n\n\tngOnInit(): void {\n\t\tsuper.ngOnInit();\n\t\tif (this.useCustomScroll) {\n\t\t\tthis.sortablejsOptions = {onUpdate: this.itemsOrderChanged, onMove: this.onItemDrag, onEnd: this.onEnd};\n\t\t} else {\n\t\t\tthis.sortablejsOptions = {onUpdate: this.itemsOrderChanged};\n\t\t}\n\t}\n\n\titemsOrderChanged = () => {\n\t\tthis.setInnerValueAndNotify(this.innerValue);\n\t};\n\n\tonItemDrag = (data) => {\n\t\t// if the item you're dragging is reaching the top, start scrolling.\n\t\tif (data.relatedRect.top < 100) {\n\t\t\tthis.scrollPage(100);\n\t\t} else {\n\t\t\tthis.stopScrolling();\n\t\t}\n\t};\n\n\tonEnd = () => {\n\t\tthis.stopScrolling();\n\t};\n\n\tprivate scrollPage(scrollAmount: number): void {\n\t\tif (!isValueSet(this.scrollInterval)) {\n\t\t\tthis.scrollInterval = setInterval(() => {\n\t\t\t\twindow.scroll({\n\t\t\t\t\ttop: document.scrollingElement.scrollTop - scrollAmount,\n\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t});\n\t\t\t\tif (document.scrollingElement.scrollTop <= 100) {\n\t\t\t\t\tthis.stopScrolling();\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t}\n\t}\n\n\tprivate stopScrolling(): void {\n\t\tclearInterval(this.scrollInterval);\n\t\tthis.scrollInterval = null;\n\t}\n}\n","import { Component, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {ValueAccessorBase} from \"../value-accessor-base/value-accessor-base.component\";\n\n@Component({\n\tselector: 'klp-form-text-input',\n\ttemplateUrl: './text-input.component.html',\n\tstyleUrls: ['./text-input.component.scss'],\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: TextInputComponent, multi: true }],\n})\nexport class TextInputComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder: string;\n\t@Input() type: 'text' | 'password' = 'text';\n\t@Input() clearable = false;\n\t@Input() icon: 'search';\n}\n","import {Component, Input} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-toggle',\n\ttemplateUrl: './toggle.component.html',\n\tstyleUrls: ['./toggle.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true}],\n})\nexport class ToggleComponent extends ValueAccessorBase<boolean> {\n}\n","import { Component, ElementRef, Host, OnInit, Optional, ViewChild } from '@angular/core';\nimport {FormElementComponent} from \"../form-element/form-element.component\";\nimport {isNullOrUndefined} from \"../../util/values\";\n\n@Component({\n\tselector: 'klp-form-caption',\n\ttemplateUrl: './form-caption.component.html',\n\tstyleUrls: ['./form-caption.component.scss'],\n})\nexport class FormCaptionComponent implements OnInit {\n\t@ViewChild('contentRef') public contentRef: ElementRef;\n\n\tconstructor(@Host() @Optional() private parent: FormElementComponent) {}\n\n\tngOnInit(): void {\n\t\t// this is being run next cycle, because we dont want to fail if the order of components is as follows:\n\t\t// <app-form-error />\n\t\t// <some-input />\n\t\t// That would fail, because the logic of the form error is run first, and at that moment, the `some-input` isnt registered yet\n\t\tsetTimeout(() => {\n\t\t\tconst attachedControl = this.parent.getAttachedControl();\n\t\t\tthis.parent.registerCaption(this.contentRef);\n\t\t\tif (isNullOrUndefined(attachedControl)) {\n\t\t\t\tthrow new Error('You added a Form Caption component without an attached Form Control');\n\t\t\t}\n\t\t});\n\t}\n}\n","import { Component, ElementRef, Host, Input, OnInit, Optional, ViewChild } from '@angular/core';\nimport {FormElementComponent} from \"../form-element/form-element.component\";\nimport {isNullOrUndefined} from \"../../util/values\";\nimport {ErrorTypes} from \"../../types\";\n\n@Component({\n\tselector: 'klp-form-error',\n\ttemplateUrl: './form-error.component.html',\n\tstyleUrls: ['./form-error.component.scss'],\n})\nexport class FormErrorComponent implements OnInit {\n\t@Input() error: ErrorTypes;\n\tpublic showError = false;\n\t@ViewChild('contentRef') public contentRef: ElementRef;\n\tconstructor(@Host() @Optional() private parent: FormElementComponent) {}\n\n\tngOnInit(): void {\n\t\t// this is being run next cycle, because we dont want to fail if the order of components is as follows:\n\t\t// <app-form-error />\n\t\t// <some-input />\n\t\t// That would fail, because the logic of the form error is run first, and at that moment, the `some-input` isnt registered yet\n\t\tsetTimeout(() => {\n\t\t\tconst attachedControl = this.parent.getAttachedControl();\n\t\t\tthis.parent.registerErrorHandler(this.error, this.contentRef);\n\t\t\tif (isNullOrUndefined(attachedControl)) {\n\t\t\t\tthrow new Error('You added a Form Error component without an attached Form Control');\n\t\t\t}\n\t\t});\n\t}\n}\n","import { Component, Host, HostBinding, Input, Optional } from '@angular/core';\nimport {FormComponent, invalidFieldsSymbol} from \"../form.component\";\nimport {isNullOrUndefined} from \"../../util/values\";\n\n@Component({\n\tselector: 'klp-form-submit-button',\n\ttemplateUrl: './form-submit-button.component.html',\n\tstyleUrls: ['./form-submit-button.component.scss'],\n})\nexport class FormSubmitButtonComponent {\n\t@Input() public isLoading = false;\n\t@Input() fullWidth = false;\n\t@Input() variant: 'greenFilled' | 'redFilled' = 'greenFilled';\n\t@Input() public submitCallback: (any) => Promise<void>;\n\n\t@HostBinding('class._fullWidth') get _() {\n\t\treturn this.fullWidth;\n\t}\n\n\tconstructor(@Host() @Optional() private parentForm: FormComponent) {}\n\n\tsubmitForm() {\n\t\tthis.parentForm\n\t\t\t.trySubmit()\n\t\t\t.then((value) => {\n\t\t\t\tthis.isLoading = true;\n\t\t\t\tconst submitCallbackResult = this.submitCallback(value);\n\t\t\t\tif (isNullOrUndefined(submitCallbackResult)) {\n\t\t\t\t\tthrow new Error('No promise is returned in your submit function.');\n\t\t\t\t}\n\t\t\t\treturn submitCallbackResult.then(() => (this.isLoading = false)).catch((e) => {\n\t\t\t\t\tthis.isLoading = false\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\tif (e === invalidFieldsSymbol) {\n\t\t\t\t\treturn // swallow the error, the framework will scroll to the field that needs attention\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t});\n\t}\n}\n","import {Component, Host, Input, Optional} from '@angular/core';\nimport {ControlContainer} from '@angular/forms';\nimport {ValueAccessorBase} from './value-accessor-base.component';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\nimport {isValueSet} from '../../util/values';\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n})\nexport class MultipleValueAccessorBase<T> extends ValueAccessorBase<Array<T> | T> {\n\t@Input() multiple = false;\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer\n\t) {\n\t\tsuper(parent, controlContainer);\n\t}\n\n\twriteValue(value: Array<T> | T): void {\n\t\tif (this.multiple) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.writeValue(value.filter(isValueSet));\n\t\t\t} else {\n\t\t\t\tsuper.writeValue([value].filter(isValueSet));\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.writeValue(value[0]);\n\t\t\t} else {\n\t\t\t\tsuper.writeValue(value);\n\t\t\t}\n\t\t}\n\t}\n\n\tsetInnerValueAndNotify(value: T | Array<T>): void {\n\t\tif (this.multiple) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.setInnerValueAndNotify(value.filter(isValueSet));\n\t\t\t} else {\n\t\t\t\tsuper.setInnerValueAndNotify([value].filter(isValueSet));\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.setInnerValueAndNotify(value[0]);\n\t\t\t} else {\n\t\t\t\tsuper.setInnerValueAndNotify(value);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport const invalidDateKey = '--invalid_date--';\n\nexport function dateValidator(control: AbstractControl): ValidationErrors | null {\n\tconst invalid = control.value === invalidDateKey;\n\treturn invalid ? { date: control.value } : null;\n}\n","import {Component, Host, Inject, InjectionToken, Input, Optional} from '@angular/core';\nimport {ControlContainer, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {format as dateFormat, parse} from 'date-fns';\nimport {MultipleValueAccessorBase} from '../value-accessor-base/multiple-value-accessor-base.component';\nimport {invalidDateKey} from '../../validators/dateValidator';\nimport {isNullOrUndefined, isValueSet, stringIsSetAndFilled} from '../../util/values';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\n\nexport const DATE_PICKER_TRANSLATIONS = new InjectionToken<any>('klp.form.date.translations');\n\n@Component({\n\tselector: 'klp-form-date-picker',\n\ttemplateUrl: './date-picker.component.html',\n\tstyleUrls: ['./date-picker.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true}],\n})\nexport class DatePickerComponent extends MultipleValueAccessorBase<string | typeof invalidDateKey> {\n\t@Input() public minDate: Date = undefined;\n\t@Input() public maxDate: Date = undefined;\n\t@Input() public sameMonthOnly = false;\n\t@Input() public format = 'dd-MM-yyyy';\n\t@Input() public placeholder: string;\n\t@Input() public clearable = false;\n\n\tpublic dateValue: Date | Array<Date>;\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer,\n\t\t@Inject(DATE_PICKER_TRANSLATIONS) @Optional() private translations: any,\n\t) {\n\t\tsuper(parent, controlContainer);\n\t}\n\n\twriteValue(value: string | Array<string> | typeof invalidDateKey): void {\n\t\tif (value === invalidDateKey) {\n\t\t\tsuper.writeValue(invalidDateKey);\n\t\t} else if (isNullOrUndefined(value)) {\n\t\t\tthis.dateValue = null;\n\t\t\tsuper.writeValue(null);\n\t\t} else {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tthis.dateValue = value.map((e) => parse(e, 'yyyy-MM-dd', new Date()));\n\t\t\t} else {\n\t\t\t\tthis.dateValue = parse(value, 'yyyy-MM-dd', new Date());\n\t\t\t}\n\t\t\tsuper.writeValue(value);\n\t\t}\n\t}\n\n\tdateChanged(value: Date | Array<Date> | typeof invalidDateKey): void {\n\t\tif (value === invalidDateKey) {\n\t\t\tthis.setInnerValueAndNotify(invalidDateKey);\n\t\t} else if (isNullOrUndefined(value)) {\n\t\t\tthis.dateValue = null;\n\t\t\tthis.setInnerValueAndNotify(null);\n\t\t} else {\n\t\t\tthis.dateValue = value;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tthis.setInnerValueAndNotify(value.map((e) => dateFormat(e, 'yyyy-MM-dd')));\n\t\t\t} else {\n\t\t\t\tthis.setInnerValueAndNotify(dateFormat(value, 'yyyy-MM-dd'));\n\t\t\t}\n\t\t}\n\t}\n\n\tgetDefaultTranslation(key: string): (x: any) => string {\n\t\tswitch (key) {\n\t\t\tcase 'placeholder':\n\t\t\t\treturn () => 'Select date';\n\t\t}\n\t}\n\n\tgetTranslation(key: string, params: any = null): string {\n\t\tif (key === 'placeholder' && this.multiple) {\n\t\t\treturn '';\n\t\t}\n\t\tif (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {\n\t\t\treturn this.placeholder;\n\t\t}\n\t\treturn this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);\n\t}\n}\n","import {\n\tAfterViewInit,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tHost,\n\tInject,\n\tInjectionToken,\n\tInput,\n\tOnChanges,\n\tOnInit,\n\tOptional,\n\tSimpleChanges,\n\tViewChild\n} from '@angular/core';\nimport {ControlContainer, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {invalidDateKey} from '../../validators/dateValidator';\nimport {DateFilterFn, MatDatepicker} from '@angular/material/datepicker';\nimport {DateAdapter, MAT_DATE_FORMATS, MAT_NATIVE_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {KlpDateFormats} from '../../types';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\nimport {MultipleValueAccessorBase} from '../value-accessor-base/multiple-value-accessor-base.component';\nimport {isValueSet, removeDuplicatesFromArray, stringIsSetAndFilled} from '../../util/values';\nimport {endOfMonth, format as formatDate, startOfMonth} from 'date-fns';\n\nexport const KLP_DATE_FORMATS = new InjectionToken<KlpDateFormats>('klp.form.date.formats');\nexport const DATE_TIME_PICKER_TRANSLATIONS = new InjectionToken<any>('klp.form.dateTime.translations');\nexport const DATE_PICKER_LOCALE = new InjectionToken<any>('klp.form.dateTime.locale');\n\nexport function matDateFormatsFactory(component: DateTimePickerComponent, dateFormats?: KlpDateFormats): MatDateFormats {\n\treturn dateFormats?.(component.format) ?? MAT_NATIVE_DATE_FORMATS;\n}\n\n@Component({\n\tselector: 'klp-form-date-time-picker',\n\ttemplateUrl: './date-time-picker.component.html',\n\tstyleUrls: ['./date-time-picker.component.scss'],\n\tproviders: [\n\t\t{provide: NG_VALUE_ACCESSOR, useExisting: DateTimePickerComponent, multi: true},\n\t\t{\n\t\t\tprovide: MAT_DATE_FORMATS,\n\t\t\tdeps: [DateTimePickerComponent, [new Optional(), KLP_DATE_FORMATS]],\n\t\t\tuseFactory: matDateFormatsFactory,\n\t\t},\n\t],\n})\nexport class DateTimePickerComponent extends MultipleValueAccessorBase<Date | typeof invalidDateKey> implements OnInit, AfterViewInit, OnChanges {\n\t@Input() public minDate: Date = undefined;\n\t@Input() public maxDate: Date = undefined;\n\t@Input() public sameMonthOnly = false;\n\t@Input() public format = 'dd-MM-yyyy';\n\t@Input() public placeholder: string;\n\t@Input() public clearable = false;\n\t@Input() public showTimeInput = true;\n\t@Input() public invalidTimeAsMidnight = false; // if the time is not valid, use 00:00 as the time\n\n\t@ViewChild('nativeInput') nativeInputRef: ElementRef;\n\t@ViewChild('picker') datePickerRef: MatDatepicker<Date>;\n\n\tminDateStartOfDay: Date = undefined;\n\tmaxDateEndOfDay: Date = undefined;\n\n\t// this is passed as ngmodel and is used to set the initial date. But we also\n\t// use input and nativeInput callbacks to extend the validation logic so we\n\t// can distinguish between empty and invalid dates.\n\tvalueForMaterialDatePicker: Date;\n\thours: string; // string because it's a text input\n\tminutes: string; // string because it's a text input\n\tprivate selectedDates: Array<Date> = [];\n\tprivate datePickingClosingFn: () => void;\n\tprivate dateTouched = false;\n\tprivate hoursTouched = false;\n\tprivate minutesTouched = false;\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer,\n\t\t@Inject(DATE_TIME_PICKER_TRANSLATIONS) @Optional() private translations: any,\n\t\t@Inject(DATE_PICKER_LOCALE) @Optional() private datePickerLocale: any,\n\t\tprivate dateAdapter: DateAdapter<Date>,\n\t\tprivate cdr: ChangeDetectorRef\n\t) {\n\t\tsuper(parent, controlContainer);\n\t\tif (isValueSet(datePickerLocale)) {\n\t\t\tdateAdapter.setLocale(datePickerLocale());\n\t\t}\n\t}\n\n\tngOnInit(): void {\n\t\tsuper.ngOnInit();\n\t\tif (this.multiple) {\n\t\t\tthis.placeholder = '';\n\t\t\tthis.showTimeInput = false;\n\t\t}\n\t}\n\n\tngAfterViewInit(): void {\n\t\tif (this.multiple) {\n\t\t\t// we are going to overwrite the datepicker closing fn later, so we are saving it here to restore it when needed\n\t\t\tthis.datePickingClosingFn = this.datePickerRef.close;\n\t\t}\n\t}\n\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tif (changes.minDate) {\n\t\t\tthis.determineMinAndMaxDates();\n\t\t}\n\t\tif (changes.maxDate) {\n\t\t\tthis.determineMinAndMaxDates();\n\t\t}\n\t}\n\n\tsetMinDate(minDate: Date): void {\n\t\tif (minDate) {\n\t\t\tthis.minDateStartOfDay = new Date(minDate);\n\t\t\tthis.minDateStartOfDay.setHours(0, 0, 0, 0);\n\t\t} else {\n\t\t\tthis.minDateStartOfDay = undefined;\n\t\t}\n\t}\n\n\tsetMaxDate(maxDate: Date): void {\n\t\tif (maxDate) {\n\t\t\tthis.maxDateEndOfDay = new Date(maxDate);\n\t\t\tthis.maxDateEndOfDay.setHours(23, 59, 59, 999);\n\t\t} else {\n\t\t\tthis.maxDateEndOfDay = undefined;\n\t\t}\n\t}\n\n\tgetSelectedMonths(): number {\n\t\treturn removeDuplicatesFromArray(this.selectedDates.map((e) => formatDate(e, 'MMMM'))).length;\n\t}\n\n\t// dateChanged is called when the output of the datepicker is changed and\n\t// parsed correctly. If the date is invalid, it will be called the first time\n\t// with null but never again until a valid input is provided.\n\tdateChanged(event: any): void {\n\t\tconst date = event.value;\n\t\tif (this.multiple) {\n\t\t\tthis.datePickerRef.close = () => {\n\t\t\t};\n\n\t\t\tif (this.selectedDates.some((e) => e.getTime() === date.getTime())) {\n\t\t\t\tthis.selectedDates = this.selectedDates.filter((e) => e.getTime() !== date.getTime());\n\t\t\t} else {\n\t\t\t\tthis.selectedDates = [...this.selectedDates, date];\n\t\t\t}\n\t\t\t// START HACK\n\t\t\t// the date picker does not provide any rerender calls. Therefore, we are going to change the minDate in order to force the render\n\t\t\t// This is needed to show all selected days in our date picker\n\t\t\t// We also set the innerValue to null (with this.valueForMaterialDatePicker = null;), otherwise you can not\n\t\t\t// deselect your last picked date\n\t\t\tthis.cdr.detectChanges();\n\t\t\tthis.valueForMaterialDatePicker = null;\n\t\t\tconst oldMinDate = this.minDateStartOfDay;\n\t\t\tthis.minDateStartOfDay = new Date(0);\n\t\t\tthis.cdr.detectChanges();\n\t\t\tthis.minDateStartOfDay = oldMinDate;\n\t\t\t// END HACK\n\n\t\t\tif (this.sameMonthOnly) {\n\t\t\t\tif (this.selectedDates.length >= 2) {\n\t\t\t\t\tif (date < startOfMonth(this.selectedDates[0]) || date > endOfMonth(this.selectedDates[0])) {\n\t\t\t\t\t\tthis.selectedDates = [date];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.determineMinAndMaxDates();\n\t\t\t}\n\n\t\t\tthis.setInnerValueAndNotify(this.selectedDates);\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.datePickerRef.close = this.datePickingClosingFn;\n\t\t\t});\n\t\t} else {\n\t\t\tthis.notifyNewDate();\n\t\t}\n\t}\n\n\tdetermineMinAndMaxDates(): void {\n\t\tif (this.sameMonthOnly) {\n\t\t\tif (this.selectedDates.length >= 2) {\n\t\t\t\tthis.setMinDate(startOfMonth(this.selectedDates[0]));\n\t\t\t\tthis.setMaxDate(endOfMonth(this.selectedDates[0]));\n\t\t\t} else {\n\t\t\t\tthis.setMinDate(this.minDate);\n\t\t\t\tthis.setMaxDate(this.maxDate);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.setMinDate(this.minDate);\n\t\t\tthis.setMinDate(this.maxDate);\n\t\t}\n\t}\n\n\tnotifyNewDate(): void {\n\t\tconst nativeInputValue = this.nativeInputRef.nativeElement.value;\n\t\tconst parsedHours = Number(this.hours);\n\t\tconst parsedMinutes = Number(this.minutes);\n\n\t\t// if we dont have the time element\n\t\tif (!this.showTimeInput) {\n\t\t\tif (!stringIsSetAndFilled(nativeInputValue)) {\n\t\t\t\tthis.setInnerValueAndNotify(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.valueForMaterialDatePicker instanceof Date) {\n\t\t\t\tthis.setInnerValueAndNotify(this.valueForMaterialDatePicker);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// when all inputs are empty\n\t\tif (!stringIsSetAndFilled(nativeInputValue) && !stringIsSetAndFilled(this.hours) && !stringIsSetAndFilled(this.minutes)) {\n\t\t\tthis.setInnerValueAndNotify(null);\n\t\t\treturn;\n\t\t}\n\t\t// if we have date and time\n\t\tif (\n\t\t\tstringIsSetAndFilled(this.hours) &&\n\t\t\tNumber.isFinite(parsedHours) &&\n\t\t\tparsedHours >= 0 &&\n\t\t\tparsedHours <= 23 &&\n\t\t\tstringIsSetAndFilled(this.minutes) &&\n\t\t\tNumber.isFinite(parsedMinutes) &&\n\t\t\tparsedMinutes >= 0 &&\n\t\t\tparsedMinutes <= 59 &&\n\t\t\tthis.valueForMaterialDatePicker instanceof Date\n\t\t) {\n\t\t\tconst newDateWithHours = new Date(this.valueForMaterialDatePicker.setHours(parsedHours));\n\t\t\tconst newDateWithMinutes = new Date(newDateWithHours.setMinutes(parsedMinutes));\n\t\t\tthis.setInnerValueAndNotify(newDateWithMinutes);\n\t\t\treturn;\n\t\t}\n\t\tif (this.invalidTimeAsMidnight) {\n\t\t\tif (this.valueForMaterialDatePicker instanceof Date) {\n\t\t\t\tthis.setInnerValueAndNotify(this.valueForMaterialDatePicker);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// all other cases, we are not in a valid state\n\t\tthis.setInnerValueAndNotify(invalidDateKey);\n\t}\n\n\twriteValue(value: Date | Array<Date> | typeof invalidDateKey): void {\n\t\tsuper.writeValue(value);\n\t\tif (Array.isArray(value)) {\n\t\t\tthis.selectedDates = value;\n\t\t\tthis.determineMinAndMaxDates();\n\t\t\tthis.valueForMaterialDatePicker = null;\n\t\t} else {\n\t\t\tthis.valueForMaterialDatePicker = value === invalidDateKey ? null : value;\n\t\t\tif (value instanceof Date) {\n\t\t\t\tthis.hours = String(value.getHours());\n\t\t\t\tthis.minutes = String(value.getMinutes());\n\t\t\t\tthis.formatTime();\n\t\t\t} else {\n\t\t\t\tthis.hours = '';\n\t\t\t\tthis.minutes = '';\n\t\t\t}\n\t\t}\n\t}\n\n\t// nativeValueChanged is called when the internal text value changes, but not\n\t// when the date is changed via the date picker. We need this so that we can\n\t// determine if the datepicker is empty or invalid.\n\tnativeValueChanged(): void {\n\t\tif (this.datePickerRef.opened) {\n\t\t\t// if the user is typing instead of using the picker, close it.\n\t\t\tthis.datePickerRef.close();\n\t\t}\n\t\tthis.notifyNewDate();\n\t}\n\n\tresetToNull(): void {\n\t\tthis.setInnerValueAndNotify(null);\n\t\tthis.valueForMaterialDatePicker = null;\n\t\tthis.nativeInputRef.nativeElement.value = null;\n\t\tthis.hours = '';\n\t\tthis.minutes = '';\n\t\tthis.selectedDates = [];\n\t}\n\n\tisSelected = (d: Date) => {\n\t\tif (this.multiple) {\n\t\t\treturn this.selectedDates.some((e) => e.getTime() === d.getTime()) ? 'selected' : '';\n\t\t}\n\t\treturn '';\n\t};\n\tfilterDates: DateFilterFn<any> = (e) => {\n\t\tif (this.disabled) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tformatTime(): void {\n\t\tif (Number.isFinite(Number(this.hours)) && this.hours.length === 1) {\n\t\t\tthis.hours = '0' + this.hours;\n\t\t}\n\t\tif (Number.isFinite(Number(this.minutes)) && this.minutes.length === 1) {\n\t\t\tthis.minutes = '0' + this.minutes;\n\t\t}\n\t}\n\n\ttouchDate(): void {\n\t\tthis.dateTouched = true;\n\t\tthis.determineAllTouched();\n\t}\n\n\ttouchHours(): void {\n\t\tthis.hoursTouched = true;\n\t\tthis.determineAllTouched();\n\t}\n\n\ttouchMinutes(): void {\n\t\tthis.minutesTouched = true;\n\t\tthis.determineAllTouched();\n\t}\n\n\tdetermineAllTouched(): void {\n\t\tif ((this.dateTouched && this.hoursTouched && this.minutesTouched) || (this.dateTouched && !this.showTimeInput)) {\n\t\t\tthis.touch();\n\t\t}\n\t}\n\n\n\tgetDefaultTranslation(key: string): (x: any) => string {\n\t\tswitch (key) {\n\t\t\tcase 'placeholder':\n\t\t\t\treturn () => 'Select date';\n\t\t\tcase 'selectDays':\n\t\t\t\treturn () => 'Select day(s)';\n\t\t\tcase 'selectedDate':\n\t\t\t\treturn (d: Date) => d.toLocaleDateString();\n\t\t\tcase 'daysSelected':\n\t\t\t\treturn (amount) => `${amount} days selected`;\n\t\t\tcase 'selectedInMonth':\n\t\t\t\treturn (d: Date) => ` in ${formatDate(d, 'MMMM')}`;\n\t\t}\n\t}\n\n\tgetTranslation(key: string, params: any = null): string {\n\t\tif (key === 'placeholder' && this.multiple) {\n\t\t\treturn '';\n\t\t}\n\t\tif (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {\n\t\t\treturn this.placeholder;\n\t\t}\n\t\treturn this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);\n\t}\n}\n","// material.module.ts\n\nimport { NgModule } from '@angular/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n\timports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule],\n\texports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule],\n\tproviders: [MatDatepickerModule],\n})\nexport class MaterialModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {ValueAccessorBase} from './elements/value-accessor-base/value-accessor-base.component';\nimport {ButtonComponent} from './elements/button/button.component';\nimport {CheckboxComponent} from './elements/checkbox/checkbox.component';\nimport {EmailInputComponent} from './elements/email/email-input.component';\nimport {LoadingIndicatorComponent} from './elements/loading-indicator/loading-indicator.component';\nimport {NumberInputComponent} from './elements/number-input/number-input.component';\nimport {PasswordFieldComponent} from './elements/password-field/password-field.component';\nimport {SelectComponent} from './elements/select/select.component';\nimport {SelectFooterComponent} from './elements/select/select-footer/select-footer.component';\nimport {SortableItemsComponent} from './elements/sortable-items/sortable-items.component';\nimport {TextInputComponent} from './elements/text-input/text-input.component';\nimport {ToggleComponent} from './elements/toggle/toggle.component';\nimport {FormCaptionComponent} from './form/form-caption/form-caption.component';\nimport {FormElementComponent} from './form/form-element/form-element.component';\nimport {FormErrorComponent} from './form/form-error/form-error.component';\nimport {FormSubmitButtonComponent} from './form/form-submit-button/form-submit-button.component';\nimport {FormComponent, SubFormDirective} from './form/form.component';\nimport {SortablejsModule} from 'ngx-sortablejs';\nimport {NgSelectModule} from '@ng-select/ng-select';\nimport {DatePickerComponent} from './elements/date-picker/date-picker.component';\nimport {DateTimePickerComponent} from './elements/date-time-picker/date-time-picker.component';\nimport {MaterialModule} from './material.module';\nimport {MultipleValueAccessorBase} from './elements/value-accessor-base/multiple-value-accessor-base.component';\n\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tNgSelectModule,\n\t\tSortablejsModule,\n\t\tMaterialModule,\n\t],\n\tdeclarations: [\n\t\tValueAccessorBase,\n\t\tMultipleValueAccessorBase,\n\t\tButtonComponent,\n\t\tCheckboxComponent,\n\t\tDatePickerComponent,\n\t\tDateTimePickerComponent,\n\t\tEmailInputComponent,\n\t\tLoadingIndicatorComponent,\n\t\tNumberInputComponent,\n\t\tPasswordFieldComponent,\n\t\tSelectComponent,\n\t\tSelectFooterComponent,\n\t\tSortableItemsComponent,\n\t\tTextInputComponent,\n\t\tToggleComponent,\n\t\tFormCaptionComponent,\n\t\tFormElementComponent,\n\t\tFormErrorComponent,\n\t\tFormSubmitButtonComponent,\n\t\tFormComponent,\n\t\tSubFormDirective,\n\t],\n\texports: [\n\t\tValueAccessorBase,\n\t\tMultipleValueAccessorBase,\n\t\tButtonComponent,\n\t\tDatePickerComponent,\n\t\tDateTimePickerComponent,\n\t\tCheckboxComponent,\n\t\tEmailInputComponent,\n\t\tLoadingIndicatorComponent,\n\t\tNumberInputComponent,\n\t\tPasswordFieldComponent,\n\t\tSelectComponent,\n\t\tSelectFooterComponent,\n\t\tSortableItemsComponent,\n\t\tTextInputComponent,\n\t\tToggleComponent,\n\t\tFormCaptionComponent,\n\t\tFormElementComponent,\n\t\tFormErrorComponent,\n\t\tFormSubmitButtonComponent,\n\t\tFormComponent,\n\t\tSubFormDirective,\n\t]\n})\nexport class NgxEnhancyFormsModule {\n}\n","/*\n * Public API Surface of ngx-enhancy-forms\n */\n\nexport * from './lib/ngx-enhancy-forms.module';\n\nexport * from './lib/elements/button/button.component';\nexport * from './lib/elements/checkbox/checkbox.component';\nexport * from './lib/elements/date-picker/date-picker.component';\nexport * from './lib/elements/date-time-picker/date-time-picker.component';\nexport * from './lib/elements/email/email-input.component';\nexport * from './lib/elements/loading-indicator/loading-indicator.component';\nexport * from './lib/elements/number-input/number-input.component';\nexport * from './lib/elements/password-field/password-field.component';\nexport * from './lib/elements/select/select-footer/select-footer.component';\nexport * from './lib/elements/select/select.component';\nexport * from './lib/elements/sortable-items/sortable-items.component';\nexport * from './lib/elements/text-input/text-input.component';\nexport * from './lib/elements/toggle/toggle.component';\nexport * from './lib/elements/value-accessor-base/value-accessor-base.component';\nexport * from './lib/elements/value-accessor-base/multiple-value-accessor-base.component';\n\nexport * from './lib/form/form.component';\nexport * from './lib/form/form-caption/form-caption.component';\nexport * from './lib/form/form-element/form-element.component';\nexport * from './lib/form/form-error/form-error.component';\nexport * from './lib/form/form-submit-button/form-submit-button.component';\n\nexport * from './lib/validators/dateValidator';\n\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MaterialModule as ɵa} from './lib/material.module';"],"names":["dateFormat","formatDate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"klippa-ngx-enhancy-forms.js","sources":["../../../../projects/klippa/ngx-enhancy-forms/src/lib/util/values.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-element/form-element.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/value-accessor-base/value-accessor-base.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/button/button.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/checkbox/checkbox.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/email/email-input.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/loading-indicator/loading-indicator.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/number-input/number-input.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/password-field/password-field.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/select/select.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/select/select-footer/select-footer.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/sortable-items/sortable-items.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/text-input/text-input.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/toggle/toggle.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-caption/form-caption.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-error/form-error.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/form/form-submit-button/form-submit-button.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/value-accessor-base/multiple-value-accessor-base.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/validators/dateValidator.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/date-picker/date-picker.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/elements/date-time-picker/date-time-picker.component.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/material.module.ts","../../../../projects/klippa/ngx-enhancy-forms/src/lib/ngx-enhancy-forms.module.ts","../../../../projects/klippa/ngx-enhancy-forms/src/public-api.ts","../../../../projects/klippa/ngx-enhancy-forms/src/klippa-ngx-enhancy-forms.ts"],"sourcesContent":["import { isString } from 'lodash';\n\nexport function stringIsSetAndFilled(s: string) {\n\treturn isString(s) && s.length > 0;\n}\n\nexport function isNullOrUndefined(value: any) {\n\treturn value === null || value === undefined;\n}\n\nexport function numberIsSet(value: any) {\n\treturn isValueSet(value) && typeof value === 'number';\n}\n\nexport function isValueSet(value: any) {\n\treturn value !== null && value !== undefined;\n}\n\nexport function removeDuplicatesFromArray(array: Array<any>) {\n\treturn array.filter((c, i) => {\n\t\tconst firstOccurrenceIndex = array.findIndex((c2) => c2 === c);\n\t\treturn i === firstOccurrenceIndex;\n\t});\n}\n\nexport function stringOrArrayIsSetAndEmpty(value: any[] | string) {\n\treturn value !== null && value !== undefined && value.length === 0;\n}\n\nexport function truncateString(s: string, length: number) {\n\tif (s.length < length) {\n\t\treturn s;\n\t}\n\treturn s.substring(0, length) + '...';\n}\n\nexport function arrayIsSetAndFilled(arr: Array<any>) {\n\treturn arr !== null && arr !== undefined && arr.length > 0;\n}\n","import {Component, Directive, Input, OnDestroy, OnInit, Optional, SkipSelf} from '@angular/core';\nimport {AbstractControl, FormArray, FormControl, FormGroup, FormGroupName} from '@angular/forms';\nimport {FormElementComponent} from './form-element/form-element.component';\nimport {isValueSet} from '../util/values';\n\nexport const invalidFieldsSymbol = Symbol('Not all fields are valid');\n\n@Directive({\n\t// tslint:disable-next-line:directive-selector\n\tselector: 'klp-sub-form',\n})\nexport class SubFormDirective {\n\t@Input() injectInto: FormArray | FormGroup;\n\t@Input() at: number | string;\n}\n\n@Component({\n\tselector: 'klp-form',\n\ttemplateUrl: './form.component.html',\n\tstyleUrls: ['./form.component.scss'],\n})\nexport class FormComponent implements OnInit, OnDestroy {\n\t@Input() public formGroup: FormGroup;\n\t@Input() public patchValueInterceptor: (values: any) => Promise<any>;\n\n\t// we keep track of what form controls are actually rendered. Only those count when looking at form validation\n\tprivate activeControls: Array<{\n\t\tformControl: FormControl;\n\t\tformElement: FormElementComponent;\n\t}> = [];\n\n\tconstructor(@SkipSelf() @Optional() private parent: FormComponent, @Optional() private subFormPlaceholder: SubFormDirective) {\n\t}\n\n\tngOnInit(): void {\n\t\tif (isValueSet(this.parent) && isValueSet(this.subFormPlaceholder)) {\n\t\t\tconst injectInto = this.subFormPlaceholder.injectInto;\n\t\t\tconst injectAt = this.subFormPlaceholder.at;\n\t\t\tif (injectInto instanceof FormArray) {\n\t\t\t\tif (typeof injectAt !== 'number') {\n\t\t\t\t\tthrow new Error(`cannot index FormArray with ${typeof injectAt}`);\n\t\t\t\t}\n\n\t\t\t\tinjectInto.setControl(injectAt, this.formGroup);\n\t\t\t} else if (injectInto instanceof FormGroup) {\n\t\t\t\tif (typeof injectAt !== 'string') {\n\t\t\t\t\tthrow new Error(`cannot index FormGroup with ${typeof injectAt}`);\n\t\t\t\t}\n\n\t\t\t\tinjectInto.setControl(injectAt, this.formGroup);\n\t\t\t}\n\t\t}\n\t\tif (isValueSet(this.patchValueInterceptor)) {\n\t\t\tthis.addSupportForPatchValueInterceptor();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (isValueSet(this.parent) && isValueSet(this.subFormPlaceholder)) {\n\t\t\tconst injectInto = this.subFormPlaceholder.injectInto;\n\t\t\tconst injectAt = this.subFormPlaceholder.at;\n\t\t\tif (injectInto instanceof FormArray) {\n\t\t\t\tconst idx = injectInto.controls.findIndex(e => e === this.formGroup);\n\t\t\t\tinjectInto.removeAt(idx);\n\t\t\t} else if (injectInto instanceof FormGroup) {\n\t\t\t\tif (typeof injectAt !== 'string') {\n\t\t\t\t\tthrow new Error(`cannot index FormGroup with ${typeof injectAt}`);\n\t\t\t\t}\n\t\t\t\tinjectInto.removeControl(injectAt);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addSupportForPatchValueInterceptor(): void {\n\t\tconst fn = this.formGroup.patchValue;\n\t\tconst newFn = (\n\t\t\tvalue: {\n\t\t\t\t[key: string]: any;\n\t\t\t},\n\t\t\toptions?: {\n\t\t\t\tonlySelf?: boolean;\n\t\t\t\temitEvent?: boolean;\n\t\t\t}\n\t\t): void => {\n\t\t\tthis.patchValueInterceptor(value).then((val) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tfn.call(this.formGroup, val, options);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t\tthis.formGroup.patchValue = newFn;\n\t}\n\n\tpublic registerControl(formControl: FormControl, formElement: FormElementComponent): void {\n\t\tthis.activeControls.push({formControl, formElement});\n\t\tif (this.parent) {\n\t\t\tthis.parent.registerControl(formControl, formElement);\n\t\t}\n\t}\n\n\tpublic unregisterControl(formControl: FormControl): void {\n\t\tthis.activeControls = this.activeControls.filter((e) => e.formControl !== formControl);\n\t\tif (this.parent) {\n\t\t\tthis.parent.unregisterControl(formControl);\n\t\t}\n\t}\n\n\tprivate addFormGroupControls(formGroup: FormGroup, result: Array<FormControl>): void {\n\t\tObject.values(formGroup.controls).forEach((value) => {\n\t\t\tif (value instanceof FormGroup) {\n\t\t\t\tthis.addFormGroupControls(value, result);\n\t\t\t} else if (value instanceof FormArray) {\n\t\t\t\tthis.addFormArrayControls(value, result);\n\t\t\t} else if (value instanceof FormControl) {\n\t\t\t\tthis.addFormControl(value, result);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate addFormArrayControls(formArray: FormArray, result: Array<FormControl>): void {\n\t\tformArray.controls.forEach((value) => {\n\t\t\tif (value instanceof FormGroup) {\n\t\t\t\tthis.addFormGroupControls(value, result);\n\t\t\t} else if (value instanceof FormArray) {\n\t\t\t\tthis.addFormArrayControls(value, result);\n\t\t\t} else if (value instanceof FormControl) {\n\t\t\t\tthis.addFormControl(value, result);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getAllFormControls(): Array<FormControl> {\n\t\tconst result = [];\n\t\tthis.addFormGroupControls(this.formGroup, result);\n\t\treturn result;\n\t}\n\n\tprivate addFormControl(control: FormControl, result: Array<FormControl>): void {\n\t\tresult.push(control);\n\t}\n\n\tprivate disableInactiveFormControl(control: FormControl): void {\n\t\tif (!this.activeControls.some((e) => e.formControl === control)) {\n\t\t\tcontrol.disable();\n\t\t}\n\t}\n\n\ttrySubmit(): Promise<any> {\n\t\tthis.formGroup.markAllAsTouched();\n\t\tconst allControls: Array<FormControl> = this.getAllFormControls();\n\t\tconst originalDisabledStates = allControls.map(e => {\n\t\t\treturn {control: e, disabled: e.disabled};\n\t\t});\n\t\tallControls.forEach(e => this.disableInactiveFormControl(e));\n\t\tallControls.forEach(e => e.updateValueAndValidity());\n\t\tconst values = this.formGroup.value;\n\t\tif (this.formGroup.valid) {\n\t\t\tthis.setDisabledStatesForAllControls(originalDisabledStates);\n\t\t\treturn Promise.resolve(values);\n\t\t} else {\n\t\t\tthis.activeControls.find((e) => !e.formControl.valid)?.formElement?.scrollTo();\n\t\t\tthis.setDisabledStatesForAllControls(originalDisabledStates);\n\t\t\treturn Promise.reject(invalidFieldsSymbol);\n\t\t}\n\t}\n\n\tprivate setDisabledStatesForAllControls(originalDisabledStates: Array<{ control: AbstractControl; disabled: boolean }>): void {\n\t\toriginalDisabledStates.forEach((e) => {\n\t\t\tif (e.disabled) {\n\t\t\t\te.control.disable();\n\t\t\t} else {\n\t\t\t\te.control.enable();\n\t\t\t}\n\t\t});\n\t}\n}\n","import {Component, ElementRef, Host, Inject, InjectionToken, Input, OnInit, Optional, ViewChild} from '@angular/core';\nimport {AbstractControl, FormControl} from '@angular/forms';\nimport {FormComponent} from '../form.component';\nimport {CustomErrorMessages, FormErrorMessages} from '../../types';\nimport { ValueAccessorBase } from '../../elements/value-accessor-base/value-accessor-base.component';\nimport { isValueSet } from '../../util/values';\n\nexport const FORM_ERROR_MESSAGES = new InjectionToken<CustomErrorMessages>('form.error.messages');\n\nexport const DEFAULT_ERROR_MESSAGES: FormErrorMessages = {\n\tmin: 'Use a number larger than %min%',\n\tmax: 'Use a number smaller than %max%',\n\trequired: 'This field is required',\n\temail: 'Use a valid email address',\n\tminLength: 'Has to be longer than %minLength% character(s)',\n\tmaxLength: 'Has to be shorter than %maxLength% character(s)',\n\tpattern: 'This input is not valid',\n\tmatchPassword: 'Passwords must match',\n\tdate: 'Enter a valid date',\n};\n\n@Component({\n\tselector: 'klp-form-element',\n\ttemplateUrl: './form-element.component.html',\n\tstyleUrls: ['./form-element.component.scss'],\n})\nexport class FormElementComponent {\n\tpublic attachedControl: AbstractControl;\n\t@Input() public caption: string;\n\t@Input() public direction: 'horizontal' | 'vertical' = 'horizontal';\n\t@Input() public captionSpacing: 'percentages' | 'none' = 'percentages';\n\t@Input() public spaceDistribution: '40-60' | '30-70' = '40-60';\n\t@Input() public swapInputAndCaption: boolean = false;\n\t@ViewChild('internalComponentRef') public internalComponentRef: ElementRef;\n\n\tpublic captionRef: ElementRef;\n\tpublic errorMessages: FormErrorMessages = DEFAULT_ERROR_MESSAGES;\n\tpublic customErrorHandlers: Array<{ error: string; templateRef: ElementRef }> = [];\n\tprivate input: ValueAccessorBase<any>;\n\n\tconstructor(\n\t\t@Host() @Optional() private parent: FormComponent,\n\t\t@Inject(FORM_ERROR_MESSAGES) @Optional() private customMessages: CustomErrorMessages\n\t) {\n\t}\n\n\tpublic substituteParameters(message: string, parameters: Record<string, any>): string {\n\t\treturn Object.keys(parameters).reduce((msg, key) => {\n\t\t\treturn msg.replace(`%${key}%`, parameters[key]);\n\t\t}, message);\n\t}\n\n\tpublic registerControl(formControl: FormControl, input: ValueAccessorBase<any> = null): void {\n\t\tthis.attachedControl = formControl;\n\t\tthis.parent.registerControl(formControl, this);\n\t\tthis.input = input;\n\t}\n\n\tpublic unregisterControl(formControl: FormControl): void {\n\t\tthis.attachedControl = null;\n\t\tthis.parent.unregisterControl(formControl);\n\t}\n\n\tpublic getAttachedControl(): AbstractControl {\n\t\treturn this.attachedControl;\n\t}\n\n\tpublic registerErrorHandler(error: string, templateRef: ElementRef): void {\n\t\tthis.customErrorHandlers.push({error, templateRef});\n\t}\n\n\tpublic registerCaption(templateRef: ElementRef): void {\n\t\tthis.captionRef = templateRef;\n\t}\n\n\tgetErrorToShow(): string {\n\t\tif (this.attachedControl?.touched === true && this.attachedControl?.errors) {\n\t\t\treturn Object.keys(this.attachedControl?.errors)[0];\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetCustomErrorHandler(error: string): { error: string; templateRef: ElementRef } {\n\t\treturn this.customErrorHandlers.find((e) => e.error === error);\n\t}\n\n\tshowDefaultError(error: string): boolean {\n\t\treturn this.getErrorToShow() === error && !this.customErrorHandlers.some((e) => e.error === error);\n\t}\n\n\tgetScrollableParent(node): any {\n\t\tif (node == null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (node.scrollHeight > node.clientHeight) {\n\t\t\treturn node;\n\t\t} else {\n\t\t\treturn this.getScrollableParent(node.parentNode);\n\t\t}\n\t}\n\n\tscrollTo(): void{\n\t\tthis.internalComponentRef.nativeElement.scrollIntoView(true);\n\t\t// to give some breathing room, we scroll 100px more to the top\n\t\tthis.getScrollableParent(this.internalComponentRef.nativeElement)?.scrollBy(0, -100);\n\t}\n\n\tisRequired(): boolean {\n\t\tif (isValueSet(this.input)) {\n\t\t\treturn this.input.hasValidator('required');\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetErrorMessage(key: keyof FormErrorMessages): string {\n\t\treturn this.customMessages?.[key]?.() ?? this.errorMessages[key];\n\t}\n}\n","import { ControlContainer, ControlValueAccessor, FormControl } from '@angular/forms';\nimport {Component, EventEmitter, Host, Input, OnDestroy, OnInit, Optional, Output} from '@angular/core';\nimport { FormElementComponent } from '../../form/form-element/form-element.component';\nimport {arrayIsSetAndFilled, isNullOrUndefined, isValueSet, stringIsSetAndFilled} from '../../util/values';\n\n/**\n * This component is a base in order to create a component that supports ngModel.\n * Some important things to know about it:\n *\n * innerValue = your own inner state, which you should use to store the current state of what ngModel should be.\n * writeValue() = called by angular, when ngModel is changed from OUTSIDE of the component. Feel free to patch this method if you need inner logic to happen when ngModel is altered from the outside. Always remember to also call the super.writeValue if you do!\n * setInnerValueAndNotify() = call this when you want your ngModel to be updated from INSIDE of your component, and provide it to the OUTSIDE.\n * ngOnInit() = Used to support the angular reactive forms framework. If you use ngOnInit in your own component (which happens fairly often) you must not forget to call the super.ngOnInit() method.\n */\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n})\nexport class ValueAccessorBase<T> implements ControlValueAccessor, OnInit, OnDestroy {\n\tpublic innerValue: T;\n\tpublic changed = new Array<(value: T) => void>();\n\tprivate touched = new Array<() => void>();\n\n\t@Input() public disabled = false;\n\t// we support both providing just the formControlName and the full formControl\n\t@Input() public formControlName: string = null;\n\t@Input() public formControl: FormControl = null;\n\t@Output() public onTouch = new EventEmitter<void>();\n\n\tprivate attachedFormControl: FormControl;\n\tprivate validators: Array<string> = [];\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer\n\t) {}\n\n\tngOnInit(): void {\n\t\tif (this.formControl) {\n\t\t\tthis.attachedFormControl = this.formControl;\n\t\t} else if (stringIsSetAndFilled(this.formControlName)) {\n\t\t\tthis.attachedFormControl = this.controlContainer?.control.get(this.formControlName) as FormControl;\n\t\t\tif (isNullOrUndefined(this.attachedFormControl)) {\n\t\t\t\tthrow new Error(`Form element '${this.formControlName}' with caption '${this.parent?.caption}' is not declared in your FormGroup.`);\n\t\t\t}\n\t\t}\n\t\tif (this.attachedFormControl) {\n\t\t\tthis.disabled = this.attachedFormControl.disabled;\n\t\t\tthis.attachedFormControl.statusChanges.subscribe(() => {\n\t\t\t\tthis.disabled = this.attachedFormControl.disabled;\n\t\t\t});\n\t\t\tthis.parent?.registerControl(this.attachedFormControl, this);\n\t\t\tif (this.attachedFormControl?.validator) {\n\t\t\t\tconst vals = this.attachedFormControl.validator({} as any);\n\t\t\t\tif (isValueSet(vals)) {\n\t\t\t\t\tthis.validators = Object.keys(vals);\n\t\t\t\t} else {\n\t\t\t\t\tthis.validators = [];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tisInErrorState(): boolean {\n\t\treturn this.attachedFormControl && this.attachedFormControl.status === 'INVALID' && this.attachedFormControl.touched;\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (this.attachedFormControl) {\n\t\t\tthis.parent?.unregisterControl(this.attachedFormControl);\n\t\t}\n\t}\n\n\ttouch(): void {\n\t\tthis.touched.forEach((f) => f());\n\t}\n\n\twriteValue(value: T): void {\n\t\tthis.innerValue = value;\n\t}\n\n\tregisterOnChange(fn: (value: T) => void): void {\n\t\tthis.changed.push(fn);\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.touched.push(fn);\n\t}\n\n\tsetInnerValueAndNotify(value): void {\n\t\tthis.innerValue = value;\n\t\tthis.changed.forEach((fn) => fn(value));\n\t}\n\n\tresetToNull(): void {\n\t\tthis.setInnerValueAndNotify(null);\n\t}\n\n\thasValidator(validatorName: string): boolean {\n\t\tif (arrayIsSetAndFilled(this.validators)) {\n\t\t\treturn this.validators.includes(validatorName);\n\t\t}\n\t\treturn false;\n\t}\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n\tselector: 'klp-form-button',\n\ttemplateUrl: './button.component.html',\n\tstyleUrls: ['./button.component.scss'],\n})\nexport class ButtonComponent {\n\t@Input() variant:\n\t\t| 'white'\n\t\t| 'greenFilled'\n\t\t| 'greenOutlined'\n\t\t| 'greenLink'\n\t\t| 'contextMenuItem'\n\t\t| 'redFilled'\n\t\t| 'redOutlined'\n\t\t| 'orangeFilled' = 'white';\n\t@Input() size: 'small' | 'medium' | 'large' = 'medium';\n\t@Input() fullWidth = false;\n\t@Input() hasBorder = true;\n\t@Input() disabled = false;\n\t@Input() isLoading = false;\n\t@Input() type: 'button' | 'submit' = 'button';\n\n\t@HostBinding('class._fullWidth') get _() {\n\t\treturn this.fullWidth;\n\t}\n\n\tonClick(event: Event) {\n\t\tif (this.disabled) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t}\n}\n","import { Component, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-checkbox',\n\ttemplateUrl: './checkbox.component.html',\n\tstyleUrls: ['./checkbox.component.scss'],\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true }],\n})\nexport class CheckboxComponent extends ValueAccessorBase<boolean> {\n\t@Input() caption: string;\n\t@Input() disabled: boolean;\n}\n","import {Component, Input} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-email-input',\n\ttemplateUrl: './email-input.component.html',\n\tstyleUrls: ['./email-input.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: EmailInputComponent, multi: true}],\n})\nexport class EmailInputComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder = '';\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n\tselector: 'klp-form-loading-indicator',\n\ttemplateUrl: './loading-indicator.component.html',\n\tstyleUrls: ['./loading-indicator.component.scss'],\n})\nexport class LoadingIndicatorComponent {\n\t@Input() public variant: '3dots' | 'spinner' | 'textInput' | 'picker' = '3dots';\n\t@Input() public size: 'tiny' | 'small' | 'medium' | 'large' | 'huge' = 'medium';\n}\n","import { Component, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {ValueAccessorBase} from \"../value-accessor-base/value-accessor-base.component\";\n\n@Component({\n\tselector: 'klp-form-number-input',\n\ttemplateUrl: './number-input.component.html',\n\tstyleUrls: ['./number-input.component.scss'],\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: NumberInputComponent, multi: true }],\n})\nexport class NumberInputComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder: string;\n}\n","import {Component, Input} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-password-field',\n\ttemplateUrl: './password-field.component.html',\n\tstyleUrls: ['./password-field.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: PasswordFieldComponent, multi: true}],\n})\nexport class PasswordFieldComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder = 'Password';\n\t@Input() isPasswordConfirm = false;\n}\n","import {Component, EventEmitter, Host, Inject, InjectionToken, Input, Optional, Output, TemplateRef} from '@angular/core';\nimport {ControlContainer, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\nimport {format as formatDate} from 'date-fns';\nimport {DATE_TIME_PICKER_TRANSLATIONS} from '../date-time-picker/date-time-picker.component';\nimport {isValueSet, stringIsSetAndFilled} from '../../util/values';\n\nexport type AppSelectOptions = Array<{\n\tid: any;\n\tname: string;\n\tdescription?: string;\n\tdisabled?: boolean;\n}>;\n\nexport const SELECT_TRANSLATIONS = new InjectionToken<any>('klp.form.select.translations');\n\n@Component({\n\tselector: 'klp-form-select',\n\ttemplateUrl: './select.component.html',\n\tstyleUrls: ['./select.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true}],\n})\nexport class SelectComponent extends ValueAccessorBase<string | string[]> {\n\t@Input() placeholder: string;\n\t@Input() options: AppSelectOptions;\n\t@Input() multiple = false;\n\t@Input() multipleDisplayedAsAmount = false;\n\t@Input() clearable = true;\n\t@Input() public dropdownPosition: string;\n\t@Input() public customSearchFn: (term: string, item: { id: string; name: string; description: string }) => boolean;\n\t@Input() public footerElement: TemplateRef<any>;\n\t@Output() public onSearch = new EventEmitter<string>();\n\tpublic currentQueryString: string;\n\n\tconstructor(\n\t\t@Optional() @Host() protected parent: FormElementComponent,\n\t\t@Optional() @Host() protected controlContainer: ControlContainer,\n\t\t@Inject(SELECT_TRANSLATIONS) @Optional() private translations: any,\n\t) {\n\t\tsuper(parent, controlContainer);\n\t}\n\n\tonTextInput(value: string): void {\n\t\tthis.currentQueryString = value;\n\t\tthis.onSearch.emit(value);\n\t}\n\n\tgetDefaultTranslation(key: string): (x: any) => string {\n\t\tswitch (key) {\n\t\t\tcase 'placeholder':\n\t\t\t\treturn () => 'Pick an option';\n\t\t\tcase 'amountSelected':\n\t\t\t\treturn (amount) => `${amount} selected`;\n\t\t}\n\t}\n\n\tgetTranslation(key: string, params: any = null): string {\n\t\tif (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {\n\t\t\treturn this.placeholder;\n\t\t}\n\t\treturn this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);\n\t}\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n\tselector: 'klp-select-footer',\n\ttemplateUrl: './select-footer.component.html',\n\tstyleUrls: ['./select-footer.component.scss'],\n})\nexport class SelectFooterComponent {\n\t@Input() public prefix: string;\n\t@Input() public text: string;\n}\n","import {Component, ContentChild, Input, OnInit, TemplateRef} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Options} from 'sortablejs';\nimport {isValueSet} from '../../util/values';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-sortable-items',\n\ttemplateUrl: './sortable-items.component.html',\n\tstyleUrls: ['./sortable-items.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: SortableItemsComponent, multi: true}],\n})\nexport class SortableItemsComponent extends ValueAccessorBase<Array<any>> implements OnInit {\n\t@ContentChild(TemplateRef) template;\n\t@Input() sortableItemSize: 'sm' | 'lg' = 'lg';\n\t@Input() useCustomScroll = false;\n\n\tpublic sortablejsOptions: Options;\n\tprivate scrollInterval = null;\n\n\tngOnInit(): void {\n\t\tsuper.ngOnInit();\n\t\tif (this.useCustomScroll) {\n\t\t\tthis.sortablejsOptions = {onUpdate: this.itemsOrderChanged, onMove: this.onItemDrag, onEnd: this.onEnd};\n\t\t} else {\n\t\t\tthis.sortablejsOptions = {onUpdate: this.itemsOrderChanged};\n\t\t}\n\t}\n\n\titemsOrderChanged = () => {\n\t\tthis.setInnerValueAndNotify(this.innerValue);\n\t};\n\n\tonItemDrag = (data) => {\n\t\t// if the item you're dragging is reaching the top, start scrolling.\n\t\tif (data.relatedRect.top < 100) {\n\t\t\tthis.scrollPage(100);\n\t\t} else {\n\t\t\tthis.stopScrolling();\n\t\t}\n\t};\n\n\tonEnd = () => {\n\t\tthis.stopScrolling();\n\t};\n\n\tprivate scrollPage(scrollAmount: number): void {\n\t\tif (!isValueSet(this.scrollInterval)) {\n\t\t\tthis.scrollInterval = setInterval(() => {\n\t\t\t\twindow.scroll({\n\t\t\t\t\ttop: document.scrollingElement.scrollTop - scrollAmount,\n\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t});\n\t\t\t\tif (document.scrollingElement.scrollTop <= 100) {\n\t\t\t\t\tthis.stopScrolling();\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t}\n\t}\n\n\tprivate stopScrolling(): void {\n\t\tclearInterval(this.scrollInterval);\n\t\tthis.scrollInterval = null;\n\t}\n}\n","import { Component, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {ValueAccessorBase} from \"../value-accessor-base/value-accessor-base.component\";\n\n@Component({\n\tselector: 'klp-form-text-input',\n\ttemplateUrl: './text-input.component.html',\n\tstyleUrls: ['./text-input.component.scss'],\n\tproviders: [{ provide: NG_VALUE_ACCESSOR, useExisting: TextInputComponent, multi: true }],\n})\nexport class TextInputComponent extends ValueAccessorBase<string> {\n\t@Input() placeholder: string;\n\t@Input() type: 'text' | 'password' = 'text';\n\t@Input() clearable = false;\n\t@Input() icon: 'search';\n}\n","import {Component, Input} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ValueAccessorBase} from '../value-accessor-base/value-accessor-base.component';\n\n@Component({\n\tselector: 'klp-form-toggle',\n\ttemplateUrl: './toggle.component.html',\n\tstyleUrls: ['./toggle.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true}],\n})\nexport class ToggleComponent extends ValueAccessorBase<boolean> {\n}\n","import { Component, ElementRef, Host, OnInit, Optional, ViewChild } from '@angular/core';\nimport {FormElementComponent} from \"../form-element/form-element.component\";\nimport {isNullOrUndefined} from \"../../util/values\";\n\n@Component({\n\tselector: 'klp-form-caption',\n\ttemplateUrl: './form-caption.component.html',\n\tstyleUrls: ['./form-caption.component.scss'],\n})\nexport class FormCaptionComponent implements OnInit {\n\t@ViewChild('contentRef') public contentRef: ElementRef;\n\n\tconstructor(@Host() @Optional() private parent: FormElementComponent) {}\n\n\tngOnInit(): void {\n\t\t// this is being run next cycle, because we dont want to fail if the order of components is as follows:\n\t\t// <app-form-error />\n\t\t// <some-input />\n\t\t// That would fail, because the logic of the form error is run first, and at that moment, the `some-input` isnt registered yet\n\t\tsetTimeout(() => {\n\t\t\tconst attachedControl = this.parent.getAttachedControl();\n\t\t\tthis.parent.registerCaption(this.contentRef);\n\t\t\tif (isNullOrUndefined(attachedControl)) {\n\t\t\t\tthrow new Error('You added a Form Caption component without an attached Form Control');\n\t\t\t}\n\t\t});\n\t}\n}\n","import { Component, ElementRef, Host, Input, OnInit, Optional, ViewChild } from '@angular/core';\nimport {FormElementComponent} from \"../form-element/form-element.component\";\nimport {isNullOrUndefined} from \"../../util/values\";\nimport {ErrorTypes} from \"../../types\";\n\n@Component({\n\tselector: 'klp-form-error',\n\ttemplateUrl: './form-error.component.html',\n\tstyleUrls: ['./form-error.component.scss'],\n})\nexport class FormErrorComponent implements OnInit {\n\t@Input() error: ErrorTypes;\n\tpublic showError = false;\n\t@ViewChild('contentRef') public contentRef: ElementRef;\n\tconstructor(@Host() @Optional() private parent: FormElementComponent) {}\n\n\tngOnInit(): void {\n\t\t// this is being run next cycle, because we dont want to fail if the order of components is as follows:\n\t\t// <app-form-error />\n\t\t// <some-input />\n\t\t// That would fail, because the logic of the form error is run first, and at that moment, the `some-input` isnt registered yet\n\t\tsetTimeout(() => {\n\t\t\tconst attachedControl = this.parent.getAttachedControl();\n\t\t\tthis.parent.registerErrorHandler(this.error, this.contentRef);\n\t\t\tif (isNullOrUndefined(attachedControl)) {\n\t\t\t\tthrow new Error('You added a Form Error component without an attached Form Control');\n\t\t\t}\n\t\t});\n\t}\n}\n","import { Component, Host, HostBinding, Input, Optional } from '@angular/core';\nimport {FormComponent, invalidFieldsSymbol} from \"../form.component\";\nimport {isNullOrUndefined} from \"../../util/values\";\n\n@Component({\n\tselector: 'klp-form-submit-button',\n\ttemplateUrl: './form-submit-button.component.html',\n\tstyleUrls: ['./form-submit-button.component.scss'],\n})\nexport class FormSubmitButtonComponent {\n\t@Input() public isLoading = false;\n\t@Input() fullWidth = false;\n\t@Input() variant: 'greenFilled' | 'redFilled' = 'greenFilled';\n\t@Input() public submitCallback: (any) => Promise<void>;\n\n\t@HostBinding('class._fullWidth') get _() {\n\t\treturn this.fullWidth;\n\t}\n\n\tconstructor(@Host() @Optional() private parentForm: FormComponent) {}\n\n\tsubmitForm() {\n\t\tthis.parentForm\n\t\t\t.trySubmit()\n\t\t\t.then((value) => {\n\t\t\t\tthis.isLoading = true;\n\t\t\t\tconst submitCallbackResult = this.submitCallback(value);\n\t\t\t\tif (isNullOrUndefined(submitCallbackResult)) {\n\t\t\t\t\tthrow new Error('No promise is returned in your submit function.');\n\t\t\t\t}\n\t\t\t\treturn submitCallbackResult.then(() => (this.isLoading = false)).catch((e) => {\n\t\t\t\t\tthis.isLoading = false\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\tif (e === invalidFieldsSymbol) {\n\t\t\t\t\treturn // swallow the error, the framework will scroll to the field that needs attention\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t});\n\t}\n}\n","import {Component, Host, Input, Optional} from '@angular/core';\nimport {ControlContainer} from '@angular/forms';\nimport {ValueAccessorBase} from './value-accessor-base.component';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\nimport {isValueSet} from '../../util/values';\n\n@Component({\n\tselector: '',\n\ttemplate: '',\n})\nexport class MultipleValueAccessorBase<T> extends ValueAccessorBase<Array<T> | T> {\n\t@Input() multiple = false;\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer\n\t) {\n\t\tsuper(parent, controlContainer);\n\t}\n\n\twriteValue(value: Array<T> | T): void {\n\t\tif (this.multiple) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.writeValue(value.filter(isValueSet));\n\t\t\t} else {\n\t\t\t\tsuper.writeValue([value].filter(isValueSet));\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.writeValue(value[0]);\n\t\t\t} else {\n\t\t\t\tsuper.writeValue(value);\n\t\t\t}\n\t\t}\n\t}\n\n\tsetInnerValueAndNotify(value: T | Array<T>): void {\n\t\tif (this.multiple) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.setInnerValueAndNotify(value.filter(isValueSet));\n\t\t\t} else {\n\t\t\t\tsuper.setInnerValueAndNotify([value].filter(isValueSet));\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tsuper.setInnerValueAndNotify(value[0]);\n\t\t\t} else {\n\t\t\t\tsuper.setInnerValueAndNotify(value);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport const invalidDateKey = '--invalid_date--';\n\nexport function dateValidator(control: AbstractControl): ValidationErrors | null {\n\tconst invalid = control.value === invalidDateKey;\n\treturn invalid ? { date: control.value } : null;\n}\n","import {Component, Host, Inject, InjectionToken, Input, Optional} from '@angular/core';\nimport {ControlContainer, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {format as dateFormat, parse} from 'date-fns';\nimport {MultipleValueAccessorBase} from '../value-accessor-base/multiple-value-accessor-base.component';\nimport {invalidDateKey} from '../../validators/dateValidator';\nimport {isNullOrUndefined, isValueSet, stringIsSetAndFilled} from '../../util/values';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\n\nexport const DATE_PICKER_TRANSLATIONS = new InjectionToken<any>('klp.form.date.translations');\n\n@Component({\n\tselector: 'klp-form-date-picker',\n\ttemplateUrl: './date-picker.component.html',\n\tstyleUrls: ['./date-picker.component.scss'],\n\tproviders: [{provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true}],\n})\nexport class DatePickerComponent extends MultipleValueAccessorBase<string | typeof invalidDateKey> {\n\t@Input() public minDate: Date = undefined;\n\t@Input() public maxDate: Date = undefined;\n\t@Input() public sameMonthOnly = false;\n\t@Input() public format = 'dd-MM-yyyy';\n\t@Input() public placeholder: string;\n\t@Input() public clearable = false;\n\n\tpublic dateValue: Date | Array<Date>;\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer,\n\t\t@Inject(DATE_PICKER_TRANSLATIONS) @Optional() private translations: any,\n\t) {\n\t\tsuper(parent, controlContainer);\n\t}\n\n\twriteValue(value: string | Array<string> | typeof invalidDateKey): void {\n\t\tif (value === invalidDateKey) {\n\t\t\tsuper.writeValue(invalidDateKey);\n\t\t} else if (isNullOrUndefined(value)) {\n\t\t\tthis.dateValue = null;\n\t\t\tsuper.writeValue(null);\n\t\t} else {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tthis.dateValue = value.map((e) => parse(e, 'yyyy-MM-dd', new Date()));\n\t\t\t} else {\n\t\t\t\tthis.dateValue = parse(value, 'yyyy-MM-dd', new Date());\n\t\t\t}\n\t\t\tsuper.writeValue(value);\n\t\t}\n\t}\n\n\tdateChanged(value: Date | Array<Date> | typeof invalidDateKey): void {\n\t\tif (value === invalidDateKey) {\n\t\t\tthis.setInnerValueAndNotify(invalidDateKey);\n\t\t} else if (isNullOrUndefined(value)) {\n\t\t\tthis.dateValue = null;\n\t\t\tthis.setInnerValueAndNotify(null);\n\t\t} else {\n\t\t\tthis.dateValue = value;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tthis.setInnerValueAndNotify(value.map((e) => dateFormat(e, 'yyyy-MM-dd')));\n\t\t\t} else {\n\t\t\t\tthis.setInnerValueAndNotify(dateFormat(value, 'yyyy-MM-dd'));\n\t\t\t}\n\t\t}\n\t}\n\n\tgetDefaultTranslation(key: string): (x: any) => string {\n\t\tswitch (key) {\n\t\t\tcase 'placeholder':\n\t\t\t\treturn () => 'Select date';\n\t\t}\n\t}\n\n\tgetTranslation(key: string, params: any = null): string {\n\t\tif (key === 'placeholder' && this.multiple) {\n\t\t\treturn '';\n\t\t}\n\t\tif (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {\n\t\t\treturn this.placeholder;\n\t\t}\n\t\treturn this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);\n\t}\n}\n","import {\n\tAfterViewInit,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tHost,\n\tInject,\n\tInjectionToken,\n\tInput,\n\tOnChanges,\n\tOnInit,\n\tOptional,\n\tSimpleChanges,\n\tViewChild\n} from '@angular/core';\nimport {ControlContainer, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {invalidDateKey} from '../../validators/dateValidator';\nimport {DateFilterFn, MatDatepicker} from '@angular/material/datepicker';\nimport {DateAdapter, MAT_DATE_FORMATS, MAT_NATIVE_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {KlpDateFormats} from '../../types';\nimport {FormElementComponent} from '../../form/form-element/form-element.component';\nimport {MultipleValueAccessorBase} from '../value-accessor-base/multiple-value-accessor-base.component';\nimport {isValueSet, removeDuplicatesFromArray, stringIsSetAndFilled} from '../../util/values';\nimport {endOfMonth, format as formatDate, startOfMonth} from 'date-fns';\n\nexport const KLP_DATE_FORMATS = new InjectionToken<KlpDateFormats>('klp.form.date.formats');\nexport const DATE_TIME_PICKER_TRANSLATIONS = new InjectionToken<any>('klp.form.dateTime.translations');\nexport const DATE_PICKER_LOCALE = new InjectionToken<any>('klp.form.dateTime.locale');\n\nexport function matDateFormatsFactory(component: DateTimePickerComponent, dateFormats?: KlpDateFormats): MatDateFormats {\n\treturn dateFormats?.(component.format) ?? MAT_NATIVE_DATE_FORMATS;\n}\n\n@Component({\n\tselector: 'klp-form-date-time-picker',\n\ttemplateUrl: './date-time-picker.component.html',\n\tstyleUrls: ['./date-time-picker.component.scss'],\n\tproviders: [\n\t\t{provide: NG_VALUE_ACCESSOR, useExisting: DateTimePickerComponent, multi: true},\n\t\t{\n\t\t\tprovide: MAT_DATE_FORMATS,\n\t\t\tdeps: [DateTimePickerComponent, [new Optional(), KLP_DATE_FORMATS]],\n\t\t\tuseFactory: matDateFormatsFactory,\n\t\t},\n\t],\n})\nexport class DateTimePickerComponent extends MultipleValueAccessorBase<Date | typeof invalidDateKey> implements OnInit, AfterViewInit, OnChanges {\n\t@Input() public minDate: Date = undefined;\n\t@Input() public maxDate: Date = undefined;\n\t@Input() public sameMonthOnly = false;\n\t@Input() public format = 'dd-MM-yyyy';\n\t@Input() public placeholder: string;\n\t@Input() public clearable = false;\n\t@Input() public showTimeInput = true;\n\t@Input() public invalidTimeAsMidnight = false; // if the time is not valid, use 00:00 as the time\n\n\t@ViewChild('nativeInput') nativeInputRef: ElementRef;\n\t@ViewChild('picker') datePickerRef: MatDatepicker<Date>;\n\n\tminDateStartOfDay: Date = undefined;\n\tmaxDateEndOfDay: Date = undefined;\n\n\t// this is passed as ngmodel and is used to set the initial date. But we also\n\t// use input and nativeInput callbacks to extend the validation logic so we\n\t// can distinguish between empty and invalid dates.\n\tvalueForMaterialDatePicker: Date;\n\thours: string; // string because it's a text input\n\tminutes: string; // string because it's a text input\n\tprivate selectedDates: Array<Date> = [];\n\tprivate datePickingClosingFn: () => void;\n\tprivate dateTouched = false;\n\tprivate hoursTouched = false;\n\tprivate minutesTouched = false;\n\n\tconstructor(\n\t\t@Host() @Optional() protected parent: FormElementComponent,\n\t\t@Host() @Optional() protected controlContainer: ControlContainer,\n\t\t@Inject(DATE_TIME_PICKER_TRANSLATIONS) @Optional() private translations: any,\n\t\t@Inject(DATE_PICKER_LOCALE) @Optional() private datePickerLocale: any,\n\t\tprivate dateAdapter: DateAdapter<Date>,\n\t\tprivate cdr: ChangeDetectorRef\n\t) {\n\t\tsuper(parent, controlContainer);\n\t\tif (isValueSet(datePickerLocale)) {\n\t\t\tdateAdapter.setLocale(datePickerLocale());\n\t\t}\n\t}\n\n\tngOnInit(): void {\n\t\tsuper.ngOnInit();\n\t\tif (this.multiple) {\n\t\t\tthis.placeholder = '';\n\t\t\tthis.showTimeInput = false;\n\t\t}\n\t}\n\n\tngAfterViewInit(): void {\n\t\tif (this.multiple) {\n\t\t\t// we are going to overwrite the datepicker closing fn later, so we are saving it here to restore it when needed\n\t\t\tthis.datePickingClosingFn = this.datePickerRef.close;\n\t\t}\n\t}\n\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tif (changes.minDate) {\n\t\t\tthis.determineMinAndMaxDates();\n\t\t}\n\t\tif (changes.maxDate) {\n\t\t\tthis.determineMinAndMaxDates();\n\t\t}\n\t}\n\n\tsetMinDate(minDate: Date): void {\n\t\tif (minDate) {\n\t\t\tthis.minDateStartOfDay = new Date(minDate);\n\t\t\tthis.minDateStartOfDay.setHours(0, 0, 0, 0);\n\t\t} else {\n\t\t\tthis.minDateStartOfDay = undefined;\n\t\t}\n\t}\n\n\tsetMaxDate(maxDate: Date): void {\n\t\tif (maxDate) {\n\t\t\tthis.maxDateEndOfDay = new Date(maxDate);\n\t\t\tthis.maxDateEndOfDay.setHours(23, 59, 59, 999);\n\t\t} else {\n\t\t\tthis.maxDateEndOfDay = undefined;\n\t\t}\n\t}\n\n\tgetSelectedMonths(): number {\n\t\treturn removeDuplicatesFromArray(this.selectedDates.map((e) => formatDate(e, 'MMMM'))).length;\n\t}\n\n\t// dateChanged is called when the output of the datepicker is changed and\n\t// parsed correctly. If the date is invalid, it will be called the first time\n\t// with null but never again until a valid input is provided.\n\tdateChanged(event: any): void {\n\t\tconst date = event.value;\n\t\tif (this.multiple) {\n\t\t\tthis.datePickerRef.close = () => {\n\t\t\t};\n\n\t\t\tif (this.selectedDates.some((e) => e.getTime() === date.getTime())) {\n\t\t\t\tthis.selectedDates = this.selectedDates.filter((e) => e.getTime() !== date.getTime());\n\t\t\t} else {\n\t\t\t\tthis.selectedDates = [...this.selectedDates, date];\n\t\t\t}\n\t\t\t// START HACK\n\t\t\t// the date picker does not provide any rerender calls. Therefore, we are going to change the minDate in order to force the render\n\t\t\t// This is needed to show all selected days in our date picker\n\t\t\t// We also set the innerValue to null (with this.valueForMaterialDatePicker = null;), otherwise you can not\n\t\t\t// deselect your last picked date\n\t\t\tthis.cdr.detectChanges();\n\t\t\tthis.valueForMaterialDatePicker = null;\n\t\t\tconst oldMinDate = this.minDateStartOfDay;\n\t\t\tthis.minDateStartOfDay = new Date(0);\n\t\t\tthis.cdr.detectChanges();\n\t\t\tthis.minDateStartOfDay = oldMinDate;\n\t\t\t// END HACK\n\n\t\t\tif (this.sameMonthOnly) {\n\t\t\t\tif (this.selectedDates.length >= 2) {\n\t\t\t\t\tif (date < startOfMonth(this.selectedDates[0]) || date > endOfMonth(this.selectedDates[0])) {\n\t\t\t\t\t\tthis.selectedDates = [date];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.determineMinAndMaxDates();\n\t\t\t}\n\n\t\t\tthis.setInnerValueAndNotify(this.selectedDates);\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.datePickerRef.close = this.datePickingClosingFn;\n\t\t\t});\n\t\t} else {\n\t\t\tthis.notifyNewDate();\n\t\t}\n\t}\n\n\tdetermineMinAndMaxDates(): void {\n\t\tif (this.sameMonthOnly) {\n\t\t\tif (this.selectedDates.length >= 2) {\n\t\t\t\tthis.setMinDate(startOfMonth(this.selectedDates[0]));\n\t\t\t\tthis.setMaxDate(endOfMonth(this.selectedDates[0]));\n\t\t\t} else {\n\t\t\t\tthis.setMinDate(this.minDate);\n\t\t\t\tthis.setMaxDate(this.maxDate);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.setMinDate(this.minDate);\n\t\t\tthis.setMinDate(this.maxDate);\n\t\t}\n\t}\n\n\tnotifyNewDate(): void {\n\t\tconst nativeInputValue = this.nativeInputRef.nativeElement.value;\n\t\tconst parsedHours = Number(this.hours);\n\t\tconst parsedMinutes = Number(this.minutes);\n\n\t\t// if we dont have the time element\n\t\tif (!this.showTimeInput) {\n\t\t\tif (!stringIsSetAndFilled(nativeInputValue)) {\n\t\t\t\tthis.setInnerValueAndNotify(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.valueForMaterialDatePicker instanceof Date) {\n\t\t\t\tthis.setInnerValueAndNotify(this.valueForMaterialDatePicker);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// when all inputs are empty\n\t\tif (!stringIsSetAndFilled(nativeInputValue) && !stringIsSetAndFilled(this.hours) && !stringIsSetAndFilled(this.minutes)) {\n\t\t\tthis.setInnerValueAndNotify(null);\n\t\t\treturn;\n\t\t}\n\t\t// if we have date and time\n\t\tif (\n\t\t\tstringIsSetAndFilled(this.hours) &&\n\t\t\tNumber.isFinite(parsedHours) &&\n\t\t\tparsedHours >= 0 &&\n\t\t\tparsedHours <= 23 &&\n\t\t\tstringIsSetAndFilled(this.minutes) &&\n\t\t\tNumber.isFinite(parsedMinutes) &&\n\t\t\tparsedMinutes >= 0 &&\n\t\t\tparsedMinutes <= 59 &&\n\t\t\tthis.valueForMaterialDatePicker instanceof Date\n\t\t) {\n\t\t\tconst newDateWithHours = new Date(this.valueForMaterialDatePicker.setHours(parsedHours));\n\t\t\tconst newDateWithMinutes = new Date(newDateWithHours.setMinutes(parsedMinutes));\n\t\t\tthis.setInnerValueAndNotify(newDateWithMinutes);\n\t\t\treturn;\n\t\t}\n\t\tif (this.invalidTimeAsMidnight) {\n\t\t\tif (this.valueForMaterialDatePicker instanceof Date) {\n\t\t\t\tthis.setInnerValueAndNotify(this.valueForMaterialDatePicker);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// all other cases, we are not in a valid state\n\t\tthis.setInnerValueAndNotify(invalidDateKey);\n\t}\n\n\twriteValue(value: Date | Array<Date> | typeof invalidDateKey): void {\n\t\tsuper.writeValue(value);\n\t\tif (Array.isArray(value)) {\n\t\t\tthis.selectedDates = value;\n\t\t\tthis.determineMinAndMaxDates();\n\t\t\tthis.valueForMaterialDatePicker = null;\n\t\t} else {\n\t\t\tthis.valueForMaterialDatePicker = value === invalidDateKey ? null : value;\n\t\t\tif (value instanceof Date) {\n\t\t\t\tthis.hours = String(value.getHours());\n\t\t\t\tthis.minutes = String(value.getMinutes());\n\t\t\t\tthis.formatTime();\n\t\t\t} else {\n\t\t\t\tthis.hours = '';\n\t\t\t\tthis.minutes = '';\n\t\t\t}\n\t\t}\n\t}\n\n\t// nativeValueChanged is called when the internal text value changes, but not\n\t// when the date is changed via the date picker. We need this so that we can\n\t// determine if the datepicker is empty or invalid.\n\tnativeValueChanged(): void {\n\t\tif (this.datePickerRef.opened) {\n\t\t\t// if the user is typing instead of using the picker, close it.\n\t\t\tthis.datePickerRef.close();\n\t\t}\n\t\tthis.notifyNewDate();\n\t}\n\n\tresetToNull(): void {\n\t\tthis.setInnerValueAndNotify(null);\n\t\tthis.valueForMaterialDatePicker = null;\n\t\tthis.nativeInputRef.nativeElement.value = null;\n\t\tthis.hours = '';\n\t\tthis.minutes = '';\n\t\tthis.selectedDates = [];\n\t}\n\n\tisSelected = (d: Date) => {\n\t\tif (this.multiple) {\n\t\t\treturn this.selectedDates.some((e) => e.getTime() === d.getTime()) ? 'selected' : '';\n\t\t}\n\t\treturn '';\n\t};\n\tfilterDates: DateFilterFn<any> = (e) => {\n\t\tif (this.disabled) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tformatTime(): void {\n\t\tif (Number.isFinite(Number(this.hours)) && this.hours.length === 1) {\n\t\t\tthis.hours = '0' + this.hours;\n\t\t}\n\t\tif (Number.isFinite(Number(this.minutes)) && this.minutes.length === 1) {\n\t\t\tthis.minutes = '0' + this.minutes;\n\t\t}\n\t}\n\n\ttouchDate(): void {\n\t\tthis.dateTouched = true;\n\t\tthis.determineAllTouched();\n\t}\n\n\ttouchHours(): void {\n\t\tthis.hoursTouched = true;\n\t\tthis.determineAllTouched();\n\t}\n\n\ttouchMinutes(): void {\n\t\tthis.minutesTouched = true;\n\t\tthis.determineAllTouched();\n\t}\n\n\tdetermineAllTouched(): void {\n\t\tif ((this.dateTouched && this.hoursTouched && this.minutesTouched) || (this.dateTouched && !this.showTimeInput)) {\n\t\t\tthis.touch();\n\t\t}\n\t}\n\n\n\tgetDefaultTranslation(key: string): (x: any) => string {\n\t\tswitch (key) {\n\t\t\tcase 'placeholder':\n\t\t\t\treturn () => 'Select date';\n\t\t\tcase 'selectDays':\n\t\t\t\treturn () => 'Select day(s)';\n\t\t\tcase 'selectedDate':\n\t\t\t\treturn (d: Date) => d.toLocaleDateString();\n\t\t\tcase 'daysSelected':\n\t\t\t\treturn (amount) => `${amount} days selected`;\n\t\t\tcase 'selectedInMonth':\n\t\t\t\treturn (d: Date) => ` in ${formatDate(d, 'MMMM')}`;\n\t\t}\n\t}\n\n\tgetTranslation(key: string, params: any = null): string {\n\t\tif (key === 'placeholder' && this.multiple) {\n\t\t\treturn '';\n\t\t}\n\t\tif (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {\n\t\t\treturn this.placeholder;\n\t\t}\n\t\treturn this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);\n\t}\n}\n","// material.module.ts\n\nimport { NgModule } from '@angular/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n\timports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule],\n\texports: [MatDatepickerModule, MatFormFieldModule, MatNativeDateModule, MatInputModule, MatButtonModule],\n\tproviders: [MatDatepickerModule],\n})\nexport class MaterialModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {ValueAccessorBase} from './elements/value-accessor-base/value-accessor-base.component';\nimport {ButtonComponent} from './elements/button/button.component';\nimport {CheckboxComponent} from './elements/checkbox/checkbox.component';\nimport {EmailInputComponent} from './elements/email/email-input.component';\nimport {LoadingIndicatorComponent} from './elements/loading-indicator/loading-indicator.component';\nimport {NumberInputComponent} from './elements/number-input/number-input.component';\nimport {PasswordFieldComponent} from './elements/password-field/password-field.component';\nimport {SelectComponent} from './elements/select/select.component';\nimport {SelectFooterComponent} from './elements/select/select-footer/select-footer.component';\nimport {SortableItemsComponent} from './elements/sortable-items/sortable-items.component';\nimport {TextInputComponent} from './elements/text-input/text-input.component';\nimport {ToggleComponent} from './elements/toggle/toggle.component';\nimport {FormCaptionComponent} from './form/form-caption/form-caption.component';\nimport {FormElementComponent} from './form/form-element/form-element.component';\nimport {FormErrorComponent} from './form/form-error/form-error.component';\nimport {FormSubmitButtonComponent} from './form/form-submit-button/form-submit-button.component';\nimport {FormComponent, SubFormDirective} from './form/form.component';\nimport {SortablejsModule} from 'ngx-sortablejs';\nimport {NgSelectModule} from '@ng-select/ng-select';\nimport {DatePickerComponent} from './elements/date-picker/date-picker.component';\nimport {DateTimePickerComponent} from './elements/date-time-picker/date-time-picker.component';\nimport {MaterialModule} from './material.module';\nimport {MultipleValueAccessorBase} from './elements/value-accessor-base/multiple-value-accessor-base.component';\n\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tNgSelectModule,\n\t\tSortablejsModule,\n\t\tMaterialModule,\n\t],\n\tdeclarations: [\n\t\tValueAccessorBase,\n\t\tMultipleValueAccessorBase,\n\t\tButtonComponent,\n\t\tCheckboxComponent,\n\t\tDatePickerComponent,\n\t\tDateTimePickerComponent,\n\t\tEmailInputComponent,\n\t\tLoadingIndicatorComponent,\n\t\tNumberInputComponent,\n\t\tPasswordFieldComponent,\n\t\tSelectComponent,\n\t\tSelectFooterComponent,\n\t\tSortableItemsComponent,\n\t\tTextInputComponent,\n\t\tToggleComponent,\n\t\tFormCaptionComponent,\n\t\tFormElementComponent,\n\t\tFormErrorComponent,\n\t\tFormSubmitButtonComponent,\n\t\tFormComponent,\n\t\tSubFormDirective,\n\t],\n\texports: [\n\t\tValueAccessorBase,\n\t\tMultipleValueAccessorBase,\n\t\tButtonComponent,\n\t\tDatePickerComponent,\n\t\tDateTimePickerComponent,\n\t\tCheckboxComponent,\n\t\tEmailInputComponent,\n\t\tLoadingIndicatorComponent,\n\t\tNumberInputComponent,\n\t\tPasswordFieldComponent,\n\t\tSelectComponent,\n\t\tSelectFooterComponent,\n\t\tSortableItemsComponent,\n\t\tTextInputComponent,\n\t\tToggleComponent,\n\t\tFormCaptionComponent,\n\t\tFormElementComponent,\n\t\tFormErrorComponent,\n\t\tFormSubmitButtonComponent,\n\t\tFormComponent,\n\t\tSubFormDirective,\n\t]\n})\nexport class NgxEnhancyFormsModule {\n}\n","/*\n * Public API Surface of ngx-enhancy-forms\n */\n\nexport * from './lib/ngx-enhancy-forms.module';\n\nexport * from './lib/elements/button/button.component';\nexport * from './lib/elements/checkbox/checkbox.component';\nexport * from './lib/elements/date-picker/date-picker.component';\nexport * from './lib/elements/date-time-picker/date-time-picker.component';\nexport * from './lib/elements/email/email-input.component';\nexport * from './lib/elements/loading-indicator/loading-indicator.component';\nexport * from './lib/elements/number-input/number-input.component';\nexport * from './lib/elements/password-field/password-field.component';\nexport * from './lib/elements/select/select-footer/select-footer.component';\nexport * from './lib/elements/select/select.component';\nexport * from './lib/elements/sortable-items/sortable-items.component';\nexport * from './lib/elements/text-input/text-input.component';\nexport * from './lib/elements/toggle/toggle.component';\nexport * from './lib/elements/value-accessor-base/value-accessor-base.component';\nexport * from './lib/elements/value-accessor-base/multiple-value-accessor-base.component';\n\nexport * from './lib/form/form.component';\nexport * from './lib/form/form-caption/form-caption.component';\nexport * from './lib/form/form-element/form-element.component';\nexport * from './lib/form/form-error/form-error.component';\nexport * from './lib/form/form-submit-button/form-submit-button.component';\n\nexport * from './lib/validators/dateValidator';\n\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MaterialModule as ɵa} from './lib/material.module';"],"names":["dateFormat","formatDate"],"mappings":"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"}
|