@ferhaps/easy-ui-lib 20.0.3 → 21.0.2
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
|
@@ -50,7 +50,7 @@ A feature-rich table component supporting:
|
|
|
50
50
|
export type SortState = 'none' | 'asc' | 'desc';
|
|
51
51
|
|
|
52
52
|
export type TableEvent<T = any> = {
|
|
53
|
-
action: 'rowClick' | 'rowSelect' | 'drag' | 'scrolled' | 'sort' | 'add' | string;
|
|
53
|
+
action: 'rowClick' | 'rowSelect' | 'drag' | 'scroll' | 'scrolled' | 'sort' | 'add' | string;
|
|
54
54
|
obj?: T;
|
|
55
55
|
prop?: keyof T;
|
|
56
56
|
index?: number;
|
|
@@ -32,10 +32,10 @@ class SnakeCaseParserPipe {
|
|
|
32
32
|
}
|
|
33
33
|
return String(value);
|
|
34
34
|
}
|
|
35
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
36
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
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" }); }
|
|
37
37
|
}
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SnakeCaseParserPipe, decorators: [{
|
|
39
39
|
type: Pipe,
|
|
40
40
|
args: [{
|
|
41
41
|
name: 'snakeCaseParser',
|
|
@@ -44,7 +44,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
44
44
|
|
|
45
45
|
class FieldsMatchValidatorDirective {
|
|
46
46
|
constructor() {
|
|
47
|
-
this.fieldToMatch = input.required(...(ngDevMode ?
|
|
47
|
+
this.fieldToMatch = input.required({ ...(ngDevMode ? { debugName: "fieldToMatch" } : {}) });
|
|
48
48
|
}
|
|
49
49
|
validate(control) {
|
|
50
50
|
const value = control.value;
|
|
@@ -60,8 +60,8 @@ class FieldsMatchValidatorDirective {
|
|
|
60
60
|
}
|
|
61
61
|
return null;
|
|
62
62
|
}
|
|
63
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
64
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
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: [
|
|
65
65
|
{
|
|
66
66
|
provide: NG_VALIDATORS,
|
|
67
67
|
useExisting: FieldsMatchValidatorDirective,
|
|
@@ -69,7 +69,7 @@ class FieldsMatchValidatorDirective {
|
|
|
69
69
|
},
|
|
70
70
|
], ngImport: i0 }); }
|
|
71
71
|
}
|
|
72
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: FieldsMatchValidatorDirective, decorators: [{
|
|
73
73
|
type: Directive,
|
|
74
74
|
args: [{
|
|
75
75
|
selector: '[libFieldsMatchValidator]',
|
|
@@ -81,7 +81,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
81
81
|
},
|
|
82
82
|
],
|
|
83
83
|
}]
|
|
84
|
-
}] });
|
|
84
|
+
}], propDecorators: { fieldToMatch: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldToMatch", required: true }] }] } });
|
|
85
85
|
|
|
86
86
|
class PhoneValidationDirective {
|
|
87
87
|
onInput(event) {
|
|
@@ -101,10 +101,10 @@ class PhoneValidationDirective {
|
|
|
101
101
|
event.preventDefault();
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
105
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
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 }); }
|
|
106
106
|
}
|
|
107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PhoneValidationDirective, decorators: [{
|
|
108
108
|
type: Directive,
|
|
109
109
|
args: [{
|
|
110
110
|
selector: '[libPhoneValidation]',
|
|
@@ -127,8 +127,8 @@ class PasswordValidatorDirective {
|
|
|
127
127
|
}
|
|
128
128
|
return null;
|
|
129
129
|
}
|
|
130
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
131
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
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: [
|
|
132
132
|
{
|
|
133
133
|
provide: NG_VALIDATORS,
|
|
134
134
|
useExisting: PasswordValidatorDirective,
|
|
@@ -136,7 +136,7 @@ class PasswordValidatorDirective {
|
|
|
136
136
|
}
|
|
137
137
|
], ngImport: i0 }); }
|
|
138
138
|
}
|
|
139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PasswordValidatorDirective, decorators: [{
|
|
140
140
|
type: Directive,
|
|
141
141
|
args: [{
|
|
142
142
|
selector: '[libPasswordValidator]',
|
|
@@ -152,28 +152,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
152
152
|
|
|
153
153
|
class DefaultDialogComponent {
|
|
154
154
|
constructor() {
|
|
155
|
-
this.height = input(...(ngDevMode ?
|
|
156
|
-
this.dialogTitle = input(...(ngDevMode ?
|
|
157
|
-
this.withBack = input(...(ngDevMode ?
|
|
155
|
+
this.height = input(undefined, { ...(ngDevMode ? { debugName: "height" } : {}) });
|
|
156
|
+
this.dialogTitle = input(undefined, { ...(ngDevMode ? { debugName: "dialogTitle" } : {}) });
|
|
157
|
+
this.withBack = input(undefined, { ...(ngDevMode ? { debugName: "withBack" } : {}) });
|
|
158
158
|
this.back = output();
|
|
159
159
|
}
|
|
160
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
161
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
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"] }] }); }
|
|
162
162
|
}
|
|
163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: DefaultDialogComponent, decorators: [{
|
|
164
164
|
type: Component,
|
|
165
165
|
args: [{ selector: 'lib-default-dialog', imports: [
|
|
166
166
|
CommonModule,
|
|
167
167
|
MatIconModule,
|
|
168
168
|
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 <h4 class=\"title\">{{ dialogTitle() }}</h4>\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\"
|
|
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
170
|
}], propDecorators: { temRef: [{
|
|
171
171
|
type: Input
|
|
172
|
-
}] } });
|
|
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"] }] } });
|
|
173
173
|
|
|
174
174
|
class ErrorDispalyComponent {
|
|
175
175
|
constructor() {
|
|
176
|
-
this.error = input.required(...(ngDevMode ?
|
|
176
|
+
this.error = input.required({ ...(ngDevMode ? { debugName: "error" } : {}) });
|
|
177
177
|
this.displayError = '';
|
|
178
178
|
}
|
|
179
179
|
ngOnInit() {
|
|
@@ -195,19 +195,19 @@ class ErrorDispalyComponent {
|
|
|
195
195
|
this.displayError = 'Unknown error';
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
199
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
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" }] }); }
|
|
200
200
|
}
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
201
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorDispalyComponent, decorators: [{
|
|
202
202
|
type: Component,
|
|
203
203
|
args: [{ selector: 'lib-error-dispaly', imports: [
|
|
204
204
|
SnakeCaseParserPipe
|
|
205
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"] }]
|
|
206
|
-
}] });
|
|
206
|
+
}], propDecorators: { error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: true }] }] } });
|
|
207
207
|
|
|
208
208
|
class SearchBarComponent {
|
|
209
209
|
constructor() {
|
|
210
|
-
this.for = input.required(...(ngDevMode ?
|
|
210
|
+
this.for = input.required({ ...(ngDevMode ? { debugName: "for" } : {}) });
|
|
211
211
|
this.search = output();
|
|
212
212
|
this.searchForm = new FormGroup({
|
|
213
213
|
search: new FormControl('')
|
|
@@ -220,16 +220,16 @@ class SearchBarComponent {
|
|
|
220
220
|
this.search.emit(searchTerm);
|
|
221
221
|
});
|
|
222
222
|
}
|
|
223
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
224
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
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: `
|
|
225
225
|
<form class="search-bar" [formGroup]="searchForm">
|
|
226
226
|
<mat-icon>search</mat-icon>
|
|
227
227
|
<input class="search-input" type="search" name="field"
|
|
228
228
|
[placeholder]="'Search ' + for()" autocomplete="off" formControlName="search" />
|
|
229
229
|
</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
|
|
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"] }] }); }
|
|
231
231
|
}
|
|
232
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SearchBarComponent, decorators: [{
|
|
233
233
|
type: Component,
|
|
234
234
|
args: [{ selector: 'lib-search-bar', template: `
|
|
235
235
|
<form class="search-bar" [formGroup]="searchForm">
|
|
@@ -240,12 +240,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
240
240
|
`, imports: [
|
|
241
241
|
MatIconModule,
|
|
242
242
|
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
|
|
244
|
-
}], ctorParameters: () => [] });
|
|
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"] }]
|
|
244
|
+
}], ctorParameters: () => [], propDecorators: { for: [{ type: i0.Input, args: [{ isSignal: true, alias: "for", required: true }] }], search: [{ type: i0.Output, args: ["search"] }] } });
|
|
245
245
|
|
|
246
246
|
class TableSortHeaderComponent {
|
|
247
247
|
constructor() {
|
|
248
|
-
this.selected = input.required(...(ngDevMode ?
|
|
248
|
+
this.selected = input.required({ ...(ngDevMode ? { debugName: "selected" } : {}) });
|
|
249
249
|
this.sort = output();
|
|
250
250
|
this.sortState = 'none';
|
|
251
251
|
}
|
|
@@ -261,19 +261,19 @@ class TableSortHeaderComponent {
|
|
|
261
261
|
}
|
|
262
262
|
this.sort.emit(this.sortState);
|
|
263
263
|
}
|
|
264
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
265
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
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"] }] }); }
|
|
266
266
|
}
|
|
267
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
267
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: TableSortHeaderComponent, decorators: [{
|
|
268
268
|
type: Component,
|
|
269
269
|
args: [{ selector: 'lib-table-sort-header', imports: [
|
|
270
270
|
MatIconModule,
|
|
271
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"] }]
|
|
272
|
-
}] });
|
|
272
|
+
}], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: true }] }], sort: [{ type: i0.Output, args: ["sort"] }] } });
|
|
273
273
|
|
|
274
274
|
class TableComponent {
|
|
275
275
|
constructor() {
|
|
276
|
-
this.config = input.required(...(ngDevMode ?
|
|
276
|
+
this.config = input.required({ ...(ngDevMode ? { debugName: "config" } : {}) });
|
|
277
277
|
this.action = output();
|
|
278
278
|
this.scrollContainer = viewChild.required('scrollContainer');
|
|
279
279
|
this.selectedRowIndex = -1;
|
|
@@ -298,8 +298,9 @@ class TableComponent {
|
|
|
298
298
|
this.action.emit({ action: 'drag', obj: this.config().data[event.currentIndex], index: event.currentIndex });
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
|
-
onScroll() {
|
|
301
|
+
onScroll(e) {
|
|
302
302
|
const container = this.scrollContainer().nativeElement;
|
|
303
|
+
this.action.emit({ action: 'scroll', event: e });
|
|
303
304
|
if ((Math.ceil(container.scrollTop) + container.offsetHeight) >= container.scrollHeight) {
|
|
304
305
|
this.action.emit({ action: 'scrolled' });
|
|
305
306
|
}
|
|
@@ -322,6 +323,21 @@ class TableComponent {
|
|
|
322
323
|
selected: this.selectedRowIndex === index || this.selectedIndices.has(index)
|
|
323
324
|
});
|
|
324
325
|
}
|
|
326
|
+
areAllRowsSelected() {
|
|
327
|
+
return this.selectedIndices.size === this.config().data.length;
|
|
328
|
+
}
|
|
329
|
+
toggleSelectAll(event) {
|
|
330
|
+
if (event.checked) {
|
|
331
|
+
this.config().data.forEach((_, index) => this.selectedIndices.add(index));
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
this.selectedIndices.clear();
|
|
335
|
+
}
|
|
336
|
+
this.action.emit({
|
|
337
|
+
action: 'rowSelect',
|
|
338
|
+
selectedRows: [...this.selectedIndices]
|
|
339
|
+
});
|
|
340
|
+
}
|
|
325
341
|
toggleRowSelection(index) {
|
|
326
342
|
if (this.config().selectableRows === 'multiple') {
|
|
327
343
|
if (this.selectedIndices.has(index)) {
|
|
@@ -340,10 +356,10 @@ class TableComponent {
|
|
|
340
356
|
sortByProp(prop, sortState) {
|
|
341
357
|
this.action.emit({ action: 'sort', prop, sortState });
|
|
342
358
|
}
|
|
343
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
344
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", 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()\">\r\n <table [class.with-options]=\"config().options?.length\">\r\n <thead>\r\n @if (config().tableHeadings.length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th></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 (config().options?.length) {\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 (config().options?.length) {\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 config().options; 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 (config().options?.length) {\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 config().options; 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}}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"] }] }); }
|
|
359
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
360
|
+
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]=\"config().options?.length\">\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 (config().options?.length) {\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 (config().options?.length) {\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 config().options; 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 (config().options?.length) {\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 config().options; 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"] }] }); }
|
|
345
361
|
}
|
|
346
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: TableComponent, decorators: [{
|
|
347
363
|
type: Component,
|
|
348
364
|
args: [{ selector: 'lib-table', imports: [
|
|
349
365
|
MatMenuModule,
|
|
@@ -352,8 +368,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
352
368
|
TableSortHeaderComponent,
|
|
353
369
|
DragDropModule,
|
|
354
370
|
MatCheckboxModule
|
|
355
|
-
], 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()\">\r\n <table [class.with-options]=\"config().options?.length\">\r\n <thead>\r\n @if (config().tableHeadings.length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th
|
|
356
|
-
}] });
|
|
371
|
+
], 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]=\"config().options?.length\">\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 (config().options?.length) {\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 (config().options?.length) {\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 config().options; 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 (config().options?.length) {\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 config().options; 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"] }]
|
|
372
|
+
}], 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 }] }] } });
|
|
357
373
|
|
|
358
374
|
class LoaderService {
|
|
359
375
|
constructor() {
|
|
@@ -366,10 +382,10 @@ class LoaderService {
|
|
|
366
382
|
isLoading() {
|
|
367
383
|
return this.loadingSubject.getValue();
|
|
368
384
|
}
|
|
369
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
370
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
385
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
386
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LoaderService, providedIn: 'root' }); }
|
|
371
387
|
}
|
|
372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LoaderService, decorators: [{
|
|
373
389
|
type: Injectable,
|
|
374
390
|
args: [{
|
|
375
391
|
providedIn: 'root'
|
|
@@ -380,10 +396,10 @@ class GlobalLoaderComponent {
|
|
|
380
396
|
constructor() {
|
|
381
397
|
this.loaderService = inject(LoaderService);
|
|
382
398
|
}
|
|
383
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
384
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
399
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
400
|
+
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" }] }); }
|
|
385
401
|
}
|
|
386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
402
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalLoaderComponent, decorators: [{
|
|
387
403
|
type: Component,
|
|
388
404
|
args: [{ selector: 'lib-global-loader', imports: [
|
|
389
405
|
AsyncPipe,
|
|
@@ -399,10 +415,10 @@ class ErrorService {
|
|
|
399
415
|
sendError(error) {
|
|
400
416
|
this.errorSubject.next(error);
|
|
401
417
|
}
|
|
402
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
403
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
418
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
419
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorService, providedIn: 'root' }); }
|
|
404
420
|
}
|
|
405
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
421
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorService, decorators: [{
|
|
406
422
|
type: Injectable,
|
|
407
423
|
args: [{
|
|
408
424
|
providedIn: 'root'
|
|
@@ -513,10 +529,10 @@ class ErrorPopupComponent {
|
|
|
513
529
|
this.error = error;
|
|
514
530
|
this.httpStatusCodes = HTTP_STATUS_CODES;
|
|
515
531
|
}
|
|
516
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
517
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
532
|
+
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 }); }
|
|
533
|
+
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"] }] }); }
|
|
518
534
|
}
|
|
519
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
535
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorPopupComponent, decorators: [{
|
|
520
536
|
type: Component,
|
|
521
537
|
args: [{ selector: 'lib-error-popup', imports: [
|
|
522
538
|
DefaultDialogComponent,
|
|
@@ -549,10 +565,10 @@ class ErrorHandlerComponent {
|
|
|
549
565
|
ngOnDestroy() {
|
|
550
566
|
this.errSubscriptions.unsubscribe();
|
|
551
567
|
}
|
|
552
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
553
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
568
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorHandlerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
569
|
+
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 }] }); }
|
|
554
570
|
}
|
|
555
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
571
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: ErrorHandlerComponent, decorators: [{
|
|
556
572
|
type: Component,
|
|
557
573
|
args: [{ selector: 'lib-error-handler', imports: [
|
|
558
574
|
MatDialogModule
|
|
@@ -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: InputEvent) {\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 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 <h4 class=\"title\">{{ dialogTitle() }}</h4>\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\"></ng-content>\r\n <ng-template #tempBody></ng-template>\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 { 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[];\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 public 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() {\r\n const container = this.scrollContainer().nativeElement;\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 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","<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()\">\r\n <table [class.with-options]=\"config().options?.length\">\r\n <thead>\r\n @if (config().tableHeadings.length > 0) {\r\n <tr>\r\n @if (config().selectableRows === 'multiple') {\r\n <th></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 (config().options?.length) {\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 (config().options?.length) {\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 config().options; 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 (config().options?.length) {\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 config().options; 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":";;;;;;;;;;;;;;;;;;;;;;;;;MAKa,mBAAmB,CAAA;AACvB,IAAA,SAAS,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAI,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACjE,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;8GATW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACxB,iBAAA;;;MCSY,6BAA6B,CAAA;AAV1C,IAAA,WAAA,GAAA;AAWS,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAU;AAoB/C,IAAA;AAlBQ,IAAA,QAAQ,CAAC,OAAwB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;QAE3B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7D,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,KAAK,KAAK,eAAe,CAAC,KAAK,EAAE;AACnC,YAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3B;AAEA,QAAA,OAAO,IAAI;IACb;8GApBW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAR7B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,6BAA6B;AAC1C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAVzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAA,6BAA+B;AAC1C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;;MCPY,wBAAwB,CAAA;AACO,IAAA,OAAO,CAAC,KAAiB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAE9C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9B,KAAK,CAAC,KAAK,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,EAAE;QACjC;;QAGA,MAAM,KAAK,GAAG,WAAW;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC5B,YAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACnD;IACF;AAE4C,IAAA,SAAS,CAAC,KAAoB,EAAA;AACxE,QAAA,MAAM,UAAU,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;QAC3D,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,UAAU,KAAK,GAAG,EAAE;YACnD,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;8GApBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA;8BAE2C,OAAO,EAAA,CAAA;sBAAhD,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;gBAcW,SAAS,EAAA,CAAA;sBAApD,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MCPxB,0BAA0B,CAAA;AAC9B,IAAA,QAAQ,CAAC,OAAwB,EAAA;AACtC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK;;QAG9B,MAAM,OAAO,GAAG,0DAA0D;QAE1E,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvC,YAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE;QAClC;AAEA,QAAA,OAAO,IAAI;IACb;8GAZW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,SAAA,EAR1B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,0BAA0B;AACvC,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAVtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAA,0BAA4B;AACvC,4BAAA,KAAK,EAAE;AACR;AACF;AACF,iBAAA;;;MCGY,sBAAsB,CAAA;AAVnC,IAAA,WAAA,GAAA;QAYS,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;QACxB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;QAC7B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAW;QAExB,IAAA,CAAA,IAAI,GAAG,MAAM,EAAQ;AAChC,IAAA;8GAPY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,unBCfnC,6oBAkBM,EAAA,MAAA,EAAA,CAAA,mgBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,qLACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAKN,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EACrB;wBACP,YAAY;wBACZ,aAAa;wBACb;AACD,qBAAA,EAAA,QAAA,EAAA,6oBAAA,EAAA,MAAA,EAAA,CAAA,mgBAAA,CAAA,EAAA;8BAKQ,MAAM,EAAA,CAAA;sBAAd;;;MEWU,qBAAqB,CAAA;AArBlC,IAAA,WAAA,GAAA;AAsBS,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;QAElC,IAAA,CAAA,YAAY,GAAW,EAAE;AAiBpC,IAAA;IAfQ,QAAQ,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,YAAY,iBAAiB,EAAE;YAC7C,IAAI,OAAQ,IAAI,CAAC,KAAK,EAAwB,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACjE,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,KAAK,EAAwB,CAAC,KAAK;YAC/D;AAAO,iBAAA,IAAI,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,KAAK,EAAwB,EAAE,KAAK,EAAE,OAAO,EAAE;gBAC5E,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,KAAK,EAAwB,CAAC,KAAK,CAAC,OAAO;YACvE;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,GAAG,eAAe;YACrC;QACF;aAAO,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,QAAQ,EAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,KAAK,EAAa;QAC9C;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,eAAe;QACrC;IACF;8GAnBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBtB,CAAA,2EAAA,CAA6E,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAFrF,mBAAmB,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAkBV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBArBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EACpB;wBACP;AACD,qBAAA,EAAA,QAAA,EACS,CAAA,2EAAA,CAA6E,EAAA,MAAA,EAAA,CAAA,0MAAA,CAAA,EAAA;;;MCuC5E,kBAAkB,CAAA;AAS7B,IAAA,WAAA,GAAA;AARO,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,8CAAU;QAE3B,IAAA,CAAA,MAAM,GAAG,MAAM,EAAkB;QAEjC,IAAA,CAAA,UAAU,GAAc,IAAI,SAAS,CAAC;AAC9C,YAAA,MAAM,EAAE,IAAI,WAAW,CAAC,EAAE;AAC3B,SAAA,CAAC;QAGA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY;AACzC,YAAA,IAAI,CACF,YAAY,CAAC,IAAI,CAAC,EAClB,oBAAoB,EAAE,CACvB,CAAC,SAAS,CAAC,CAAC,UAA0B,KAAI;AACzC,YAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAClC,gBAAA,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;YAChC;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,QAAA,CAAC,CAAC;IACN;8GArBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3CnB,CAAA;;;;;;CAMX,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAiCG,aAAa,qLACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGV,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA7C9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,QAAA,EAChB,CAAA;;;;;;CAMX,EAAA,OAAA,EAgCU;wBACP,aAAa;wBACb;AACD,qBAAA,EAAA,MAAA,EAAA,CAAA,gTAAA,CAAA,EAAA;;;MCnCU,wBAAwB,CAAA;AARrC,IAAA,WAAA,GAAA;AASS,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAW;QACpC,IAAA,CAAA,IAAI,GAAG,MAAM,EAAa;QAEvB,IAAA,CAAA,SAAS,GAAc,MAAM;AAaxC,IAAA;IAXW,WAAW,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AACpC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM;QACzB;QAEA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAChC;8GAhBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbrC,gOAMM,EAAA,MAAA,EAAA,CAAA,+NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEF,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAKJ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACP,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,gOAAA,EAAA,MAAA,EAAA,CAAA,+NAAA,CAAA,EAAA;;;MEyCU,cAAc,CAAA;AAb3B,IAAA,WAAA,GAAA;AAcS,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAa;QAEjC,IAAA,CAAA,MAAM,GAAG,MAAM,EAAiB;AAEnC,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CAA6B,iBAAiB,CAAC;QAEnF,IAAA,CAAA,gBAAgB,GAAW,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,eAAe,GAAgB,IAAI,GAAG,EAAU;QAC7C,IAAA,CAAA,aAAa,GAAW,CAAC,CAAC;QAC1B,IAAA,CAAA,iBAAiB,GAAW,CAAC,CAAC;AAoEzC,IAAA;IAlEW,QAAQ,CAAC,GAAM,EAAE,IAAa,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU;AAAE,YAAA,OAAO,EAAE;QAExC,MAAM,OAAO,GAAa,EAAE;QAC5B,KAAK,IAAI,IAAI,IAAK,IAAI,CAAC,MAAM,EAAE,CAAC,UAA6B,EAAE;YAC7D,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B;QACF;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEU,IAAA,IAAI,CAAC,KAAuB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE;AAC3B,YAAA,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;AAC5E,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QAC9G;IACF;IAEU,QAAQ,GAAA;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,EAAE;YACvF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC1C;IACF;AAEU,IAAA,UAAU,CAAC,KAAY,EAAE,GAAM,EAAE,KAAa,EAAA;AACtD,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,KAAK,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,KAAK;AACpE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,MAAM,EAAE,UAAU;YAClB,GAAG;YACH,KAAK;AACL,YAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,KAAK,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5E;AACD,SAAA,CAAC;IACJ;AAEU,IAAA,YAAY,CAAC,MAAc,EAAE,GAAM,EAAE,KAAa,EAAA;AAC1D,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;YAC5B,GAAG;YACH,KAAK;AACL,YAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,KAAK,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK;AAC5E,SAAA,CAAC;IACJ;AAEU,IAAA,kBAAkB,CAAC,KAAa,EAAA;QACxC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,KAAK,UAAU,EAAE;YAC/C,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC;YACpC;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,gBAAA,MAAM,EAAE,WAAW;gBACnB,KAAK;AACL,gBAAA,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe;AACvC,aAAA,CAAC;QACJ;IACF;IAEU,UAAU,CAAC,IAAa,EAAE,SAAoB,EAAA;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACvD;8GA7EW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClD3B,gjMAwJA,EAAA,MAAA,EAAA,CAAA,0qCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9GI,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,cAAc,moCACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGR,cAAc,EAAA,UAAA,EAAA,CAAA;kBAb1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EAGZ;wBACP,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,wBAAwB;wBACxB,cAAc;wBACd;AACD,qBAAA,EAAA,QAAA,EAAA,gjMAAA,EAAA,MAAA,EAAA,CAAA,0qCAAA,CAAA,EAAA;;;ME1CU,aAAa,CAAA;AAH1B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACrD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AASrD,IAAA;AAPQ,IAAA,UAAU,CAAC,YAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;IACxC;IAEO,SAAS,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IACvC;8GAVW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCSY,qBAAqB,CAAA;AATlC,IAAA,WAAA,GAAA;AAUY,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAChD,IAAA;8GAFY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdlC,4GAIC,EAAA,MAAA,EAAA,CAAA,0JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKG,wBAAwB,gOADxB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAMA,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EACpB;wBACP,SAAS;wBACT;AACD,qBAAA,EAAA,QAAA,EAAA,4GAAA,EAAA,MAAA,EAAA,CAAA,0JAAA,CAAA,EAAA;;;MEHU,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAqB;AAChD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAKjD,IAAA;AAHQ,IAAA,SAAS,CAAC,KAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;8GANW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACNM,MAAM,iBAAiB,GAAoC;AAChE,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,GAAG,EAAE,+BAA+B;AACpC,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,GAAG,EAAE,eAAe;AACpB,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,GAAG,EAAE,kBAAkB;AACvB,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,GAAG,EAAE,kBAAkB;AACvB,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,GAAG,EAAE,OAAO;AACZ,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,GAAG,EAAE,oBAAoB;AACzB,IAAA,GAAG,EAAE,oBAAoB;AACzB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,GAAG,EAAE,kBAAkB;AACvB,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,GAAG,EAAE,oBAAoB;AACzB,IAAA,GAAG,EAAE,gBAAgB;AACrB,IAAA,GAAG,EAAE,+BAA+B;AACpC,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,GAAG,EAAE,MAAM;AACX,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,GAAG,EAAE,wBAAwB;AAC7B,IAAA,GAAG,EAAE,uBAAuB;AAC5B,IAAA,GAAG,EAAE,oBAAoB;AACzB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,GAAG,EAAE,kBAAkB;AACvB,IAAA,GAAG,EAAE,uBAAuB;AAC5B,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,GAAG,EAAE,iCAAiC;AACtC,IAAA,GAAG,EAAE,+BAA+B;AACpC,IAAA,GAAG,EAAE,uBAAuB;AAC5B,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,4BAA4B;AACjC,IAAA,GAAG,EAAE,yBAAyB;AAC9B,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,GAAG,EAAE,eAAe;AACpB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,GAAG,EAAE;CACN;AAEM,MAAM,iBAAiB,GAAW;AACvC,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,iBAAiB,EAAE,IAAI;AACxB,KAAA;AACD,IAAA,YAAY,EAAE;CACf;AAEM,MAAM,mBAAmB,GAAW;AACzC,IAAA,YAAY,EAAE;CACf;AAEM,MAAM,iBAAiB,GAAW;AACvC,IAAA,OAAO,EAAE;AACP,QAAA,cAAc,EAAE,0BAA0B;AAC1C,QAAA,iBAAiB,EAAE,IAAI;AACxB,KAAA;AACD,IAAA,YAAY,EAAE,MAAM;CACrB;AAEM,MAAM,kBAAkB,GAAW;AACxC,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,iBAAiB,EAAE,IAAI;AACvB,QAAA,cAAc,EAAE,MAAM;AACvB,KAAA;AACD,IAAA,YAAY,EAAE,MAAM;CACrB;AAEM,MAAM,+BAA+B,GAAW;AACrD,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,iBAAiB,EAAE,IAAI;AACvB,QAAA,iBAAiB,EAAE,MAAM;AAC1B,KAAA;AACD,IAAA,YAAY,EAAE;CACf;;MCtFY,mBAAmB,CAAA;AAG9B,IAAA,WAAA,CAA4C,KAAwB,EAAA;QAAxB,IAAA,CAAA,KAAK,GAAL,KAAK;QAFvC,IAAA,CAAA,eAAe,GAAG,iBAAiB;IAE2B;AAH7D,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAGV,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAHxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBhC,0aAYqB,EAAA,MAAA,EAAA,CAAA,iQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFjB,sBAAsB,2IACtB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAKZ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB;wBACP,sBAAsB;wBACtB;AACD,qBAAA,EAAA,QAAA,EAAA,0aAAA,EAAA,MAAA,EAAA,CAAA,iQAAA,CAAA,EAAA;;0BAOY,MAAM;2BAAC,eAAe;;;MEFxB,qBAAqB,CAAA;AAKhC,IAAA,WAAA,GAAA;AAJQ,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAE;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAGhC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAsB,KAAI;AAC5D,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QACrB,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,SAAS,CAAC,KAAwB,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACpC,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,IAAI,kBAAkB,EAAE;AACzC,SAAA,CAAC;IACJ;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;IACrC;8GA1BW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBlC,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDcI,eAAe,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGN,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EAGpB;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA;;;AEfH;;AAEG;;ACFH;;AAEG;;;;"}
|
|
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[];\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","<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]=\"config().options?.length\">\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 (config().options?.length) {\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 (config().options?.length) {\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 config().options; 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 (config().options?.length) {\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 config().options; 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ferhaps/easy-ui-lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "21.0.2",
|
|
4
4
|
"description": "Angular UI components, directives and pipes library with Angular Material",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
},
|
|
32
32
|
"sideEffects": false,
|
|
33
33
|
"module": "fesm2022/ferhaps-easy-ui-lib.mjs",
|
|
34
|
-
"typings": "
|
|
34
|
+
"typings": "types/ferhaps-easy-ui-lib.d.ts",
|
|
35
35
|
"exports": {
|
|
36
36
|
"./package.json": {
|
|
37
37
|
"default": "./package.json"
|
|
38
38
|
},
|
|
39
39
|
".": {
|
|
40
|
-
"types": "./
|
|
40
|
+
"types": "./types/ferhaps-easy-ui-lib.d.ts",
|
|
41
41
|
"default": "./fesm2022/ferhaps-easy-ui-lib.mjs"
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -3,6 +3,7 @@ import { PipeTransform, TemplateRef, OnInit, ElementRef, OnDestroy } from '@angu
|
|
|
3
3
|
import { Validator, AbstractControl, ValidationErrors, FormGroup } from '@angular/forms';
|
|
4
4
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
5
5
|
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
6
|
+
import { MatCheckboxChange } from '@angular/material/checkbox';
|
|
6
7
|
import * as rxjs from 'rxjs';
|
|
7
8
|
|
|
8
9
|
declare class SnakeCaseParserPipe implements PipeTransform {
|
|
@@ -21,7 +22,7 @@ declare class FieldsMatchValidatorDirective implements Validator {
|
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
declare class PhoneValidationDirective {
|
|
24
|
-
onInput(event:
|
|
25
|
+
onInput(event: Event): void;
|
|
25
26
|
onKeyDown(event: KeyboardEvent): void;
|
|
26
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<PhoneValidationDirective, never>;
|
|
27
28
|
static ɵdir: i0.ɵɵDirectiveDeclaration<PhoneValidationDirective, "[libPhoneValidation]", never, {}, {}, never, never, true, never>;
|
|
@@ -101,16 +102,18 @@ type ClassRule<T = any> = {
|
|
|
101
102
|
declare class TableComponent<T = any> {
|
|
102
103
|
config: i0.InputSignal<Config<T>>;
|
|
103
104
|
protected action: i0.OutputEmitterRef<TableEvent<T>>;
|
|
104
|
-
scrollContainer: i0.Signal<ElementRef<HTMLDivElement>>;
|
|
105
|
+
protected scrollContainer: i0.Signal<ElementRef<HTMLDivElement>>;
|
|
105
106
|
selectedRowIndex: number;
|
|
106
107
|
selectedIndices: Set<number>;
|
|
107
108
|
protected hoverRowIndex: number;
|
|
108
109
|
protected currentSortColumn: number;
|
|
109
110
|
protected getClass(obj: T, prop: keyof T): string;
|
|
110
111
|
protected drop(event: CdkDragDrop<T[]>): void;
|
|
111
|
-
protected onScroll(): void;
|
|
112
|
+
protected onScroll(e: Event): void;
|
|
112
113
|
protected onRowClick(event: Event, obj: T, index: number): void;
|
|
113
114
|
protected selectOption(оption: string, obj: T, index: number): void;
|
|
115
|
+
protected areAllRowsSelected(): boolean;
|
|
116
|
+
protected toggleSelectAll(event: MatCheckboxChange): void;
|
|
114
117
|
protected toggleRowSelection(index: number): void;
|
|
115
118
|
protected sortByProp(prop: keyof T, sortState: SortState): void;
|
|
116
119
|
static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
|