ecabs-components 1.1.77 → 1.1.79

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 (24) hide show
  1. package/README.md +3 -1
  2. package/esm2022/lib/base/directives/digits-only.directive.mjs +131 -19
  3. package/esm2022/lib/base/models/phone.models.mjs +1 -1
  4. package/esm2022/lib/base/utils/phone-number.utils.mjs +1 -1
  5. package/esm2022/lib/ecabs-button-toggle/ecabs-button-toggle.component.mjs +1 -1
  6. package/esm2022/lib/ecabs-chip-group/ecabs-chip-group.component.mjs +10 -4
  7. package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.mjs +1 -1
  8. package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.mjs +1 -1
  9. package/esm2022/lib/ecabs-dialog-confirm-deletion/ecabs-dialog-confirm-deletion.component.mjs +1 -1
  10. package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +1 -1
  11. package/esm2022/lib/ecabs-input/ecabs-input.component.mjs +7 -4
  12. package/esm2022/lib/ecabs-input-range/ecabs-input-range.component.mjs +1 -1
  13. package/esm2022/lib/ecabs-place-autocomplete-v2/ecabs-place-autocomplete-v2.component.mjs +1 -1
  14. package/fesm2022/ecabs-components.mjs +151 -30
  15. package/fesm2022/ecabs-components.mjs.map +1 -1
  16. package/lib/base/directives/digits-only.directive.d.ts +13 -2
  17. package/lib/ecabs-chip-group/ecabs-chip-group.component.d.ts +3 -1
  18. package/lib/ecabs-input/ecabs-input.component.d.ts +2 -1
  19. package/package.json +1 -1
  20. package/src/assets/styles/scss/modules/_chip.scss +64 -64
  21. package/src/assets/styles/scss/modules/_form.scss +312 -312
  22. package/src/assets/styles/scss/modules/_statuses.scss +36 -36
  23. package/src/assets/styles/scss/utilities/_colors.scss +56 -56
  24. package/src/assets/styles/tailwind/index.scss +1 -1
