@klippa/ngx-enhancy-forms 1.0.1 → 2.1.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.
Files changed (44) hide show
  1. package/README.md +179 -23
  2. package/bundles/klippa-ngx-enhancy-forms.umd.js +284 -95
  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 +3 -9
  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 +251 -68
  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 +1 -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 [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,17 +778,11 @@
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;
677
784
  return _this;
678
785
  }
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
786
  return SelectComponent;
687
787
  }(ValueAccessorBase));
688
788
  SelectComponent.decorators = [
@@ -690,7 +790,7 @@
690
790
  selector: 'klp-form-select',
691
791
  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",
692
792
  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}"]
793
+ 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
794
  },] }
695
795
  ];
696
796
  SelectComponent.ctorParameters = function () { return [
@@ -859,18 +959,28 @@
859
959
  .trySubmit()
860
960
  .then(function (value) {
861
961
  _this.isLoading = true;
862
- _this.submitCallback(value)
863
- .then(function () { return (_this.isLoading = false); })
864
- .catch(function () { return (_this.isLoading = false); });
962
+ var submitCallbackResult = _this.submitCallback(value);
963
+ if (isNullOrUndefined(submitCallbackResult)) {
964
+ throw new Error('No promise is returned in your submit function.');
965
+ }
966
+ return submitCallbackResult.then(function () { return (_this.isLoading = false); }).catch(function (e) {
967
+ _this.isLoading = false;
968
+ throw e;
969
+ });
865
970
  })
866
- .catch(function () { }); // swallow the error, the framework will scroll to the field that needs attention
971
+ .catch(function (e) {
972
+ if (e === invalidFieldsSymbol) {
973
+ return; // swallow the error, the framework will scroll to the field that needs attention
974
+ }
975
+ throw e;
976
+ });
867
977
  };
868
978
  return FormSubmitButtonComponent;
869
979
  }());
870
980
  FormSubmitButtonComponent.decorators = [
871
981
  { type: core.Component, args: [{
872
982
  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",
983
+ 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
984
  styles: [":host{display:inline-block}:host._fullWidth{display:block}.fullWidth{width:100%}"]
875
985
  },] }
876
986
  ];
@@ -885,66 +995,133 @@
885
995
  _: [{ type: core.HostBinding, args: ['class._fullWidth',] }]
886
996
  };
