@klippa/ngx-enhancy-forms 5.0.0 → 5.2.1
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 +49 -12
- package/bundles/klippa-ngx-enhancy-forms.umd.js.map +1 -1
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js +2 -2
- package/bundles/klippa-ngx-enhancy-forms.umd.min.js.map +1 -1
- package/esm2015/lib/elements/date-picker/date-picker.component.js +6 -3
- package/esm2015/lib/elements/date-time-picker/date-time-picker.component.js +5 -2
- package/esm2015/lib/elements/select/select.component.js +6 -2
- package/esm2015/lib/elements/toggle/toggle.component.js +2 -2
- package/esm2015/lib/elements/value-accessor-base/value-accessor-base.component.js +24 -6
- package/esm2015/lib/form/form-element/form-element.component.js +14 -4
- package/esm2015/lib/util/values.js +4 -1
- package/fesm2015/klippa-ngx-enhancy-forms.js +49 -10
- package/fesm2015/klippa-ngx-enhancy-forms.js.map +1 -1
- package/klippa-ngx-enhancy-forms.metadata.json +1 -1
- package/lib/elements/toggle/toggle.component.d.ts +1 -1
- package/lib/elements/value-accessor-base/value-accessor-base.component.d.ts +4 -1
- package/lib/form/form-element/form-element.component.d.ts +5 -1
- package/lib/util/values.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Directive, Input, Component, SkipSelf, Optional, InjectionToken, Host, Inject, ViewChild,
|
|
1
|
+
import { Directive, Input, Component, SkipSelf, Optional, InjectionToken, Host, Inject, ViewChild, EventEmitter, Output, HostBinding, ContentChild, TemplateRef, ChangeDetectorRef, NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormArray, FormGroup, FormControl, ControlContainer, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
4
|
import { isString } from 'lodash';
|
|
@@ -38,6 +38,9 @@ function truncateString(s, length) {
|
|
|
38
38
|
}
|
|
39
39
|
return s.substring(0, length) + '...';
|
|
40
40
|
}
|
|
41
|
+
function arrayIsSetAndFilled(arr) {
|
|
42
|
+
return arr !== null && arr !== undefined && arr.length > 0;
|
|
43
|
+
}
|
|
41
44
|
|
|
42
45
|
const invalidFieldsSymbol = Symbol('Not all fields are valid');
|
|
43
46
|
class SubFormDirective {
|
|
@@ -223,6 +226,7 @@ class FormElementComponent {
|
|
|
223
226
|
this.customMessages = customMessages;
|
|
224
227
|
this.direction = 'horizontal';
|
|
225
228
|
this.captionSpacing = 'percentages';
|
|
229
|
+
this.spaceDistribution = '40-60';
|
|
226
230
|
this.swapInputAndCaption = false;
|
|
227
231
|
this.errorMessages = DEFAULT_ERROR_MESSAGES;
|
|
228
232
|
this.customErrorHandlers = [];
|
|
@@ -232,9 +236,10 @@ class FormElementComponent {
|
|
|
232
236
|
return msg.replace(`%${key}%`, parameters[key]);
|
|
233
237
|
}, message);
|
|
234
238
|
}
|
|
235
|
-
registerControl(formControl) {
|
|
239
|
+
registerControl(formControl, input = null) {
|
|
236
240
|
this.attachedControl = formControl;
|
|
237
241
|
this.parent.registerControl(formControl, this);
|
|
242
|
+
this.input = input;
|
|
238
243
|
}
|
|
239
244
|
unregisterControl(formControl) {
|
|
240
245
|
this.attachedControl = null;
|
|
@@ -279,6 +284,12 @@ class FormElementComponent {
|
|
|
279
284
|
// to give some breathing room, we scroll 100px more to the top
|
|
280
285
|
(_a = this.getScrollableParent(this.internalComponentRef.nativeElement)) === null || _a === void 0 ? void 0 : _a.scrollBy(0, -100);
|
|
281
286
|
}
|
|
287
|
+
isRequired() {
|
|
288
|
+
if (isValueSet(this.input)) {
|
|
289
|
+
return this.input.hasValidator('required');
|
|
290
|
+
}
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
282
293
|
getErrorMessage(key) {
|
|
283
294
|
var _a, _b, _c;
|
|
284
295
|
return (_c = (_b = (_a = this.customMessages) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : this.errorMessages[key];
|
|
@@ -287,8 +298,8 @@ class FormElementComponent {
|
|
|
287
298
|
FormElementComponent.decorators = [
|
|
288
299
|
{ type: Component, args: [{
|
|
289
300
|
selector: 'klp-form-element',
|
|
290
|
-
template: "<ng-template #errorRef>\n\t<div *ngIf=\"getErrorToShow()\" class=\"errorContainer\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n<ng-container *ngIf=\"direction === 'horizontal'\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n<div
|
|
291
|
-
styles: [":host{display:block
|
|
301
|
+
template: "<ng-template #errorRef>\n\t<div *ngIf=\"getErrorToShow()\" class=\"errorContainer\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n<ng-container *ngIf=\"direction === 'horizontal'\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n<div class=\"componentContainer\" [ngClass]=\"{vertical: direction === 'vertical', reverseOrder: swapInputAndCaption}\" #internalComponentRef>\n\t<div class=\"caption\" *ngIf=\"caption || captionRef\" [ngClass]=\"{ hasErrors: getErrorToShow() && attachedControl.touched, percentageSpacing: captionSpacing === 'percentages', 'd30-70': spaceDistribution === '30-70' }\">\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\"> *</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\">{{caption}}<span *ngIf=\"isRequired()\"> *</span></div>\n\t</div>\n\t<ng-container *ngIf=\"direction === 'vertical'\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t<div class=\"inputContainer\" [ngClass]=\"{ percentageSpacing: captionSpacing === 'percentages', 'd30-70': spaceDistribution === '30-70' }\">\n\t\t<ng-content></ng-content>\n\t</div>\n</div>\n",
|
|
302
|
+
styles: [":host{display:block}.componentContainer{align-items:center;display:flex}.componentContainer.reverseOrder{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical{display:block;margin-bottom:1rem}.componentContainer.vertical .inputContainer{margin-top:.3125rem}.componentContainer.vertical .errorContainer{margin-left:0}.captionRefContainer{display:flex}.caption{color:#515365;flex:0 0 auto;font-weight:700}.caption.percentageSpacing{flex:0 0 40%}.caption.percentageSpacing.d30-70{flex-basis:30%}.caption.hasErrors{color:#ff8000}.inputContainer{flex:1}.inputContainer.percentageSpacing{flex:0 0 60%}.inputContainer.percentageSpacing.d30-70{flex-basis:70%}.errorContainer{color:#ff8000;margin-left:40%}.errorContainer.d30-70{margin-left:30%}"]
|
|
292
303
|
},] }
|
|
293
304
|
];
|
|
294
305
|
FormElementComponent.ctorParameters = () => [
|
|
@@ -299,6 +310,7 @@ FormElementComponent.propDecorators = {
|
|
|
299
310
|
caption: [{ type: Input }],
|
|
300
311
|
direction: [{ type: Input }],
|
|
301
312
|
captionSpacing: [{ type: Input }],
|
|
313
|
+
spaceDistribution: [{ type: Input }],
|
|
302
314
|
swapInputAndCaption: [{ type: Input }],
|
|
303
315
|
internalComponentRef: [{ type: ViewChild, args: ['internalComponentRef',] }]
|
|
304
316
|
};
|
|
@@ -322,9 +334,11 @@ class ValueAccessorBase {
|
|
|
322
334
|
// we support both providing just the formControlName and the full formControl
|
|
323
335
|
this.formControlName = null;
|
|
324
336
|
this.formControl = null;
|
|
337
|
+
this.onTouch = new EventEmitter();
|
|
338
|
+
this.validators = [];
|
|
325
339
|
}
|
|
326
340
|
ngOnInit() {
|
|
327
|
-
var _a, _b, _c;
|
|
341
|
+
var _a, _b, _c, _d;
|
|
328
342
|
if (this.formControl) {
|
|
329
343
|
this.attachedFormControl = this.formControl;
|
|
330
344
|
}
|
|
@@ -339,7 +353,16 @@ class ValueAccessorBase {
|
|
|
339
353
|
this.attachedFormControl.statusChanges.subscribe(() => {
|
|
340
354
|
this.disabled = this.attachedFormControl.disabled;
|
|
341
355
|
});
|
|
342
|
-
(_c = this.parent) === null || _c === void 0 ? void 0 : _c.registerControl(this.attachedFormControl);
|
|
356
|
+
(_c = this.parent) === null || _c === void 0 ? void 0 : _c.registerControl(this.attachedFormControl, this);
|
|
357
|
+
if ((_d = this.attachedFormControl) === null || _d === void 0 ? void 0 : _d.validator) {
|
|
358
|
+
const vals = this.attachedFormControl.validator({});
|
|
359
|
+
if (isValueSet(vals)) {
|
|
360
|
+
this.validators = Object.keys(vals);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
this.validators = [];
|
|
364
|
+
}
|
|
365
|
+
}
|
|
343
366
|
}
|
|
344
367
|
}
|
|
345
368
|
isInErrorState() {
|
|
@@ -370,6 +393,12 @@ class ValueAccessorBase {
|
|
|
370
393
|
resetToNull() {
|
|
371
394
|
this.setInnerValueAndNotify(null);
|
|
372
395
|
}
|
|
396
|
+
hasValidator(validatorName) {
|
|
397
|
+
if (arrayIsSetAndFilled(this.validators)) {
|
|
398
|
+
return this.validators.includes(validatorName);
|
|
399
|
+
}
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
373
402
|
}
|
|
374
403
|
ValueAccessorBase.decorators = [
|
|
375
404
|
{ type: Component, args: [{
|
|
@@ -384,7 +413,8 @@ ValueAccessorBase.ctorParameters = () => [
|
|
|
384
413
|
ValueAccessorBase.propDecorators = {
|
|
385
414
|
disabled: [{ type: Input }],
|
|
386
415
|
formControlName: [{ type: Input }],
|
|
387
|
-
formControl: [{ type: Input }]
|
|
416
|
+
formControl: [{ type: Input }],
|
|
417
|
+
onTouch: [{ type: Output }]
|
|
388
418
|
};
|
|
389
419
|
|
|
390
420
|
class ButtonComponent {
|
|
@@ -528,13 +558,16 @@ class SelectComponent extends ValueAccessorBase {
|
|
|
528
558
|
getDefaultTranslation(key) {
|
|
529
559
|
switch (key) {
|
|
530
560
|
case 'placeholder':
|
|
531
|
-
return () =>
|
|
561
|
+
return () => 'Pick an option';
|
|
532
562
|
case 'amountSelected':
|
|
533
563
|
return (amount) => `${amount} selected`;
|
|
534
564
|
}
|
|
535
565
|
}
|
|
536
566
|
getTranslation(key, params = null) {
|
|
537
567
|
var _a, _b, _c;
|
|
568
|
+
if (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {
|
|
569
|
+
return this.placeholder;
|
|
570
|
+
}
|
|
538
571
|
return (_c = (_b = (_a = this.translations) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.call(_a, params)) !== null && _c !== void 0 ? _c : this.getDefaultTranslation(key)(params);
|
|
539
572
|
}
|
|
540
573
|
}
|
|
@@ -905,7 +938,7 @@ class DatePickerComponent extends MultipleValueAccessorBase {
|
|
|
905
938
|
getDefaultTranslation(key) {
|
|
906
939
|
switch (key) {
|
|
907
940
|
case 'placeholder':
|
|
908
|
-
return () =>
|
|
941
|
+
return () => 'Select date';
|
|
909
942
|
}
|
|
910
943
|
}
|
|
911
944
|
getTranslation(key, params = null) {
|
|
@@ -913,6 +946,9 @@ class DatePickerComponent extends MultipleValueAccessorBase {
|
|
|
913
946
|
if (key === 'placeholder' && this.multiple) {
|
|
914
947
|
return '';
|
|
915
948
|
}
|
|
949
|
+
if (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {
|
|
950
|
+
return this.placeholder;
|
|
951
|
+
}
|
|
916
952
|
return (_c = (_b = (_a = this.translations) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.call(_a, params)) !== null && _c !== void 0 ? _c : this.getDefaultTranslation(key)(params);
|
|
917
953
|
}
|
|
918
954
|
}
|
|
@@ -1188,7 +1224,7 @@ class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
1188
1224
|
getDefaultTranslation(key) {
|
|
1189
1225
|
switch (key) {
|
|
1190
1226
|
case 'placeholder':
|
|
1191
|
-
return () =>
|
|
1227
|
+
return () => 'Select date';
|
|
1192
1228
|
case 'selectDays':
|
|
1193
1229
|
return () => 'Select day(s)';
|
|
1194
1230
|
case 'selectedDate':
|
|
@@ -1204,6 +1240,9 @@ class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
1204
1240
|
if (key === 'placeholder' && this.multiple) {
|
|
1205
1241
|
return '';
|
|
1206
1242
|
}
|
|
1243
|
+
if (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {
|
|
1244
|
+
return this.placeholder;
|
|
1245
|
+
}
|
|
1207
1246
|
return (_c = (_b = (_a = this.translations) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.call(_a, params)) !== null && _c !== void 0 ? _c : this.getDefaultTranslation(key)(params);
|
|
1208
1247
|
}
|
|
1209
1248
|
}
|
|
@@ -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","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.updateValueAndValidity();\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\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';\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 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\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): void {\n\t\tthis.attachedControl = formControl;\n\t\tthis.parent.registerControl(formControl, this);\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\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, Host, Input, OnDestroy, OnInit, Optional} from '@angular/core';\nimport { FormElementComponent } from '../../form/form-element/form-element.component';\nimport { isNullOrUndefined, 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\n\tprivate attachedFormControl: FormControl;\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);\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","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';\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 () => this.placeholder ?? '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\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","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} 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 () => this.placeholder ?? '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\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 {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 {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');\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\tprivate cdr: ChangeDetectorRef\n\t) {\n\t\tsuper(parent, controlContainer);\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 () => this.placeholder ?? '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\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.updateValueAndValidity();\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\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 {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');\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\tprivate cdr: ChangeDetectorRef\n\t) {\n\t\tsuper(parent, controlContainer);\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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"}
|