@ferhaps/easy-ui-lib 21.0.6 → 21.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,9 +11,9 @@ npm install @ferhaps/easy-ui-lib
11
11
  ## Dependencies
12
12
 
13
13
  This library requires:
14
- - Angular ^20.3.3
15
- - Angular Material ^20.2.7
16
- - Angular CDK ^20.3.3
14
+ - Angular ^21.0.2
15
+ - Angular Material ^21.0.1
16
+ - Angular CDK ^21.0.1
17
17
 
18
18
  ## Components
19
19
 
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Pipe, input, Directive, HostListener, output, Input, Component, viewChild, Injectable, inject, Inject } from '@angular/core';
2
+ import { Pipe, input, Directive, output, ChangeDetectionStrategy, Component, viewChild, Injectable, inject } from '@angular/core';
3
3
  import * as i2 from '@angular/forms';
4
4
  import { NG_VALIDATORS, FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';
5
5
  import * as i1$1 from '@angular/material/icon';
@@ -8,7 +8,6 @@ import * as i3 from '@angular/material/dialog';
8
8
  import { MatDialogModule, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
9
9
  import * as i1 from '@angular/common';
10
10
  import { CommonModule, AsyncPipe } from '@angular/common';
11
- import * as i1$4 from '@angular/common/http';
12
11
  import { HttpErrorResponse } from '@angular/common/http';
13
12
  import { debounceTime, distinctUntilChanged, BehaviorSubject, Subject, Subscription } from 'rxjs';
14
13
  import * as i1$2 from '@angular/material/menu';
@@ -32,10 +31,10 @@ class SnakeCaseParserPipe {
32
31
  }
33
32
  return String(value);
34
33
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SnakeCaseParserPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
36
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.2", ngImport: i0, type: SnakeCaseParserPipe, isStandalone: true, name: "snakeCaseParser" }); }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SnakeCaseParserPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
35
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.5", ngImport: i0, type: SnakeCaseParserPipe, isStandalone: true, name: "snakeCaseParser" }); }
37
36
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SnakeCaseParserPipe, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SnakeCaseParserPipe, decorators: [{
39
38
  type: Pipe,
40
39
  args: [{
41
40
  name: 'snakeCaseParser',
@@ -44,7 +43,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImpor
44
43
 
45
44
  class FieldsMatchValidatorDirective {
46
45
  constructor() {
47
- this.fieldToMatch = input.required({ ...(ngDevMode ? { debugName: "fieldToMatch" } : {}) });
46
+ this.fieldToMatch = input.required(...(ngDevMode ? [{ debugName: "fieldToMatch" }] : /* istanbul ignore next */ []));
48
47
  }
49
48
  validate(control) {
50
49
  const value = control.value;
@@ -60,8 +59,8 @@ class FieldsMatchValidatorDirective {
60
59
  }
61
60
  return null;
62
61
  }
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: FieldsMatchValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
64
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.2", type: FieldsMatchValidatorDirective, isStandalone: true, selector: "[libFieldsMatchValidator]", inputs: { fieldToMatch: { classPropertyName: "fieldToMatch", publicName: "fieldToMatch", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: FieldsMatchValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
63
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.5", type: FieldsMatchValidatorDirective, isStandalone: true, selector: "[libFieldsMatchValidator]", inputs: { fieldToMatch: { classPropertyName: "fieldToMatch", publicName: "fieldToMatch", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
65
64
  {
66
65
  provide: NG_VALIDATORS,
67
66
  useExisting: FieldsMatchValidatorDirective,
@@ -69,7 +68,7 @@ class FieldsMatchValidatorDirective {
69
68
  },
70
69
  ], ngImport: i0 }); }
71
70
  }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: FieldsMatchValidatorDirective, decorators: [{
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: FieldsMatchValidatorDirective, decorators: [{
73
72
  type: Directive,
74
73
  args: [{
75
74
  selector: '[libFieldsMatchValidator]',
@@ -101,21 +100,19 @@ class PhoneValidationDirective {
101
100
  event.preventDefault();
102
101
  }
103
102
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PhoneValidationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
105
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.2", type: PhoneValidationDirective, isStandalone: true, selector: "[libPhoneValidation]", host: { listeners: { "input": "onInput($event)", "keydown": "onKeyDown($event)" } }, ngImport: i0 }); }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PhoneValidationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
104
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.5", type: PhoneValidationDirective, isStandalone: true, selector: "[libPhoneValidation]", host: { listeners: { "input": "onInput($event)", "keydown": "onKeyDown($event)" } }, ngImport: i0 }); }
106
105
  }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PhoneValidationDirective, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PhoneValidationDirective, decorators: [{
108
107
  type: Directive,
109
108
  args: [{
110
109
  selector: '[libPhoneValidation]',
110
+ host: {
111
+ '(input)': 'onInput($event)',
112
+ '(keydown)': 'onKeyDown($event)'
113
+ }
111
114
  }]
112
- }], propDecorators: { onInput: [{
113
- type: HostListener,
114
- args: ['input', ['$event']]
115
- }], onKeyDown: [{
116
- type: HostListener,
117
- args: ['keydown', ['$event']]
118
- }] } });
115
+ }] });
119
116
 
120
117
  class PasswordValidatorDirective {
121
118
  validate(control) {
@@ -127,8 +124,8 @@ class PasswordValidatorDirective {
127
124
  }
128
125
  return null;
129
126
  }
130
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PasswordValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
131
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.2", type: PasswordValidatorDirective, isStandalone: true, selector: "[libPasswordValidator]", providers: [
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PasswordValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
128
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.5", type: PasswordValidatorDirective, isStandalone: true, selector: "[libPasswordValidator]", providers: [
132
129
  {
133
130
  provide: NG_VALIDATORS,
134
131
  useExisting: PasswordValidatorDirective,
@@ -136,7 +133,7 @@ class PasswordValidatorDirective {
136
133
  }
137
134
  ], ngImport: i0 }); }
138
135
  }
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PasswordValidatorDirective, decorators: [{
136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: PasswordValidatorDirective, decorators: [{
140
137
  type: Directive,
141
138
  args: [{
142
139
  selector: '[libPasswordValidator]',
@@ -152,28 +149,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImpor
152
149
 
153
150
  class DefaultDialogComponent {
154
151
  constructor() {
155
- this.height = input(undefined, { ...(ngDevMode ? { debugName: "height" } : {}) });
156
- this.dialogTitle = input(undefined, { ...(ngDevMode ? { debugName: "dialogTitle" } : {}) });
157
- this.withBack = input(undefined, { ...(ngDevMode ? { debugName: "withBack" } : {}) });
152
+ this.temRef = input(...(ngDevMode ? [undefined, { debugName: "temRef" }] : /* istanbul ignore next */ []));
153
+ this.height = input(...(ngDevMode ? [undefined, { debugName: "height" }] : /* istanbul ignore next */ []));
154
+ this.dialogTitle = input(...(ngDevMode ? [undefined, { debugName: "dialogTitle" }] : /* istanbul ignore next */ []));
155
+ this.withBack = input(...(ngDevMode ? [undefined, { debugName: "withBack" }] : /* istanbul ignore next */ []));
158
156
  this.back = output();
159
157
  }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: DefaultDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.2", type: DefaultDialogComponent, isStandalone: true, selector: "lib-default-dialog", inputs: { temRef: { classPropertyName: "temRef", publicName: "temRef", isSignal: false, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, dialogTitle: { classPropertyName: "dialogTitle", publicName: "dialogTitle", isSignal: true, isRequired: false, transformFunction: null }, withBack: { classPropertyName: "withBack", publicName: "withBack", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { back: "back" }, ngImport: i0, template: "<div class=\"modal\" [style]=\"{ 'height': height() }\">\r\n <div class=\"dialog-title\">\r\n @if (withBack()) {\r\n <div class=\"back-arrow\" (click)=\"back.emit()\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n }\r\n\r\n <h4 class=\"title\">{{ dialogTitle() }}</h4>\r\n\r\n <div class=\"closer\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dialog-content\">\r\n <ng-content select=\".dialog-content\" />\r\n <ng-template #tempBody />\r\n <ng-container *ngTemplateOutlet=\"temRef ? temRef: tempBody\" />\r\n </div>\r\n</div>", styles: [".modal{display:flex;flex-direction:column}.dialog-title{padding-inline:2rem;padding-top:1rem;margin-bottom:1rem;position:relative;display:flex;font-size:20px;justify-content:center}.dialog-title .back-arrow{cursor:pointer;position:absolute;left:1rem}.dialog-title .title{font-weight:700;font-size:24px;margin:0!important}.dialog-title .closer{right:3%;position:absolute;cursor:pointer}.dialog-content{flex:1;min-height:0;overflow:hidden;padding-bottom:1rem;display:flex;flex-direction:column;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DefaultDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: DefaultDialogComponent, isStandalone: true, selector: "lib-default-dialog", inputs: { temRef: { classPropertyName: "temRef", publicName: "temRef", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, dialogTitle: { classPropertyName: "dialogTitle", publicName: "dialogTitle", isSignal: true, isRequired: false, transformFunction: null }, withBack: { classPropertyName: "withBack", publicName: "withBack", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { back: "back" }, ngImport: i0, template: "<div class=\"modal\" [style]=\"{ 'height': height() }\">\r\n <div class=\"dialog-title\">\r\n @if (withBack()) {\r\n <div class=\"back-arrow\" (click)=\"back.emit()\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n }\r\n\r\n <h4 class=\"title\">{{ dialogTitle() }}</h4>\r\n\r\n <div class=\"closer\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dialog-content\">\r\n <ng-content select=\".dialog-content\" />\r\n <ng-template #tempBody />\r\n <ng-container *ngTemplateOutlet=\"temRef() ? temRef() : tempBody\" />\r\n </div>\r\n</div>", styles: [".modal{display:flex;flex-direction:column}.dialog-title{padding-inline:2rem;padding-top:1rem;margin-bottom:1rem;position:relative;display:flex;font-size:20px;justify-content:center}.dialog-title .back-arrow{cursor:pointer;position:absolute;left:1rem}.dialog-title .title{font-weight:700;font-size:24px;margin:0!important}.dialog-title .closer{right:3%;position:absolute;cursor:pointer}.dialog-content{flex:1;min-height:0;overflow:hidden;padding-bottom:1rem;display:flex;flex-direction:column;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
162
160
  }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: DefaultDialogComponent, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: DefaultDialogComponent, decorators: [{
164
162
  type: Component,
165
163
  args: [{ selector: 'lib-default-dialog', imports: [
166
164
  CommonModule,
167
165
  MatIconModule,
168
166
  MatDialogModule
169
- ], template: "<div class=\"modal\" [style]=\"{ 'height': height() }\">\r\n <div class=\"dialog-title\">\r\n @if (withBack()) {\r\n <div class=\"back-arrow\" (click)=\"back.emit()\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n }\r\n\r\n <h4 class=\"title\">{{ dialogTitle() }}</h4>\r\n\r\n <div class=\"closer\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dialog-content\">\r\n <ng-content select=\".dialog-content\" />\r\n <ng-template #tempBody />\r\n <ng-container *ngTemplateOutlet=\"temRef ? temRef: tempBody\" />\r\n </div>\r\n</div>", styles: [".modal{display:flex;flex-direction:column}.dialog-title{padding-inline:2rem;padding-top:1rem;margin-bottom:1rem;position:relative;display:flex;font-size:20px;justify-content:center}.dialog-title .back-arrow{cursor:pointer;position:absolute;left:1rem}.dialog-title .title{font-weight:700;font-size:24px;margin:0!important}.dialog-title .closer{right:3%;position:absolute;cursor:pointer}.dialog-content{flex:1;min-height:0;overflow:hidden;padding-bottom:1rem;display:flex;flex-direction:column;align-items:center}\n"] }]
170
- }], propDecorators: { temRef: [{
171
- type: Input
172
- }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], dialogTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "dialogTitle", required: false }] }], withBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "withBack", required: false }] }], back: [{ type: i0.Output, args: ["back"] }] } });
167
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"modal\" [style]=\"{ 'height': height() }\">\r\n <div class=\"dialog-title\">\r\n @if (withBack()) {\r\n <div class=\"back-arrow\" (click)=\"back.emit()\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n }\r\n\r\n <h4 class=\"title\">{{ dialogTitle() }}</h4>\r\n\r\n <div class=\"closer\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dialog-content\">\r\n <ng-content select=\".dialog-content\" />\r\n <ng-template #tempBody />\r\n <ng-container *ngTemplateOutlet=\"temRef() ? temRef() : tempBody\" />\r\n </div>\r\n</div>", styles: [".modal{display:flex;flex-direction:column}.dialog-title{padding-inline:2rem;padding-top:1rem;margin-bottom:1rem;position:relative;display:flex;font-size:20px;justify-content:center}.dialog-title .back-arrow{cursor:pointer;position:absolute;left:1rem}.dialog-title .title{font-weight:700;font-size:24px;margin:0!important}.dialog-title .closer{right:3%;position:absolute;cursor:pointer}.dialog-content{flex:1;min-height:0;overflow:hidden;padding-bottom:1rem;display:flex;flex-direction:column;align-items:center}\n"] }]
168
+ }], propDecorators: { temRef: [{ type: i0.Input, args: [{ isSignal: true, alias: "temRef", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], dialogTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "dialogTitle", required: false }] }], withBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "withBack", required: false }] }], back: [{ type: i0.Output, args: ["back"] }] } });
173
169
 