887
997
 
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';
998
+ var invalidDateKey = '--invalid_date--';
999
+ function dateValidator(control) {
1000
+ var invalid = control.value === invalidDateKey;
1001
+ return invalid ? { date: control.value } : null;
1002
+ }
1003
+
1004
+ var KLP_DATE_FORMATS = new core.InjectionToken('klp.form.date.formats');
1005
+ function matDateFormatsFactory(component, dateFormats) {
1006
+ var _a;
1007
+ return (_a = dateFormats === null || dateFormats === void 0 ? void 0 : dateFormats(component.format)) !== null && _a !== void 0 ? _a : core$1.MAT_NATIVE_DATE_FORMATS;
1008
+ }
1009
+ var DatepickerComponent = /** @class */ (function (_super) {
1010
+ __extends(DatepickerComponent, _super);
1011
+ function DatepickerComponent() {
1012
+ var _this = _super.apply(this, __spread(arguments)) || this;
1013
+ _this.minDate = undefined;
1014
+ _this.maxDate = undefined;
1015
+ _this.placeholder = 'Select date';
1016
+ _this.clearable = false;
1017
+ _this.minDateStartOfDay = undefined;
1018
+ _this.maxDateEndOfDay = undefined;
1019
+ return _this;
897
1020
  }
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();
1021
+ DatepickerComponent.prototype.ngOnChanges = function (changes) {
1022
+ if (changes.minDate) {
1023
+ this.setMinDate(changes.minDate.currentValue);
1024
+ }
1025
+ if (changes.maxDate) {
1026
+ this.setMaxDate(changes.maxDate.currentValue);
908
1027
  }
909
1028
  };
910
- return ButtonComponent;
911
- }());
912
- ButtonComponent.decorators = [
1029
+ DatepickerComponent.prototype.setMinDate = function (minDate) {
1030
+ if (minDate) {
1031
+ this.minDateStartOfDay = new Date(minDate);
1032
+ this.minDateStartOfDay.setHours(0, 0, 0, 0);
1033
+ }
1034
+ else {
1035
+ this.minDateStartOfDay = undefined;
1036
+ }
1037
+ };
1038
+ DatepickerComponent.prototype.setMaxDate = function (maxDate) {
1039
+ if (maxDate) {
1040
+ this.maxDateEndOfDay = new Date(maxDate);
1041
+ this.maxDateEndOfDay.setHours(23, 59, 59, 999);
1042
+ }
1043
+ else {
1044
+ this.maxDateEndOfDay = undefined;
1045
+ }
1046
+ };
1047
+ // dateChanged is called when the output of the datepicker is changed and
1048
+ // parsed correctly. If the date is invalid, it will be called the first time
1049
+ // with null but never again until a valid input is provided.
1050
+ DatepickerComponent.prototype.dateChanged = function (event) {
1051
+ var nativeInputValue = this.nativeInputRef.nativeElement.value;
1052
+ var date = event.value;
1053
+ if (isNullOrUndefined(date) && stringIsSetAndNotEmpty(nativeInputValue)) {
1054
+ this.setInnerValueAndNotify(invalidDateKey);
1055
+ }
1056
+ else {
1057
+ this.setInnerValueAndNotify(date);
1058
+ }
1059
+ };
1060
+ DatepickerComponent.prototype.writeValue = function (value) {
1061
+ _super.prototype.writeValue.call(this, value);
1062
+ this.valueForMaterialDatePicker = value === invalidDateKey ? null : value;
1063
+ };
1064
+ // nativeValueChanged is called when the internal text value changes, but not
1065
+ // when the date is changed via the date picker. We need this so that we can
1066
+ // determine if the datepicker is empty or invalid.
1067
+ DatepickerComponent.prototype.nativeValueChanged = function (event) {
1068
+ var nativeInputValue = event.target.value;
1069
+ var date = this.valueForMaterialDatePicker;
1070
+ if (this.datePickerRef.opened) {
1071
+ // if the user is typing instead of using the picker, close it.
1072
+ this.datePickerRef.close();
1073
+ }
1074
+ if (isNullOrUndefined(date) && stringIsSetAndNotEmpty(nativeInputValue)) {
1075
+ this.setInnerValueAndNotify(invalidDateKey);
1076
+ }
1077
+ else {
1078
+ this.setInnerValueAndNotify(date);
1079
+ }
1080
+ };
1081
+ DatepickerComponent.prototype.resetToNull = function () {
1082
+ this.setInnerValueAndNotify(null);
1083
+ this.valueForMaterialDatePicker = null;
1084
+ this.nativeInputRef.nativeElement.value = null;
1085
+ };
1086
+ return DatepickerComponent;
1087
+ }(ValueAccessorBase));
1088
+ DatepickerComponent.decorators = [
913
1089
  { 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}"]
1090
+ selector: 'klp-form-datepicker',
1091
+ 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",
1092
+ providers: [
1093
+ { provide: forms.NG_VALUE_ACCESSOR, useExisting: DatepickerComponent, multi: true },
1094
+ { provide: core$1.MAT_DATE_FORMATS,
1095
+ deps: [DatepickerComponent, [new core.Optional(), KLP_DATE_FORMATS]],
1096
+ useFactory: matDateFormatsFactory,
1097
+ }
1098
+ ],
1099
+ 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
1100
  },] }
918
1101
  ];
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',] }]
1102
+ DatepickerComponent.propDecorators = {
1103
+ minDate: [{ type: core.Input }],
1104
+ maxDate: [{ type: core.Input }],
1105
+ format: [{ type: core.Input }],
1106
+ placeholder: [{ type: core.Input }],
1107
+ clearable: [{ type: core.Input }],
1108
+ nativeInputRef: [{ type: core.ViewChild, args: ['nativeInput',] }],
1109
+ datePickerRef: [{ type: core.ViewChild, args: ['picker',] }]
928
1110
  };
929
1111
 
