@klippa/ngx-enhancy-forms 1.2.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +179 -23
  2. package/bundles/klippa-ngx-enhancy-forms.umd.js +288 -97
  3. package/bundles/klippa-ngx-enhancy-forms.umd.js.map +1 -1
  4. package/bundles/klippa-ngx-enhancy-forms.umd.min.js +2 -2
  5. package/bundles/klippa-ngx-enhancy-forms.umd.min.js.map +1 -1
  6. package/esm2015/klippa-ngx-enhancy-forms.js +2 -17
  7. package/esm2015/lib/elements/button/button.component.js +3 -3
  8. package/esm2015/lib/elements/checkbox/checkbox.component.js +1 -1
  9. package/esm2015/lib/elements/datepicker/datepicker.component.js +111 -0
  10. package/esm2015/lib/elements/email/email-input.component.js +6 -2
  11. package/esm2015/lib/elements/loading-indicator/loading-indicator.component.js +2 -2
  12. package/esm2015/lib/elements/number-input/number-input.component.js +1 -1
  13. package/esm2015/lib/elements/password-field/password-field.component.js +11 -4
  14. package/esm2015/lib/elements/select/select.component.js +8 -12
  15. package/esm2015/lib/elements/sortable-items/sortable-items.component.js +1 -1
  16. package/esm2015/lib/elements/text-input/text-input.component.js +1 -1
  17. package/esm2015/lib/elements/toggle/toggle.component.js +1 -1
  18. package/esm2015/lib/elements/value-accessor-base/value-accessor-base.component.js +1 -1
  19. package/esm2015/lib/form/form-caption/form-caption.component.js +1 -1
  20. package/esm2015/lib/form/form-element/form-element.component.js +29 -5
  21. package/esm2015/lib/form/form-error/form-error.component.js +1 -1
  22. package/esm2015/lib/form/form-submit-button/form-submit-button.component.js +18 -7
  23. package/esm2015/lib/form/form.component.js +21 -7
  24. package/esm2015/lib/material.module.js +17 -0
  25. package/esm2015/lib/ngx-enhancy-forms.module.js +11 -6
  26. package/esm2015/lib/types.js +2 -0
  27. package/esm2015/lib/util/values.js +1 -1
  28. package/esm2015/lib/validators/dateValidator.js +6 -0
  29. package/esm2015/public-api.js +20 -1
  30. package/fesm2015/klippa-ngx-enhancy-forms.js +255 -70
  31. package/fesm2015/klippa-ngx-enhancy-forms.js.map +1 -1
  32. package/klippa-ngx-enhancy-forms.d.ts +1 -16
  33. package/klippa-ngx-enhancy-forms.metadata.json +1 -1
  34. package/lib/elements/datepicker/datepicker.component.d.ts +26 -0
  35. package/lib/elements/password-field/password-field.component.d.ts +1 -0
  36. package/lib/elements/select/select.component.d.ts +3 -3
  37. package/lib/form/form-element/form-element.component.d.ts +9 -2
  38. package/lib/form/form-error/form-error.component.d.ts +2 -1
  39. package/lib/form/form.component.d.ts +2 -0
  40. package/lib/material.module.d.ts +2 -0
  41. package/lib/types.d.ts +15 -0
  42. package/lib/validators/dateValidator.d.ts +3 -0
  43. package/package.json +8 -9
  44. package/public-api.d.ts +19 -0