174
- class ErrorDispalyComponent {
170
+ class ErrorDisplayComponent {
175
171
  constructor() {
176
- this.error = input.required({ ...(ngDevMode ? { debugName: "error" } : {}) });
172
+ this.error = input.required(...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
177
173
  this.displayError = '';
178
174
  }
179
175
  ngOnInit() {
@@ -195,19 +191,19 @@ class ErrorDispalyComponent {
195
191
  this.displayError = 'Unknown error';
196
192
  }
197
193
  }
198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorDispalyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.2", type: ErrorDispalyComponent, isStandalone: true, selector: "lib-error-dispaly", inputs: { error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `<strong class="err-container">{{ displayError | snakeCaseParser }}</strong>`, isInline: true, styles: [".err-container{display:block;max-width:300px;font-size:20px;text-align:center;border:1px solid red;border-radius:5px;padding:.5rem 1.5rem;background-color:#ffe6e6;color:red;overflow-wrap:break-word}\n"], dependencies: [{ kind: "pipe", type: SnakeCaseParserPipe, name: "snakeCaseParser" }] }); }
194
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
195
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.5", type: ErrorDisplayComponent, isStandalone: true, selector: "lib-error-display", inputs: { error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `<strong class="err-container">{{ displayError | snakeCaseParser }}</strong>`, isInline: true, styles: [".err-container{display:block;max-width:300px;font-size:20px;text-align:center;border:1px solid red;border-radius:5px;padding:.5rem 1.5rem;background-color:#ffe6e6;color:red;overflow-wrap:break-word}\n"], dependencies: [{ kind: "pipe", type: SnakeCaseParserPipe, name: "snakeCaseParser" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
200
196
  }
201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorDispalyComponent, decorators: [{
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorDisplayComponent, decorators: [{
202
198
  type: Component,
203
- args: [{ selector: 'lib-error-dispaly', imports: [
199
+ args: [{ selector: 'lib-error-display', imports: [
204
200
  SnakeCaseParserPipe
205
- ], template: `<strong class="err-container">{{ displayError | snakeCaseParser }}</strong>`, styles: [".err-container{display:block;max-width:300px;font-size:20px;text-align:center;border:1px solid red;border-radius:5px;padding:.5rem 1.5rem;background-color:#ffe6e6;color:red;overflow-wrap:break-word}\n"] }]
201
+ ], template: `<strong class="err-container">{{ displayError | snakeCaseParser }}</strong>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".err-container{display:block;max-width:300px;font-size:20px;text-align:center;border:1px solid red;border-radius:5px;padding:.5rem 1.5rem;background-color:#ffe6e6;color:red;overflow-wrap:break-word}\n"] }]
206
202
  }], propDecorators: { error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: true }] }] } });
207
203
 
208
204
  class SearchBarComponent {
209
205
  constructor() {
210
- this.for = input.required({ ...(ngDevMode ? { debugName: "for" } : {}) });
206
+ this.for = input.required(...(ngDevMode ? [{ debugName: "for" }] : /* istanbul ignore next */ []));
211
207
  this.search = output();
212
208
  this.searchForm = new FormGroup({
213
209
  search: new FormControl('')
@@ -220,16 +216,16 @@ class SearchBarComponent {
220
216
  this.search.emit(searchTerm);
221
217
  });
222
218
  }
223
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SearchBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
224
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.2", type: SearchBarComponent, isStandalone: true, selector: "lib-search-bar", inputs: { for: { classPropertyName: "for", publicName: "for", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { search: "search" }, ngImport: i0, template: `
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SearchBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
220
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.5", type: SearchBarComponent, isStandalone: true, selector: "lib-search-bar", inputs: { for: { classPropertyName: "for", publicName: "for", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { search: "search" }, ngImport: i0, template: `
225
221
  <form class="search-bar" [formGroup]="searchForm">
226
222
  <mat-icon>search</mat-icon>
227
223
  <input class="search-input" type="search" name="field"
228
224
  [placeholder]="'Search ' + for()" autocomplete="off" formControlName="search" />
229
225
  </form>
230
- `, isInline: true, styles: [".search-bar{width:270px;border:1px solid #A4A4A4;display:flex;align-items:center}.search-input{border:none;padding:7px 11px;height:100%;width:100%;background-color:transparent}mat-icon{margin-inline:8px}.search-input:focus{border:none;outline:none}@media(max-width:1086px){.search-bar{width:170px}}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
226
+ `, isInline: true, styles: [".search-bar{width:270px;border:1px solid #A4A4A4;display:flex;align-items:center}.search-input{border:none;padding:7px 11px;height:100%;width:100%;background-color:transparent}mat-icon{margin-inline:8px}.search-input:focus{border:none;outline:none}@media(max-width:1086px){.search-bar{width:170px}}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
231
227
  }
232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SearchBarComponent, decorators: [{
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SearchBarComponent, decorators: [{
233
229
  type: Component,
234
230
  args: [{ selector: 'lib-search-bar', template: `
235
231
  <form class="search-bar" [formGroup]="searchForm">
@@ -240,12 +236,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImpor
240
236
  `, imports: [
241
237
  MatIconModule,
242
238
  ReactiveFormsModule
243
- ], styles: [".search-bar{width:270px;border:1px solid #A4A4A4;display:flex;align-items:center}.search-input{border:none;padding:7px 11px;height:100%;width:100%;background-color:transparent}mat-icon{margin-inline:8px}.search-input:focus{border:none;outline:none}@media(max-width:1086px){.search-bar{width:170px}}\n"] }]
239
+ ], changeDetection: ChangeDetectionStrategy.OnPush, styles: [".search-bar{width:270px;border:1px solid #A4A4A4;display:flex;align-items:center}.search-input{border:none;padding:7px 11px;height:100%;width:100%;background-color:transparent}mat-icon{margin-inline:8px}.search-input:focus{border:none;outline:none}@media(max-width:1086px){.search-bar{width:170px}}\n"] }]
244
240
  }], ctorParameters: () => [], propDecorators: { for: [{ type: i0.Input, args: [{ isSignal: true, alias: "for", required: true }] }], search: [{ type: i0.Output, args: ["search"] }] } });
245
241
 
246
242
  class TableSortHeaderComponent {
247
243
  constructor() {
248
- this.selected = input.required({ ...(ngDevMode ? { debugName: "selected" } : {}) });
244
+ this.selected = input.required(...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
249
245
  this.sort = output();
250
246
  this.sortState = 'none';
251
247
  }
@@ -261,19 +257,19 @@ class TableSortHeaderComponent {
261
257
  }
262
258
  this.sort.emit(this.sortState);
263
259
  }
264
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: TableSortHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
265
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.2", type: TableSortHeaderComponent, isStandalone: true, selector: "lib-table-sort-header", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { sort: "sort" }, ngImport: i0, template: "<div class=\"sorting-container\" (click)=\"onSortClick()\">\r\n <mat-icon\r\n [class.selected]=\"selected() && sortState != 'none'\"\r\n [class.rotated]=\"sortState == 'asc'\">\r\n sort\r\n </mat-icon>\r\n</div>", styles: [".sorting-container{display:flex;align-items:center}.sorting-container *{cursor:pointer}.sorting-container .selected{color:#31adff;background-color:#ebf7fc}.sorting-container .rotated{transform:rotate(180deg) scaleX(-1)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
260
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableSortHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
261
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.5", type: TableSortHeaderComponent, isStandalone: true, selector: "lib-table-sort-header", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { sort: "sort" }, ngImport: i0, template: "<div class=\"sorting-container\" (click)=\"onSortClick()\">\r\n <mat-icon\r\n [class.selected]=\"selected() && sortState != 'none'\"\r\n [class.rotated]=\"sortState == 'asc'\">\r\n sort\r\n </mat-icon>\r\n</div>", styles: [".sorting-container{display:flex;align-items:center}.sorting-container *{cursor:pointer}.sorting-container .selected{color:#31adff;background-color:#ebf7fc}.sorting-container .rotated{transform:rotate(180deg) scaleX(-1)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
266
262
  }
267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: TableSortHeaderComponent, decorators: [{
263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableSortHeaderComponent, decorators: [{
268
264
  type: Component,
269
265
  args: [{ selector: 'lib-table-sort-header', imports: [
270
266
  MatIconModule,
271
- ], template: "<div class=\"sorting-container\" (click)=\"onSortClick()\">\r\n <mat-icon\r\n [class.selected]=\"selected() && sortState != 'none'\"\r\n [class.rotated]=\"sortState == 'asc'\">\r\n sort\r\n </mat-icon>\r\n</div>", styles: [".sorting-container{display:flex;align-items:center}.sorting-container *{cursor:pointer}.sorting-container .selected{color:#31adff;background-color:#ebf7fc}.sorting-container .rotated{transform:rotate(180deg) scaleX(-1)}\n"] }]
267
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sorting-container\" (click)=\"onSortClick()\">\r\n <mat-icon\r\n [class.selected]=\"selected() && sortState != 'none'\"\r\n [class.rotated]=\"sortState == 'asc'\">\r\n sort\r\n </mat-icon>\r\n</div>", styles: [".sorting-container{display:flex;align-items:center}.sorting-container *{cursor:pointer}.sorting-container .selected{color:#31adff;background-color:#ebf7fc}.sorting-container .rotated{transform:rotate(180deg) scaleX(-1)}\n"] }]
272
268
  }], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: true }] }], sort: [{ type: i0.Output, args: ["sort"] }] } });
273
269
 
274
270
  class TableComponent {
275
271
  constructor() {
276
- this.config = input.required({ ...(ngDevMode ? { debugName: "config" } : {}) });
272
+ this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
277
273
  this.action = output();
278
274
  this.scrollContainer = viewChild.required('scrollContainer');
279
275
  this.selectedRowIndex = -1;
@@ -365,10 +361,10 @@ class TableComponent {
365
361
  hasOptions() {
366
362
  return !!this.config().options;
367
363
  }
368
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
369
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.2", type: TableComponent, isStandalone: true, selector: "lib-table", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { action: "action" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flexer\">\r\n @if (config().title) {\r\n <div class=\"row-heading-labels mb05\">{{ config().title }}</div>\r\n }\r\n\r\n <ng-content select=\".upper-part\" />\r\n\r\n @if (config().withAdd) {\r\n <div class=\"flexer action pointer gap05 mb05\" (click)=\"action.emit({action: 'add'})\">\r\n <mat-icon>add_circle_outline</mat-icon>\r\n <div>add</div>\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"scroll\" #scrollContainer (scroll)=\"onScroll($event)\" [class.with-checkboxes]=\"config().selectableRows === 'multiple'\">\r\n <table [class.with-options]=\"hasOptions()\">\r\n <thead>\r\n @if ((config().tableHeadings || []).length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th class=\"box-cell\">\r\n <mat-checkbox\r\n (change)=\"toggleSelectAll($event)\"\r\n [checked]=\"areAllRowsSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n }\r\n\r\n @for (heading of config().tableHeadings; track heading; let i = $index) {\r\n <th>\r\n <div class=\"flexer gap05\">\r\n {{ heading }}\r\n @if (config().sortable && !config().draggable) {\r\n <lib-table-sort-header\r\n [selected]=\"currentSortColumn === i\"\r\n (click)=\"currentSortColumn = i\"\r\n (sort)=\"sortByProp(config().dataProps[i], $event)\"\r\n />\r\n }\r\n </div>\r\n </th>\r\n }\r\n\r\n @if (hasOptions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n } @else {\r\n <ng-content select=\".custom-headers\" />\r\n }\r\n </thead>\r\n @if (config().draggable) {\r\n <tbody cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n cdkDrag cdkDragLockAxis=\"y\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td\r\n [class.dragCol]=\"cellIndex === 0\">\r\n <div class=\"data\" [classList]=\"getClass(obj, prop)\"\r\n [class.flexer]=\"cellIndex === 0\">\r\n @if (cellIndex === 0) {\r\n <mat-icon class=\"draggable\" cdkDragHandle>\r\n drag_indicator\r\n </mat-icon>\r\n }\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n } @else {\r\n <tbody>\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td>\r\n <div class=\"data\" [classList]=\"getClass(obj, prop)\">\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n }\r\n </table>\r\n</div>\r\n", styles: [".scroll{overflow-y:auto;max-height:94%}table{width:100%;border-collapse:collapse;border-spacing:0px}table.with-options td{padding-block:3px!important}.flexer{display:flex;align-items:center}.action{color:#009ddc;font-weight:500;text-align:right;margin-left:auto}.pointer{cursor:pointer}.gap05{gap:.5rem}.mb05{margin-bottom:.5}.data{white-space:pre-wrap}.row-heading-labels{font-weight:700;font-size:20px}.selected-row td{background-color:#d3edf8}.hover-row{background-color:#ebf7fc}.red{color:red}@media(max-width:1086px){table td,table th{padding:3px!important;width:auto!important}}.with-checkboxes td,.with-checkboxes th{padding-block:0!important}.with-checkboxes td:is(:first-child),.with-checkboxes th:is(:first-child){padding-inline:0!important}td,th{padding:.5rem 1rem;font-size:14px}th{background-color:#f6f6f6;text-align:left;position:sticky;top:0;z-index:2;border-top:2px solid #E5E4E7}td{border-bottom:2px solid #E5E4E7;border-top:2px solid #E5E4E7}.dots{width:fit-content}.draggable{cursor:grabbing}.dragCol{padding-left:0!important}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;font-size:1.5em;text-align:center;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.dragdrop-placeholder{background:#ccc;border:dotted 3px #999;min-height:30px;transition:transform .1s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: TableSortHeaderComponent, selector: "lib-table-sort-header", inputs: ["selected"], outputs: ["sort"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] }); }
364
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
365
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: TableComponent, isStandalone: true, selector: "lib-table", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { action: "action" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flexer\">\r\n @if (config().title) {\r\n <div class=\"row-heading-labels mb05\">{{ config().title }}</div>\r\n }\r\n\r\n <ng-content select=\".upper-part\" />\r\n\r\n @if (config().withAdd) {\r\n <div class=\"flexer action pointer gap05 mb05\" (click)=\"action.emit({action: 'add'})\">\r\n <mat-icon>add_circle_outline</mat-icon>\r\n <div>add</div>\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"scroll\" #scrollContainer (scroll)=\"onScroll($event)\" [class.with-checkboxes]=\"config().selectableRows === 'multiple'\">\r\n <table [class.with-options]=\"hasOptions()\">\r\n <thead>\r\n @if ((config().tableHeadings || []).length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th class=\"box-cell\">\r\n <mat-checkbox\r\n (change)=\"toggleSelectAll($event)\"\r\n [checked]=\"areAllRowsSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n }\r\n\r\n @for (heading of config().tableHeadings; track heading; let i = $index) {\r\n <th>\r\n <div class=\"flexer gap05\">\r\n {{ heading }}\r\n @if (config().sortable && !config().draggable) {\r\n <lib-table-sort-header\r\n [selected]=\"currentSortColumn === i\"\r\n (click)=\"currentSortColumn = i\"\r\n (sort)=\"sortByProp(config().dataProps[i], $event)\"\r\n />\r\n }\r\n </div>\r\n </th>\r\n }\r\n\r\n @if (hasOptions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n } @else {\r\n <ng-content select=\".custom-headers\" />\r\n }\r\n </thead>\r\n @if (config().draggable) {\r\n <tbody cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n cdkDrag cdkDragLockAxis=\"y\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td\r\n [class.dragCol]=\"cellIndex === 0\">\r\n <div [class]=\"'data ' + getClass(obj, prop)\"\r\n [class.flexer]=\"cellIndex === 0\">\r\n @if (cellIndex === 0) {\r\n <mat-icon class=\"draggable\" cdkDragHandle>\r\n drag_indicator\r\n </mat-icon>\r\n }\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n } @else {\r\n <tbody>\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td>\r\n <div [class]=\"'data ' + getClass(obj, prop)\">\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n }\r\n </table>\r\n</div>\r\n", styles: [".scroll{overflow-y:auto;max-height:94%}table{width:100%;border-collapse:collapse;border-spacing:0px}table.with-options td{padding-block:3px!important}.flexer{display:flex;align-items:center}.action{color:#009ddc;font-weight:500;text-align:right;margin-left:auto}.pointer{cursor:pointer}.gap05{gap:.5rem}.mb05{margin-bottom:.5}.data{white-space:pre-wrap}.row-heading-labels{font-weight:700;font-size:20px}.selected-row td{background-color:#d3edf8}.hover-row{background-color:#ebf7fc}.red{color:red}@media(max-width:1086px){table td,table th{padding:3px!important;width:auto!important}}.with-checkboxes td,.with-checkboxes th{padding-block:0!important}.with-checkboxes td:is(:first-child),.with-checkboxes th:is(:first-child){padding-inline:0!important}td,th{padding:.5rem 1rem;font-size:14px}th{background-color:#f6f6f6;text-align:left;position:sticky;top:0;z-index:2;border-top:2px solid #E5E4E7}td{border-bottom:2px solid #E5E4E7;border-top:2px solid #E5E4E7}.dots{width:fit-content}.draggable{cursor:grabbing}.dragCol{padding-left:0!important}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;font-size:1.5em;text-align:center;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.dragdrop-placeholder{background:#ccc;border:dotted 3px #999;min-height:30px;transition:transform .1s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: TableSortHeaderComponent, selector: "lib-table-sort-header", inputs: ["selected"], outputs: ["sort"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
370
366
  }
371
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: TableComponent, decorators: [{
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: TableComponent, decorators: [{
372
368
  type: Component,
373
369
  args: [{ selector: 'lib-table', imports: [
374
370
  MatMenuModule,
@@ -377,7 +373,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImpor
377
373
  TableSortHeaderComponent,
378
374
  DragDropModule,
379
375
  MatCheckboxModule
380
- ], template: "<div class=\"flexer\">\r\n @if (config().title) {\r\n <div class=\"row-heading-labels mb05\">{{ config().title }}</div>\r\n }\r\n\r\n <ng-content select=\".upper-part\" />\r\n\r\n @if (config().withAdd) {\r\n <div class=\"flexer action pointer gap05 mb05\" (click)=\"action.emit({action: 'add'})\">\r\n <mat-icon>add_circle_outline</mat-icon>\r\n <div>add</div>\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"scroll\" #scrollContainer (scroll)=\"onScroll($event)\" [class.with-checkboxes]=\"config().selectableRows === 'multiple'\">\r\n <table [class.with-options]=\"hasOptions()\">\r\n <thead>\r\n @if ((config().tableHeadings || []).length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th class=\"box-cell\">\r\n <mat-checkbox\r\n (change)=\"toggleSelectAll($event)\"\r\n [checked]=\"areAllRowsSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n }\r\n\r\n @for (heading of config().tableHeadings; track heading; let i = $index) {\r\n <th>\r\n <div class=\"flexer gap05\">\r\n {{ heading }}\r\n @if (config().sortable && !config().draggable) {\r\n <lib-table-sort-header\r\n [selected]=\"currentSortColumn === i\"\r\n (click)=\"currentSortColumn = i\"\r\n (sort)=\"sortByProp(config().dataProps[i], $event)\"\r\n />\r\n }\r\n </div>\r\n </th>\r\n }\r\n\r\n @if (hasOptions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n } @else {\r\n <ng-content select=\".custom-headers\" />\r\n }\r\n </thead>\r\n @if (config().draggable) {\r\n <tbody cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n cdkDrag cdkDragLockAxis=\"y\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td\r\n [class.dragCol]=\"cellIndex === 0\">\r\n <div class=\"data\" [classList]=\"getClass(obj, prop)\"\r\n [class.flexer]=\"cellIndex === 0\">\r\n @if (cellIndex === 0) {\r\n <mat-icon class=\"draggable\" cdkDragHandle>\r\n drag_indicator\r\n </mat-icon>\r\n }\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n } @else {\r\n <tbody>\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td>\r\n <div class=\"data\" [classList]=\"getClass(obj, prop)\">\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n }\r\n </table>\r\n</div>\r\n", styles: [".scroll{overflow-y:auto;max-height:94%}table{width:100%;border-collapse:collapse;border-spacing:0px}table.with-options td{padding-block:3px!important}.flexer{display:flex;align-items:center}.action{color:#009ddc;font-weight:500;text-align:right;margin-left:auto}.pointer{cursor:pointer}.gap05{gap:.5rem}.mb05{margin-bottom:.5}.data{white-space:pre-wrap}.row-heading-labels{font-weight:700;font-size:20px}.selected-row td{background-color:#d3edf8}.hover-row{background-color:#ebf7fc}.red{color:red}@media(max-width:1086px){table td,table th{padding:3px!important;width:auto!important}}.with-checkboxes td,.with-checkboxes th{padding-block:0!important}.with-checkboxes td:is(:first-child),.with-checkboxes th:is(:first-child){padding-inline:0!important}td,th{padding:.5rem 1rem;font-size:14px}th{background-color:#f6f6f6;text-align:left;position:sticky;top:0;z-index:2;border-top:2px solid #E5E4E7}td{border-bottom:2px solid #E5E4E7;border-top:2px solid #E5E4E7}.dots{width:fit-content}.draggable{cursor:grabbing}.dragCol{padding-left:0!important}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;font-size:1.5em;text-align:center;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.dragdrop-placeholder{background:#ccc;border:dotted 3px #999;min-height:30px;transition:transform .1s cubic-bezier(0,0,.2,1)}\n"] }]
376
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flexer\">\r\n @if (config().title) {\r\n <div class=\"row-heading-labels mb05\">{{ config().title }}</div>\r\n }\r\n\r\n <ng-content select=\".upper-part\" />\r\n\r\n @if (config().withAdd) {\r\n <div class=\"flexer action pointer gap05 mb05\" (click)=\"action.emit({action: 'add'})\">\r\n <mat-icon>add_circle_outline</mat-icon>\r\n <div>add</div>\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"scroll\" #scrollContainer (scroll)=\"onScroll($event)\" [class.with-checkboxes]=\"config().selectableRows === 'multiple'\">\r\n <table [class.with-options]=\"hasOptions()\">\r\n <thead>\r\n @if ((config().tableHeadings || []).length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th class=\"box-cell\">\r\n <mat-checkbox\r\n (change)=\"toggleSelectAll($event)\"\r\n [checked]=\"areAllRowsSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n }\r\n\r\n @for (heading of config().tableHeadings; track heading; let i = $index) {\r\n <th>\r\n <div class=\"flexer gap05\">\r\n {{ heading }}\r\n @if (config().sortable && !config().draggable) {\r\n <lib-table-sort-header\r\n [selected]=\"currentSortColumn === i\"\r\n (click)=\"currentSortColumn = i\"\r\n (sort)=\"sortByProp(config().dataProps[i], $event)\"\r\n />\r\n }\r\n </div>\r\n </th>\r\n }\r\n\r\n @if (hasOptions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n } @else {\r\n <ng-content select=\".custom-headers\" />\r\n }\r\n </thead>\r\n @if (config().draggable) {\r\n <tbody cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n cdkDrag cdkDragLockAxis=\"y\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td\r\n [class.dragCol]=\"cellIndex === 0\">\r\n <div [class]=\"'data ' + getClass(obj, prop)\"\r\n [class.flexer]=\"cellIndex === 0\">\r\n @if (cellIndex === 0) {\r\n <mat-icon class=\"draggable\" cdkDragHandle>\r\n drag_indicator\r\n </mat-icon>\r\n }\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n } @else {\r\n <tbody>\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td>\r\n <div [class]=\"'data ' + getClass(obj, prop)\">\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n }\r\n </table>\r\n</div>\r\n", styles: [".scroll{overflow-y:auto;max-height:94%}table{width:100%;border-collapse:collapse;border-spacing:0px}table.with-options td{padding-block:3px!important}.flexer{display:flex;align-items:center}.action{color:#009ddc;font-weight:500;text-align:right;margin-left:auto}.pointer{cursor:pointer}.gap05{gap:.5rem}.mb05{margin-bottom:.5}.data{white-space:pre-wrap}.row-heading-labels{font-weight:700;font-size:20px}.selected-row td{background-color:#d3edf8}.hover-row{background-color:#ebf7fc}.red{color:red}@media(max-width:1086px){table td,table th{padding:3px!important;width:auto!important}}.with-checkboxes td,.with-checkboxes th{padding-block:0!important}.with-checkboxes td:is(:first-child),.with-checkboxes th:is(:first-child){padding-inline:0!important}td,th{padding:.5rem 1rem;font-size:14px}th{background-color:#f6f6f6;text-align:left;position:sticky;top:0;z-index:2;border-top:2px solid #E5E4E7}td{border-bottom:2px solid #E5E4E7;border-top:2px solid #E5E4E7}.dots{width:fit-content}.draggable{cursor:grabbing}.dragCol{padding-left:0!important}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;font-size:1.5em;text-align:center;opacity:.8;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.dragdrop-placeholder{background:#ccc;border:dotted 3px #999;min-height:30px;transition:transform .1s cubic-bezier(0,0,.2,1)}\n"] }]
381
377
  }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], action: [{ type: i0.Output, args: ["action"] }], scrollContainer: [{ type: i0.ViewChild, args: ['scrollContainer', { isSignal: true }] }] } });
382
378
 
383
379
  class LoaderService {
@@ -391,10 +387,10 @@ class LoaderService {
391
387
  isLoading() {
392
388
  return this.loadingSubject.getValue();
393
389
  }
394
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
395
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LoaderService, providedIn: 'root' }); }
390
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
391
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LoaderService, providedIn: 'root' }); }
396
392
  }