930
- var LoadingIndicatorComponent = /** @class */ (function () {
931
- function LoadingIndicatorComponent() {
932
- this.variant = '3dots';
933
- this.size = 'medium';
1112
+ // material.module.ts
1113
+ var MaterialModule = /** @class */ (function () {
1114
+ function MaterialModule() {
934
1115
  }
935
- return LoadingIndicatorComponent;
1116
+ return MaterialModule;
936
1117
  }());
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}"]
1118
+ MaterialModule.decorators = [
1119
+ { type: core.NgModule, args: [{
1120
+ imports: [datepicker.MatDatepickerModule, formField.MatFormFieldModule, core$1.MatNativeDateModule, input.MatInputModule, button.MatButtonModule],
1121
+ exports: [datepicker.MatDatepickerModule, formField.MatFormFieldModule, core$1.MatNativeDateModule, input.MatInputModule, button.MatButtonModule],
1122
+ providers: [datepicker.MatDatepickerModule],
942
1123
  },] }
943
1124
  ];
944
- LoadingIndicatorComponent.propDecorators = {
945
- variant: [{ type: core.Input }],
946
- size: [{ type: core.Input }]
947
- };
948
1125
 
949
1126
  var NgxEnhancyFormsModule = /** @class */ (function () {
950
1127
  function NgxEnhancyFormsModule() {
@@ -958,11 +1135,13 @@
958
1135
  forms.FormsModule,
959
1136
  ngSelect.NgSelectModule,
960
1137
  ngxSortablejs.SortablejsModule,
1138
+ MaterialModule,
961
1139
  ],
962
1140
  declarations: [
963
1141
  ValueAccessorBase,
964
1142
  ButtonComponent,
965
1143
  CheckboxComponent,
1144
+ DatepickerComponent,
966
1145
  EmailInputComponent,
967
1146
  LoadingIndicatorComponent,
968
1147
  NumberInputComponent,
@@ -980,6 +1159,7 @@
980
1159
  exports: [
981
1160
  ValueAccessorBase,
982
1161
  ButtonComponent,
1162
+ DatepickerComponent,
983
1163
  CheckboxComponent,
984
1164
  EmailInputComponent,
985
1165
  LoadingIndicatorComponent,
@@ -1006,23 +1186,32 @@
1006
1186
  * Generated bundle index. Do not edit.
1007
1187
  */
1008
1188
 
1189
+ exports.ButtonComponent = ButtonComponent;
1190
+ exports.CheckboxComponent = CheckboxComponent;
1191
+ exports.DEFAULT_ERROR_MESSAGES = DEFAULT_ERROR_MESSAGES;
1192
+ exports.DatepickerComponent = DatepickerComponent;
1193
+ exports.EmailInputComponent = EmailInputComponent;
1194
+ exports.FORM_ERROR_MESSAGES = FORM_ERROR_MESSAGES;
1195
+ exports.FormCaptionComponent = FormCaptionComponent;
1196
+ exports.FormComponent = FormComponent;
1197
+ exports.FormElementComponent = FormElementComponent;
1198
+ exports.FormErrorComponent = FormErrorComponent;
1199
+ exports.FormSubmitButtonComponent = FormSubmitButtonComponent;
1200
+ exports.KLP_DATE_FORMATS = KLP_DATE_FORMATS;
1201
+ exports.LoadingIndicatorComponent = LoadingIndicatorComponent;
1009
1202
  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;
1203
+ exports.NumberInputComponent = NumberInputComponent;
1204
+ exports.PasswordFieldComponent = PasswordFieldComponent;
1205
+ exports.SelectComponent = SelectComponent;
1206
+ exports.SortableItemsComponent = SortableItemsComponent;
1207
+ exports.TextInputComponent = TextInputComponent;
1208
+ exports.ToggleComponent = ToggleComponent;
1209
+ exports.ValueAccessorBase = ValueAccessorBase;
1210
+ exports.dateValidator = dateValidator;
1211
+ exports.invalidDateKey = invalidDateKey;
1212
+ exports.invalidFieldsSymbol = invalidFieldsSymbol;
1213
+ exports.matDateFormatsFactory = matDateFormatsFactory;
1214
+ exports["ɵa"] = MaterialModule;
1026
1215
 
1027
1216
  Object.defineProperty(exports, '__esModule', { value: true });
1028
1217