@@ -832,6 +832,7 @@ class EcabsDigitsOnlyDirective {
832
832
  el;
833
833
  digitsOnly = false;
834
834
  allowHyphen = false;
835
+ allowRange = false;
835
836
  decimal = false;
836
837
  decimalSeparator = '.';
837
838
  unit = 0;
@@ -839,6 +840,7 @@ class EcabsDigitsOnlyDirective {
839
840
  minus = '-';
840
841
  minusCounter = 0;
841
842
  regex;
843
+ rangeRegex;
842
844
  decimalCounter = 0;
843
845
  navigationKeys = [
844
846
  'Backspace',
@@ -872,18 +874,19 @@ class EcabsDigitsOnlyDirective {
872
874
  (this.decimal &&
873
875
  e.key === this.decimalSeparator &&
874
876
  this.decimalCounter <= 1) || // Allow: only one decimal point
875
- (this.decimal && e.key === this.minus && this.minusCounter < 1) // Allow: only one minus
877
+ (e.key === this.minus && this.isMinusAllowed()) // Allow: leading minus and/or range separator
876
878
  ) {
877
879
  return;
878
880
  }
879
- // Ensure that it is a number and stop the keypress
880
- if (e.key === ' ' || !this.regex.test(e.key)) {
881
+ if (e.key === ' ' || e.key === this.minus || !this.regex.test(e.key)) {
881
882
  e.preventDefault();
882
883
  }
883
884
  }
884
885
  }
885
886
  onKeyUp() {
886
887
  if (this.digitsOnly) {
888
+ this.minusCounter =
889
+ this.el.nativeElement.value.split(this.minus).length - 1;
887
890
  if (!this.decimal) {
888
891
  const regex = /[.,]/g;
889
892
  this.inputElement.value = this.inputElement.value.replace(regex, '');
@@ -891,9 +894,9 @@ class EcabsDigitsOnlyDirective {
891
894
  }
892
895
  this.decimalCounter =
893
896
  this.el.nativeElement.value.split(this.decimalSeparator).length - 1;
894
- this.minusCounter =
895
- this.el.nativeElement.value.split(this.minus).length - 1;
896
- if (isNaN(+this.inputElement.value)) {
897
+ if (isNaN(+this.inputElement.value) &&
898
+ !this.isPartialNegative(this.inputElement.value) &&
899
+ !this.isPartialRange(this.inputElement.value)) {
897
900
  this.inputElement.value = this.sanitizeInput(this.inputElement.value);
898
901
  }
899
902
  }
@@ -909,7 +912,16 @@ class EcabsDigitsOnlyDirective {
909
912
  event.preventDefault();
910
913
  }
911
914
  ngOnInit() {
912
- this.regex = new RegExp(this.allowHyphen ? '^[\\d -]+$' : '\\d');
915
+ this.regex = new RegExp(this.allowHyphen || this.allowRange ? '^[\\d -]+$' : '\\d');
916
+ if (this.allowRange) {
917
+ const sep = this.escapeRegExp(this.decimalSeparator);
918
+ const head = this.decimal ? `\\d+(${sep}\\d*)?` : '\\d+';
919
+ const tail = this.decimal ? `\\d*(${sep}\\d*)?` : '\\d*';
920
+ // When combined with `allowHyphen`, a leading minus (negative lower
921
+ // bound) is allowed, e.g. "-5-20".
922
+ const lead = this.allowHyphen ? `${this.minus}?` : '';
923
+ this.rangeRegex = new RegExp(`^${lead}${head}(${this.minus}${tail})?$`);
924
+ }
913
925
  }
914
926
  pasteData(pastedContent) {
915
927
  const sanitizedContent = isNaN(+pastedContent)
@@ -922,28 +934,126 @@ class EcabsDigitsOnlyDirective {
922
934
  }
923
935
  }
924
936
  sanitizeInput(input) {
925
- let result = '';
926
- if (this.decimal && this.isValidDecimal(input)) {
927
- //eslint-disable-next-line
928
- const regex = new RegExp(`^[\d -${this.decimalSeparator}]+$`, 'g');
929
- result = input.replace(regex, '');
930
- }
931
- else {
932
- result = input.replace(`/${this.regex}/g`, '');
937
+ if (this.allowRange) {
938
+ return this.sanitizeRange(input);
939
+ }
940
+ const separator = this.decimalSeparator;
941
+ // Drop every character that isn't allowed, then keep only a single leading
942
+ // hyphen and a single decimal separator.
943
+ const allowed = ['\\d'];
944
+ if (this.allowHyphen) {
945
+ allowed.push('\\-');
946
+ }
947
+ if (this.decimal) {
948
+ allowed.push(this.escapeRegExp(separator));
949
+ }
950
+ let result = input.replace(new RegExp(`[^${allowed.join('')}]`, 'g'), '');
951
+ if (this.allowHyphen) {
952
+ const isNegative = result.startsWith(this.minus);
953
+ result = (isNegative ? this.minus : '') + result.split(this.minus).join('');
954
+ }
955
+ if (this.decimal) {
956
+ result = this.keepFirstSeparator(result, separator);
957
+ }
958
+ return this.applyMaxLength(result);
959
+ }
960
+ sanitizeRange(input) {
961
+ const separator = this.decimalSeparator;
962
+ const allowed = ['\\d', '\\-'];
963
+ if (this.decimal) {
964
+ allowed.push(this.escapeRegExp(separator));
965
+ }
966
+ let result = input.replace(new RegExp(`[^${allowed.join('')}]`, 'g'), '');
967
+ const hasLeadingMinus = this.allowHyphen && result.startsWith(this.minus);
968
+ let body = hasLeadingMinus ? result.slice(1) : result;
969
+ body = body.replace(/^-+/, '');
970
+ const firstHyphen = body.indexOf(this.minus);
971
+ if (firstHyphen !== -1) {
972
+ body =
973
+ body.slice(0, firstHyphen + 1) +
974
+ body.slice(firstHyphen + 1).split(this.minus).join('');
975
+ }
976
+ if (this.decimal) {
977
+ body = body
978
+ .split(this.minus)
979
+ .map((segment) => this.keepFirstSeparator(segment, separator))
980
+ .join(this.minus);
981
+ }
982
+ result = (hasLeadingMinus ? this.minus : '') + body;
983
+ return this.applyMaxLength(result);
984
+ }
985
+ keepFirstSeparator(value, separator) {
986
+ const firstSeparator = value.indexOf(separator);
987
+ if (firstSeparator === -1) {
988
+ return value;
933
989
  }
990
+ return (value.slice(0, firstSeparator + 1) +
991
+ value.slice(firstSeparator + 1).split(separator).join(''));
992
+ }
993
+ applyMaxLength(result) {
934
994
  const maxLength = this.inputElement.maxLength;
935
995
  if (maxLength > 0) {
936
996
  // the input element has maxLength limit
937
997
  const allowedLength = maxLength - this.inputElement.value.length;
938
- result = allowedLength > 0 ? result.substring(0, allowedLength) : '';
998
+ return allowedLength > 0 ? result.substring(0, allowedLength) : '';
939
999
  }
940
1000
  return result;
941
1001
  }
942
- isValidDecimal(inputString) {
943
- return inputString.split(this.decimalSeparator).length <= 2;
1002
+ escapeRegExp(value) {
1003
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
1004
+ }
1005
+ isMinusAllowed() {
1006
+ const value = this.inputElement.value;
1007
+ // Combined mode: a single leading minus (negative lower bound) plus one
1008
+ // range separator, e.g. "-5-20".
1009
+ if (this.allowHyphen && this.allowRange) {
1010
+ if (this.isCaretAtStart()) {
1011
+ return !value.startsWith(this.minus);
1012
+ }
1013
+ return this.hasDigitBeforeCaret() && !this.hasRangeSeparator();
1014
+ }
1015
+ // Hyphen only: a single leading minus.
1016
+ if (this.allowHyphen) {
1017
+ return this.minusCounter < 1 && this.isCaretAtStart();
1018
+ }
1019
+ // Range only: a single separator, never leading.
1020
+ if (this.allowRange) {
1021
+ return this.minusCounter < 1 && this.hasDigitBeforeCaret();
1022
+ }
1023
+ return false;
1024
+ }
1025
+ hasRangeSeparator() {
1026
+ const value = this.inputElement.value;
1027
+ const body = value.startsWith(this.minus) ? value.slice(1) : value;
1028
+ return body.includes(this.minus);
1029
+ }
1030
+ isCaretAtStart() {
1031
+ const caret = this.inputElement.selectionStart;
1032
+ return caret === null || caret === 0;
1033
+ }
1034
+ hasDigitBeforeCaret() {
1035
+ const caret = this.inputElement.selectionStart;
1036
+ const value = this.inputElement.value;
1037
+ const before = caret === null ? value : value.slice(0, caret);
1038
+ return /\d/.test(before);
1039
+ }
1040
+ isPartialRange(value) {
1041
+ return !!this.allowRange && !!this.rangeRegex && this.rangeRegex.test(value);
1042
+ }
1043
+ isPartialNegative(value) {
1044
+ if (!this.allowHyphen || !value.startsWith(this.minus)) {
1045
+ return false;
1046
+ }
1047
+ const remainder = value.slice(1);
1048
+ if (remainder.includes(this.minus)) {
1049
+ return false;
1050
+ }
1051
+ return (remainder === '' ||
1052
+ remainder === this.decimalSeparator ||
1053
+ !isNaN(+remainder));
944
1054
  }
945
1055
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDigitsOnlyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
946
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: { digitsOnly: "digitsOnly", allowHyphen: "allowHyphen", decimal: "decimal", decimalSeparator: "decimalSeparator", unit: "unit" }, host: { listeners: { "keydown": "onKeyDown($event)", "keyup": "onKeyUp($event)", "paste": "onPaste($event)", "wheel": "onWheel($event)" } }, ngImport: i0 });
1056
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: { digitsOnly: "digitsOnly", allowHyphen: "allowHyphen", allowRange: "allowRange", decimal: "decimal", decimalSeparator: "decimalSeparator", unit: "unit" }, host: { listeners: { "keydown": "onKeyDown($event)", "keyup": "onKeyUp($event)", "paste": "onPaste($event)", "wheel": "onWheel($event)" } }, ngImport: i0 });
947
1057
  }
948
1058
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDigitsOnlyDirective, decorators: [{
949
1059
  type: Directive,
@@ -954,6 +1064,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
954
1064
  type: Input
955
1065
  }], allowHyphen: [{
956
1066
  type: Input
1067
+ }], allowRange: [{
1068
+ type: Input
957
1069
  }], decimal: [{
958
1070
  type: Input
959
1071
  }], decimalSeparator: [{
@@ -1046,6 +1158,7 @@ class EcabsInputComponent extends EcabsElementBaseComponent {
1046
1158
  digitsOnly;
1047
1159
  allowDecimal;
1048
1160
  allowHyphen;
1161
+ allowRange;
1049
1162
  max;
1050
1163
  mini;
1051
1164
  maxi;
@@ -1101,13 +1214,13 @@ class EcabsInputComponent extends EcabsElementBaseComponent {
1101
1214
  this.onblur.emit(e);
1102
1215
  }
1103
1216
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsInputComponent, deps: [{ token: i0.Injector }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
1104
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsInputComponent, selector: "ecabs-input", inputs: { digitsOnly: "digitsOnly", allowDecimal: "allowDecimal", allowHyphen: "allowHyphen", max: "max", mini: "mini", maxi: "maxi", step: "step" }, outputs: { onblur: "onblur" }, providers: [
1217
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsInputComponent, selector: "ecabs-input", inputs: { digitsOnly: "digitsOnly", allowDecimal: "allowDecimal", allowHyphen: "allowHyphen", allowRange: "allowRange", max: "max", mini: "mini", maxi: "maxi", step: "step" }, outputs: { onblur: "onblur" }, providers: [
1105
1218
  {
1106
1219
  provide: NG_VALUE_ACCESSOR,
1107
1220
  useExisting: EcabsInputComponent,
1108
1221
  multi: true,
1109
1222
  },
1110
- ], viewQueries: [{ propertyName: "matCustomInput", first: true, predicate: ["matCustomInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input #matCustomInput\r\n ecabsDigitsOnly\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsMinDirective, selector: "[mini][formControlName],[mini][formControl],[mini][ngModel]", inputs: ["mini"] }, { kind: "directive", type: EcabsMaxDirective, selector: "[maxi][formControlName],[maxi][formControl],[maxi][ngModel]", inputs: ["maxi"] }] });
1223
+ ], viewQueries: [{ propertyName: "matCustomInput", first: true, predicate: ["matCustomInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input #matCustomInput\r\n ecabsDigitsOnly\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n [allowRange]=\"allowRange\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "allowRange", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsMinDirective, selector: "[mini][formControlName],[mini][formControl],[mini][ngModel]", inputs: ["mini"] }, { kind: "directive", type: EcabsMaxDirective, selector: "[maxi][formControlName],[maxi][formControl],[maxi][ngModel]", inputs: ["maxi"] }] });
1111
1224
  }
1112
1225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsInputComponent, decorators: [{
1113
1226
  type: Component,
@@ -1117,7 +1230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1117
1230
  useExisting: EcabsInputComponent,
1118
1231
  multi: true,
1119
1232
  },
1120
- ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input #matCustomInput\r\n ecabsDigitsOnly\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
1233
+ ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input #matCustomInput\r\n ecabsDigitsOnly\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n [digitsOnly]=\"digitsOnly\"\r\n [decimal]=\"allowDecimal\"\r\n [allowHyphen]=\"allowHyphen\"\r\n [allowRange]=\"allowRange\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [mini]=\"mini\"\r\n [maxi]=\"maxi\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n (blur)=\"blurChange($event)\"\r\n />\r\n\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n <ng-content select=\".suffix\"></ng-content>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
1121
1234
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.DestroyRef }]; }, propDecorators: { matCustomInput: [{
1122
1235
  type: ViewChild,
1123
1236
  args: ['matCustomInput', { static: false }]
@@ -1127,6 +1240,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1127
1240
  type: Input
1128
1241
  }], allowHyphen: [{
1129
1242
  type: Input
1243
+ }], allowRange: [{
1244
+ type: Input
1130
1245
  }], max: [{
1131
1246
  type: Input
1132
1247
  }], mini: [{
@@ -1431,7 +1546,7 @@ class EcabsInputRangeComponent extends EcabsElementBaseComponent {
1431
1546
  useExisting: EcabsInputRangeComponent,
1432
1547
  multi: true,
1433
1548
  },
1434
- ], viewQueries: [{ propertyName: "toInput", first: true, predicate: ["toInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"rounded-xl flex flex-col gap-4\">\n <div\n class=\"form-field__range--wrapper\"\n [class.form-field--invalid]=\"hasAnyError\"\n >\n <input\n #fromInput\n ecabsDigitsOnly\n [digitsOnly]=\"digitsOnly\"\n [decimal]=\"allowDecimal\"\n [allowHyphen]=\"allowHyphen\"\n class=\"form-field__input text-center border-0 outline-none bg-transparent\"\n type=\"number\"\n [id]=\"name + '-from'\"\n [mini]=\"min\"\n [maxi]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [placeholder]=\"fromPlaceholder\"\n [ngModel]=\"value.from\"\n (ngModelChange)=\"updateValue('from', $event)\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false)\"\n (keydown.enter)=\"focusToInput()\"\n />\n <span class=\"text-gray-500 text-base mx-4\">{{separatorText}}</span>\n <input\n #toInput\n ecabsDigitsOnly\n [digitsOnly]=\"digitsOnly\"\n [decimal]=\"allowDecimal\"\n [allowHyphen]=\"allowHyphen\"\n class=\"form-field__input text-center border-0 outline-none bg-transparent\"\n type=\"number\"\n [id]=\"name + '-to'\"\n [mini]=\"value.from !== null ? value.from : min\"\n [maxi]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [placeholder]=\"toPlaceholder\"\n [ngModel]=\"value.to\"\n (ngModelChange)=\"updateValue('to', $event)\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false)\"\n />\n </div>\n </div>\n</ecabs-element-wrapper>", styles: [""], dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsMinDirective, selector: "[mini][formControlName],[mini][formControl],[mini][ngModel]", inputs: ["mini"] }, { kind: "directive", type: EcabsMaxDirective, selector: "[maxi][formControlName],[maxi][formControl],[maxi][ngModel]", inputs: ["maxi"] }] });
1549
+ ], viewQueries: [{ propertyName: "toInput", first: true, predicate: ["toInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"rounded-xl flex flex-col gap-4\">\n <div\n class=\"form-field__range--wrapper\"\n [class.form-field--invalid]=\"hasAnyError\"\n >\n <input\n #fromInput\n ecabsDigitsOnly\n [digitsOnly]=\"digitsOnly\"\n [decimal]=\"allowDecimal\"\n [allowHyphen]=\"allowHyphen\"\n class=\"form-field__input text-center border-0 outline-none bg-transparent\"\n type=\"number\"\n [id]=\"name + '-from'\"\n [mini]=\"min\"\n [maxi]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [placeholder]=\"fromPlaceholder\"\n [ngModel]=\"value.from\"\n (ngModelChange)=\"updateValue('from', $event)\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false)\"\n (keydown.enter)=\"focusToInput()\"\n />\n <span class=\"text-gray-500 text-base mx-4\">{{separatorText}}</span>\n <input\n #toInput\n ecabsDigitsOnly\n [digitsOnly]=\"digitsOnly\"\n [decimal]=\"allowDecimal\"\n [allowHyphen]=\"allowHyphen\"\n class=\"form-field__input text-center border-0 outline-none bg-transparent\"\n type=\"number\"\n [id]=\"name + '-to'\"\n [mini]=\"value.from !== null ? value.from : min\"\n [maxi]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [placeholder]=\"toPlaceholder\"\n [ngModel]=\"value.to\"\n (ngModelChange)=\"updateValue('to', $event)\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false)\"\n />\n </div>\n </div>\n</ecabs-element-wrapper>", styles: [""], dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "allowRange", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsMinDirective, selector: "[mini][formControlName],[mini][formControl],[mini][ngModel]", inputs: ["mini"] }, { kind: "directive", type: EcabsMaxDirective, selector: "[maxi][formControlName],[maxi][formControl],[maxi][ngModel]", inputs: ["maxi"] }] });
1435
1550
  }
1436
1551
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsInputRangeComponent, decorators: [{
1437
1552
  type: Component,
@@ -3316,7 +3431,7 @@ class EcabsDateTimePickerComponent extends EcabsElementBaseComponent {
3316
3431
  },
3317
3432
  DecimalPipe,
3318
3433
  UnsubscribeService,
3319
- ], viewQueries: [{ propertyName: "matCustomInput", first: true, predicate: ["matCustomInput"], descendants: true }, { propertyName: "matCustomPicker", first: true, predicate: ["picker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"form-field__input--wrapper w-full\">\n <input\n class=\"fake-input\"\n [id]=\"_date\"\n [(ngModel)]=\"_date\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [matDatepicker]=\"picker\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n (blur)=\"onTouch()\"\n />\n <mat-datepicker #picker [calendarHeaderComponent]=\"header\" [touchUi]=\"touchUi\" class=\"datepicker-ui\">\n <mat-datepicker-actions>\n <div class=\"actions\">\n <div class=\"time--inputs\">\n <input\n class=\"form-field__input time\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [id]=\"hours\"\n [value]=\"_hours\"\n [maxValue]=\"maxValueHours\"\n [(ngModel)]=\"hours\"\n />\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"minutes\"\n [(ngModel)]=\"minutes\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n\n <ng-container *ngIf=\"!hideSeconds\">\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"seconds\"\n [(ngModel)]=\"seconds\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n </ng-container>\n </div>\n\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\n (apply)=\"onApply()\">\n </ecabs-date-picker-actions>\n </div>\n </mat-datepicker-actions>\n </mat-datepicker>\n <input #matCustomInput\n class=\"form-field__input w-full date-input\"\n [id]=\"name\"\n [(ngModel)]=\"pickerValue\"\n placeholder=\"dd/MM/yyyy, HH:mm\"\n [disabled]=\"disabled\"\n ecabsMaskDate\n [isDateTimeMask]=\"true\"\n [considerSeconds]=\"!hideSeconds\"\n (blur)=\"onTouch()\"\n />\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon matDatepickerToggleIcon\n class=\"text-gray-500\">\n calendar_today\n </mat-icon>\n </mat-datepicker-toggle>\n </div>\n</ecabs-element-wrapper>\n", styles: [".time--inputs:before,.time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0;margin:0}.time--inputs{position:relative;display:flex;gap:.5rem;justify-content:center;align-items:center;margin-top:2.4rem;margin-bottom:2.4rem}.time--inputs:before,.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300)}.time--inputs:before{top:-1.6rem}.time--inputs:after{bottom:-1.6rem}.font-bold{font-weight:700}.actions{display:flex;flex-direction:column;width:100%!important;row-gap:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i6.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i6.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsNumberBorderDirective, selector: "[ecabsNumberBorder]", inputs: ["maxValue", "minValue"] }, { kind: "directive", type: EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }, { kind: "component", type: EcabsDatePickerActionsComponent, selector: "ecabs-date-picker-actions", inputs: ["cancelLabel", "applyLabel", "isDateRange", "disabledApplyButton"], outputs: ["apply"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }] });
3434
+ ], viewQueries: [{ propertyName: "matCustomInput", first: true, predicate: ["matCustomInput"], descendants: true }, { propertyName: "matCustomPicker", first: true, predicate: ["picker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"form-field__input--wrapper w-full\">\n <input\n class=\"fake-input\"\n [id]=\"_date\"\n [(ngModel)]=\"_date\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [matDatepicker]=\"picker\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n (blur)=\"onTouch()\"\n />\n <mat-datepicker #picker [calendarHeaderComponent]=\"header\" [touchUi]=\"touchUi\" class=\"datepicker-ui\">\n <mat-datepicker-actions>\n <div class=\"actions\">\n <div class=\"time--inputs\">\n <input\n class=\"form-field__input time\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [id]=\"hours\"\n [value]=\"_hours\"\n [maxValue]=\"maxValueHours\"\n [(ngModel)]=\"hours\"\n />\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"minutes\"\n [(ngModel)]=\"minutes\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n\n <ng-container *ngIf=\"!hideSeconds\">\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"seconds\"\n [(ngModel)]=\"seconds\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n </ng-container>\n </div>\n\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\n (apply)=\"onApply()\">\n </ecabs-date-picker-actions>\n </div>\n </mat-datepicker-actions>\n </mat-datepicker>\n <input #matCustomInput\n class=\"form-field__input w-full date-input\"\n [id]=\"name\"\n [(ngModel)]=\"pickerValue\"\n placeholder=\"dd/MM/yyyy, HH:mm\"\n [disabled]=\"disabled\"\n ecabsMaskDate\n [isDateTimeMask]=\"true\"\n [considerSeconds]=\"!hideSeconds\"\n (blur)=\"onTouch()\"\n />\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon matDatepickerToggleIcon\n class=\"text-gray-500\">\n calendar_today\n </mat-icon>\n </mat-datepicker-toggle>\n </div>\n</ecabs-element-wrapper>\n", styles: [".time--inputs:before,.time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0;margin:0}.time--inputs{position:relative;display:flex;gap:.5rem;justify-content:center;align-items:center;margin-top:2.4rem;margin-bottom:2.4rem}.time--inputs:before,.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300)}.time--inputs:before{top:-1.6rem}.time--inputs:after{bottom:-1.6rem}.font-bold{font-weight:700}.actions{display:flex;flex-direction:column;width:100%!important;row-gap:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i6.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i6.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "allowRange", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsNumberBorderDirective, selector: "[ecabsNumberBorder]", inputs: ["maxValue", "minValue"] }, { kind: "directive", type: EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }, { kind: "component", type: EcabsDatePickerActionsComponent, selector: "ecabs-date-picker-actions", inputs: ["cancelLabel", "applyLabel", "isDateRange", "disabledApplyButton"], outputs: ["apply"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }] });
3320
3435
  }
3321
3436
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateTimePickerComponent, decorators: [{
3322
3437
  type: Component,
@@ -4055,7 +4170,7 @@ class EcabsDateTimeRangePickerComponent extends EcabsElementBaseComponent {
4055
4170
  },
4056
4171
  DecimalPipe,
4057
4172
  UnsubscribeService,
4058
- ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"form-field__input--wrapper w-full\">\n <input\n class=\"fake-input\"\n [id]=\"_date\"\n [(ngModel)]=\"_date\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled || controlDate?.disabled\"\n [matDatepicker]=\"picker\"\n (blur)=\"onTouch()\"\n />\n <mat-datepicker\n (opened)=\"opened()\"\n #picker\n [calendarHeaderComponent]=\"header\"\n [touchUi]=\"touchUi\"\n >\n <mat-datepicker-actions>\n <div class=\"flex flex-col w-full gap-y-4\">\n <div class=\"flex gap-2 justify-center items-center\">\n <div class=\"flex flex-col justify-center\">\n <div class=\"text-center\">{{ from ?? translationConfig?.from }}</div>\n <div class=\"flex gap-2 justify-center items-center\">\n <input\n class=\"block form-field__input time\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [id]=\"hoursFrom\"\n [maxValue]=\"maxValueHours\"\n [(ngModel)]=\"hoursFrom\"\n />\n\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"minutesFrom\"\n [(ngModel)]=\"minutesFrom\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n </div>\n </div>\n </div>\n <div class=\"time--inputs\"></div>\n <div class=\"flex gap-2 justify-center items-center mb-5\">\n <div class=\"flex flex-col justify-center\">\n <div class=\"text-center\">{{ to ?? translationConfig?.to }}</div>\n <div class=\"flex gap-2 justify-center items-center\">\n <input\n class=\"form-field__input time\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [id]=\"hoursTo\"\n [maxValue]=\"maxValueHours\"\n [(ngModel)]=\"hoursTo\"\n />\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"minutesTo\"\n [(ngModel)]=\"minutesTo\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n </div>\n </div>\n </div>\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\n (apply)=\"onApply()\">\n </ecabs-date-picker-actions>\n </div>\n </mat-datepicker-actions>\n </mat-datepicker>\n <input\n class=\"form-field__input w-full date-input\"\n [id]=\"name\"\n [(ngModel)]=\"pickerValue\"\n placeholder=\"00:00 - 00:00\"\n [disabled]=\"disabled || controlDate?.disabled\"\n ecabsTime\n [all]=\"allLabel\"\n [timeRange]=\"true\"\n (blur)=\"onTouch()\"\n (blur)=\"blurChange($event)\"\n (keyup)=\"blurChange($event)\"\n (keydown)=\"keydownChange($event)\"\n />\n <button type=\"button\" class=\"text-gray-500 -translate-x-9\" (click)=\"picker.open()\">\n <mat-icon>access_time</mat-icon>\n </button>\n </div>\n</ecabs-element-wrapper>\n", styles: [".time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0}.time--inputs{position:relative;margin-bottom:2.4rem}.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300);bottom:-1.6rem}:host ::ng-deep .form-field{margin-right:-1.25rem;margin-left:-.125rem}\n"], dependencies: [{ kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsNumberBorderDirective, selector: "[ecabsNumberBorder]", inputs: ["maxValue", "minValue"] }, { kind: "component", type: EcabsDatePickerActionsComponent, selector: "ecabs-date-picker-actions", inputs: ["cancelLabel", "applyLabel", "isDateRange", "disabledApplyButton"], outputs: ["apply"] }, { kind: "directive", type: EcabsMaskTimeDirective, selector: "[ecabsTime]", inputs: ["timeRange", "all"] }] });
4173
+ ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"form-field__input--wrapper w-full\">\n <input\n class=\"fake-input\"\n [id]=\"_date\"\n [(ngModel)]=\"_date\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled || controlDate?.disabled\"\n [matDatepicker]=\"picker\"\n (blur)=\"onTouch()\"\n />\n <mat-datepicker\n (opened)=\"opened()\"\n #picker\n [calendarHeaderComponent]=\"header\"\n [touchUi]=\"touchUi\"\n >\n <mat-datepicker-actions>\n <div class=\"flex flex-col w-full gap-y-4\">\n <div class=\"flex gap-2 justify-center items-center\">\n <div class=\"flex flex-col justify-center\">\n <div class=\"text-center\">{{ from ?? translationConfig?.from }}</div>\n <div class=\"flex gap-2 justify-center items-center\">\n <input\n class=\"block form-field__input time\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [id]=\"hoursFrom\"\n [maxValue]=\"maxValueHours\"\n [(ngModel)]=\"hoursFrom\"\n />\n\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"minutesFrom\"\n [(ngModel)]=\"minutesFrom\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n </div>\n </div>\n </div>\n <div class=\"time--inputs\"></div>\n <div class=\"flex gap-2 justify-center items-center mb-5\">\n <div class=\"flex flex-col justify-center\">\n <div class=\"text-center\">{{ to ?? translationConfig?.to }}</div>\n <div class=\"flex gap-2 justify-center items-center\">\n <input\n class=\"form-field__input time\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [id]=\"hoursTo\"\n [maxValue]=\"maxValueHours\"\n [(ngModel)]=\"hoursTo\"\n />\n <span class=\"font-bold\">:</span>\n <input\n class=\"form-field__input time\"\n [id]=\"minutesTo\"\n [(ngModel)]=\"minutesTo\"\n ecabsDigitsOnly\n ecabsNumberBorder\n [digitsOnly]=\"true\"\n [maxValue]=\"maxValueMinutesSeconds\"\n />\n </div>\n </div>\n </div>\n <ecabs-date-picker-actions [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\n (apply)=\"onApply()\">\n </ecabs-date-picker-actions>\n </div>\n </mat-datepicker-actions>\n </mat-datepicker>\n <input\n class=\"form-field__input w-full date-input\"\n [id]=\"name\"\n [(ngModel)]=\"pickerValue\"\n placeholder=\"00:00 - 00:00\"\n [disabled]=\"disabled || controlDate?.disabled\"\n ecabsTime\n [all]=\"allLabel\"\n [timeRange]=\"true\"\n (blur)=\"onTouch()\"\n (blur)=\"blurChange($event)\"\n (keyup)=\"blurChange($event)\"\n (keydown)=\"keydownChange($event)\"\n />\n <button type=\"button\" class=\"text-gray-500 -translate-x-9\" (click)=\"picker.open()\">\n <mat-icon>access_time</mat-icon>\n </button>\n </div>\n</ecabs-element-wrapper>\n", styles: [".time--inputs:after{position:absolute;content:\"\"}.time{width:3.375rem}.fake-input{visibility:hidden;width:0;padding:0}.time--inputs{position:relative;margin-bottom:2.4rem}.time--inputs:after{height:1px;right:0;left:0;background-color:var(--color-gray-300);bottom:-1.6rem}:host ::ng-deep .form-field{margin-right:-1.25rem;margin-left:-.125rem}\n"], dependencies: [{ kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "allowRange", "decimal", "decimalSeparator", "unit"] }, { kind: "directive", type: EcabsNumberBorderDirective, selector: "[ecabsNumberBorder]", inputs: ["maxValue", "minValue"] }, { kind: "component", type: EcabsDatePickerActionsComponent, selector: "ecabs-date-picker-actions", inputs: ["cancelLabel", "applyLabel", "isDateRange", "disabledApplyButton"], outputs: ["apply"] }, { kind: "directive", type: EcabsMaskTimeDirective, selector: "[ecabsTime]", inputs: ["timeRange", "all"] }] });
4059
4174
  }
4060
4175
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateTimeRangePickerComponent, decorators: [{
4061
4176
  type: Component,
@@ -4215,7 +4330,7 @@ class EcabsIncrementComponent extends EcabsElementBaseComponent {
4215
4330
  useExisting: EcabsIncrementComponent,
4216
4331
  multi: true,
4217
4332
  },
4218
- ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"form-field__input--wrapper\">\n <input ecabsDigitsOnly [digitsOnly]=\"digitsOnly\" [decimal]=\"allowDecimal\" [allowHyphen]=\"allowHyphen\"\n class=\"form-field__input\"\n [type]=\"type\"\n [id]=\"name\"\n [(ngModel)]=\"value\"\n [placeholder]=\"placeholder\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxLength\"/>\n\n <div class=\"incrementor\">\n <mat-icon (click)=\"increment()\">add</mat-icon>\n <mat-icon (click)=\"decrement()\">remove</mat-icon>\n </div>\n </div>\n</ecabs-element-wrapper>\n", styles: [":root{--mat-standard-button-toggle-shape: calc-rem(8px);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-divider-color: var(--color-gray-100);--mat-select-placeholder-text-color: var(--color-gray-400);--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #bb032a;--color-error-opacity: #FFF0EE;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-info-messages: #e3e9f3;--color-warning: #845201;--color-warning-opacity: #FDF2DC;--color-success: #166C3B;--color-success--opacity: #EAF6ED;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-size: 13px}:host::ng-deep .incrementor{border-left:1px solid var(--color-gray-300);position:absolute;display:flex;flex-direction:column;top:1px;bottom:1px;right:1px}:host::ng-deep .incrementor .mat-icon{font-size:20px;font-size:1.25rem;margin-right:0;line-height:20px;cursor:pointer;text-align:center;flex:1}:host::ng-deep .incrementor .mat-icon:first-of-type{border-bottom:1px solid var(--color-gray-300)}:host::ng-deep .incrementor .mat-icon:hover{color:var(--color-brand-dark)}:host::ng-deep .form-field>div{line-height:1}\n"], dependencies: [{ kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }] });
4333
+ ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\n <div class=\"form-field__input--wrapper\">\n <input ecabsDigitsOnly [digitsOnly]=\"digitsOnly\" [decimal]=\"allowDecimal\" [allowHyphen]=\"allowHyphen\"\n class=\"form-field__input\"\n [type]=\"type\"\n [id]=\"name\"\n [(ngModel)]=\"value\"\n [placeholder]=\"placeholder\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxLength\"/>\n\n <div class=\"incrementor\">\n <mat-icon (click)=\"increment()\">add</mat-icon>\n <mat-icon (click)=\"decrement()\">remove</mat-icon>\n </div>\n </div>\n</ecabs-element-wrapper>\n", styles: [":root{--mat-standard-button-toggle-shape: calc-rem(8px);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-divider-color: var(--color-gray-100);--mat-select-placeholder-text-color: var(--color-gray-400);--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #bb032a;--color-error-opacity: #FFF0EE;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-info-messages: #e3e9f3;--color-warning: #845201;--color-warning-opacity: #FDF2DC;--color-success: #166C3B;--color-success--opacity: #EAF6ED;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-size: 13px}:host::ng-deep .incrementor{border-left:1px solid var(--color-gray-300);position:absolute;display:flex;flex-direction:column;top:1px;bottom:1px;right:1px}:host::ng-deep .incrementor .mat-icon{font-size:20px;font-size:1.25rem;margin-right:0;line-height:20px;cursor:pointer;text-align:center;flex:1}:host::ng-deep .incrementor .mat-icon:first-of-type{border-bottom:1px solid var(--color-gray-300)}:host::ng-deep .incrementor .mat-icon:hover{color:var(--color-brand-dark)}:host::ng-deep .form-field>div{line-height:1}\n"], dependencies: [{ kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "allowRange", "decimal", "decimalSeparator", "unit"] }] });
4219
4334
  }
4220
4335
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsIncrementComponent, decorators: [{
4221
4336
  type: Component,
@@ -8681,7 +8796,7 @@ class EcabsDialogConfirmationDeletionComponent {
8681
8796
  this.dialogRef.close(false);
8682
8797
  }
8683
8798
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDialogConfirmationDeletionComponent, deps: [{ token: i1$2.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3.UntypedFormBuilder }, { token: EcabsComponentsService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
8684
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDialogConfirmationDeletionComponent, selector: "ecabs-dialog-confirm-deletion", ngImport: i0, template: "<div class=\"p-6\">\n <h3 class=\"modal-title font-semibold\" [ngClass]=\"(data?.color || color) === 'primary' ? 'primary' : 'warn'\">\n {{ data.actionName }} {{ data.showEntityNameInHeader ? (data.entityName | lowercase) : '' }}\n </h3>\n <div class=\"mt-1\">\n <div class=\"alert-item\" *ngIf=\"data.alertText && data.alertText.length > 0\">\n <span class=\"alert-text\">\n {{ data.alertText }}\n </span>\n </div>\n\n <form [formGroup]=\"form\" class=\"mt-1\">\n <ecabs-input\n [placeholder]=\"data.entityNamePlaceholder\"\n [label]=\"data.entityNameLabel\"\n name=\"name\"\n formControlName=\"name\"\n ></ecabs-input>\n </form>\n </div>\n\n <div class=\"btn__group flex flex-row gap-x-4 justify-end\">\n <ecabs-buttons class=\"grow\" [style]=\"'stroked'\" (click)=\"onCancel()\">\n {{ data?.cancelLabel }}\n </ecabs-buttons>\n\n <ecabs-buttons\n class=\"grow\"\n [color]=\"data?.color || color\"\n (click)=\"onConfirm()\"\n [disabled]=\"form.value.name !== data.comparisonText\"\n >\n {{ data?.confirmLabel }}\n </ecabs-buttons>\n </div>\n</div>\n", styles: [".modal-title{font-size:22px}:host ::ng-deep button{width:100%!important}.primary{color:var(--color-brand-dark)}.warn{color:var(--color-error)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ButtonsComponent, selector: "ecabs-buttons", inputs: ["disabled", "loading", "size", "type", "style", "full", "color"] }, { kind: "component", type: EcabsInputComponent, selector: "ecabs-input", inputs: ["digitsOnly", "allowDecimal", "allowHyphen", "max", "mini", "maxi", "step"], outputs: ["onblur"] }, { kind: "pipe", type: i1.LowerCasePipe, name: "lowercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8799
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDialogConfirmationDeletionComponent, selector: "ecabs-dialog-confirm-deletion", ngImport: i0, template: "<div class=\"p-6\">\n <h3 class=\"modal-title font-semibold\" [ngClass]=\"(data?.color || color) === 'primary' ? 'primary' : 'warn'\">\n {{ data.actionName }} {{ data.showEntityNameInHeader ? (data.entityName | lowercase) : '' }}\n </h3>\n <div class=\"mt-1\">\n <div class=\"alert-item\" *ngIf=\"data.alertText && data.alertText.length > 0\">\n <span class=\"alert-text\">\n {{ data.alertText }}\n </span>\n </div>\n\n <form [formGroup]=\"form\" class=\"mt-1\">\n <ecabs-input\n [placeholder]=\"data.entityNamePlaceholder\"\n [label]=\"data.entityNameLabel\"\n name=\"name\"\n formControlName=\"name\"\n ></ecabs-input>\n </form>\n </div>\n\n <div class=\"btn__group flex flex-row gap-x-4 justify-end\">\n <ecabs-buttons class=\"grow\" [style]=\"'stroked'\" (click)=\"onCancel()\">\n {{ data?.cancelLabel }}\n </ecabs-buttons>\n\n <ecabs-buttons\n class=\"grow\"\n [color]=\"data?.color || color\"\n (click)=\"onConfirm()\"\n [disabled]=\"form.value.name !== data.comparisonText\"\n >\n {{ data?.confirmLabel }}\n </ecabs-buttons>\n </div>\n</div>\n", styles: [".modal-title{font-size:22px}:host ::ng-deep button{width:100%!important}.primary{color:var(--color-brand-dark)}.warn{color:var(--color-error)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ButtonsComponent, selector: "ecabs-buttons", inputs: ["disabled", "loading", "size", "type", "style", "full", "color"] }, { kind: "component", type: EcabsInputComponent, selector: "ecabs-input", inputs: ["digitsOnly", "allowDecimal", "allowHyphen", "allowRange", "max", "mini", "maxi", "step"], outputs: ["onblur"] }, { kind: "pipe", type: i1.LowerCasePipe, name: "lowercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8685
8800
  }
8686
8801
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDialogConfirmationDeletionComponent, decorators: [{
8687
8802
  type: Component,
@@ -8947,6 +9062,8 @@ class EcabsChipGroupComponent {
8947
9062
  multiple = true;
8948
9063
  disableRipple = true;
8949
9064
  truncateAt = 18;
9065
+ compareFn = Object.is;
9066
+ trackByFn = (_, option) => option;
8950
9067
  selectedChange = new EventEmitter();
8951
9068
  _value = signal(null);
8952
9069
  isDisabled = signal(false);
@@ -8971,13 +9088,13 @@ class EcabsChipGroupComponent {
8971
9088
  onChange = () => { };
8972
9089
  onTouched = () => { };
8973
9090
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsChipGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8974
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsChipGroupComponent, selector: "ecabs-chip-group", inputs: { options: "options", multiple: "multiple", disableRipple: "disableRipple", truncateAt: "truncateAt" }, outputs: { selectedChange: "selectedChange" }, providers: [
9091
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsChipGroupComponent, selector: "ecabs-chip-group", inputs: { options: "options", multiple: "multiple", disableRipple: "disableRipple", truncateAt: "truncateAt", compareFn: "compareFn", trackByFn: "trackByFn" }, outputs: { selectedChange: "selectedChange" }, providers: [
8975
9092
  {
8976
9093
  provide: NG_VALUE_ACCESSOR,
8977
9094
  useExisting: forwardRef(() => EcabsChipGroupComponent),
8978
9095
  multi: true,
8979
9096
  },
8980
- ], ngImport: i0, template: "<mat-chip-listbox [multiple]=\"multiple\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"_value()\"\n (ngModelChange)=\"chipValueChange($event)\">\n <mat-chip-option *ngFor=\"let option of options\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [disableRipple]=\"disableRipple\">\n <ng-container *ngIf=\"option?.label as label\">\n <span [matTooltip]=\"label\"\n [matTooltipDisabled]=\"label.length <= truncateAt\">\n {{ label | truncate: truncateAt }}\n </span>\n </ng-container>\n </mat-chip-option>\n</mat-chip-listbox>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$3.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i2$3.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: EcabsTruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9097
+ ], ngImport: i0, template: "<mat-chip-listbox [multiple]=\"multiple\"\n [compareWith]=\"compareFn\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"_value()\"\n (ngModelChange)=\"chipValueChange($event)\">\n <mat-chip-option *ngFor=\"let option of options; trackBy: trackByFn\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [disableRipple]=\"disableRipple\">\n <ng-container *ngIf=\"option?.label as label\">\n <span [matTooltip]=\"label\"\n [matTooltipDisabled]=\"label.length <= truncateAt\">\n {{ label | truncate: truncateAt }}\n </span>\n </ng-container>\n </mat-chip-option>\n</mat-chip-listbox>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$3.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i2$3.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: EcabsTruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8981
9098
  }
8982
9099
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsChipGroupComponent, decorators: [{
8983
9100
  type: Component,
@@ -8987,7 +9104,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8987
9104
  useExisting: forwardRef(() => EcabsChipGroupComponent),
8988
9105
  multi: true,
8989
9106
  },
8990
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-chip-listbox [multiple]=\"multiple\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"_value()\"\n (ngModelChange)=\"chipValueChange($event)\">\n <mat-chip-option *ngFor=\"let option of options\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [disableRipple]=\"disableRipple\">\n <ng-container *ngIf=\"option?.label as label\">\n <span [matTooltip]=\"label\"\n [matTooltipDisabled]=\"label.length <= truncateAt\">\n {{ label | truncate: truncateAt }}\n </span>\n </ng-container>\n </mat-chip-option>\n</mat-chip-listbox>\n" }]
9107
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-chip-listbox [multiple]=\"multiple\"\n [compareWith]=\"compareFn\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"_value()\"\n (ngModelChange)=\"chipValueChange($event)\">\n <mat-chip-option *ngFor=\"let option of options; trackBy: trackByFn\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [disableRipple]=\"disableRipple\">\n <ng-container *ngIf=\"option?.label as label\">\n <span [matTooltip]=\"label\"\n [matTooltipDisabled]=\"label.length <= truncateAt\">\n {{ label | truncate: truncateAt }}\n </span>\n </ng-container>\n </mat-chip-option>\n</mat-chip-listbox>\n" }]
8991
9108
  }], propDecorators: { options: [{
8992
9109
  type: Input
8993
9110
  }], multiple: [{
@@ -8996,6 +9113,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8996
9113
  type: Input
8997
9114
  }], truncateAt: [{
8998
9115
  type: Input
9116
+ }], compareFn: [{
9117
+ type: Input
9118
+ }], trackByFn: [{
9119
+ type: Input
8999
9120
  }], selectedChange: [{
9000
9121
  type: Output
9001
9122
  }] } });