397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LoaderService, decorators: [{
393
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LoaderService, decorators: [{
398
394
  type: Injectable,
399
395
  args: [{
400
396
  providedIn: 'root'
@@ -405,15 +401,15 @@ class GlobalLoaderComponent {
405
401
  constructor() {
406
402
  this.loaderService = inject(LoaderService);
407
403
  }
408
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
409
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.2", type: GlobalLoaderComponent, isStandalone: true, selector: "lib-global-loader", ngImport: i0, template: "@if (loaderService.loading$ | async) {\r\n <div class=\"loader\">\r\n <mat-spinner />\r\n </div>\r\n}", styles: [".loader{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:fixed;top:0;left:0;background-color:#0003;z-index:9999}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
404
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GlobalLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
405
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: GlobalLoaderComponent, isStandalone: true, selector: "lib-global-loader", ngImport: i0, template: "@if (loaderService.loading$ | async) {\r\n <div class=\"loader\">\r\n <mat-spinner />\r\n </div>\r\n}", styles: [".loader{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:fixed;top:0;left:0;background-color:#0003;z-index:9999}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
410
406
  }
411
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalLoaderComponent, decorators: [{
407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GlobalLoaderComponent, decorators: [{
412
408
  type: Component,
413
409
  args: [{ selector: 'lib-global-loader', imports: [
414
410
  AsyncPipe,
415
411
  MatProgressSpinnerModule
416
- ], template: "@if (loaderService.loading$ | async) {\r\n <div class=\"loader\">\r\n <mat-spinner />\r\n </div>\r\n}", styles: [".loader{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:fixed;top:0;left:0;background-color:#0003;z-index:9999}\n"] }]
412
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loaderService.loading$ | async) {\r\n <div class=\"loader\">\r\n <mat-spinner />\r\n </div>\r\n}", styles: [".loader{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:fixed;top:0;left:0;background-color:#0003;z-index:9999}\n"] }]
417
413
  }] });
418
414
 
419
415
  class ErrorService {
@@ -424,10 +420,10 @@ class ErrorService {
424
420
  sendError(error) {
425
421
  this.errorSubject.next(error);
426
422
  }
427
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
428
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorService, providedIn: 'root' }); }
423
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
424
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorService, providedIn: 'root' }); }
429
425
  }
430
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorService, decorators: [{
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorService, decorators: [{
431
427
  type: Injectable,
432
428
  args: [{
433
429
  providedIn: 'root'
@@ -534,23 +530,20 @@ const JSON_OPTIONS_WITH_GLOBAL_LOADER = {
534
530
  };
535
531
 
536
532
  class ErrorPopupComponent {
537
- constructor(error) {
538
- this.error = error;
533
+ constructor() {
539
534
  this.httpStatusCodes = HTTP_STATUS_CODES;
535
+ this.error = inject(MAT_DIALOG_DATA);
540
536
  }
541
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorPopupComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
542
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.2", type: ErrorPopupComponent, isStandalone: true, selector: "lib-error-popup", ngImport: i0, template: "<lib-default-dialog [dialogTitle]=\"'\u0410n error has occurred'\">\r\n <div class=\"dialog-content\">\r\n <div class=\"status-info\">\r\n <div>{{ error.status }}</div>\r\n @if (error.status) {\r\n <div>{{ httpStatusCodes[error.status] }}</div>\r\n }\r\n </div>\r\n <div class=\"error-info\">\r\n <lib-error-dispaly [error]=\"error\" />\r\n </div>\r\n </div>\r\n</lib-default-dialog>", styles: [".dialog-content{display:flex;flex-direction:column;align-items:center;padding-inline:1rem}.dialog-content .status-info{display:flex;margin-bottom:.5rem;font-weight:600;font-size:18px;gap:.5rem}.dialog-content .error-info{display:grid;place-items:center}\n"], dependencies: [{ kind: "component", type: DefaultDialogComponent, selector: "lib-default-dialog", inputs: ["temRef", "height", "dialogTitle", "withBack"], outputs: ["back"] }, { kind: "component", type: ErrorDispalyComponent, selector: "lib-error-dispaly", inputs: ["error"] }] }); }
537
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
538
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: ErrorPopupComponent, isStandalone: true, selector: "lib-error-popup", ngImport: i0, template: "<lib-default-dialog [dialogTitle]=\"'\u0410n error has occurred'\">\r\n <div class=\"dialog-content\">\r\n <div class=\"status-info\">\r\n <div>{{ error.status }}</div>\r\n @if (error.status) {\r\n <div>{{ httpStatusCodes[error.status] || 500 }}</div>\r\n }\r\n </div>\r\n <div class=\"error-info\">\r\n <lib-error-display [error]=\"error\" />\r\n </div>\r\n </div>\r\n</lib-default-dialog>", styles: [".dialog-content{display:flex;flex-direction:column;align-items:center;padding-inline:1rem}.dialog-content .status-info{display:flex;margin-bottom:.5rem;font-weight:600;font-size:18px;gap:.5rem}.dialog-content .error-info{display:grid;place-items:center}\n"], dependencies: [{ kind: "component", type: DefaultDialogComponent, selector: "lib-default-dialog", inputs: ["temRef", "height", "dialogTitle", "withBack"], outputs: ["back"] }, { kind: "component", type: ErrorDisplayComponent, selector: "lib-error-display", inputs: ["error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
543
539
  }
544
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorPopupComponent, decorators: [{
540
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorPopupComponent, decorators: [{
545
541
  type: Component,
546
542
  args: [{ selector: 'lib-error-popup', imports: [
547
543
  DefaultDialogComponent,
548
- ErrorDispalyComponent
549
- ], template: "<lib-default-dialog [dialogTitle]=\"'\u0410n error has occurred'\">\r\n <div class=\"dialog-content\">\r\n <div class=\"status-info\">\r\n <div>{{ error.status }}</div>\r\n @if (error.status) {\r\n <div>{{ httpStatusCodes[error.status] }}</div>\r\n }\r\n </div>\r\n <div class=\"error-info\">\r\n <lib-error-dispaly [error]=\"error\" />\r\n </div>\r\n </div>\r\n</lib-default-dialog>", styles: [".dialog-content{display:flex;flex-direction:column;align-items:center;padding-inline:1rem}.dialog-content .status-info{display:flex;margin-bottom:.5rem;font-weight:600;font-size:18px;gap:.5rem}.dialog-content .error-info{display:grid;place-items:center}\n"] }]
550
- }], ctorParameters: () => [{ type: i1$4.HttpErrorResponse, decorators: [{
551
- type: Inject,
552
- args: [MAT_DIALOG_DATA]
553
- }] }] });
544
+ ErrorDisplayComponent
545
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<lib-default-dialog [dialogTitle]=\"'\u0410n error has occurred'\">\r\n <div class=\"dialog-content\">\r\n <div class=\"status-info\">\r\n <div>{{ error.status }}</div>\r\n @if (error.status) {\r\n <div>{{ httpStatusCodes[error.status] || 500 }}</div>\r\n }\r\n </div>\r\n <div class=\"error-info\">\r\n <lib-error-display [error]=\"error\" />\r\n </div>\r\n </div>\r\n</lib-default-dialog>", styles: [".dialog-content{display:flex;flex-direction:column;align-items:center;padding-inline:1rem}.dialog-content .status-info{display:flex;margin-bottom:.5rem;font-weight:600;font-size:18px;gap:.5rem}.dialog-content .error-info{display:grid;place-items:center}\n"] }]
546
+ }] });
554
547
 
555
548
  class ErrorHandlerComponent {
556
549
  constructor() {
@@ -574,14 +567,14 @@ class ErrorHandlerComponent {
574
567
  ngOnDestroy() {
575
568
  this.errSubscriptions.unsubscribe();
576
569
  }
577
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorHandlerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
578
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.2", type: ErrorHandlerComponent, isStandalone: true, selector: "lib-error-handler", ngImport: i0, template: "", styles: [""], dependencies: [{ kind: "ngmodule", type: MatDialogModule }] }); }
570
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorHandlerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
571
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: ErrorHandlerComponent, isStandalone: true, selector: "lib-error-handler", ngImport: i0, template: "", styles: [""], dependencies: [{ kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
579
572
  }
580
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorHandlerComponent, decorators: [{
573
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ErrorHandlerComponent, decorators: [{
581
574
  type: Component,
582
575
  args: [{ selector: 'lib-error-handler', imports: [
583
576
  MatDialogModule
584
- ], template: "" }]
577
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "" }]
585
578
  }], ctorParameters: () => [] });
586
579
 
587
580
  /*
@@ -592,5 +585,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImpor
592
585
  * Generated bundle index. Do not edit.
593
586
  */
594
587
 
595
- export { DefaultDialogComponent, ErrorDispalyComponent, ErrorHandlerComponent, ErrorService, FieldsMatchValidatorDirective, GlobalLoaderComponent, LoaderService, PasswordValidatorDirective, PhoneValidationDirective, SearchBarComponent, SnakeCaseParserPipe, TableComponent, TableSortHeaderComponent };
588
+ export { DefaultDialogComponent, ErrorDisplayComponent, ErrorHandlerComponent, ErrorService, FieldsMatchValidatorDirective, GlobalLoaderComponent, LoaderService, PasswordValidatorDirective, PhoneValidationDirective, SearchBarComponent, SnakeCaseParserPipe, TableComponent, TableSortHeaderComponent };
596
589
  //# sourceMappingURL=ferhaps-easy-ui-lib.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ferhaps-easy-ui-lib.mjs","sources":["../../../projects/ui-lib/src/lib/pipes/snake-case-parser.pipe.ts","../../../projects/ui-lib/src/lib/directives/fields-match-validator.directive.ts","../../../projects/ui-lib/src/lib/directives/phone-validation.directive.ts","../../../projects/ui-lib/src/lib/directives/password-validator.directive.ts","../../../projects/ui-lib/src/lib/components/default-dialog/default-dialog.component.ts","../../../projects/ui-lib/src/lib/components/default-dialog/default-dialog.component.html","../../../projects/ui-lib/src/lib/components/error-dispaly.component.ts","../../../projects/ui-lib/src/lib/components/search-bar.component.ts","../../../projects/ui-lib/src/lib/components/table-sort-header/table-sort-header.component.ts","../../../projects/ui-lib/src/lib/components/table-sort-header/table-sort-header.component.html","../../../projects/ui-lib/src/lib/components/table/table.component.ts","../../../projects/ui-lib/src/lib/components/table/table.component.html","../../../projects/ui-lib/src/lib/services/loader.service.ts","../../../projects/ui-lib/src/lib/components/global-loader/global-loader.component.ts","../../../projects/ui-lib/src/lib/components/global-loader/global-loader.component.html","../../../projects/ui-lib/src/lib/services/error.service.ts","../../../projects/ui-lib/src/lib/utils/utils.ts","../../../projects/ui-lib/src/lib/components/error-handler/error-popup/error-popup.component.ts","../../../projects/ui-lib/src/lib/components/error-handler/error-popup/error-popup.component.html","../../../projects/ui-lib/src/lib/components/error-handler/error-handler.component.ts","../../../projects/ui-lib/src/lib/components/error-handler/error-handler.component.html","../../../projects/ui-lib/src/public-api.ts","../../../projects/ui-lib/src/ferhaps-easy-ui-lib.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'snakeCaseParser',\r\n})\r\nexport class SnakeCaseParserPipe implements PipeTransform {\r\n public transform(value: unknown): string {\r\n if (typeof value === 'string') {\r\n let temp = value.replaceAll('_', ' ');\r\n temp = temp.charAt(0).toUpperCase() + temp.slice(1).toLowerCase();\r\n return temp;\r\n }\r\n\r\n return String(value);\r\n }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[libFieldsMatchValidator]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: FieldsMatchValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FieldsMatchValidatorDirective implements Validator {\r\n public fieldToMatch = input.required<string>();\r\n\r\n public validate(control: AbstractControl): { [key: string]: any } | null {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matchingControl = control.root.get(this.fieldToMatch());\r\n if (!matchingControl) {\r\n return null;\r\n }\r\n\r\n if (value !== matchingControl.value) {\r\n return { mismatch: true };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { Directive, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[libPhoneValidation]',\r\n})\r\nexport class PhoneValidationDirective {\r\n @HostListener('input', ['$event']) public onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n \r\n if (!input.value.includes('+')) {\r\n input.value = `+${input.value}`;\r\n }\r\n \r\n // Only allow digits and plus sign\r\n const regex = /^[0-9+]*$/;\r\n if (!regex.test(input.value)) {\r\n input.value = input.value.replace(/[^0-9+]/g, '');\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event']) public onKeyDown(event: KeyboardEvent): void {\r\n const inputValue = (event.target as HTMLInputElement).value;\r\n if (event.key === 'Backspace' && inputValue === '+') {\r\n event.preventDefault();\r\n }\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[libPasswordValidator]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: PasswordValidatorDirective,\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class PasswordValidatorDirective implements Validator {\r\n public validate(control: AbstractControl): ValidationErrors | null {\r\n const password = control.value;\r\n\r\n // At least one uppercase letter, one lowercase letter, one digit, one special character, and minimum eight characters long\r\n const pattern = /^(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#\\$%\\^&\\*])(?=.*\\d).{8,}$/\r\n\r\n if (password && !pattern.test(password)) {\r\n return { passwordInvalid: true };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { Component, Input, input, output, TemplateRef } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-default-dialog',\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatDialogModule\r\n ],\r\n templateUrl: './default-dialog.component.html',\r\n styleUrls: ['./default-dialog.component.scss']\r\n})\r\nexport class DefaultDialogComponent {\r\n @Input() temRef!: TemplateRef<any>;\r\n \r\n public height = input<string>();\r\n public dialogTitle = input<string>();\r\n public withBack = input<boolean>();\r\n\r\n protected back = output<void>();\r\n}\r\n","<div class=\"modal\" [style]=\"{ 'height': height() }\">\r\n <div class=\"dialog-title\">\r\n @if (withBack()) {\r\n <div class=\"back-arrow\" (click)=\"back.emit()\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n }\r\n\r\n <h4 class=\"title\">{{ dialogTitle() }}</h4>\r\n\r\n <div class=\"closer\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dialog-content\">\r\n <ng-content select=\".dialog-content\" />\r\n <ng-template #tempBody />\r\n <ng-container *ngTemplateOutlet=\"temRef ? temRef: tempBody\" />\r\n </div>\r\n</div>","import { Component, input, OnInit } from '@angular/core';\r\n\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { SnakeCaseParserPipe } from '../pipes/snake-case-parser.pipe';\r\nimport { SystemError } from '../utils/types';\r\n\r\n@Component({\r\n selector: 'lib-error-dispaly',\r\n imports: [\r\n SnakeCaseParserPipe\r\n ],\r\n template: `<strong class=\"err-container\">{{ displayError | snakeCaseParser }}</strong>`,\r\n styles: [`\r\n .err-container {\r\n display: block;\r\n max-width: 300px;\r\n font-size: 20px;\r\n text-align: center;\r\n border: 1px solid red;\r\n border-radius: 5px;\r\n padding: 0.5rem 1.5rem;\r\n background-color: #ffe6e6;\r\n color: #ff0000;\r\n overflow-wrap: break-word;\r\n }\r\n`]\r\n})\r\nexport class ErrorDispalyComponent implements OnInit {\r\n public error = input.required<SystemError>();\r\n\r\n protected displayError: string = '';\r\n\r\n public ngOnInit(): void {\r\n if (this.error() instanceof HttpErrorResponse) {\r\n if (typeof (this.error() as HttpErrorResponse).error === 'string') {\r\n this.displayError = (this.error() as HttpErrorResponse).error;\r\n } else if (this.error && (this.error() as HttpErrorResponse)?.error?.message) {\r\n this.displayError = (this.error() as HttpErrorResponse).error.message;\r\n } else {\r\n this.displayError = 'Unknown error';\r\n }\r\n } else if (typeof this.error() === 'string') {\r\n this.displayError = (this.error() as string);\r\n } else {\r\n this.displayError = 'Unknown error';\r\n }\r\n }\r\n}\r\n","import { Component, output, input } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-search-bar',\r\n template: `\r\n <form class=\"search-bar\" [formGroup]=\"searchForm\">\r\n <mat-icon>search</mat-icon>\r\n <input class=\"search-input\" type=\"search\" name=\"field\"\r\n [placeholder]=\"'Search ' + for()\" autocomplete=\"off\" formControlName=\"search\" />\r\n </form>\r\n`,\r\n styles: [`\r\n .search-bar {\r\n width: 270px;\r\n border: 1px solid #A4A4A4;\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .search-input {\r\n border: none;\r\n padding: 7px 11px;\r\n height: 100%;\r\n width: 100%;\r\n background-color: transparent;\r\n }\r\n\r\n mat-icon {\r\n margin-inline: 8px;\r\n }\r\n\r\n .search-input:focus {\r\n border: none;\r\n outline: none;\r\n }\r\n\r\n @media (max-width: 1086px) {\r\n .search-bar {\r\n width: 170px;\r\n }\r\n }\r\n`],\r\n imports: [\r\n MatIconModule,\r\n ReactiveFormsModule\r\n ]\r\n})\r\nexport class SearchBarComponent {\r\n public for = input.required<string>();\r\n\r\n protected search = output<string | Event>();\r\n\r\n protected searchForm: FormGroup = new FormGroup({\r\n search: new FormControl('')\r\n });\r\n\r\n constructor() {\r\n this.searchForm.get('search')?.valueChanges.\r\n pipe(\r\n debounceTime(1000),\r\n distinctUntilChanged(),\r\n ).subscribe((searchTerm: string | Event) => {\r\n if (typeof searchTerm === 'string') {\r\n searchTerm = searchTerm.trim();\r\n }\r\n \r\n this.search.emit(searchTerm);\r\n });\r\n }\r\n}","import { Component, input, output } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nexport type SortState = 'none' | 'asc' | 'desc';\r\n\r\n@Component({\r\n selector: 'lib-table-sort-header',\r\n imports: [\r\n MatIconModule,\r\n ],\r\n templateUrl: './table-sort-header.component.html',\r\n styleUrls: ['./table-sort-header.component.scss']\r\n})\r\nexport class TableSortHeaderComponent {\r\n public selected = input.required<boolean>();\r\n public sort = output<SortState>();\r\n\r\n protected sortState: SortState = 'none';\r\n\r\n protected onSortClick(): void {\r\n if (this.sortState === 'none') {\r\n this.sortState = 'desc';\r\n } else if (this.sortState === 'desc') {\r\n this.sortState = 'asc';\r\n } else {\r\n this.sortState = 'none';\r\n }\r\n\r\n this.sort.emit(this.sortState);\r\n }\r\n}\r\n","<div class=\"sorting-container\" (click)=\"onSortClick()\">\r\n <mat-icon\r\n [class.selected]=\"selected() && sortState != 'none'\"\r\n [class.rotated]=\"sortState == 'asc'\">\r\n sort\r\n </mat-icon>\r\n</div>","import { Component, ElementRef, input, output, viewChild } from '@angular/core';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SortState, TableSortHeaderComponent } from '../table-sort-header/table-sort-header.component';\r\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\nexport type TableEvent<T = any> = {\r\n action: 'rowClick' | 'rowSelect' | 'drag' | 'scrolled' | 'sort' | 'add' | string;\r\n obj?: T;\r\n prop?: keyof T;\r\n index?: number;\r\n selected?: boolean;\r\n selectedRows?: number[];\r\n sortState?: SortState;\r\n event?: Event;\r\n};\r\n\r\nexport type Config<T = any> = {\r\n data: T[];\r\n title: string;\r\n dataProps: (keyof T)[];\r\n tableHeadings?: string[];\r\n options?: string[] | ((obj: T) => string[]);\r\n withAdd?: boolean;\r\n selectableRows?: 'single' | 'multiple';\r\n sortable?: boolean;\r\n draggable?: boolean;\r\n classRules?: ClassRule<T>[];\r\n};\r\n\r\nexport type ClassRule<T = any> = {\r\n className: string;\r\n condition: (obj: T, prop: keyof T) => boolean;\r\n};\r\n\r\n@Component({\r\n selector: 'lib-table',\r\n templateUrl: 'table.component.html',\r\n styleUrls: ['table.component.scss'],\r\n imports: [\r\n MatMenuModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n TableSortHeaderComponent,\r\n DragDropModule,\r\n MatCheckboxModule\r\n ]\r\n})\r\nexport class TableComponent<T = any> {\r\n public config = input.required<Config<T>>();\r\n\r\n protected action = output<TableEvent<T>>();\r\n\r\n protected scrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\r\n\r\n public selectedRowIndex: number = -1;\r\n public selectedIndices: Set<number> = new Set<number>();\r\n protected hoverRowIndex: number = -1;\r\n protected currentSortColumn: number = -1;\r\n\r\n protected getClass(obj: T, prop: keyof T): string {\r\n if (!this.config().classRules) return '';\r\n\r\n const classes: string[] = [];\r\n for (let rule of (this.config().classRules as ClassRule<T>[])) {\r\n if (rule.condition(obj, prop)) {\r\n classes.push(rule.className);\r\n }\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n protected drop(event: CdkDragDrop<T[]>) {\r\n if (this.config().draggable) {\r\n moveItemInArray(this.config().data, event.previousIndex, event.currentIndex);\r\n this.action.emit({ action: 'drag', obj: this.config().data[event.currentIndex], index: event.currentIndex });\r\n }\r\n }\r\n\r\n protected onScroll(e: Event): void {\r\n const container = this.scrollContainer().nativeElement;\r\n this.action.emit({ action: 'scroll', event: e });\r\n if ((Math.ceil(container.scrollTop) + container.offsetHeight) >= container.scrollHeight) {\r\n this.action.emit({ action: 'scrolled' });\r\n }\r\n }\r\n\r\n protected onRowClick(event: Event, obj: T, index: number): void {\r\n this.selectedRowIndex = index === this.selectedRowIndex ? -1 : index;\r\n this.action.emit({\r\n action: 'rowClick',\r\n obj,\r\n index,\r\n selected: this.selectedRowIndex === index || this.selectedIndices.has(index),\r\n event\r\n });\r\n }\r\n\r\n protected selectOption(оption: string, obj: T, index: number): void {\r\n this.action.emit({\r\n action: оption.toLowerCase(),\r\n obj,\r\n index,\r\n selected: this.selectedRowIndex === index || this.selectedIndices.has(index)\r\n });\r\n }\r\n\r\n protected areAllRowsSelected(): boolean {\r\n return this.selectedIndices.size === this.config().data.length;\r\n }\r\n\r\n protected toggleSelectAll(event: MatCheckboxChange): void {\r\n if (event.checked) {\r\n this.config().data.forEach((_, index) => this.selectedIndices.add(index));\r\n } else {\r\n this.selectedIndices.clear();\r\n }\r\n\r\n this.action.emit({\r\n action: 'rowSelect',\r\n selectedRows: [...this.selectedIndices]\r\n });\r\n }\r\n\r\n protected toggleRowSelection(index: number): void {\r\n if (this.config().selectableRows === 'multiple') {\r\n if (this.selectedIndices.has(index)) {\r\n this.selectedIndices.delete(index);\r\n } else {\r\n this.selectedIndices.add(index);\r\n }\r\n \r\n this.action.emit({\r\n action: 'rowSelect',\r\n index,\r\n selectedRows: [...this.selectedIndices]\r\n });\r\n }\r\n }\r\n\r\n protected sortByProp(prop: keyof T, sortState: SortState): void {\r\n this.action.emit({ action: 'sort', prop, sortState });\r\n }\r\n\r\n protected getOptionsForRow(obj: T): string[] {\r\n const options = this.config().options;\r\n if (!options) return [];\r\n return typeof options === 'function' ? options(obj) : options;\r\n }\r\n\r\n protected hasOptions(): boolean {\r\n return !!this.config().options;\r\n }\r\n}\r\n","<div class=\"flexer\">\r\n @if (config().title) {\r\n <div class=\"row-heading-labels mb05\">{{ config().title }}</div>\r\n }\r\n\r\n <ng-content select=\".upper-part\" />\r\n\r\n @if (config().withAdd) {\r\n <div class=\"flexer action pointer gap05 mb05\" (click)=\"action.emit({action: 'add'})\">\r\n <mat-icon>add_circle_outline</mat-icon>\r\n <div>add</div>\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"scroll\" #scrollContainer (scroll)=\"onScroll($event)\" [class.with-checkboxes]=\"config().selectableRows === 'multiple'\">\r\n <table [class.with-options]=\"hasOptions()\">\r\n <thead>\r\n @if ((config().tableHeadings || []).length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th class=\"box-cell\">\r\n <mat-checkbox\r\n (change)=\"toggleSelectAll($event)\"\r\n [checked]=\"areAllRowsSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n }\r\n\r\n @for (heading of config().tableHeadings; track heading; let i = $index) {\r\n <th>\r\n <div class=\"flexer gap05\">\r\n {{ heading }}\r\n @if (config().sortable && !config().draggable) {\r\n <lib-table-sort-header\r\n [selected]=\"currentSortColumn === i\"\r\n (click)=\"currentSortColumn = i\"\r\n (sort)=\"sortByProp(config().dataProps[i], $event)\"\r\n />\r\n }\r\n </div>\r\n </th>\r\n }\r\n\r\n @if (hasOptions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n } @else {\r\n <ng-content select=\".custom-headers\" />\r\n }\r\n </thead>\r\n @if (config().draggable) {\r\n <tbody cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n cdkDrag cdkDragLockAxis=\"y\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td\r\n [class.dragCol]=\"cellIndex === 0\">\r\n <div class=\"data\" [classList]=\"getClass(obj, prop)\"\r\n [class.flexer]=\"cellIndex === 0\">\r\n @if (cellIndex === 0) {\r\n <mat-icon class=\"draggable\" cdkDragHandle>\r\n drag_indicator\r\n </mat-icon>\r\n }\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n } @else {\r\n <tbody>\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td>\r\n <div class=\"data\" [classList]=\"getClass(obj, prop)\">\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n }\r\n </table>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoaderService {\r\n private loadingSubject = new BehaviorSubject<boolean>(false);\r\n public loading$ = this.loadingSubject.asObservable();\r\n\r\n public setLoading(loadingState: boolean) {\r\n this.loadingSubject.next(loadingState);\r\n }\r\n\r\n public isLoading(): boolean {\r\n return this.loadingSubject.getValue();\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { LoaderService } from '../../services/loader.service';\r\nimport { AsyncPipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-global-loader',\r\n imports: [\r\n AsyncPipe,\r\n MatProgressSpinnerModule\r\n ],\r\n templateUrl: './global-loader.component.html',\r\n styleUrl: './global-loader.component.scss'\r\n})\r\nexport class GlobalLoaderComponent {\r\n protected loaderService = inject(LoaderService);\r\n}\r\n","@if (loaderService.loading$ | async) {\r\n <div class=\"loader\">\r\n <mat-spinner />\r\n </div>\r\n}","import { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorService {\r\n private errorSubject = new Subject<HttpErrorResponse>();\r\n public error$ = this.errorSubject.asObservable();\r\n\r\n public sendError(error: HttpErrorResponse) {\r\n this.errorSubject.next(error);\r\n }\r\n}\r\n","export const HTTP_STATUS_CODES: Record<number | string, string> = {\r\n 100: 'Continue',\r\n 101: 'Switching Protocols',\r\n 102: 'Processing',\r\n 103: 'Early Hints',\r\n 200: 'OK',\r\n 201: 'Created',\r\n 202: 'Accepted',\r\n 203: 'Non-Authoritative Information',\r\n 204: 'No Content',\r\n 205: 'Reset Content',\r\n 206: 'Partial Content',\r\n 207: 'Multi-Status',\r\n 208: 'Already Reported',\r\n 226: 'IM Used',\r\n 300: 'Multiple Choices',\r\n 301: 'Moved Permanently',\r\n 302: 'Found',\r\n 303: 'See Other',\r\n 304: 'Not Modified',\r\n 305: 'Use Proxy',\r\n 306: '(Unused)',\r\n 307: 'Temporary Redirect',\r\n 308: 'Permanent Redirect',\r\n 400: 'Bad Request',\r\n 401: 'Unauthorized',\r\n 402: 'Payment Required',\r\n 403: 'Forbidden',\r\n 404: 'Not Found',\r\n 405: 'Method Not Allowed',\r\n 406: 'Not Acceptable',\r\n 407: 'Proxy Authentication Required',\r\n 408: 'Request Timeout',\r\n 409: 'Conflict',\r\n 410: 'Gone',\r\n 411: 'Length Required',\r\n 412: 'Precondition Failed',\r\n 413: 'Payload Too Large',\r\n 414: 'URI Too Long',\r\n 415: 'Unsupported Media Type',\r\n 416: 'Range Not Satisfiable',\r\n 417: 'Expectation Failed',\r\n 418: \"I'm a teapot\",\r\n 421: 'Misdirected Request',\r\n 422: 'Unprocessable Entity',\r\n 423: 'Locked',\r\n 424: 'Failed Dependency',\r\n 425: 'Too Early',\r\n 426: 'Upgrade Required',\r\n 428: 'Precondition Required',\r\n 429: 'Too Many Requests',\r\n 431: 'Request Header Fields Too Large',\r\n 451: 'Unavailable For Legal Reasons',\r\n 500: 'Internal Server Error',\r\n 501: 'Not Implemented',\r\n 502: 'Bad Gateway',\r\n 503: 'Service Unavailable',\r\n 504: 'Gateway Timeout',\r\n 505: 'HTTP Version Not Supported',\r\n 506: 'Variant Also Negotiates',\r\n 507: 'Insufficient Storage',\r\n 508: 'Loop Detected',\r\n 510: 'Not Extended',\r\n 511: 'Network Authentication Required'\r\n};\r\n\r\nexport const JSON_HTTP_OPTIONS: Object = {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Accept-language': 'bg',\r\n },\r\n responseType: 'json'\r\n};\r\n\r\nexport const STRING_HTTP_OPTIONS: Object = {\r\n responseType: 'text'\r\n};\r\n\r\nexport const BLOB_HTTP_OPTIONS: Object = {\r\n headers: {\r\n 'Content-type': 'application/octet-stream',\r\n 'Accept-language': 'bg',\r\n },\r\n responseType: 'blob',\r\n};\r\n\r\nexport const SKIP_ERROR_OPTIONS: Object = {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Accept-language': 'bg',\r\n 'X-Skip-Error': 'true',\r\n },\r\n responseType: 'json',\r\n};\r\n\r\nexport const JSON_OPTIONS_WITH_GLOBAL_LOADER: Object = {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Accept-language': 'bg',\r\n 'X-Global-Loader': 'true',\r\n },\r\n responseType: 'json'\r\n};\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { DefaultDialogComponent } from '../../default-dialog/default-dialog.component';\r\nimport { ErrorDispalyComponent } from '../../error-dispaly.component';\r\nimport { HTTP_STATUS_CODES } from '../../../utils/utils';\r\n\r\n@Component({\r\n selector: 'lib-error-popup',\r\n imports: [\r\n DefaultDialogComponent,\r\n ErrorDispalyComponent\r\n ],\r\n templateUrl: './error-popup.component.html',\r\n styleUrls: ['./error-popup.component.scss']\r\n})\r\nexport class ErrorPopupComponent {\r\n protected httpStatusCodes = HTTP_STATUS_CODES;\r\n \r\n constructor(@Inject(MAT_DIALOG_DATA) public error: HttpErrorResponse) { }\r\n}\r\n","<lib-default-dialog [dialogTitle]=\"'Аn error has occurred'\">\r\n <div class=\"dialog-content\">\r\n <div class=\"status-info\">\r\n <div>{{ error.status }}</div>\r\n @if (error.status) {\r\n <div>{{ httpStatusCodes[error.status] }}</div>\r\n }\r\n </div>\r\n <div class=\"error-info\">\r\n <lib-error-dispaly [error]=\"error\" />\r\n </div>\r\n </div>\r\n</lib-default-dialog>","import { OnDestroy, inject } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Component } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { ErrorPopupComponent } from './error-popup/error-popup.component';\r\nimport { NoopScrollStrategy } from '@angular/cdk/overlay';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'lib-error-handler',\r\n templateUrl: 'error-handler.component.html',\r\n styleUrls: ['error-handler.component.scss'],\r\n imports: [\r\n MatDialogModule\r\n ]\r\n})\r\nexport class ErrorHandlerComponent implements OnDestroy {\r\n private errSubscriptions = new Subscription();\r\n private errorService = inject(ErrorService);\r\n private dialog = inject(MatDialog);\r\n\r\n constructor() {\r\n this.errSubscriptions.add(\r\n this.errorService.error$.subscribe((err: HttpErrorResponse) => {\r\n console.log(err);\r\n this.showPopup(err);\r\n })\r\n );\r\n }\r\n\r\n private showPopup(error: HttpErrorResponse): void {\r\n this.dialog.closeAll();\r\n this.dialog.open(ErrorPopupComponent, {\r\n data: error,\r\n width: '400px',\r\n autoFocus: false,\r\n scrollStrategy: new NoopScrollStrategy(),\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.errSubscriptions.unsubscribe();\r\n }\r\n}\r\n","","/*\r\n * Public API Surface of ui-lib\r\n */\r\n\r\nexport * from './lib/pipes/snake-case-parser.pipe';\r\nexport * from './lib/directives/fields-match-validator.directive';\r\nexport * from './lib/directives/phone-validation.directive';\r\nexport * from './lib/directives/password-validator.directive';\r\nexport * from './lib/components/default-dialog/default-dialog.component';\r\nexport * from './lib/components/error-dispaly.component';\r\nexport * from './lib/components/search-bar.component';\r\nexport * from './lib/utils/types';\r\nexport * from './lib/components/table-sort-header/table-sort-header.component';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/global-loader/global-loader.component';\r\nexport * from './lib/services/loader.service';\r\nexport * from './lib/services/error.service';\r\nexport * from './lib/components/error-handler/error-handler.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"ferhaps-easy-ui-lib.mjs","sources":["../../../projects/ui-lib/src/lib/pipes/snake-case-parser.pipe.ts","../../../projects/ui-lib/src/lib/directives/fields-match-validator.directive.ts","../../../projects/ui-lib/src/lib/directives/phone-validation.directive.ts","../../../projects/ui-lib/src/lib/directives/password-validator.directive.ts","../../../projects/ui-lib/src/lib/components/default-dialog/default-dialog.component.ts","../../../projects/ui-lib/src/lib/components/default-dialog/default-dialog.component.html","../../../projects/ui-lib/src/lib/components/error-display.component.ts","../../../projects/ui-lib/src/lib/components/search-bar.component.ts","../../../projects/ui-lib/src/lib/components/table-sort-header/table-sort-header.component.ts","../../../projects/ui-lib/src/lib/components/table-sort-header/table-sort-header.component.html","../../../projects/ui-lib/src/lib/components/table/table.component.ts","../../../projects/ui-lib/src/lib/components/table/table.component.html","../../../projects/ui-lib/src/lib/services/loader.service.ts","../../../projects/ui-lib/src/lib/components/global-loader/global-loader.component.ts","../../../projects/ui-lib/src/lib/components/global-loader/global-loader.component.html","../../../projects/ui-lib/src/lib/services/error.service.ts","../../../projects/ui-lib/src/lib/utils/utils.ts","../../../projects/ui-lib/src/lib/components/error-handler/error-popup/error-popup.component.ts","../../../projects/ui-lib/src/lib/components/error-handler/error-popup/error-popup.component.html","../../../projects/ui-lib/src/lib/components/error-handler/error-handler.component.ts","../../../projects/ui-lib/src/lib/components/error-handler/error-handler.component.html","../../../projects/ui-lib/src/public-api.ts","../../../projects/ui-lib/src/ferhaps-easy-ui-lib.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'snakeCaseParser',\r\n})\r\nexport class SnakeCaseParserPipe implements PipeTransform {\r\n public transform(value: unknown): string {\r\n if (typeof value === 'string') {\r\n let temp = value.replaceAll('_', ' ');\r\n temp = temp.charAt(0).toUpperCase() + temp.slice(1).toLowerCase();\r\n return temp;\r\n }\r\n\r\n return String(value);\r\n }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[libFieldsMatchValidator]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: FieldsMatchValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FieldsMatchValidatorDirective implements Validator {\r\n public fieldToMatch = input.required<string>();\r\n\r\n public validate(control: AbstractControl): ValidationErrors | null {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matchingControl = control.root.get(this.fieldToMatch());\r\n if (!matchingControl) {\r\n return null;\r\n }\r\n\r\n if (value !== matchingControl.value) {\r\n return { mismatch: true };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[libPhoneValidation]',\r\n host: {\r\n '(input)': 'onInput($event)',\r\n '(keydown)': 'onKeyDown($event)'\r\n }\r\n})\r\nexport class PhoneValidationDirective {\r\n public onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n \r\n if (!input.value.includes('+')) {\r\n input.value = `+${input.value}`;\r\n }\r\n \r\n // Only allow digits and plus sign\r\n const regex = /^[0-9+]*$/;\r\n if (!regex.test(input.value)) {\r\n input.value = input.value.replace(/[^0-9+]/g, '');\r\n }\r\n }\r\n\r\n public onKeyDown(event: KeyboardEvent): void {\r\n const inputValue = (event.target as HTMLInputElement).value;\r\n if (event.key === 'Backspace' && inputValue === '+') {\r\n event.preventDefault();\r\n }\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[libPasswordValidator]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: PasswordValidatorDirective,\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class PasswordValidatorDirective implements Validator {\r\n public validate(control: AbstractControl): ValidationErrors | null {\r\n const password = control.value;\r\n\r\n // At least one uppercase letter, one lowercase letter, one digit, one special character, and minimum eight characters long\r\n const pattern = /^(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#\\$%\\^&\\*])(?=.*\\d).{8,}$/\r\n\r\n if (password && !pattern.test(password)) {\r\n return { passwordInvalid: true };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, output, TemplateRef } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-default-dialog',\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatDialogModule\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './default-dialog.component.html',\r\n styleUrls: ['./default-dialog.component.scss']\r\n})\r\nexport class DefaultDialogComponent {\r\n public temRef = input<TemplateRef<unknown>>();\r\n \r\n public height = input<string>();\r\n public dialogTitle = input<string>();\r\n public withBack = input<boolean>();\r\n\r\n protected back = output<void>();\r\n}\r\n","<div class=\"modal\" [style]=\"{ 'height': height() }\">\r\n <div class=\"dialog-title\">\r\n @if (withBack()) {\r\n <div class=\"back-arrow\" (click)=\"back.emit()\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n }\r\n\r\n <h4 class=\"title\">{{ dialogTitle() }}</h4>\r\n\r\n <div class=\"closer\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dialog-content\">\r\n <ng-content select=\".dialog-content\" />\r\n <ng-template #tempBody />\r\n <ng-container *ngTemplateOutlet=\"temRef() ? temRef() : tempBody\" />\r\n </div>\r\n</div>","import { ChangeDetectionStrategy, Component, input, OnInit } from '@angular/core';\r\n\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { SnakeCaseParserPipe } from '../pipes/snake-case-parser.pipe';\r\nimport { SystemError } from '../utils/types';\r\n\r\n@Component({\r\n selector: 'lib-error-display',\r\n imports: [\r\n SnakeCaseParserPipe\r\n ],\r\n template: `<strong class=\"err-container\">{{ displayError | snakeCaseParser }}</strong>`,\r\n styles: [`\r\n .err-container {\r\n display: block;\r\n max-width: 300px;\r\n font-size: 20px;\r\n text-align: center;\r\n border: 1px solid red;\r\n border-radius: 5px;\r\n padding: 0.5rem 1.5rem;\r\n background-color: #ffe6e6;\r\n color: #ff0000;\r\n overflow-wrap: break-word;\r\n }\r\n`],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ErrorDisplayComponent implements OnInit {\r\n public error = input.required<SystemError>();\r\n\r\n protected displayError: string = '';\r\n\r\n public ngOnInit(): void {\r\n if (this.error() instanceof HttpErrorResponse) {\r\n if (typeof (this.error() as HttpErrorResponse).error === 'string') {\r\n this.displayError = (this.error() as HttpErrorResponse).error;\r\n } else if (this.error && (this.error() as HttpErrorResponse)?.error?.message) {\r\n this.displayError = (this.error() as HttpErrorResponse).error.message;\r\n } else {\r\n this.displayError = 'Unknown error';\r\n }\r\n } else if (typeof this.error() === 'string') {\r\n this.displayError = (this.error() as string);\r\n } else {\r\n this.displayError = 'Unknown error';\r\n }\r\n }\r\n}\r\n","import { Component, output, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-search-bar',\r\n template: `\r\n <form class=\"search-bar\" [formGroup]=\"searchForm\">\r\n <mat-icon>search</mat-icon>\r\n <input class=\"search-input\" type=\"search\" name=\"field\"\r\n [placeholder]=\"'Search ' + for()\" autocomplete=\"off\" formControlName=\"search\" />\r\n </form>\r\n`,\r\n styles: [`\r\n .search-bar {\r\n width: 270px;\r\n border: 1px solid #A4A4A4;\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .search-input {\r\n border: none;\r\n padding: 7px 11px;\r\n height: 100%;\r\n width: 100%;\r\n background-color: transparent;\r\n }\r\n\r\n mat-icon {\r\n margin-inline: 8px;\r\n }\r\n\r\n .search-input:focus {\r\n border: none;\r\n outline: none;\r\n }\r\n\r\n @media (max-width: 1086px) {\r\n .search-bar {\r\n width: 170px;\r\n }\r\n }\r\n`],\r\n imports: [\r\n MatIconModule,\r\n ReactiveFormsModule\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SearchBarComponent {\r\n public for = input.required<string>();\r\n\r\n protected search = output<string | Event>();\r\n\r\n protected searchForm: FormGroup = new FormGroup({\r\n search: new FormControl('')\r\n });\r\n\r\n constructor() {\r\n this.searchForm.get('search')?.valueChanges.\r\n pipe(\r\n debounceTime(1000),\r\n distinctUntilChanged(),\r\n ).subscribe((searchTerm: string | Event) => {\r\n if (typeof searchTerm === 'string') {\r\n searchTerm = searchTerm.trim();\r\n }\r\n \r\n this.search.emit(searchTerm);\r\n });\r\n }\r\n}","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nexport type SortState = 'none' | 'asc' | 'desc';\r\n\r\n@Component({\r\n selector: 'lib-table-sort-header',\r\n imports: [\r\n MatIconModule,\r\n ],\r\n templateUrl: './table-sort-header.component.html',\r\n styleUrls: ['./table-sort-header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TableSortHeaderComponent {\r\n public selected = input.required<boolean>();\r\n public sort = output<SortState>();\r\n\r\n protected sortState: SortState = 'none';\r\n\r\n protected onSortClick(): void {\r\n if (this.sortState === 'none') {\r\n this.sortState = 'desc';\r\n } else if (this.sortState === 'desc') {\r\n this.sortState = 'asc';\r\n } else {\r\n this.sortState = 'none';\r\n }\r\n\r\n this.sort.emit(this.sortState);\r\n }\r\n}\r\n","<div class=\"sorting-container\" (click)=\"onSortClick()\">\r\n <mat-icon\r\n [class.selected]=\"selected() && sortState != 'none'\"\r\n [class.rotated]=\"sortState == 'asc'\">\r\n sort\r\n </mat-icon>\r\n</div>","import { Component, ElementRef, input, output, viewChild, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SortState, TableSortHeaderComponent } from '../table-sort-header/table-sort-header.component';\r\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\nexport type TableEvent<T = any> = {\r\n action: 'rowClick' | 'rowSelect' | 'drag' | 'scrolled' | 'sort' | 'add' | string;\r\n obj?: T;\r\n prop?: keyof T;\r\n index?: number;\r\n selected?: boolean;\r\n selectedRows?: number[];\r\n sortState?: SortState;\r\n event?: Event;\r\n};\r\n\r\nexport type Config<T = any> = {\r\n data: T[];\r\n title: string;\r\n dataProps: (keyof T)[];\r\n tableHeadings?: string[];\r\n options?: string[] | ((obj: T) => string[]);\r\n withAdd?: boolean;\r\n selectableRows?: 'single' | 'multiple';\r\n sortable?: boolean;\r\n draggable?: boolean;\r\n classRules?: ClassRule<T>[];\r\n};\r\n\r\nexport type ClassRule<T = any> = {\r\n className: string;\r\n condition: (obj: T, prop: keyof T) => boolean;\r\n};\r\n\r\n@Component({\r\n selector: 'lib-table',\r\n templateUrl: 'table.component.html',\r\n styleUrls: ['table.component.scss'],\r\n imports: [\r\n MatMenuModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n TableSortHeaderComponent,\r\n DragDropModule,\r\n MatCheckboxModule\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TableComponent<T = any> {\r\n public config = input.required<Config<T>>();\r\n\r\n protected action = output<TableEvent<T>>();\r\n\r\n protected scrollContainer = viewChild.required<ElementRef<HTMLDivElement>>('scrollContainer');\r\n\r\n public selectedRowIndex: number = -1;\r\n public selectedIndices: Set<number> = new Set<number>();\r\n protected hoverRowIndex: number = -1;\r\n protected currentSortColumn: number = -1;\r\n\r\n protected getClass(obj: T, prop: keyof T): string {\r\n if (!this.config().classRules) return '';\r\n\r\n const classes: string[] = [];\r\n for (let rule of (this.config().classRules as ClassRule<T>[])) {\r\n if (rule.condition(obj, prop)) {\r\n classes.push(rule.className);\r\n }\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n protected drop(event: CdkDragDrop<T[]>) {\r\n if (this.config().draggable) {\r\n moveItemInArray(this.config().data, event.previousIndex, event.currentIndex);\r\n this.action.emit({ action: 'drag', obj: this.config().data[event.currentIndex], index: event.currentIndex });\r\n }\r\n }\r\n\r\n protected onScroll(e: Event): void {\r\n const container = this.scrollContainer().nativeElement;\r\n this.action.emit({ action: 'scroll', event: e });\r\n if ((Math.ceil(container.scrollTop) + container.offsetHeight) >= container.scrollHeight) {\r\n this.action.emit({ action: 'scrolled' });\r\n }\r\n }\r\n\r\n protected onRowClick(event: Event, obj: T, index: number): void {\r\n this.selectedRowIndex = index === this.selectedRowIndex ? -1 : index;\r\n this.action.emit({\r\n action: 'rowClick',\r\n obj,\r\n index,\r\n selected: this.selectedRowIndex === index || this.selectedIndices.has(index),\r\n event\r\n });\r\n }\r\n\r\n protected selectOption(оption: string, obj: T, index: number): void {\r\n this.action.emit({\r\n action: оption.toLowerCase(),\r\n obj,\r\n index,\r\n selected: this.selectedRowIndex === index || this.selectedIndices.has(index)\r\n });\r\n }\r\n\r\n protected areAllRowsSelected(): boolean {\r\n return this.selectedIndices.size === this.config().data.length;\r\n }\r\n\r\n protected toggleSelectAll(event: MatCheckboxChange): void {\r\n if (event.checked) {\r\n this.config().data.forEach((_, index) => this.selectedIndices.add(index));\r\n } else {\r\n this.selectedIndices.clear();\r\n }\r\n\r\n this.action.emit({\r\n action: 'rowSelect',\r\n selectedRows: [...this.selectedIndices]\r\n });\r\n }\r\n\r\n protected toggleRowSelection(index: number): void {\r\n if (this.config().selectableRows === 'multiple') {\r\n if (this.selectedIndices.has(index)) {\r\n this.selectedIndices.delete(index);\r\n } else {\r\n this.selectedIndices.add(index);\r\n }\r\n \r\n this.action.emit({\r\n action: 'rowSelect',\r\n index,\r\n selectedRows: [...this.selectedIndices]\r\n });\r\n }\r\n }\r\n\r\n protected sortByProp(prop: keyof T, sortState: SortState): void {\r\n this.action.emit({ action: 'sort', prop, sortState });\r\n }\r\n\r\n protected getOptionsForRow(obj: T): string[] {\r\n const options = this.config().options;\r\n if (!options) return [];\r\n return typeof options === 'function' ? options(obj) : options;\r\n }\r\n\r\n protected hasOptions(): boolean {\r\n return !!this.config().options;\r\n }\r\n}\r\n","<div class=\"flexer\">\r\n @if (config().title) {\r\n <div class=\"row-heading-labels mb05\">{{ config().title }}</div>\r\n }\r\n\r\n <ng-content select=\".upper-part\" />\r\n\r\n @if (config().withAdd) {\r\n <div class=\"flexer action pointer gap05 mb05\" (click)=\"action.emit({action: 'add'})\">\r\n <mat-icon>add_circle_outline</mat-icon>\r\n <div>add</div>\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"scroll\" #scrollContainer (scroll)=\"onScroll($event)\" [class.with-checkboxes]=\"config().selectableRows === 'multiple'\">\r\n <table [class.with-options]=\"hasOptions()\">\r\n <thead>\r\n @if ((config().tableHeadings || []).length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th class=\"box-cell\">\r\n <mat-checkbox\r\n (change)=\"toggleSelectAll($event)\"\r\n [checked]=\"areAllRowsSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n }\r\n\r\n @for (heading of config().tableHeadings; track heading; let i = $index) {\r\n <th>\r\n <div class=\"flexer gap05\">\r\n {{ heading }}\r\n @if (config().sortable && !config().draggable) {\r\n <lib-table-sort-header\r\n [selected]=\"currentSortColumn === i\"\r\n (click)=\"currentSortColumn = i\"\r\n (sort)=\"sortByProp(config().dataProps[i], $event)\"\r\n />\r\n }\r\n </div>\r\n </th>\r\n }\r\n\r\n @if (hasOptions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n } @else {\r\n <ng-content select=\".custom-headers\" />\r\n }\r\n </thead>\r\n @if (config().draggable) {\r\n <tbody cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n cdkDrag cdkDragLockAxis=\"y\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td\r\n [class.dragCol]=\"cellIndex === 0\">\r\n <div [class]=\"'data ' + getClass(obj, prop)\"\r\n [class.flexer]=\"cellIndex === 0\">\r\n @if (cellIndex === 0) {\r\n <mat-icon class=\"draggable\" cdkDragHandle>\r\n drag_indicator\r\n </mat-icon>\r\n }\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n } @else {\r\n <tbody>\r\n @for (obj of config().data; let i = $index; track i;) {\r\n <tr\r\n (mouseover)=\"hoverRowIndex = i\"\r\n (mouseleave)=\"hoverRowIndex = -1\"\r\n [class.pointer]=\"config().selectableRows\"\r\n [class.hover-row]=\"hoverRowIndex == i\"\r\n [class.selected-row]=\"(config().selectableRows === 'single' && selectedRowIndex == i) ||\r\n (config().selectableRows === 'multiple' && selectedIndices.has(i))\"\r\n (click)=\"onRowClick($event, obj, i)\">\r\n @if (config().selectableRows === 'multiple') {\r\n <td>\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n [checked]=\"selectedIndices.has(i)\"\r\n (change)=\"toggleRowSelection(i)\">\r\n </mat-checkbox>\r\n </td>\r\n }\r\n\r\n @for (prop of config().dataProps; track prop; let cellIndex = $index) {\r\n <td>\r\n <div [class]=\"'data ' + getClass(obj, prop)\">\r\n {{ obj[prop] || '-' }}\r\n </div>\r\n </td>\r\n }\r\n @if (hasOptions()) {\r\n <td class=\"right-align\" (click)=\"$event.stopPropagation()\">\r\n <button mat-icon-button class=\"pointer dots right\" [matMenuTriggerFor]=\"optionsMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n @for (option of getOptionsForRow(obj); track option) {\r\n <div\r\n mat-menu-item (click)=\"selectOption(option, obj, i)\"\r\n [class.red]=\"option == 'Remove' || option == 'Delete'\">\r\n {{ option }}\r\n </div>\r\n }\r\n </mat-menu>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n }\r\n </table>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoaderService {\r\n private loadingSubject = new BehaviorSubject<boolean>(false);\r\n public loading$ = this.loadingSubject.asObservable();\r\n\r\n public setLoading(loadingState: boolean) {\r\n this.loadingSubject.next(loadingState);\r\n }\r\n\r\n public isLoading(): boolean {\r\n return this.loadingSubject.getValue();\r\n }\r\n}\r\n","import { Component, inject, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { LoaderService } from '../../services/loader.service';\r\nimport { AsyncPipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-global-loader',\r\n imports: [\r\n AsyncPipe,\r\n MatProgressSpinnerModule\r\n ],\r\n templateUrl: './global-loader.component.html',\r\n styleUrl: './global-loader.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class GlobalLoaderComponent {\r\n protected loaderService = inject(LoaderService);\r\n}\r\n","@if (loaderService.loading$ | async) {\r\n <div class=\"loader\">\r\n <mat-spinner />\r\n </div>\r\n}","import { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorService {\r\n private errorSubject = new Subject<HttpErrorResponse>();\r\n public error$ = this.errorSubject.asObservable();\r\n\r\n public sendError(error: HttpErrorResponse) {\r\n this.errorSubject.next(error);\r\n }\r\n}\r\n","export const HTTP_STATUS_CODES: Record<number | string, string> = {\r\n 100: 'Continue',\r\n 101: 'Switching Protocols',\r\n 102: 'Processing',\r\n 103: 'Early Hints',\r\n 200: 'OK',\r\n 201: 'Created',\r\n 202: 'Accepted',\r\n 203: 'Non-Authoritative Information',\r\n 204: 'No Content',\r\n 205: 'Reset Content',\r\n 206: 'Partial Content',\r\n 207: 'Multi-Status',\r\n 208: 'Already Reported',\r\n 226: 'IM Used',\r\n 300: 'Multiple Choices',\r\n 301: 'Moved Permanently',\r\n 302: 'Found',\r\n 303: 'See Other',\r\n 304: 'Not Modified',\r\n 305: 'Use Proxy',\r\n 306: '(Unused)',\r\n 307: 'Temporary Redirect',\r\n 308: 'Permanent Redirect',\r\n 400: 'Bad Request',\r\n 401: 'Unauthorized',\r\n 402: 'Payment Required',\r\n 403: 'Forbidden',\r\n 404: 'Not Found',\r\n 405: 'Method Not Allowed',\r\n 406: 'Not Acceptable',\r\n 407: 'Proxy Authentication Required',\r\n 408: 'Request Timeout',\r\n 409: 'Conflict',\r\n 410: 'Gone',\r\n 411: 'Length Required',\r\n 412: 'Precondition Failed',\r\n 413: 'Payload Too Large',\r\n 414: 'URI Too Long',\r\n 415: 'Unsupported Media Type',\r\n 416: 'Range Not Satisfiable',\r\n 417: 'Expectation Failed',\r\n 418: \"I'm a teapot\",\r\n 421: 'Misdirected Request',\r\n 422: 'Unprocessable Entity',\r\n 423: 'Locked',\r\n 424: 'Failed Dependency',\r\n 425: 'Too Early',\r\n 426: 'Upgrade Required',\r\n 428: 'Precondition Required',\r\n 429: 'Too Many Requests',\r\n 431: 'Request Header Fields Too Large',\r\n 451: 'Unavailable For Legal Reasons',\r\n 500: 'Internal Server Error',\r\n 501: 'Not Implemented',\r\n 502: 'Bad Gateway',\r\n 503: 'Service Unavailable',\r\n 504: 'Gateway Timeout',\r\n 505: 'HTTP Version Not Supported',\r\n 506: 'Variant Also Negotiates',\r\n 507: 'Insufficient Storage',\r\n 508: 'Loop Detected',\r\n 510: 'Not Extended',\r\n 511: 'Network Authentication Required'\r\n};\r\n\r\nexport const JSON_HTTP_OPTIONS: Object = {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Accept-language': 'bg',\r\n },\r\n responseType: 'json'\r\n};\r\n\r\nexport const STRING_HTTP_OPTIONS: Object = {\r\n responseType: 'text'\r\n};\r\n\r\nexport const BLOB_HTTP_OPTIONS: Object = {\r\n headers: {\r\n 'Content-type': 'application/octet-stream',\r\n 'Accept-language': 'bg',\r\n },\r\n responseType: 'blob',\r\n};\r\n\r\nexport const SKIP_ERROR_OPTIONS: Object = {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Accept-language': 'bg',\r\n 'X-Skip-Error': 'true',\r\n },\r\n responseType: 'json',\r\n};\r\n\r\nexport const JSON_OPTIONS_WITH_GLOBAL_LOADER: Object = {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Accept-language': 'bg',\r\n 'X-Global-Loader': 'true',\r\n },\r\n responseType: 'json'\r\n};\r\n","import { Component, inject, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { DefaultDialogComponent } from '../../default-dialog/default-dialog.component';\r\nimport { ErrorDisplayComponent } from '../../error-display.component';\r\nimport { HTTP_STATUS_CODES } from '../../../utils/utils';\r\n\r\n@Component({\r\n selector: 'lib-error-popup',\r\n imports: [\r\n DefaultDialogComponent,\r\n ErrorDisplayComponent\r\n ],\r\n templateUrl: './error-popup.component.html',\r\n styleUrls: ['./error-popup.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ErrorPopupComponent {\r\n protected httpStatusCodes = HTTP_STATUS_CODES;\r\n public error = inject<HttpErrorResponse>(MAT_DIALOG_DATA);\r\n}\r\n","<lib-default-dialog [dialogTitle]=\"'Аn error has occurred'\">\r\n <div class=\"dialog-content\">\r\n <div class=\"status-info\">\r\n <div>{{ error.status }}</div>\r\n @if (error.status) {\r\n <div>{{ httpStatusCodes[error.status] || 500 }}</div>\r\n }\r\n </div>\r\n <div class=\"error-info\">\r\n <lib-error-display [error]=\"error\" />\r\n </div>\r\n </div>\r\n</lib-default-dialog>","import { OnDestroy, inject } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\r\nimport { ErrorPopupComponent } from './error-popup/error-popup.component';\r\nimport { NoopScrollStrategy } from '@angular/cdk/overlay';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'lib-error-handler',\r\n templateUrl: 'error-handler.component.html',\r\n styleUrls: ['error-handler.component.scss'],\r\n imports: [\r\n MatDialogModule\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ErrorHandlerComponent implements OnDestroy {\r\n private errSubscriptions = new Subscription();\r\n private errorService = inject(ErrorService);\r\n private dialog = inject(MatDialog);\r\n\r\n constructor() {\r\n this.errSubscriptions.add(\r\n this.errorService.error$.subscribe((err: HttpErrorResponse) => {\r\n console.log(err);\r\n this.showPopup(err);\r\n })\r\n );\r\n }\r\n\r\n private showPopup(error: HttpErrorResponse): void {\r\n this.dialog.closeAll();\r\n this.dialog.open(ErrorPopupComponent, {\r\n data: error,\r\n width: '400px',\r\n autoFocus: false,\r\n scrollStrategy: new NoopScrollStrategy(),\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.errSubscriptions.unsubscribe();\r\n }\r\n}\r\n","","/*\r\n * Public API Surface of ui-lib\r\n */\r\n\r\nexport * from './lib/pipes/snake-case-parser.pipe';\r\nexport * from './lib/directives/fields-match-validator.directive';\r\nexport * from './lib/directives/phone-validation.directive';\r\nexport * from './lib/directives/password-validator.directive';\r\nexport * from './lib/components/default-dialog/default-dialog.component';\r\nexport * from './lib/components/error-display.component';\r\nexport * from './lib/components/search-bar.component';\r\nexport * from './lib/utils/types';\r\nexport * from './lib/components/table-sort-header/table-sort-header.component';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/global-loader/global-loader.component';\r\nexport * from './lib/services/loader.service';\r\nexport * from './lib/services/error.service';\r\nexport * from './lib/components/error-handler/error-handler.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ferhaps/easy-ui-lib",
3
- "version": "21.0.6",
3
+ "version": "21.0.8",
4
4
  "description": "Angular UI components, directives and pipes library with Angular Material",
5
5
  "keywords": [
6
6
  "angular",
@@ -21,10 +21,10 @@
21
21
  "url": "https://github.com/Ferhaps/angular-ui-library"
22
22
  },
23
23
  "peerDependencies": {
24
- "@angular/common": "^21.0.2",
25
- "@angular/core": "^21.0.2",
26
- "@angular/material": "^21.0.1",
27
- "@angular/cdk": "^21.0.1"
24
+ "@angular/common": "^21.2.5",
25
+ "@angular/core": "^21.2.5",
26
+ "@angular/material": "^21.2.3",
27
+ "@angular/cdk": "^21.2.3"
28
28
  },
29
29
  "dependencies": {
30
30
  "tslib": "^2.3.0"
@@ -14,9 +14,7 @@ declare class SnakeCaseParserPipe implements PipeTransform {
14
14
 
15
15
  declare class FieldsMatchValidatorDirective implements Validator {
16
16
  fieldToMatch: i0.InputSignal<string>;
17
- validate(control: AbstractControl): {
18
- [key: string]: any;
19
- } | null;
17
+ validate(control: AbstractControl): ValidationErrors | null;
20
18
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldsMatchValidatorDirective, never>;
21
19
  static ɵdir: i0.ɵɵDirectiveDeclaration<FieldsMatchValidatorDirective, "[libFieldsMatchValidator]", never, { "fieldToMatch": { "alias": "fieldToMatch"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
22
20
  }
@@ -35,23 +33,23 @@ declare class PasswordValidatorDirective implements Validator {
35
33
  }
36
34
 
37
35
  declare class DefaultDialogComponent {
38
- temRef: TemplateRef<any>;
36
+ temRef: i0.InputSignal<TemplateRef<unknown> | undefined>;
39
37
  height: i0.InputSignal<string | undefined>;
40
38
  dialogTitle: i0.InputSignal<string | undefined>;
41
39
  withBack: i0.InputSignal<boolean | undefined>;
42
40
  protected back: i0.OutputEmitterRef<void>;
43
41
  static ɵfac: i0.ɵɵFactoryDeclaration<DefaultDialogComponent, never>;
44
- static ɵcmp: i0.ɵɵComponentDeclaration<DefaultDialogComponent, "lib-default-dialog", never, { "temRef": { "alias": "temRef"; "required": false; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "dialogTitle": { "alias": "dialogTitle"; "required": false; "isSignal": true; }; "withBack": { "alias": "withBack"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, [".dialog-content"], true, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<DefaultDialogComponent, "lib-default-dialog", never, { "temRef": { "alias": "temRef"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "dialogTitle": { "alias": "dialogTitle"; "required": false; "isSignal": true; }; "withBack": { "alias": "withBack"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, [".dialog-content"], true, never>;
45
43
  }
46
44
 
47
45
  type SystemError = HttpErrorResponse | string | undefined;
48
46
 
49
- declare class ErrorDispalyComponent implements OnInit {
47
+ declare class ErrorDisplayComponent implements OnInit {
50
48
  error: i0.InputSignal<SystemError>;
51
49
  protected displayError: string;
52
50
  ngOnInit(): void;
53
- static ɵfac: i0.ɵɵFactoryDeclaration<ErrorDispalyComponent, never>;
54
- static ɵcmp: i0.ɵɵComponentDeclaration<ErrorDispalyComponent, "lib-error-dispaly", never, { "error": { "alias": "error"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
51
+ static ɵfac: i0.ɵɵFactoryDeclaration<ErrorDisplayComponent, never>;
52
+ static ɵcmp: i0.ɵɵComponentDeclaration<ErrorDisplayComponent, "lib-error-display", never, { "error": { "alias": "error"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
55
53
  }
56
54
 
57
55
  declare class SearchBarComponent {
@@ -156,5 +154,5 @@ declare class ErrorHandlerComponent implements OnDestroy {
156
154
  static ɵcmp: i0.ɵɵComponentDeclaration<ErrorHandlerComponent, "lib-error-handler", never, {}, {}, never, never, true, never>;
157
155
  }
158
156
 
159
- export { DefaultDialogComponent, ErrorDispalyComponent, ErrorHandlerComponent, ErrorService, FieldsMatchValidatorDirective, GlobalLoaderComponent, LoaderService, PasswordValidatorDirective, PhoneValidationDirective, SearchBarComponent, SnakeCaseParserPipe, TableComponent, TableSortHeaderComponent };
157
+ export { DefaultDialogComponent, ErrorDisplayComponent, ErrorHandlerComponent, ErrorService, FieldsMatchValidatorDirective, GlobalLoaderComponent, LoaderService, PasswordValidatorDirective, PhoneValidationDirective, SearchBarComponent, SnakeCaseParserPipe, TableComponent, TableSortHeaderComponent };
160
158
  export type { ClassRule, Config, SortState, SystemError, TableEvent };