@@ -1,9 +1,10 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('lodash'), require('@ng-select/ng-select'), require('ngx-sortablejs')) :
3
- typeof define === 'function' && define.amd ? define('@klippa/ngx-enhancy-forms', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'lodash', '@ng-select/ng-select', 'ngx-sortablejs'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.klippa = global.klippa || {}, global.klippa["ngx-enhancy-forms"] = {}), global.ng.core, global.ng.common, global.ng.forms, global.lodash, global.ngSelect, global.ngxSortablejs));
5
- })(this, (function (exports, core, common, forms, lodash, ngSelect, ngxSortablejs) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('lodash'), require('ngx-sortablejs'), require('@ng-select/ng-select'), require('@angular/material/core'), require('@angular/material/datepicker'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/button')) :
3
+ typeof define === 'function' && define.amd ? define('@klippa/ngx-enhancy-forms', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'lodash', 'ngx-sortablejs', '@ng-select/ng-select', '@angular/material/core', '@angular/material/datepicker', '@angular/material/form-field', '@angular/material/input', '@angular/material/button'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.klippa = global.klippa || {}, global.klippa["ngx-enhancy-forms"] = {}), global.ng.core, global.ng.common, global.ng.forms, global.lodash, global.ngxSortablejs, global.ngSelect, global.ng.material.core, global.ng.material.datepicker, global.ng.material.formField, global.ng.material.input, global.ng.material.button));
5
+ })(this, (function (exports, core, common, forms, lodash, ngxSortablejs, ngSelect, core$1, datepicker, formField, input, button) { 'use strict';
6
6
 
7
+ var invalidFieldsSymbol = Symbol('Not all fields are valid');
7
8
  var FormComponent = /** @class */ (function () {
8
9
  function FormComponent() {
9
10
  // we keep track of what form controls are actually rendered. Only those count when looking at form validation
@@ -44,25 +45,38 @@
44
45
  });
45
46
  };
46
47
  FormComponent.prototype.disableInactiveFormControl = function (control) {
47
- if (this.activeControls.some(function (e) { return e.formControl === control; })) {
48
- control.enable();
49
- }
50
- else {
48
+ if (!this.activeControls.some(function (e) { return e.formControl === control; })) {
51
49
  control.disable();
52
50
  }
53
51
  };
54
52
  FormComponent.prototype.trySubmit = function () {
55
53
  var _a, _b;
56
54
  this.formGroup.markAllAsTouched();
55
+ var originalDisabledStates = Object.values(this.formGroup.controls).map(function (e) {
56
+ return { control: e, disabled: e.disabled };
57
+ });
57
58
  this.disableInactiveFormGroupControls(this.formGroup);
59
+ var values = this.formGroup.value;
58
60
  if (this.formGroup.valid) {
59
- return Promise.resolve(this.formGroup.value);
61
+ this.setDisabledStatesForAllControls(originalDisabledStates);
62
+ return Promise.resolve(values);
60
63
  }
61
64
  else {
62
65
  (_b = (_a = this.activeControls.find(function (e) { return !e.formControl.valid; })) === null || _a === void 0 ? void 0 : _a.formElement) === null || _b === void 0 ? void 0 : _b.scrollTo();
63
- return Promise.reject('Not all fields are valid');
66
+ this.setDisabledStatesForAllControls(originalDisabledStates);
67
+ return Promise.reject(invalidFieldsSymbol);
64
68
  }
65
69
  };
70
+ FormComponent.prototype.setDisabledStatesForAllControls = function (originalDisabledStates) {
71
+ originalDisabledStates.forEach(function (e) {
72
+ if (e.disabled) {
73
+ e.control.disable();
74
+ }
75
+ else {
76
+ e.control.enable();
77
+ }
78
+ });
79
+ };
66
80
  return FormComponent;
67
81
  }());
68
82
  FormComponent.decorators = [
@@ -76,14 +90,33 @@
76
90
  formGroup: [{ type: core.Input }]
77
91
  };
78
92
 
93
+ var FORM_ERROR_MESSAGES = new core.InjectionToken('form.error.messages');
94
+ var DEFAULT_ERROR_MESSAGES = {
95
+ min: "Use a number larger than %min%",
96
+ max: "Use a number smaller than %max%",
97
+ required: "This field is required",
98
+ email: "Use a valid email address",
99
+ minLength: "Has to be longer than %minLength% character(s)",
100
+ maxLength: "Has to be shorter than %maxLength% character(s)",
101
+ pattern: "This input is not valid",
102
+ matchPassword: "Passwords must match",
103
+ date: "Enter a valid date",
104
+ };
79
105
  var FormElementComponent = /** @class */ (function () {
80
- function FormElementComponent(parent) {
106
+ function FormElementComponent(parent, customMessages) {
81
107
  this.parent = parent;
108
+ this.customMessages = customMessages;
82
109
  this.direction = 'horizontal';
83
110
  this.captionSpacing = 'percentages';
84
111
  this.swapInputAndCaption = false;
112
+ this.errorMessages = DEFAULT_ERROR_MESSAGES;
85
113
  this.customErrorHandlers = [];
86
114
  }
115
+ FormElementComponent.prototype.substituteParameters = function (message, parameters) {
116
+ return Object.keys(parameters).reduce(function (msg, key) {
117
+ return msg.replace("%" + key + "%", parameters[key]);
118
+ }, message);
119
+ };
87
120
  FormElementComponent.prototype.registerControl = function (formControl) {
88
121
  this.attachedControl = formControl;
89
122
  this.parent.registerControl(formControl, this);
@@ -131,17 +164,22 @@
131
164
  // to give some breathing room, we scroll 100px more to the top
132
165
  (_a = this.getScrollableParent(this.internalComponentRef.nativeElement)) === null || _a === void 0 ? void 0 : _a.scrollBy(0, -100);
133
166
  };
167
+ FormElementComponent.prototype.getErrorMessages = function (key) {
168
+ var _a, _b, _c;
169
+ 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];
170
+ };
134
171
  return FormElementComponent;
135
172
  }());
136
173
  FormElementComponent.decorators = [
137
174
  { type: core.Component, args: [{
138
175
  selector: 'klp-form-element',
139
- template: "<ng-template #errorRef>\n\t<div *ngIf=\"getErrorToShow()\" class=\"errorContainer\">\n\t\t<div *ngIf=\"showDefaultError('min')\" translate [translateParams]=\"{min: attachedControl.errors.min.min}\">Use a number larger than %min%</div>\n\t\t<div *ngIf=\"showDefaultError('max')\" translate [translateParams]=\"{max: attachedControl.errors.max.max}\">Use a number smaller than %max%</div>\n\t\t<div *ngIf=\"showDefaultError('required')\" translate>This field is required</div>\n\t\t<div *ngIf=\"showDefaultError('email')\" translate>Use a valid email address</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\" translate [translateParams]=\"{minLength: attachedControl.errors.minlength.requiredLength}\">Has to be longer than %minLength% character(s)</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\" translate [translateParams]=\"{maxlength: attachedControl.errors.maxlength.requiredLength}\">Has to be shorter than %maxlength% character(s)</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\" translate>This input is not valid</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\" translate>Passwords must match</div>\n\t\t<div *ngIf=\"showDefaultError('date')\" translate>Enter a valid date</div>\n\t\t<div *ngIf=\"showDefaultError('message')\" translate>{{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 *ngIf=\"attachedControl\" class=\"componentContainer\" [ngClass]=\"{vertical: direction === 'vertical', reverseOrder: swapInputAndCaption}\" #internalComponentRef>\n\t<div class=\"caption\" [ngClass]=\"{ hasErrors: getErrorToShow() && attachedControl.touched, percentageSpacing: captionSpacing === 'percentages' }\">\n\t\t<div *ngIf=\"captionRef\" [ngTemplateOutlet]=\"captionRef\"></div>\n\t\t<div *ngIf=\"!captionRef\">{{caption}}</div>\n\t</div>\n\t<ng-container *ngIf=\"direction === 'vertical'\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t<div class=\"inputContainer\" [ngClass]=\"{ percentageSpacing: captionSpacing === 'percentages' }\">\n\t\t<ng-content></ng-content>\n\t</div>\n</div>\n",
176
+ template: "<ng-template #errorRef>\n\t<div *ngIf=\"getErrorToShow()\" class=\"errorContainer\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessages(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessages(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessages(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessages(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessages(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessages(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessages(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessages(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessages(\"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 *ngIf=\"attachedControl\" class=\"componentContainer\" [ngClass]=\"{vertical: direction === 'vertical', reverseOrder: swapInputAndCaption}\" #internalComponentRef>\n\t<div class=\"caption\" [ngClass]=\"{ hasErrors: getErrorToShow() && attachedControl.touched, percentageSpacing: captionSpacing === 'percentages' }\">\n\t\t<div *ngIf=\"captionRef\" [ngTemplateOutlet]=\"captionRef\"></div>\n\t\t<div *ngIf=\"!captionRef\">{{caption}}</div>\n\t</div>\n\t<ng-container *ngIf=\"direction === 'vertical'\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t<div class=\"inputContainer\" [ngClass]=\"{ percentageSpacing: captionSpacing === 'percentages' }\">\n\t\t<ng-content></ng-content>\n\t</div>\n</div>\n",
140
177
  styles: [":host{display:block;margin-top:1.25rem}.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}.caption{color:#515365;flex:0 0 auto;font-weight:700}.caption.percentageSpacing{flex:0 0 40%}.caption.hasErrors{color:#ff8000}.inputContainer{flex:0 0 auto}.inputContainer.percentageSpacing{flex:0 0 60%}.errorContainer{color:#ff8000;margin-left:40%}"]
141
178
  },] }
142
179
  ];
143
180
  FormElementComponent.ctorParameters = function () { return [
144
- { type: FormComponent, decorators: [{ type: core.Host }, { type: core.Optional }] }
181
+ { type: FormComponent, decorators: [{ type: core.Host }, { type: core.Optional }] },
182
+ { type: undefined, decorators: [{ type: core.Inject, args: [FORM_ERROR_MESSAGES,] }, { type: core.Optional }] }
145
183
  ]; };
146
184
  FormElementComponent.propDecorators = {
147
185
  caption: [{ type: core.Input }],
@@ -274,6 +312,48 @@
274
312
  formControl: [{ type: core.Input }]
275
313
  };
276
314
 
315
+ var ButtonComponent = /** @class */ (function () {
316
+ function ButtonComponent() {
317
+ this.variant = 'white';
318
+ this.size = 'medium';
319
+ this.fullWidth = false;
320
+ this.hasBorder = true;
321
+ this.disabled = false;
322
+ this.isLoading = false;
323
+ this.type = 'button';
324
+ }
325
+ Object.defineProperty(ButtonComponent.prototype, "_", {
326
+ get: function () {
327
+ return this.fullWidth;
328
+ },
329
+ enumerable: false,
330
+ configurable: true
331
+ });
332
+ ButtonComponent.prototype.onClick = function (event) {
333
+ if (this.disabled) {
334
+ event.stopPropagation();
335
+ }
336
+ };
337
+ return ButtonComponent;
338
+ }());
339
+ ButtonComponent.decorators = [
340
+ { type: core.Component, args: [{
341
+ selector: 'klp-form-button',
342
+ template: "<button class=\"buttonFundamentals\"\n\t[ngClass]=\"[\n\t\tvariant,\n\t\tsize,\n\t\tfullWidth ? 'fullWidth' : '',\n\t\thasBorder ? '' : 'no-border',\n\t\tdisabled ? 'disabled' : ''\n\t]\"\n\t[type]=\"type\"\n\t(click)=\"onClick($event)\"\n>\n\t<div class=\"caption\" [ngClass]=\"{invisible: isLoading}\">\n\t\t<ng-content></ng-content>\n\t</div>\n\t<div class=\"loadingSpinnerContainer\" *ngIf=\"isLoading\">\n\t\t<klp-form-loading-indicator variant=\"spinner\" size=\"small\"></klp-form-loading-indicator>\n\t</div>\n</button>\n",
343
+ styles: [":host{display:inline-block}:host._fullWidth{display:block}.buttonFundamentals{border:1px solid #e6ecf5;border-radius:5px;color:#888da8;cursor:pointer;font-size:13px;font-weight:700;letter-spacing:1px;padding:10px 20px}.fullWidth{width:100%}.no-border{border:none}.caption.invisible{visibility:hidden}button{position:relative}.loadingSpinnerContainer{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.small{padding-bottom:.375rem;padding-top:.375rem}.large{line-height:2}.white{background-color:#fff;border-color:#d4deee;color:#515365;font-weight:500}.white:active,.white:hover{background-color:#edf2f8;border-color:#edf2f8;color:#515365}.white:focus{text-decoration:underline}.greenFilled{background-color:#27bb5f;border-color:#27bb5f;color:#fff}.greenFilled:hover{background-color:#2bd06a;border-color:#2bd06a;color:#fff}.greenFilled:focus{text-decoration:underline}.greenFilled:active{background-color:#23a654;border-color:#23a654}.greenOutlined{background-color:#fff;border-color:#27bb5f;color:#27bb5f}.greenOutlined:hover{background-color:#2bd06a;border-color:#2bd06a;color:#fff}.greenOutlined:focus{text-decoration:underline}.greenOutlined:active{background-color:#23a654;border-color:#23a654}.greenLink{background:none;border:none;color:#27bb5f;padding:0}.greenLink:focus,.greenLink:hover{text-decoration:underline}.contextMenuItem{background-color:#fff;border-color:#fff;color:#888da8}.contextMenuItem:hover{background-color:#f6f7fb;border-color:#f6f7fb}.contextMenuItem:active,.contextMenuItem:focus{text-decoration:underline}.redFilled{background-color:#ff3c7e;border-color:#ff3c7e;color:#fff}.redFilled:hover{background-color:#ff568f;border-color:#ff568f;color:#fff}.redFilled:focus{text-decoration:underline}.redFilled:active{background-color:#ff236d;border-color:#ff236d}.redOutlined{background-color:#fff;border-color:#ff3c7e;color:#ff3c7e}.redOutlined:hover{background-color:#ff568f;border-color:#ff568f;color:#fff}.redOutlined:focus{text-decoration:underline}.redOutlined:active{background-color:#ff236d;border-color:#ff236d}.orangeFilled{background-color:#ff8000;border-color:#ff8000;color:#fff}.orangeFilled:hover{background-color:#ff8d1a;border-color:#ff8d1a;color:#fff}.orangeFilled:focus{text-decoration:underline}.orangeFilled:active{background-color:#e67300;border-color:#e67300}"]
344
+ },] }
345
+ ];
346
+ ButtonComponent.propDecorators = {
347
+ variant: [{ type: core.Input }],
348
+ size: [{ type: core.Input }],
349
+ fullWidth: [{ type: core.Input }],
350
+ hasBorder: [{ type: core.Input }],
351
+ disabled: [{ type: core.Input }],
352
+ isLoading: [{ type: core.Input }],
353
+ type: [{ type: core.Input }],
354
+ _: [{ type: core.HostBinding, args: ['class._fullWidth',] }]
355
+ };
356
+
277
357
  /*! *****************************************************************************
278
358
  Copyright (c) Microsoft Corporation.
279
359
 
@@ -615,14 +695,16 @@
615
695
  var EmailInputComponent = /** @class */ (function (_super) {
616
696
  __extends(EmailInputComponent, _super);
617
697
  function EmailInputComponent() {
618
- return _super !== null && _super.apply(this, arguments) || this;
698
+ var _this = _super.apply(this, __spread(arguments)) || this;
699
+ _this.placeholder = '';
700
+ return _this;
619
701
  }
620
702
  return EmailInputComponent;
621
703
  }(ValueAccessorBase));
622
704
  EmailInputComponent.decorators = [
623
705
  { type: core.Component, args: [{
624
706
  selector: 'klp-form-email-input',
625
- template: "<input\n\ttype=\"email\"\n\tclass=\"form-control\"\n\t[(ngModel)]=\"innerValue\"\n\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t[placeholder]=\"placeholder ? placeholder : ''\"\n\t(blur)=\"touch()\"\n/>\n",
707
+ template: "<input\n\ttype=\"email\"\n\tclass=\"form-control\"\n\t[(ngModel)]=\"innerValue\"\n\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t[placeholder]=\"placeholder\"\n\t(blur)=\"touch()\"\n/>\n",
626
708
  providers: [{ provide: forms.NG_VALUE_ACCESSOR, useExisting: EmailInputComponent, multi: true }],
627
709
  styles: [":host,input{display:block}input{-moz-transition:all .2s ease-in;-ms-transition:all .2s ease-in;-o-transition:all .2s ease-in;-webkit-transition:all .2s ease-in;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;color:#888da8;font-size:14px;height:42px;outline:none;padding:.375rem .625rem;transition:all .2s ease-in;width:100%}input::-webkit-input-placeholder{color:#adadad}input:-moz-placeholder,input::-moz-placeholder{color:#adadad}input:-ms-input-placeholder{color:#adadad}input:focus{border-color:#3ed778;box-shadow:none;outline:0 none}input.input-sm{height:30px}input.input-lg{height:50px}input.error{background-color:#ffeff4;border-color:#ff3c7e}input.valid{background-color:#ebfaeb;border-color:#37c936;color:#278d26}.showErrors{border-color:#ff8000}"]
628
710
  },] }
@@ -631,6 +713,25 @@
631
713
  placeholder: [{ type: core.Input }]
632
714
  };
633
715
 
716
+ var LoadingIndicatorComponent = /** @class */ (function () {
717
+ function LoadingIndicatorComponent() {
718
+ this.variant = '3dots';
719
+ this.size = 'medium';
720
+ }
721
+ return LoadingIndicatorComponent;
722
+ }());
723
+ LoadingIndicatorComponent.decorators = [
724
+ { type: core.Component, args: [{
725
+ selector: 'klp-form-loading-indicator',
726
+ template: "<div class=\"threeDots\" [class]=\"size\" *ngIf=\"variant === '3dots'\">\n\t<div></div>\n\t<div></div>\n\t<div></div>\n\t<div></div>\n</div>\n\n<div class=\"spinner\" [class]=\"size\" *ngIf=\"variant === 'spinner'\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n\t\t<circle cx=\"24\" cy=\"4\" r=\"4\" fill=\"currentColor\" />\n\t\t<circle cx=\"12.19\" cy=\"7.86\" r=\"3.7\" fill=\"currentColor\" />\n\t\t<circle cx=\"5.02\" cy=\"17.68\" r=\"3.4\" fill=\"currentColor\" />\n\t\t<circle cx=\"5.02\" cy=\"30.32\" r=\"3.1\" fill=\"currentColor\" />\n\t\t<circle cx=\"12.19\" cy=\"40.14\" r=\"2.8\" fill=\"currentColor\" />\n\t\t<circle cx=\"24\" cy=\"44\" r=\"2.5\" fill=\"currentColor\" />\n\t\t<circle cx=\"35.81\" cy=\"40.14\" r=\"2.2\" fill=\"currentColor\" />\n\t\t<circle cx=\"42.98\" cy=\"30.32\" r=\"1.9\" fill=\"currentColor\" />\n\t\t<circle cx=\"42.98\" cy=\"17.68\" r=\"1.6\" fill=\"currentColor\" />\n\t\t<circle cx=\"35.81\" cy=\"7.86\" r=\"1.3\" fill=\"currentColor\" />\n\t</svg>\n</div>\n\n<div class=\"textInput\" *ngIf=\"variant === 'textInput'\">\n\t<input\n\t\tdisabled\n\t\ttype=\"text\"\n\t\tclass=\"form-control\"\n\t\tplaceholder=\"Loading...\"\n\t>\n</div>\n\n<div class=\"picker\" *ngIf=\"variant === 'picker'\">\n\t<input\n\t\tdisabled\n\t\ttype=\"text\"\n\t\tclass=\"form-control\"\n\t\tplaceholder=\"Loading...\"\n\t>\n\t<div class=\"chevronDown\"></div>\n</div>\n",
727
+ styles: [".threeDots,:host{display:block}.threeDots{height:var(--base);position:relative;width:calc(var(--base)*4)}.threeDots.tiny{--base:4px}.threeDots.small{--base:8px}.threeDots.medium{--base:12px}.threeDots.large{--base:18px}.threeDots.huge{--base:26px}.threeDots div{-webkit-animation-timing-function:cubic-bezier(0,1,1,0);animation-timing-function:cubic-bezier(0,1,1,0);background:#27bb5f;border-radius:50%;height:var(--base);position:absolute;top:0;width:var(--base)}.threeDots div:first-child{-webkit-animation:lds-ellipsis1 .6s infinite;animation:lds-ellipsis1 .6s infinite}.threeDots div:nth-child(2),.threeDots div:nth-child(3){-webkit-animation:lds-ellipsis2 .6s infinite;animation:lds-ellipsis2 .6s infinite}.threeDots div:nth-child(3){left:calc(var(--base)*1.5)}.threeDots div:nth-child(4){-webkit-animation:lds-ellipsis3 .6s infinite;animation:lds-ellipsis3 .6s infinite;left:calc(var(--base)*3)}@-webkit-keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@-webkit-keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(150%)}}@keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(150%)}}.spinner.tiny svg{height:1rem;width:1rem}.spinner.small svg{height:1.6rem;width:1.6rem}.spinner.medium svg{height:2.5rem;width:2.5rem}.spinner.large svg{height:3rem;width:3rem}.spinner.huge svg{height:4rem;width:4rem}.spinner svg{-moz-animation-duration:1.2s;-moz-animation-iteration-count:infinite;-moz-animation-name:rotate;-moz-animation-timing-function:linear;-moz-transition-property:-moz-transform;-webkit-animation-duration:1.2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:rotate;-webkit-animation-timing-function:linear;-webkit-transition-duration:1.2s;-webkit-transition-property:-webkit-transform;animation-duration:1.2s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;transition-property:transform}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.picker{position:relative}.picker .chevronDown{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #888da8;height:0;position:absolute;right:23px;top:18px;width:0}"]
728
+ },] }
729
+ ];
730
+ LoadingIndicatorComponent.propDecorators = {
731
+ variant: [{ type: core.Input }],
732
+ size: [{ type: core.Input }]
733
+ };
734
+
634
735
  var NumberInputComponent = /** @class */ (function (_super) {
635
736
  __extends(NumberInputComponent, _super);
636
737
  function NumberInputComponent() {
@@ -653,18 +754,23 @@
653
754
  var PasswordFieldComponent = /** @class */ (function (_super) {
654
755
  __extends(PasswordFieldComponent, _super);
655
756
  function PasswordFieldComponent() {
656
- return _super !== null && _super.apply(this, arguments) || this;
757
+ var _this = _super.apply(this, __spread(arguments)) || this;
758
+ _this.placeholder = 'Password';
759
+ return _this;
657
760
  }
658
761
  return PasswordFieldComponent;
659
762
  }(ValueAccessorBase));
660
763
  PasswordFieldComponent.decorators = [
661
764
  { type: core.Component, args: [{
662
- selector: 'klp-password-field',
663
- template: "<input\n\ttype=\"password\"\n\tclass=\"form-control\"\n [ngClass]=\"{showErrors: isInErrorState()}\"\n\t[(ngModel)]=\"innerValue\"\n\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\tplaceholder=\"{{ 'Password' }}\"\n\t(blur)=\"touch()\"\n/>\n<!-- TODO: translate -->\n",
765
+ selector: 'klp-form-password-field',
766
+ template: "<input\n\ttype=\"password\"\n\tclass=\"form-control\"\n [ngClass]=\"{showErrors: isInErrorState()}\"\n\t[(ngModel)]=\"innerValue\"\n\t(input)=\"setInnerValueAndNotify($event.target.value)\"\n\t[placeholder]=\"placeholder\"\n\t(blur)=\"touch()\"\n/>\n",
664
767
  providers: [{ provide: forms.NG_VALUE_ACCESSOR, useExisting: PasswordFieldComponent, multi: true }],
665
768
  styles: [":host,input{display:block}input{-moz-transition:all .2s ease-in;-ms-transition:all .2s ease-in;-o-transition:all .2s ease-in;-webkit-transition:all .2s ease-in;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;color:#888da8;font-size:14px;height:42px;outline:none;padding:.375rem .625rem;transition:all .2s ease-in;width:100%}input::-webkit-input-placeholder{color:#adadad}input:-moz-placeholder,input::-moz-placeholder{color:#adadad}input:-ms-input-placeholder{color:#adadad}input:focus{border-color:#3ed778;box-shadow:none;outline:0 none}input.input-sm{height:30px}input.input-lg{height:50px}input.error{background-color:#ffeff4;border-color:#ff3c7e}input.valid{background-color:#ebfaeb;border-color:#37c936;color:#278d26}.showErrors{border-color:#ff8000}"]
666
769
  },] }
667
770
  ];
771
+ PasswordFieldComponent.propDecorators = {
772
+ placeholder: [{ type: core.Input }]
773
+ };
668
774
 
669
775
  var SelectComponent = /** @class */ (function (_super) {
670
776
  __extends(SelectComponent, _super);
@@ -672,25 +778,20 @@
672
778
  var _this = _super.call(this, parent, controlContainer) || this;
673
779
  _this.parent = parent;
674
780
  _this.controlContainer = controlContainer;
781
+ _this.placeholder = 'Pick an option';
675
782
  _this.multiple = false;
676
783
  _this.clearable = true;
784
+ _this.onSearch = new core.EventEmitter();
677
785
  return _this;
678
786
  }
679
- SelectComponent.prototype.ngOnInit = function () {
680
- _super.prototype.ngOnInit.call(this);
681
- if (!this.placeholder) {
682
- // this.placeholder = this.translate.instant(_('Pick an option'));
683
- this.placeholder = ('Pick an option');
684
- }
685
- };
686
787
  return SelectComponent;
687
788
  }(ValueAccessorBase));
688
789
  SelectComponent.decorators = [
689
790
  { type: core.Component, args: [{
690
791
  selector: 'klp-form-select',
691
- template: "<ng-select\n\t[placeholder]=\"placeholder\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch()\"\n\t[dropdownPosition]=\"dropdownPosition\"\n\t[searchFn]=\"customSearchFn\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t{{ item.name }}\n\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t{{ item.description }}\n\t\t</div>\n\t</ng-template>\n</ng-select>\n",
792
+ template: "<ng-select\n\t[placeholder]=\"placeholder\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch()\"\n\t(search)=\"onSearch.emit($event.term)\"\n\t[dropdownPosition]=\"dropdownPosition\"\n\t[searchFn]=\"customSearchFn\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t{{ item.name }}\n\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t{{ item.description }}\n\t\t</div>\n\t</ng-template>\n</ng-select>\n",
692
793
  providers: [{ provide: forms.NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true }],
693
- styles: [":host{display:block}.showErrors ::ng-deep .ng-select-container{border-color:#ff8000}:host ::ng-deep ng-select.ng-select .ng-select-container{color:#888da8}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#3ed778}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-color:transparent transparent #999;border-width:0 5px 5px;top:-2px}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #666}:host ::ng-deep .ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-left-radius:0;border-bottom-right-radius:0}:host ::ng-deep .ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}:host ::ng-deep .ng-select .ng-has-value .ng-placeholder{display:none}:host ::ng-deep .ng-select .ng-select-container{align-items:center;background-clip:padding-box;background-color:#fff;border:1px solid #e6ecf5;border-radius:4px;border-radius:2px;box-shadow:none;box-sizing:border-box;color:#888da8;display:flex;flex-direction:row;font-size:1rem;font-size:14px;line-height:1.5;margin:0;min-height:42px;outline:none;overflow:visible;padding:.375rem .75rem;transition-delay:0s;transition-duration:.2s;transition-property:all;transition-timing-function:ease-in;width:100%}:host ::ng-deep .ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:center;overflow:hidden;padding-left:10px}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#aaa}:host ::ng-deep .ng-select.ng-select-single .ng-select-container{height:42px}:host ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;padding-left:10px;padding-right:50px;top:5px}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-left:7px;padding-right:10px;padding-top:2px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#e7faee;border:1px solid #93e8b3;border-radius:2px;display:flex;font-size:.9em;margin-bottom:5px;margin-right:5px;overflow:hidden}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;overflow:hidden;padding:0 5px;text-overflow:ellipsis}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #c2e0ff}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding-bottom:3px;padding-left:3px}:host ::ng-deep ng-select.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:3px;padding-left:3px;position:static;top:5px}:host ::ng-deep .ng-select .ng-clear-wrapper{color:#999}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:hover{color:#ff3c7e}:host ::ng-deep .ng-select .ng-spinner-zone{padding-right:5px;padding-top:5px}:host ::ng-deep .ng-select .ng-arrow-wrapper{padding-right:5px;width:25px}:host ::ng-deep .ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}:host ::ng-deep .ng-dropdown-panel{background-color:#fff;border:1px solid #3ed778;box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-color:#e6e6e6;margin-top:-1px;top:100%}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}:host ::ng-deep .ng-dropdown-panel.ng-select-top{border-bottom-color:#e6e6e6;border-top-left-radius:4px;border-top-right-radius:4px;bottom:100%;margin-bottom:-1px}:host ::ng-deep .ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-left-radius:4px;border-top-right-radius:4px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{margin-bottom:1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;color:rgba(0,0,0,.54);cursor:default;cursor:pointer;font-weight:500;padding:8px 10px;user-select:none}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#ebf5ff}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background-color:#f5faff;font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,.87);padding:8px 10px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label{font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}:host ::ng-deep ng-select.ng-select .ng-select-container .ng-value-container{padding-left:0}:host ::ng-deep ng-select.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{color:#888da8;top:9px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option,:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input>input{color:#888da8}:host ::ng-deep .ng-select.ng-select-auto-grow{max-width:inherit}:host ::ng-deep .ng-select.ng-select-auto-grow .ng-dropdown-panel{width:auto}"]
794
+ styles: [":host{display:block}.showErrors ::ng-deep .ng-select-container,:host.showErrors ::ng-deep .ng-select-container{border-color:#ff8000}:host ::ng-deep ng-select.ng-select .ng-select-container{color:#888da8}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#3ed778}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-color:transparent transparent #999;border-width:0 5px 5px;top:-2px}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #666}:host ::ng-deep .ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-left-radius:0;border-bottom-right-radius:0}:host ::ng-deep .ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}:host ::ng-deep .ng-select .ng-has-value .ng-placeholder{display:none}:host ::ng-deep .ng-select .ng-select-container{align-items:center;background-clip:padding-box;background-color:#fff;border:1px solid #e6ecf5;border-radius:4px;border-radius:2px;box-shadow:none;box-sizing:border-box;color:#888da8;display:flex;flex-direction:row;font-size:1rem;font-size:14px;line-height:1.5;margin:0;min-height:42px;outline:none;overflow:visible;padding:.375rem .75rem;transition-delay:0s;transition-duration:.2s;transition-property:all;transition-timing-function:ease-in;width:100%}:host ::ng-deep .ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:center;overflow:hidden;padding-left:10px}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#aaa}:host ::ng-deep .ng-select.ng-select-single .ng-select-container{height:42px}:host ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;padding-left:10px;padding-right:50px;top:5px}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-left:7px;padding-right:10px;padding-top:2px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#e7faee;border:1px solid #93e8b3;border-radius:2px;display:flex;font-size:.9em;margin-bottom:5px;margin-right:5px;overflow:hidden}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;overflow:hidden;padding:0 5px;text-overflow:ellipsis}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #c2e0ff}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding-bottom:3px;padding-left:3px}:host ::ng-deep ng-select.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:3px;padding-left:3px;position:static;top:5px}:host ::ng-deep .ng-select .ng-clear-wrapper{color:#999}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:hover{color:#ff3c7e}:host ::ng-deep .ng-select .ng-spinner-zone{padding-right:5px;padding-top:5px}:host ::ng-deep .ng-select .ng-arrow-wrapper{padding-right:5px;width:25px}:host ::ng-deep .ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}:host ::ng-deep .ng-dropdown-panel{background-color:#fff;border:1px solid #3ed778;box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-color:#e6e6e6;margin-top:-1px;top:100%}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}:host ::ng-deep .ng-dropdown-panel.ng-select-top{border-bottom-color:#e6e6e6;border-top-left-radius:4px;border-top-right-radius:4px;bottom:100%;margin-bottom:-1px}:host ::ng-deep .ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-left-radius:4px;border-top-right-radius:4px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{margin-bottom:1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;color:rgba(0,0,0,.54);cursor:default;cursor:pointer;font-weight:500;padding:8px 10px;user-select:none}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#ebf5ff}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background-color:#f5faff;font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,.87);padding:8px 10px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label{font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}:host ::ng-deep ng-select.ng-select .ng-select-container .ng-value-container{padding-left:0}:host ::ng-deep ng-select.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{color:#888da8;top:9px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option,:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input>input{color:#888da8}:host ::ng-deep .ng-select.ng-select-auto-grow{max-width:inherit}:host ::ng-deep .ng-select.ng-select-auto-grow .ng-dropdown-panel{width:auto}"]
694
795
  },] }
695
796
  ];
696
797
  SelectComponent.ctorParameters = function () { return [
@@ -703,7 +804,8 @@
703
804
  multiple: [{ type: core.Input }],
704
805
  clearable: [{ type: core.Input }],
705
806
  dropdownPosition: [{ type: core.Input }],
706
- customSearchFn: [{ type: core.Input }]
807
+ customSearchFn: [{ type: core.Input }],
808
+ onSearch: [{ type: core.Output }]
707
809
  };
708
810
 
709
811
  var SortableItemsComponent = /** @class */ (function (_super) {
@@ -859,18 +961,28 @@
859
961
  .trySubmit()
860
962
  .then(function (value) {
861
963
  _this.isLoading = true;
862
- _this.submitCallback(value)
863
- .then(function () { return (_this.isLoading = false); })
864
- .catch(function () { return (_this.isLoading = false); });
964
+ var submitCallbackResult = _this.submitCallback(value);
965
+ if (isNullOrUndefined(submitCallbackResult)) {
966
+ throw new Error('No promise is returned in your submit function.');
967
+ }
968
+ return submitCallbackResult.then(function () { return (_this.isLoading = false); }).catch(function (e) {
969
+ _this.isLoading = false;
970
+ throw e;
971
+ });
865
972
  })
866
- .catch(function () { }); // swallow the error, the framework will scroll to the field that needs attention
973
+ .catch(function (e) {
974
+ if (e === invalidFieldsSymbol) {
975
+ return; // swallow the error, the framework will scroll to the field that needs attention
976
+ }
977
+ throw e;
978
+ });
867
979
  };
868
980
  return FormSubmitButtonComponent;
869
981
  }());
870
982
  FormSubmitButtonComponent.decorators = [
871
983
  { type: core.Component, args: [{
872
984
  selector: 'klp-form-submit-button',
873
- template: "<klp-button\n\t\t[variant]=\"variant\"\n\t\t(click)=\"submitForm()\"\n\t\t[disabled]=\"isLoading\"\n\t\t[isLoading]=\"isLoading\"\n\t\t[fullWidth]=\"fullWidth\"\n\t\ttype=\"submit\"\n\t\t[ngClass]=\"fullWidth ? 'fullWidth' : ''\"\n\t>\n\t<ng-content></ng-content>\n</klp-button>\n",
985
+ template: "<klp-form-button\n\t\t[variant]=\"variant\"\n\t\t(click)=\"submitForm()\"\n\t\t[disabled]=\"isLoading\"\n\t\t[isLoading]=\"isLoading\"\n\t\t[fullWidth]=\"fullWidth\"\n\t\ttype=\"submit\"\n\t\t[ngClass]=\"fullWidth ? 'fullWidth' : ''\"\n\t>\n\t<ng-content></ng-content>\n</klp-form-button>\n",
874
986
  styles: [":host{display:inline-block}:host._fullWidth{display:block}.fullWidth{width:100%}"]
875
987
  },] }
876
988
  ];
@@ -885,66 +997,133 @@
885
997
  _: [{ type: core.HostBinding, args: ['class._fullWidth',] }]
886
998
  };
887
999
 
888
- var ButtonComponent = /** @class */ (function () {
889
- function ButtonComponent() {
890
- this.variant = 'white';
891
- this.size = 'medium';
892
- this.fullWidth = false;
893
- this.hasBorder = true;
894
- this.disabled = false;
895
- this.isLoading = false;
896
- this.type = 'button';
1000
+ var invalidDateKey = '--invalid_date--';
1001
+ function dateValidator(control) {
1002
+ var invalid = control.value === invalidDateKey;
1003
+ return invalid ? { date: control.value } : null;
1004
+ }
1005
+
1006
+ var KLP_DATE_FORMATS = new core.InjectionToken('klp.form.date.formats');
1007
+ function matDateFormatsFactory(component, dateFormats) {
1008
+ var _a;
1009
+ return (_a = dateFormats === null || dateFormats === void 0 ? void 0 : dateFormats(component.format)) !== null && _a !== void 0 ? _a : core$1.MAT_NATIVE_DATE_FORMATS;
1010
+ }
1011
+ var DatepickerComponent = /** @class */ (function (_super) {
1012
+ __extends(DatepickerComponent, _super);
1013
+ function DatepickerComponent() {
1014
+ var _this = _super.apply(this, __spread(arguments)) || this;
1015
+ _this.minDate = undefined;
1016
+ _this.maxDate = undefined;
1017
+ _this.placeholder = 'Select date';
1018
+ _this.clearable = false;
1019
+ _this.minDateStartOfDay = undefined;
1020
+ _this.maxDateEndOfDay = undefined;
1021
+ return _this;
897
1022
  }
898
- Object.defineProperty(ButtonComponent.prototype, "_", {
899
- get: function () {
900
- return this.fullWidth;
901
- },
902
- enumerable: false,
903
- configurable: true
904
- });
905
- ButtonComponent.prototype.onClick = function (event) {
906
- if (this.disabled) {
907
- event.stopPropagation();
1023
+ DatepickerComponent.prototype.ngOnChanges = function (changes) {
1024
+ if (changes.minDate) {
1025
+ this.setMinDate(changes.minDate.currentValue);
1026
+ }
1027
+ if (changes.maxDate) {
1028
+ this.setMaxDate(changes.maxDate.currentValue);
908
1029
  }
909
1030
  };
910
- return ButtonComponent;
911
- }());
912
- ButtonComponent.decorators = [
1031
+ DatepickerComponent.prototype.setMinDate = function (minDate) {
1032
+ if (minDate) {
1033
+ this.minDateStartOfDay = new Date(minDate);
1034
+ this.minDateStartOfDay.setHours(0, 0, 0, 0);
1035
+ }
1036
+ else {
1037
+ this.minDateStartOfDay = undefined;
1038
+ }
1039
+ };
1040
+ DatepickerComponent.prototype.setMaxDate = function (maxDate) {
1041
+ if (maxDate) {
1042
+ this.maxDateEndOfDay = new Date(maxDate);
1043
+ this.maxDateEndOfDay.setHours(23, 59, 59, 999);
1044
+ }
1045
+ else {
1046
+ this.maxDateEndOfDay = undefined;
1047
+ }
1048
+ };
1049
+ // dateChanged is called when the output of the datepicker is changed and
1050
+ // parsed correctly. If the date is invalid, it will be called the first time
1051
+ // with null but never again until a valid input is provided.
1052
+ DatepickerComponent.prototype.dateChanged = function (event) {
1053
+ var nativeInputValue = this.nativeInputRef.nativeElement.value;
1054
+ var date = event.value;
1055
+ if (isNullOrUndefined(date) && stringIsSetAndNotEmpty(nativeInputValue)) {
1056
+ this.setInnerValueAndNotify(invalidDateKey);
1057
+ }
1058
+ else {
1059
+ this.setInnerValueAndNotify(date);
1060
+ }
1061
+ };
1062
+ DatepickerComponent.prototype.writeValue = function (value) {
1063
+ _super.prototype.writeValue.call(this, value);
1064
+ this.valueForMaterialDatePicker = value === invalidDateKey ? null : value;
1065
+ };
1066
+ // nativeValueChanged is called when the internal text value changes, but not
1067
+ // when the date is changed via the date picker. We need this so that we can
1068
+ // determine if the datepicker is empty or invalid.
1069
+ DatepickerComponent.prototype.nativeValueChanged = function (event) {
1070
+ var nativeInputValue = event.target.value;
1071
+ var date = this.valueForMaterialDatePicker;
1072
+ if (this.datePickerRef.opened) {
1073
+ // if the user is typing instead of using the picker, close it.
1074
+ this.datePickerRef.close();
1075
+ }
1076
+ if (isNullOrUndefined(date) && stringIsSetAndNotEmpty(nativeInputValue)) {
1077
+ this.setInnerValueAndNotify(invalidDateKey);
1078
+ }
1079
+ else {
1080
+ this.setInnerValueAndNotify(date);
1081
+ }
1082
+ };
1083
+ DatepickerComponent.prototype.resetToNull = function () {
1084
+ this.setInnerValueAndNotify(null);
1085
+ this.valueForMaterialDatePicker = null;
1086
+ this.nativeInputRef.nativeElement.value = null;
1087
+ };
1088
+ return DatepickerComponent;
1089
+ }(ValueAccessorBase));
1090
+ DatepickerComponent.decorators = [
913
1091
  { type: core.Component, args: [{
914
- selector: 'klp-button',
915
- template: "<button class=\"buttonFundamentals\"\n\t[ngClass]=\"[\n\t\tvariant,\n\t\tsize,\n\t\tfullWidth ? 'fullWidth' : '',\n\t\thasBorder ? '' : 'no-border',\n\t\tdisabled ? 'disabled' : ''\n\t]\"\n\t[type]=\"type\"\n\t(click)=\"onClick($event)\"\n>\n\t<div class=\"caption\" [ngClass]=\"{invisible: isLoading}\">\n\t\t<ng-content></ng-content>\n\t</div>\n\t<div class=\"loadingSpinnerContainer\" *ngIf=\"isLoading\">\n\t\t<klp-loading-indicator variant=\"spinner\" size=\"small\"></klp-loading-indicator>\n\t</div>\n</button>\n",
916
- styles: [":host{display:inline-block}:host._fullWidth{display:block}.buttonFundamentals{border:1px solid #e6ecf5;border-radius:5px;color:#888da8;cursor:pointer;font-size:13px;font-weight:700;letter-spacing:1px;padding:10px 20px}.fullWidth{width:100%}.no-border{border:none}.caption.invisible{visibility:hidden}button{position:relative}.loadingSpinnerContainer{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.small{padding-bottom:.375rem;padding-top:.375rem}.large{line-height:2}.white{background-color:#fff;border-color:#d4deee;color:#515365;font-weight:500}.white:active,.white:hover{background-color:#edf2f8;border-color:#edf2f8;color:#515365}.white:focus{text-decoration:underline}.greenFilled{background-color:#27bb5f;border-color:#27bb5f;color:#fff}.greenFilled:hover{background-color:#2bd06a;border-color:#2bd06a;color:#fff}.greenFilled:focus{text-decoration:underline}.greenFilled:active{background-color:#23a654;border-color:#23a654}.greenOutlined{background-color:#fff;border-color:#27bb5f;color:#27bb5f}.greenOutlined:hover{background-color:#2bd06a;border-color:#2bd06a;color:#fff}.greenOutlined:focus{text-decoration:underline}.greenOutlined:active{background-color:#23a654;border-color:#23a654}.greenLink{background:none;border:none;color:#27bb5f;padding:0}.greenLink:focus,.greenLink:hover{text-decoration:underline}.contextMenuItem{background-color:#fff;border-color:#fff;color:#888da8}.contextMenuItem:hover{background-color:#f6f7fb;border-color:#f6f7fb}.contextMenuItem:active,.contextMenuItem:focus{text-decoration:underline}.redFilled{background-color:#ff3c7e;border-color:#ff3c7e;color:#fff}.redFilled:hover{background-color:#ff568f;border-color:#ff568f;color:#fff}.redFilled:focus{text-decoration:underline}.redFilled:active{background-color:#ff236d;border-color:#ff236d}.redOutlined{background-color:#fff;border-color:#ff3c7e;color:#ff3c7e}.redOutlined:hover{background-color:#ff568f;border-color:#ff568f;color:#fff}.redOutlined:focus{text-decoration:underline}.redOutlined:active{background-color:#ff236d;border-color:#ff236d}.orangeFilled{background-color:#ff8000;border-color:#ff8000;color:#fff}.orangeFilled:hover{background-color:#ff8d1a;border-color:#ff8d1a;color:#fff}.orangeFilled:focus{text-decoration:underline}.orangeFilled:active{background-color:#e67300;border-color:#e67300}"]
1092
+ selector: 'klp-form-datepicker',
1093
+ template: "<div class=\"componentContainer\" [ngClass]=\"{showErrors: isInErrorState()}\">\n\t<mat-form-field [floatLabel]=\"'never'\">\n\t\t<input\n\t\t\t#nativeInput\n\t\t\tmatInput\n\t\t\t[matDatepicker]=\"picker\"\n\t\t\t[(ngModel)]=\"valueForMaterialDatePicker\"\n\t\t\t(dateInput)=\"dateChanged($event)\"\n\t\t\t(input)=\"nativeValueChanged($event)\"\n\t\t\t[min]=\"minDateStartOfDay\"\n\t\t\t[max]=\"maxDateEndOfDay\"\n\t\t\t[placeholder]=\"placeholder\"\n\t\t\t(click)=\"picker.open()\"\n\t\t\t(blur)=\"touch()\"\n\t\t>\n\t\t<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\t\t<mat-datepicker #picker\n\t\t></mat-datepicker>\n\t</mat-form-field>\n\t<button *ngIf=\"clearable\" class=\"clearButton\" (click)=\"resetToNull()\">\u00D7</button>\n</div>\n",
1094
+ providers: [
1095
+ { provide: forms.NG_VALUE_ACCESSOR, useExisting: DatepickerComponent, multi: true },
1096
+ { provide: core$1.MAT_DATE_FORMATS,
1097
+ deps: [DatepickerComponent, [new core.Optional(), KLP_DATE_FORMATS]],
1098
+ useFactory: matDateFormatsFactory,
1099
+ }
1100
+ ],
1101
+ styles: [":host{display:block}:host ::ng-deep mat-form-field{display:block;height:100%}:host ::ng-deep mat-form-field.mat-focused .mat-form-field-label,:host ::ng-deep mat-form-field .mat-form-field-label{color:#adadad}:host ::ng-deep .mat-datepicker-toggle-active{color:#666}:host ::ng-deep .mat-form-field-wrapper{padding-bottom:none}:host ::ng-deep .mat-form-field-flex{flex-direction:row-reverse}:host ::ng-deep .mat-form-field-infix{border-top:none}:host ::ng-deep .mat-form-field-suffix{margin-right:.625rem}:host ::ng-deep .mat-form-field-suffix:hover .mat-button-focus-overlay{opacity:.1}:host ::ng-deep .mat-form-field-underline{display:none}.componentContainer{-moz-transition:all .2s ease-in;-ms-transition:all .2s ease-in;-o-transition:all .2s ease-in;-webkit-transition:all .2s ease-in;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;color:#888da8;display:block;font-size:14px;height:42px;padding:.375rem .625rem;position:relative;transition:all .2s ease-in;width:100%}.componentContainer::-webkit-input-placeholder{color:#adadad}.componentContainer:-moz-placeholder,.componentContainer::-moz-placeholder{color:#adadad}.componentContainer:-ms-input-placeholder{color:#adadad}.componentContainer:focus{border-color:#3ed778;box-shadow:none;outline:0 none}.componentContainer.input-sm{height:30px}.componentContainer.input-lg{height:50px}.componentContainer.error{background-color:#ffeff4;border-color:#ff3c7e}.componentContainer.valid{background-color:#ebfaeb;border-color:#37c936;color:#278d26}.componentContainer.showErrors{border-color:#ff8000}.componentContainer .clearButton{align-items:center;background:none;border:none;bottom:0;color:#7b7b7b;display:flex;font-size:18px;position:absolute;right:1.25rem;top:0}"]
917
1102
  },] }
918
1103
  ];
919
- ButtonComponent.propDecorators = {
920
- variant: [{ type: core.Input }],
921
- size: [{ type: core.Input }],
922
- fullWidth: [{ type: core.Input }],
923
- hasBorder: [{ type: core.Input }],
924
- disabled: [{ type: core.Input }],
925
- isLoading: [{ type: core.Input }],
926
- type: [{ type: core.Input }],
927
- _: [{ type: core.HostBinding, args: ['class._fullWidth',] }]
1104
+ DatepickerComponent.propDecorators = {
1105
+ minDate: [{ type: core.Input }],
1106
+ maxDate: [{ type: core.Input }],
1107
+ format: [{ type: core.Input }],
1108
+ placeholder: [{ type: core.Input }],
1109
+ clearable: [{ type: core.Input }],
1110
+ nativeInputRef: [{ type: core.ViewChild, args: ['nativeInput',] }],
1111
+ datePickerRef: [{ type: core.ViewChild, args: ['picker',] }]
928
1112
  };
929
1113
 
930
- var LoadingIndicatorComponent = /** @class */ (function () {
931
- function LoadingIndicatorComponent() {
932
- this.variant = '3dots';
933
- this.size = 'medium';
1114
+ // material.module.ts
1115
+ var MaterialModule = /** @class */ (function () {
1116
+ function MaterialModule() {
934
1117
  }
935
- return LoadingIndicatorComponent;
1118
+ return MaterialModule;
936
1119
  }());
937
- LoadingIndicatorComponent.decorators = [
938
- { type: core.Component, args: [{
939
- selector: 'klp-loading-indicator',
940
- template: "<div class=\"threeDots\" [class]=\"size\" *ngIf=\"variant === '3dots'\">\n\t<div></div>\n\t<div></div>\n\t<div></div>\n\t<div></div>\n</div>\n\n<div class=\"spinner\" [class]=\"size\" *ngIf=\"variant === 'spinner'\">\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n\t\t<circle cx=\"24\" cy=\"4\" r=\"4\" fill=\"currentColor\" />\n\t\t<circle cx=\"12.19\" cy=\"7.86\" r=\"3.7\" fill=\"currentColor\" />\n\t\t<circle cx=\"5.02\" cy=\"17.68\" r=\"3.4\" fill=\"currentColor\" />\n\t\t<circle cx=\"5.02\" cy=\"30.32\" r=\"3.1\" fill=\"currentColor\" />\n\t\t<circle cx=\"12.19\" cy=\"40.14\" r=\"2.8\" fill=\"currentColor\" />\n\t\t<circle cx=\"24\" cy=\"44\" r=\"2.5\" fill=\"currentColor\" />\n\t\t<circle cx=\"35.81\" cy=\"40.14\" r=\"2.2\" fill=\"currentColor\" />\n\t\t<circle cx=\"42.98\" cy=\"30.32\" r=\"1.9\" fill=\"currentColor\" />\n\t\t<circle cx=\"42.98\" cy=\"17.68\" r=\"1.6\" fill=\"currentColor\" />\n\t\t<circle cx=\"35.81\" cy=\"7.86\" r=\"1.3\" fill=\"currentColor\" />\n\t</svg>\n</div>\n\n<div class=\"textInput\" *ngIf=\"variant === 'textInput'\">\n\t<input\n\t\tdisabled\n\t\ttype=\"text\"\n\t\tclass=\"form-control\"\n\t\tplaceholder=\"Loading...\"\n\t>\n</div>\n\n<div class=\"picker\" *ngIf=\"variant === 'picker'\">\n\t<input\n\t\tdisabled\n\t\ttype=\"text\"\n\t\tclass=\"form-control\"\n\t\tplaceholder=\"Loading...\"\n\t>\n\t<div class=\"chevronDown\"></div>\n</div>\n",
941
- styles: [".threeDots,:host{display:block}.threeDots{height:var(--base);position:relative;width:calc(var(--base)*4)}.threeDots.tiny{--base:4px}.threeDots.small{--base:8px}.threeDots.medium{--base:12px}.threeDots.large{--base:18px}.threeDots.huge{--base:26px}.threeDots div{-webkit-animation-timing-function:cubic-bezier(0,1,1,0);animation-timing-function:cubic-bezier(0,1,1,0);background:#27bb5f;border-radius:50%;height:var(--base);position:absolute;top:0;width:var(--base)}.threeDots div:first-child{-webkit-animation:lds-ellipsis1 .6s infinite;animation:lds-ellipsis1 .6s infinite}.threeDots div:nth-child(2),.threeDots div:nth-child(3){-webkit-animation:lds-ellipsis2 .6s infinite;animation:lds-ellipsis2 .6s infinite}.threeDots div:nth-child(3){left:calc(var(--base)*1.5)}.threeDots div:nth-child(4){-webkit-animation:lds-ellipsis3 .6s infinite;animation:lds-ellipsis3 .6s infinite;left:calc(var(--base)*3)}@-webkit-keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@-webkit-keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(150%)}}@keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(150%)}}.spinner.tiny svg{height:1rem;width:1rem}.spinner.small svg{height:1.6rem;width:1.6rem}.spinner.medium svg{height:2.5rem;width:2.5rem}.spinner.large svg{height:3rem;width:3rem}.spinner.huge svg{height:4rem;width:4rem}.spinner svg{-moz-animation-duration:1.2s;-moz-animation-iteration-count:infinite;-moz-animation-name:rotate;-moz-animation-timing-function:linear;-moz-transition-property:-moz-transform;-webkit-animation-duration:1.2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:rotate;-webkit-animation-timing-function:linear;-webkit-transition-duration:1.2s;-webkit-transition-property:-webkit-transform;animation-duration:1.2s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;transition-property:transform}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.picker{position:relative}.picker .chevronDown{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #888da8;height:0;position:absolute;right:23px;top:18px;width:0}"]
1120
+ MaterialModule.decorators = [
1121
+ { type: core.NgModule, args: [{
1122
+ imports: [datepicker.MatDatepickerModule, formField.MatFormFieldModule, core$1.MatNativeDateModule, input.MatInputModule, button.MatButtonModule],
1123
+ exports: [datepicker.MatDatepickerModule, formField.MatFormFieldModule, core$1.MatNativeDateModule, input.MatInputModule, button.MatButtonModule],
1124
+ providers: [datepicker.MatDatepickerModule],
942
1125
  },] }
943
1126
  ];
944
- LoadingIndicatorComponent.propDecorators = {
945
- variant: [{ type: core.Input }],
946
- size: [{ type: core.Input }]
947
- };
948
1127
 
949
1128
  var NgxEnhancyFormsModule = /** @class */ (function () {
950
1129
  function NgxEnhancyFormsModule() {
@@ -958,11 +1137,13 @@
958
1137
  forms.FormsModule,
959
1138
  ngSelect.NgSelectModule,
960
1139
  ngxSortablejs.SortablejsModule,
1140
+ MaterialModule,
961
1141
  ],
962
1142
  declarations: [
963
1143
  ValueAccessorBase,
964
1144
  ButtonComponent,
965
1145
  CheckboxComponent,
1146
+ DatepickerComponent,
966
1147
  EmailInputComponent,
967
1148
  LoadingIndicatorComponent,
968
1149
  NumberInputComponent,
@@ -980,6 +1161,7 @@
980
1161
  exports: [
981
1162
  ValueAccessorBase,
982
1163
  ButtonComponent,
1164
+ DatepickerComponent,
983
1165
  CheckboxComponent,
984
1166
  EmailInputComponent,
985
1167
  LoadingIndicatorComponent,
@@ -1006,23 +1188,32 @@
1006
1188
  * Generated bundle index. Do not edit.
1007
1189
  */
1008
1190
 
1191
+ exports.ButtonComponent = ButtonComponent;
1192
+ exports.CheckboxComponent = CheckboxComponent;
1193
+ exports.DEFAULT_ERROR_MESSAGES = DEFAULT_ERROR_MESSAGES;
1194
+ exports.DatepickerComponent = DatepickerComponent;
1195
+ exports.EmailInputComponent = EmailInputComponent;
1196
+ exports.FORM_ERROR_MESSAGES = FORM_ERROR_MESSAGES;
1197
+ exports.FormCaptionComponent = FormCaptionComponent;
1198
+ exports.FormComponent = FormComponent;
1199
+ exports.FormElementComponent = FormElementComponent;
1200
+ exports.FormErrorComponent = FormErrorComponent;
1201
+ exports.FormSubmitButtonComponent = FormSubmitButtonComponent;
1202
+ exports.KLP_DATE_FORMATS = KLP_DATE_FORMATS;
1203
+ exports.LoadingIndicatorComponent = LoadingIndicatorComponent;
1009
1204
  exports.NgxEnhancyFormsModule = NgxEnhancyFormsModule;
1010
- exports["ɵa"] = ValueAccessorBase;
1011
- exports["ɵb"] = FormElementComponent;
1012
- exports["ɵc"] = FormComponent;
1013
- exports["ɵd"] = ButtonComponent;
1014
- exports["ɵe"] = CheckboxComponent;
1015
- exports["ɵf"] = EmailInputComponent;
1016
- exports["ɵg"] = LoadingIndicatorComponent;
1017
- exports["ɵh"] = NumberInputComponent;
1018
- exports["ɵi"] = PasswordFieldComponent;
1019
- exports["ɵj"] = SelectComponent;
1020
- exports["ɵk"] = SortableItemsComponent;
1021
- exports["ɵl"] = TextInputComponent;
1022
- exports["ɵm"] = ToggleComponent;
1023
- exports["ɵn"] = FormCaptionComponent;
1024
- exports["ɵo"] = FormErrorComponent;
1025
- exports["ɵp"] = FormSubmitButtonComponent;
1205
+ exports.NumberInputComponent = NumberInputComponent;
1206
+ exports.PasswordFieldComponent = PasswordFieldComponent;
1207
+ exports.SelectComponent = SelectComponent;
1208
+ exports.SortableItemsComponent = SortableItemsComponent;
1209
+ exports.TextInputComponent = TextInputComponent;
1210
+ exports.ToggleComponent = ToggleComponent;
1211
+ exports.ValueAccessorBase = ValueAccessorBase;
1212
+ exports.dateValidator = dateValidator;
1213
+ exports.invalidDateKey = invalidDateKey;
1214
+ exports.invalidFieldsSymbol = invalidFieldsSymbol;
1215
+ exports.matDateFormatsFactory = matDateFormatsFactory;
1216
+ exports["ɵa"] = MaterialModule;
1026
1217
 
1027
1218
  Object.defineProperty(exports, '__esModule', { value: true });
1028
1219