@agentsmith.bgd/as-lib-generic-table 0.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 ADDED
@@ -0,0 +1,24 @@
1
+ # AsLibGenericTable
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.1.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project as-lib-generic-table` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project as-lib-generic-table`.
8
+ > Note: Don't forget to add `--project as-lib-generic-table` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build as-lib-generic-table` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build as-lib-generic-table`, go to the dist folder `cd dist/as-lib-generic-table` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test as-lib-generic-table` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnRzbWl0aC5iZ2QtYXMtbGliLWdlbmVyaWMtdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hcy1saWItZ2VuZXJpYy10YWJsZS9zcmMvYWdlbnRzbWl0aC5iZ2QtYXMtbGliLWdlbmVyaWMtdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,205 @@
1
+ import { Component, effect, Inject, input, output } from '@angular/core';
2
+ import { debounceTime, distinctUntilChanged, Subject } from "rxjs";
3
+ import { BsModalService } from "ngx-bootstrap/modal";
4
+ import { CommonModule } from "@angular/common";
5
+ import { FormsModule } from "@angular/forms";
6
+ import { TooltipDirective } from "./directives/tooltip/tooltip.directive";
7
+ import { TooltipComponent } from "./directives/component/tooltip.component";
8
+ import { AsLibPaginationComponent } from "@agentsmith.bgd/as-lib-pagination";
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common";
11
+ import * as i2 from "@angular/forms";
12
+ export class AsLibGenericTableComponent {
13
+ loading = input(false);
14
+ striped = input(false);
15
+ bordered = input(false);
16
+ hovered = input(false);
17
+ enableSearch = input(true);
18
+ rowCounter = input(false);
19
+ enableLog = input(false);
20
+ perPage = input(10);
21
+ tableHead = input([]);
22
+ tableData = input([]);
23
+ tableHeadStorage = input('');
24
+ perPageValues = input([10, 20, 50, 100]);
25
+ headerActions = input([]);
26
+ rowActions = input([]);
27
+ tableStyle = input('');
28
+ headStyle = input('table-default');
29
+ paginationAlignment = input('justify-content-end');
30
+ totalItems = input(0);
31
+ page = input(0);
32
+ filterParamsChanged = output();
33
+ editRow = output();
34
+ sliderClicked = output();
35
+ headerActionClicked = output();
36
+ rowActionClicked = output();
37
+ tableHeadChanged = output();
38
+ bsModalRef;
39
+ searchUpdate = new Subject();
40
+ search = '';
41
+ totalPages = 0;
42
+ counter = 0;
43
+ sort;
44
+ sortOrder = 'asc';
45
+ modalService = Inject(BsModalService);
46
+ constructor() {
47
+ effect(() => {
48
+ console.log(`The count is:`, this.totalItems(), this.page());
49
+ this.counter = this.page() * this.perPage() + 1;
50
+ this.calculatePages();
51
+ });
52
+ }
53
+ ngOnInit() {
54
+ if (this.tableHeadStorage()) {
55
+ const storage = localStorage.getItem(this.tableHeadStorage());
56
+ if (storage) {
57
+ const hidden = JSON.parse(storage) || [];
58
+ this.tableHead().forEach(t => (t.hidden = hidden.includes(t.key)));
59
+ }
60
+ else {
61
+ localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));
62
+ }
63
+ }
64
+ this.sort = this.tableHead()[0].key;
65
+ this.log('totalPages', this.totalPages);
66
+ this.log('Table head', this.tableHead());
67
+ this.log('Table data', this.tableData());
68
+ this.log('Row actions', this.rowActions());
69
+ this.searchUpdate.pipe(debounceTime(500), distinctUntilChanged()).subscribe(_ => {
70
+ this.log('search', this.search);
71
+ const emitValue = {
72
+ page: 0,
73
+ sort: this.sort,
74
+ order: this.sortOrder,
75
+ perPage: this.perPage(),
76
+ searchString: this.search,
77
+ };
78
+ this.log('Search value change, sort values: ', emitValue);
79
+ this.filterParamsChanged.emit(emitValue);
80
+ });
81
+ if (!this.perPageValues().includes(this.perPage())) {
82
+ throw new Error('Per page value invalid');
83
+ }
84
+ this.log('Loading', this.loading());
85
+ }
86
+ /* eslint-disable @typescript-eslint/no-explicit-any */
87
+ openTableLayoutModal(tableHeadModal) {
88
+ this.log('Open layout');
89
+ this.bsModalRef = this.modalService.show(tableHeadModal, {
90
+ animated: true,
91
+ ignoreBackdropClick: true,
92
+ class: 'confirm-modal modal-sm',
93
+ initialState: {},
94
+ });
95
+ }
96
+ handleTHchange(key) {
97
+ this.log('change triggered', key);
98
+ this.tableHead().forEach(t => {
99
+ if (t.key === key) {
100
+ t.hidden = !t.hidden;
101
+ this.tableHeadStorage &&
102
+ localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));
103
+ }
104
+ });
105
+ }
106
+ tableSort(key) {
107
+ this.log('table sort key', key);
108
+ this.sort = key;
109
+ this.tableHead().forEach(h => {
110
+ if (h.key === key) {
111
+ if (h.sort === 'headerSortDown') {
112
+ this.sortOrder = 'desc';
113
+ h.sort = 'headerSortUp';
114
+ }
115
+ else {
116
+ h.sort = 'headerSortDown';
117
+ this.sortOrder = 'asc';
118
+ }
119
+ const emitValue = {
120
+ page: 0,
121
+ sort: this.sort,
122
+ order: this.sortOrder,
123
+ perPage: this.perPage(),
124
+ searchString: this.search,
125
+ };
126
+ this.log('Sort changed, filter values: ', emitValue);
127
+ this.filterParamsChanged.emit(emitValue);
128
+ }
129
+ else {
130
+ h.sort = '';
131
+ }
132
+ });
133
+ }
134
+ changePerPage($event) {
135
+ const perPage = parseInt($event.target.value, 10) || 25;
136
+ //this.perPage = perPage;
137
+ // this.page = 0;
138
+ this.log('changePerPage', perPage);
139
+ this.calculatePages();
140
+ this.filterParamsChanged.emit({
141
+ page: 0,
142
+ sort: this.sort,
143
+ order: this.sortOrder,
144
+ perPage: perPage,
145
+ searchString: this.search,
146
+ });
147
+ }
148
+ log(value, ...rest) {
149
+ if (this.enableLog() || localStorage.getItem('loggerEnable')) {
150
+ console.log(`AS Dynamic Table -> ${value}`, ...rest);
151
+ }
152
+ }
153
+ emitRow(row) {
154
+ this.log('edit row', row);
155
+ this.editRow.emit(row);
156
+ }
157
+ headerAction(actionName) {
158
+ this.log('Header action', actionName);
159
+ this.headerActionClicked.emit(actionName);
160
+ }
161
+ rowAction(action, value) {
162
+ this.log('Row action', action, value);
163
+ this.rowActionClicked.emit({ action, value });
164
+ }
165
+ pageChange(page) {
166
+ const emitValue = {
167
+ page,
168
+ sort: this.sort,
169
+ order: this.sortOrder,
170
+ perPage: this.perPage(),
171
+ searchString: this.search,
172
+ };
173
+ this.log('Page change, filter values: ', emitValue);
174
+ this.filterParamsChanged.emit(emitValue);
175
+ }
176
+ modalClose() {
177
+ const hiddenKeys = this.tableHead().filter(t => t.hidden).map(t => t.key);
178
+ this.log('Modal closed, saved keys', hiddenKeys);
179
+ this.tableHeadChanged.emit(hiddenKeys);
180
+ this.bsModalRef.hide();
181
+ }
182
+ //
183
+ resetValues() {
184
+ this.tableHeadChanged.emit(null);
185
+ this.bsModalRef.hide();
186
+ }
187
+ //
188
+ calculatePages() {
189
+ this.totalPages = Math.ceil(this.totalItems() / this.perPage());
190
+ this.log('total items/pages', this.totalItems(), this.totalPages);
191
+ }
192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
193
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.1", type: AsLibGenericTableComponent, isStandalone: true, selector: "as-lib-generic-table", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, hovered: { classPropertyName: "hovered", publicName: "hovered", isSignal: true, isRequired: false, transformFunction: null }, enableSearch: { classPropertyName: "enableSearch", publicName: "enableSearch", isSignal: true, isRequired: false, transformFunction: null }, rowCounter: { classPropertyName: "rowCounter", publicName: "rowCounter", isSignal: true, isRequired: false, transformFunction: null }, enableLog: { classPropertyName: "enableLog", publicName: "enableLog", isSignal: true, isRequired: false, transformFunction: null }, perPage: { classPropertyName: "perPage", publicName: "perPage", isSignal: true, isRequired: false, transformFunction: null }, tableHead: { classPropertyName: "tableHead", publicName: "tableHead", isSignal: true, isRequired: false, transformFunction: null }, tableData: { classPropertyName: "tableData", publicName: "tableData", isSignal: true, isRequired: false, transformFunction: null }, tableHeadStorage: { classPropertyName: "tableHeadStorage", publicName: "tableHeadStorage", isSignal: true, isRequired: false, transformFunction: null }, perPageValues: { classPropertyName: "perPageValues", publicName: "perPageValues", isSignal: true, isRequired: false, transformFunction: null }, headerActions: { classPropertyName: "headerActions", publicName: "headerActions", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, headStyle: { classPropertyName: "headStyle", publicName: "headStyle", isSignal: true, isRequired: false, transformFunction: null }, paginationAlignment: { classPropertyName: "paginationAlignment", publicName: "paginationAlignment", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterParamsChanged: "filterParamsChanged", editRow: "editRow", sliderClicked: "sliderClicked", headerActionClicked: "headerActionClicked", rowActionClicked: "rowActionClicked", tableHeadChanged: "tableHeadChanged" }, ngImport: i0, template: "<p *ngIf=\"loading()\">\n\t<img\n\t\t*ngIf=\"loading()\"\n\t\tclass=\"pl-3\"\n\t\tsrc=\"data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==\"\n\t/>\n</p>\n<div\n\t[ngClass]=\"{\n\t\tloading: loading()\n\t}\"\n\tclass=\"dynamic-table\"\n>\n\t<div class=\"row mb-3\">\n\t\t<div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\">\n\t\t\t<div *ngIf=\"perPageValues() && perPageValues().length\" class=\"d-block d-md-inline-flex me-0 me-md-3\">\n\t\t\t\t<div class=\"table-length\">\n\t\t\t\t\t<label\n\t\t\t\t\t\t>Show\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t(change)=\"changePerPage($event)\"\n\t\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\t\tclass=\"form-select form-select-sm\"\n\t\t\t\t\t\t\tname=\"data-table-combine_length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option *ngFor=\"let perp of perPageValues()\" [selected]=\"perPage() === perp\" value=\"{{ perp }}\">{{ perp }}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\tentries</label\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"headerActions() && headerActions().length\" class=\"d-block d-inline-flex\">\n\t\t\t\t<div class=\"dt-buttons btn-group flex-wrap\">\n\t\t\t\t\t<ng-container *ngFor=\"let action of headerActions()\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t(click)=\"headerAction(action.actionName)\"\n\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\tid=\"header-action-{{ action.actionName }}\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i> {{ action.label }}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"enableSearch()\" class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n\t\t\t<div class=\"table-search\">\n\t\t\t\t<label\n\t\t\t\t\t>Search:\n\t\t\t\t\t<input\n\t\t\t\t\t\t(ngModelChange)=\"this.searchUpdate.next($event)\"\n\t\t\t\t\t\t[(ngModel)]=\"search\"\n\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\tclass=\"form-control form-control-sm\"\n\t\t\t\t\t\tid=\"table-search\"\n\t\t\t\t\t\tplaceholder=\"\"\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t/></label>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"table-responsive\">\n\t\t<table\n\t\t\t[ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n\t\t\tclass=\"table table-fixed align-middle {{ tableStyle() }}\"\n\t\t>\n\t\t\t<thead [class]=\"headStyle()\">\n\t\t\t\t<tr>\n\t\t\t\t\t<th *ngIf=\"rowCounter\" class=\"text-end small-column\"> Nr.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t(click)=\"!head.notSortable && tableSort(head.key)\"\n\t\t\t\t\t\t\t*ngIf=\"!head.hidden\"\n\t\t\t\t\t\t\t[ngClass]=\"head.sort\"\n\t\t\t\t\t\t\tclass=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n\t\t\t\t\t\t\t\t<span class=\"fa\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<th *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"header small-column text-center p-0\" data-width=\"50\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t(click)=\"openTableLayoutModal(tableHeadModal)\"\n\t\t\t\t\t\t\t*ngIf=\"tableHeadStorage()\"\n\t\t\t\t\t\t\taria-controls=\"basic-link-dropdown\"\n\t\t\t\t\t\t\tclass=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n\t\t\t\t\t\t></a>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr *ngFor=\"let row of tableData(); let i = index\" class=\"{{ row['rowClass'] || '' }}\">\n\t\t\t\t\t<th *ngIf=\"rowCounter()\" class=\"text-end\"> {{ i + counter }}.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<td *ngIf=\"!head.hidden\" class=\"header text-nowrap {{ head.cellAlign }}\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'select'\">\n\t\t\t\t\t\t\t\t<input class=\"select\" type=\"checkbox\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!head.type\">\n\t\t\t\t\t\t\t\t{{ row[head.key] }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'badge'\">\n\t\t\t\t\t\t\t\t<span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'date'\">\n\t\t\t\t\t\t\t\t{{ row[head.key] | date: \"dd.MM.yyyy HH:mm:ss\" }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'slider'\">\n\t\t\t\t\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t(change)=\"sliderClicked.emit(row)\"\n\t\t\t\t\t\t\t\t\t\t[checked]=\"row[head.key]\"\n\t\t\t\t\t\t\t\t\t\tclass=\"switched\"\n\t\t\t\t\t\t\t\t\t\tid=\"check-{{ row['id'] }}\"\n\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<label for=\"check-{{ row['id'] }}\"></label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'input'\">\n\t\t\t\t\t\t\t\t<input [value]=\"row[head.key]\" type=\"text\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<td *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"small-column\">\n\t\t\t\t\t\t<div class=\"menu text-end\">\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActions()\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t(click)=\"rowAction(action.actionName, row)\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\t\t\ttooltip=\"{{ action.label }}\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i></span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<as-lib-pagination\n\t\t\t(pageChange)=\"pageChange($event)\"\n\t\t\t*ngIf=\"totalPages > 1\"\n\t\t\t[align]=\"paginationAlignment()\"\n\t\t\t[enableLog]=\"enableLog()\"\n\t\t\t[first]=\"page() === 0\"\n\t\t\t[last]=\"page() === totalPages - 1\"\n\t\t\t[page]=\"page()\"\n\t\t\t[totalPages]=\"totalPages\"\n\t\t></as-lib-pagination>\n\t</div>\n\t<ng-template #tableHeadModal>\n\t\t<div class=\"modal-header\">\n\t\t\t<h4 class=\"modal-title pull-left\">Edit table header</h4>\n\t\t\t<button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n\t\t\t\t<span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"modal-body\">\n\t\t\t<ng-container *ngFor=\"let td of tableHead()\">\n\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t<input\n\t\t\t\t\t\t(change)=\"handleTHchange(td.key)\"\n\t\t\t\t\t\t[checked]=\"!td.hidden\"\n\t\t\t\t\t\t[disabled]=\"td.mandatory\"\n\t\t\t\t\t\t[readOnly]=\"td.mandatory\"\n\t\t\t\t\t\tclass=\"form-check-input\"\n\t\t\t\t\t\tid=\"{{ td.key }}\"\n\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<small class=\"small text-muted pt-2\">* Mandatory field for the view</small>\n\t\t</div>\n\t\t<div class=\"modal-footer\">\n\t\t\t<button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">Reset</button>\n\t\t\t<button (click)=\"modalClose()\" class=\"btn btn-primary\" translate=\"CLOSE\" type=\"button\">Close</button>\n\t\t</div>\n\t</ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip]", inputs: ["tooltip"] }, { kind: "component", type: AsLibPaginationComponent, selector: "as-lib-pagination", inputs: ["first", "last", "align", "enableLog", "totalPages", "page"], outputs: ["pageChange"] }] });
194
+ }
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableComponent, decorators: [{
196
+ type: Component,
197
+ args: [{ selector: 'as-lib-generic-table', standalone: true, imports: [
198
+ CommonModule,
199
+ FormsModule,
200
+ TooltipDirective,
201
+ TooltipComponent,
202
+ AsLibPaginationComponent
203
+ ], template: "<p *ngIf=\"loading()\">\n\t<img\n\t\t*ngIf=\"loading()\"\n\t\tclass=\"pl-3\"\n\t\tsrc=\"data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==\"\n\t/>\n</p>\n<div\n\t[ngClass]=\"{\n\t\tloading: loading()\n\t}\"\n\tclass=\"dynamic-table\"\n>\n\t<div class=\"row mb-3\">\n\t\t<div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\">\n\t\t\t<div *ngIf=\"perPageValues() && perPageValues().length\" class=\"d-block d-md-inline-flex me-0 me-md-3\">\n\t\t\t\t<div class=\"table-length\">\n\t\t\t\t\t<label\n\t\t\t\t\t\t>Show\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t(change)=\"changePerPage($event)\"\n\t\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\t\tclass=\"form-select form-select-sm\"\n\t\t\t\t\t\t\tname=\"data-table-combine_length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option *ngFor=\"let perp of perPageValues()\" [selected]=\"perPage() === perp\" value=\"{{ perp }}\">{{ perp }}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\tentries</label\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"headerActions() && headerActions().length\" class=\"d-block d-inline-flex\">\n\t\t\t\t<div class=\"dt-buttons btn-group flex-wrap\">\n\t\t\t\t\t<ng-container *ngFor=\"let action of headerActions()\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t(click)=\"headerAction(action.actionName)\"\n\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\tid=\"header-action-{{ action.actionName }}\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i> {{ action.label }}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"enableSearch()\" class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n\t\t\t<div class=\"table-search\">\n\t\t\t\t<label\n\t\t\t\t\t>Search:\n\t\t\t\t\t<input\n\t\t\t\t\t\t(ngModelChange)=\"this.searchUpdate.next($event)\"\n\t\t\t\t\t\t[(ngModel)]=\"search\"\n\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\tclass=\"form-control form-control-sm\"\n\t\t\t\t\t\tid=\"table-search\"\n\t\t\t\t\t\tplaceholder=\"\"\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t/></label>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"table-responsive\">\n\t\t<table\n\t\t\t[ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n\t\t\tclass=\"table table-fixed align-middle {{ tableStyle() }}\"\n\t\t>\n\t\t\t<thead [class]=\"headStyle()\">\n\t\t\t\t<tr>\n\t\t\t\t\t<th *ngIf=\"rowCounter\" class=\"text-end small-column\"> Nr.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t(click)=\"!head.notSortable && tableSort(head.key)\"\n\t\t\t\t\t\t\t*ngIf=\"!head.hidden\"\n\t\t\t\t\t\t\t[ngClass]=\"head.sort\"\n\t\t\t\t\t\t\tclass=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n\t\t\t\t\t\t\t\t<span class=\"fa\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<th *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"header small-column text-center p-0\" data-width=\"50\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t(click)=\"openTableLayoutModal(tableHeadModal)\"\n\t\t\t\t\t\t\t*ngIf=\"tableHeadStorage()\"\n\t\t\t\t\t\t\taria-controls=\"basic-link-dropdown\"\n\t\t\t\t\t\t\tclass=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n\t\t\t\t\t\t></a>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr *ngFor=\"let row of tableData(); let i = index\" class=\"{{ row['rowClass'] || '' }}\">\n\t\t\t\t\t<th *ngIf=\"rowCounter()\" class=\"text-end\"> {{ i + counter }}.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<td *ngIf=\"!head.hidden\" class=\"header text-nowrap {{ head.cellAlign }}\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'select'\">\n\t\t\t\t\t\t\t\t<input class=\"select\" type=\"checkbox\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!head.type\">\n\t\t\t\t\t\t\t\t{{ row[head.key] }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'badge'\">\n\t\t\t\t\t\t\t\t<span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'date'\">\n\t\t\t\t\t\t\t\t{{ row[head.key] | date: \"dd.MM.yyyy HH:mm:ss\" }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'slider'\">\n\t\t\t\t\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t(change)=\"sliderClicked.emit(row)\"\n\t\t\t\t\t\t\t\t\t\t[checked]=\"row[head.key]\"\n\t\t\t\t\t\t\t\t\t\tclass=\"switched\"\n\t\t\t\t\t\t\t\t\t\tid=\"check-{{ row['id'] }}\"\n\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<label for=\"check-{{ row['id'] }}\"></label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'input'\">\n\t\t\t\t\t\t\t\t<input [value]=\"row[head.key]\" type=\"text\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<td *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"small-column\">\n\t\t\t\t\t\t<div class=\"menu text-end\">\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActions()\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t(click)=\"rowAction(action.actionName, row)\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\t\t\ttooltip=\"{{ action.label }}\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i></span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<as-lib-pagination\n\t\t\t(pageChange)=\"pageChange($event)\"\n\t\t\t*ngIf=\"totalPages > 1\"\n\t\t\t[align]=\"paginationAlignment()\"\n\t\t\t[enableLog]=\"enableLog()\"\n\t\t\t[first]=\"page() === 0\"\n\t\t\t[last]=\"page() === totalPages - 1\"\n\t\t\t[page]=\"page()\"\n\t\t\t[totalPages]=\"totalPages\"\n\t\t></as-lib-pagination>\n\t</div>\n\t<ng-template #tableHeadModal>\n\t\t<div class=\"modal-header\">\n\t\t\t<h4 class=\"modal-title pull-left\">Edit table header</h4>\n\t\t\t<button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n\t\t\t\t<span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"modal-body\">\n\t\t\t<ng-container *ngFor=\"let td of tableHead()\">\n\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t<input\n\t\t\t\t\t\t(change)=\"handleTHchange(td.key)\"\n\t\t\t\t\t\t[checked]=\"!td.hidden\"\n\t\t\t\t\t\t[disabled]=\"td.mandatory\"\n\t\t\t\t\t\t[readOnly]=\"td.mandatory\"\n\t\t\t\t\t\tclass=\"form-check-input\"\n\t\t\t\t\t\tid=\"{{ td.key }}\"\n\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<small class=\"small text-muted pt-2\">* Mandatory field for the view</small>\n\t\t</div>\n\t\t<div class=\"modal-footer\">\n\t\t\t<button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">Reset</button>\n\t\t\t<button (click)=\"modalClose()\" class=\"btn btn-primary\" translate=\"CLOSE\" type=\"button\">Close</button>\n\t\t</div>\n\t</ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"] }]
204
+ }], ctorParameters: () => [] });
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXMtbGliLWdlbmVyaWMtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtbGliLWdlbmVyaWMtdGFibGUvc3JjL2xpYi9hcy1saWItZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcy1saWItZ2VuZXJpYy10YWJsZS9zcmMvbGliL2FzLWxpYi1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBYyxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7O0FBZTdFLE1BQU0sT0FBTywwQkFBMEI7SUFHckMsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixZQUFZLEdBQUcsS0FBSyxD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Z0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELEVBQUU7SUFDTSxjQUFjO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7dUdBOU5VLDBCQUEwQjsyRkFBMUIsMEJBQTBCLG0wRkN2QnZDLHN4UkFrTUEsdXVDRHBMSSxZQUFZLGdaQUNaLFdBQVcsNHpCQUNYLGdCQUFnQiwyRUFFaEIsd0JBQXdCOzsyRkFLZiwwQkFBMEI7a0JBYnRDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLHdCQUF3QjtxQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgSW5qZWN0LCBpbnB1dCwgT25Jbml0LCBvdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQWN0aW9uQnV0dG9uLCBJRmlsdGVyUGFyYW1zLCBJVGFibGVIZWFkIH0gZnJvbSBcIi4vZXhwb3J0c1wiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL21vZGFsXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvY29tcG9uZW50L3Rvb2x0aXAuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBc0xpYlBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tIFwiQGFnZW50c21pdGguYmdkL2FzLWxpYi1wYWdpbmF0aW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FzLWxpYi1nZW5lcmljLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxuICAgIFRvb2x0aXBDb21wb25lbnQsXG4gICAgQXNMaWJQYWdpbmF0aW9uQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hcy1saWItZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9hcy1saWItZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgQXNMaWJHZW5lcmljVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cbiAgbG9hZGluZyA9IGlucHV0KGZhbHNlKTtcbiAgc3RyaXBlZCA9IGlucHV0KGZhbHNlKTtcbiAgYm9yZGVyZWQgPSBpbnB1dChmYWxzZSk7XG4gIGhvdmVyZWQgPSBpbnB1dChmYWxzZSk7XG4gIGVuYWJsZVNlYXJjaCA9IGlucHV0KHRydWUpO1xuICByb3dDb3VudGVyID0gaW5wdXQoZmFsc2UpO1xuICBlbmFibGVMb2cgPSBpbnB1dChmYWxzZSk7XG4gIHBlclBhZ2UgPSBpbnB1dCgxMCk7XG5cbiAgdGFibGVIZWFkID0gaW5wdXQ8SVRhYmxlSGVhZFtdPihbXSk7XG5cbiAgdGFibGVEYXRhID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgbmV2ZXI+W10+KFtdKTtcblxuICB0YWJsZUhlYWRTdG9yYWdlID0gaW5wdXQ8c3RyaW5nPignJyk7XG5cbiAgcGVyUGFnZVZhbHVlcyA9IGlucHV0PG51bWJlcltdPihbMTAsIDIwLCA1MCwgMTAwXSk7XG5cbiAgaGVhZGVyQWN0aW9ucyA9IGlucHV0PElBY3Rpb25CdXR0b25bXT4oW10pO1xuXG4gIHJvd0FjdGlvbnMgPSBpbnB1dDxJQWN0aW9uQnV0dG9uW10+KFtdKTtcblxuICB0YWJsZVN0eWxlID0gaW5wdXQ8JycgfCAndGFibGUtbGlnaHQnIHwgJ3RhYmxlLWRhcmsnPignJyk7XG5cbiAgaGVhZFN0eWxlID0gaW5wdXQ8XG4gICAgfCAndGFibGUtZGVmYXVsdCdcbiAgICB8ICd0YWJsZS1wcmltYXJ5J1xuICAgIHwgJ3RhYmxlLXNlY29uZGFyeSdcbiAgICB8ICd0YWJsZS1zdWNjZXNzJ1xuICAgIHwgJ3RhYmxlLWRhbmdlcidcbiAgICB8ICd0YWJsZS13YXJuaW5nJ1xuICAgIHwgJ3RhYmxlLWluZm8nXG4gICAgfCAndGFibGUtbGlnaHQnXG4gICAgfCAndGFibGUtZGFyayc+KCd0YWJsZS1kZWZhdWx0Jyk7XG4gIHBhZ2luYXRpb25BbGlnbm1lbnQgPSBpbnB1dDwnJyB8ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyB8ICdqdXN0aWZ5LWNvbnRlbnQtZW5kJz4oJ2p1c3RpZnktY29udGVudC1lbmQnKTtcblxuICB0b3RhbEl0ZW1zID0gaW5wdXQoMCk7XG5cbiAgcGFnZSA9IGlucHV0KDApO1xuXG4gIGZpbHRlclBhcmFtc0NoYW5nZWQgPSBvdXRwdXQ8SUZpbHRlclBhcmFtcz4oKTtcblxuICBlZGl0Um93ID0gb3V0cHV0PFJlY29yZDxzdHJpbmcsIG5ldmVyPj4oKTtcblxuICBzbGlkZXJDbGlja2VkID0gb3V0cHV0PFJlY29yZDxzdHJpbmcsIG5ldmVyPj4oKTtcblxuICBoZWFkZXJBY3Rpb25DbGlja2VkID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICByb3dBY3Rpb25DbGlja2VkID0gb3V0cHV0PHsgYWN0aW9uOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICB0YWJsZUhlYWRDaGFuZ2VkID0gb3V0cHV0PHN0cmluZ1tdIHwgbnVsbD4oKTtcblxuXG4gIGJzTW9kYWxSZWYhOiBCc01vZGFsUmVmO1xuICBzZWFyY2hVcGRhdGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHNlYXJjaCA9ICcnO1xuICB0b3RhbFBhZ2VzID0gMDtcbiAgY291bnRlciA9IDA7XG4gIHByaXZhdGUgc29ydCE6IHN0cmluZztcbiAgcHJpdmF0ZSBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XG5cbiAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlID0gSW5qZWN0KEJzTW9kYWxTZXJ2aWNlKVxuXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGBUaGUgY291bnQgaXM6YCwgdGhpcy50b3RhbEl0ZW1zKCksIHRoaXMucGFnZSgpKTtcbiAgICAgIHRoaXMuY291bnRlciA9IHRoaXMucGFnZSgpICogdGhpcy5wZXJQYWdlKCkgKyAxXG4gICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJsZUhlYWRTdG9yYWdlKCkpIHtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnRhYmxlSGVhZFN0b3JhZ2UoKSk7XG4gICAgICBpZiAoc3RvcmFnZSkge1xuICAgICAgICBjb25zdCBoaWRkZW46IHN0cmluZ1tdID0gKEpTT04ucGFyc2Uoc3RvcmFnZSkgYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgICAgICB0aGlzLnRhYmxlSGVhZCgpLmZvckVhY2godCA9PiAodC5oaWRkZW4gPSBoaWRkZW4uaW5jbHVkZXModC5rZXkpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRhYmxlSGVhZFN0b3JhZ2UoKSwgSlNPTi5zdHJpbmdpZnkodGhpcy50YWJsZUhlYWQoKS5maWx0ZXIodCA9PiB0LmhpZGRlbikubWFwKHQgPT4gdC5rZXkpKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc29ydCA9IHRoaXMudGFibGVIZWFkKClbMF0ua2V5O1xuICAgIHRoaXMubG9nKCd0b3RhbFBhZ2VzJywgdGhpcy50b3RhbFBhZ2VzKTtcbiAgICB0aGlzLmxvZygnVGFibGUgaGVhZCcsIHRoaXMudGFibGVIZWFkKCkpO1xuICAgIHRoaXMubG9nKCdUYWJsZSBkYXRhJywgdGhpcy50YWJsZURhdGEoKSk7XG4gICAgdGhpcy5sb2coJ1JvdyBhY3Rpb25zJywgdGhpcy5yb3dBY3Rpb25zKCkpO1xuICAgIHRoaXMuc2VhcmNoVXBkYXRlLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZShfID0+IHtcbiAgICAgIHRoaXMubG9nKCdzZWFyY2gnLCB0aGlzLnNlYXJjaCk7XG4gICAgICBjb25zdCBlbWl0VmFsdWU6IElGaWx0ZXJQYXJhbXMgPSB7XG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICAgIHNvcnQ6IHRoaXMuc29ydCxcbiAgICAgICAgb3JkZXI6IHRoaXMuc29ydE9yZGVyLFxuICAgICAgICBwZXJQYWdlOiB0aGlzLnBlclBhZ2UoKSxcbiAgICAgICAgc2VhcmNoU3RyaW5nOiB0aGlzLnNlYXJjaCxcbiAgICAgIH07XG4gICAgICB0aGlzLmxvZygnU2VhcmNoIHZhbHVlIGNoYW5nZSwgc29ydCB2YWx1ZXM6ICcsIGVtaXRWYWx1ZSk7XG4gICAgICB0aGlzLmZpbHRlclBhcmFtc0NoYW5nZWQuZW1pdChlbWl0VmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLnBlclBhZ2VWYWx1ZXMoKS5pbmNsdWRlcyh0aGlzLnBlclBhZ2UoKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGVyIHBhZ2UgdmFsdWUgaW52YWxpZCcpO1xuICAgIH1cbiAgICB0aGlzLmxvZygnTG9hZGluZycsIHRoaXMubG9hZGluZygpKTtcbiAgIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICBvcGVuVGFibGVMYXlvdXRNb2RhbCh0YWJsZUhlYWRNb2RhbDogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xuICAgIHRoaXMubG9nKCdPcGVuIGxheW91dCcpO1xuICAgIHRoaXMuYnNNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGFibGVIZWFkTW9kYWwsIHtcbiAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGNsYXNzOiAnY29uZmlybS1tb2RhbCBtb2RhbC1zbScsXG4gICAgICBpbml0aWFsU3RhdGU6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlVEhjaGFuZ2Uoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnY2hhbmdlIHRyaWdnZXJlZCcsIGtleSk7XG4gICAgdGhpcy50YWJsZUhlYWQoKS5mb3JFYWNoKHQgPT4ge1xuICAgICAgaWYgKHQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgdC5oaWRkZW4gPSAhdC5oaWRkZW47XG4gICAgICAgIHRoaXMudGFibGVIZWFkU3RvcmFnZSAmJlxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRhYmxlSGVhZFN0b3JhZ2UoKSwgSlNPTi5zdHJpbmdpZnkodGhpcy50YWJsZUhlYWQoKS5maWx0ZXIodCA9PiB0LmhpZGRlbikubWFwKHQgPT4gdC5rZXkpKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0YWJsZVNvcnQoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxvZygndGFibGUgc29ydCBrZXknLCBrZXkpO1xuICAgIHRoaXMuc29ydCA9IGtleTtcbiAgICB0aGlzLnRhYmxlSGVhZCgpLmZvckVhY2goaCA9PiB7XG4gICAgICBpZiAoaC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoaC5zb3J0ID09PSAnaGVhZGVyU29ydERvd24nKSB7XG4gICAgICAgICAgdGhpcy5zb3J0T3JkZXIgPSAnZGVzYyc7XG4gICAgICAgICAgaC5zb3J0ID0gJ2hlYWRlclNvcnRVcCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaC5zb3J0ID0gJ2hlYWRlclNvcnREb3duJztcbiAgICAgICAgICB0aGlzLnNvcnRPcmRlciA9ICdhc2MnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVtaXRWYWx1ZTogSUZpbHRlclBhcmFtcyA9IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydCxcbiAgICAgICAgICBvcmRlcjogdGhpcy5zb3J0T3JkZXIsXG4gICAgICAgICAgcGVyUGFnZTogdGhpcy5wZXJQYWdlKCksXG4gICAgICAgICAgc2VhcmNoU3RyaW5nOiB0aGlzLnNlYXJjaCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2coJ1NvcnQgY2hhbmdlZCwgZmlsdGVyIHZhbHVlczogJywgZW1pdFZhbHVlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXNDaGFuZ2VkLmVtaXQoZW1pdFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGguc29ydCA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlUGVyUGFnZSgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgcGVyUGFnZSA9IHBhcnNlSW50KCgkZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZSwgMTApIHx8IDI1O1xuICAgIC8vdGhpcy5wZXJQYWdlID0gcGVyUGFnZTtcbiAgICAvLyB0aGlzLnBhZ2UgPSAwO1xuICAgIHRoaXMubG9nKCdjaGFuZ2VQZXJQYWdlJywgcGVyUGFnZSk7XG4gICAgdGhpcy5jYWxjdWxhdGVQYWdlcygpO1xuICAgIHRoaXMuZmlsdGVyUGFyYW1zQ2hhbmdlZC5lbWl0KHtcbiAgICAgIHBhZ2U6IDAsXG4gICAgICBzb3J0OiB0aGlzLnNvcnQsXG4gICAgICBvcmRlcjogdGhpcy5zb3J0T3JkZXIsXG4gICAgICBwZXJQYWdlOiBwZXJQYWdlLFxuICAgICAgc2VhcmNoU3RyaW5nOiB0aGlzLnNlYXJjaCxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZyh2YWx1ZTogYW55LCAuLi5yZXN0OiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVuYWJsZUxvZygpIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dnZXJFbmFibGUnKSkge1xuICAgICAgY29uc29sZS5sb2coYEFTIER5bmFtaWMgVGFibGUgLT4gJHt2YWx1ZX1gLCAuLi5yZXN0KTtcbiAgICB9XG4gIH1cblxuICBlbWl0Um93KHJvdzogUmVjb3JkPHN0cmluZywgbmV2ZXI+KSB7XG4gICAgdGhpcy5sb2coJ2VkaXQgcm93Jywgcm93KTtcbiAgICB0aGlzLmVkaXRSb3cuZW1pdChyb3cpO1xuICB9XG5cbiAgaGVhZGVyQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubG9nKCdIZWFkZXIgYWN0aW9uJywgYWN0aW9uTmFtZSk7XG4gICAgdGhpcy5oZWFkZXJBY3Rpb25DbGlja2VkLmVtaXQoYWN0aW9uTmFtZSk7XG4gIH1cblxuICByb3dBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4pIHtcbiAgICB0aGlzLmxvZygnUm93IGFjdGlvbicsIGFjdGlvbiwgdmFsdWUpO1xuICAgIHRoaXMucm93QWN0aW9uQ2xpY2tlZC5lbWl0KHthY3Rpb24sIHZhbHVlfSk7XG4gIH1cblxuICBwYWdlQ2hhbmdlKHBhZ2U6IG51bWJlcikge1xuICAgIGNvbnN0IGVtaXRWYWx1ZTogSUZpbHRlclBhcmFtcyA9IHtcbiAgICAgIHBhZ2UsXG4gICAgICBzb3J0OiB0aGlzLnNvcnQsXG4gICAgICBvcmRlcjogdGhpcy5zb3J0T3JkZXIsXG4gICAgICBwZXJQYWdlOiB0aGlzLnBlclBhZ2UoKSxcbiAgICAgIHNlYXJjaFN0cmluZzogdGhpcy5zZWFyY2gsXG4gICAgfTtcbiAgICB0aGlzLmxvZygnUGFnZSBjaGFuZ2UsIGZpbHRlciB2YWx1ZXM6ICcsIGVtaXRWYWx1ZSk7XG4gICAgdGhpcy5maWx0ZXJQYXJhbXNDaGFuZ2VkLmVtaXQoZW1pdFZhbHVlKTtcbiAgfVxuXG4gIG1vZGFsQ2xvc2UoKSB7XG4gICAgY29uc3QgaGlkZGVuS2V5cyA9IHRoaXMudGFibGVIZWFkKCkuZmlsdGVyKHQgPT4gdC5oaWRkZW4pLm1hcCh0ID0+IHQua2V5KTtcbiAgICB0aGlzLmxvZygnTW9kYWwgY2xvc2VkLCBzYXZlZCBrZXlzJywgaGlkZGVuS2V5cyk7XG4gICAgdGhpcy50YWJsZUhlYWRDaGFuZ2VkLmVtaXQoaGlkZGVuS2V5cyk7XG4gICAgdGhpcy5ic01vZGFsUmVmLmhpZGUoKTtcbiAgfVxuXG4gIC8vXG4gIHJlc2V0VmFsdWVzKCkge1xuICAgIHRoaXMudGFibGVIZWFkQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICAvL1xuICBwcml2YXRlIGNhbGN1bGF0ZVBhZ2VzKCkge1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMoKSAvIHRoaXMucGVyUGFnZSgpKTtcbiAgICB0aGlzLmxvZygndG90YWwgaXRlbXMvcGFnZXMnLCB0aGlzLnRvdGFsSXRlbXMoKSwgdGhpcy50b3RhbFBhZ2VzKTtcbiAgfVxuXG5cbn1cbiIsIjxwICpuZ0lmPVwibG9hZGluZygpXCI+XG5cdDxpbWdcblx0XHQqbmdJZj1cImxvYWRpbmcoKVwiXG5cdFx0Y2xhc3M9XCJwbC0zXCJcblx0XHRzcmM9XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQVBJQUFQLy8vd0FBQU1MQ3drSkNRZ0FBQUdKaVlvS0NncEtTa2lIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ocERjbVZoZEdWa0lIZHBkR2dnWVdwaGVHeHZZV1F1YVc1bWJ3QWgrUVFKQ2dBQUFDd0FBQUFBRUFBUUFBQURNd2k2M1A0d3lrbHJFMk1JT2dnWm5BZE9tR1lKUmJFeHdyb1VtY0cyTG1ERXduSFFMVnNZT2QybUJ6a1lEQWRLYStkSUFBQWgrUVFKQ2dBQUFDd0FBQUFBRUFBUUFBQUROQWk2M1A1T2pDRWdHNFFNdTdEbWlrUnhRbEZVWURFWklHQk1SVnNhcUh3Y3RYWGY3V0VZQjRBZzF4amloa01ac2lVa0toSUFJZmtFQ1FvQUFBQXNBQUFBQUJBQUVBQUFBellJdWpJaks4cEJ5SkRNbEZZdkJvVmpIQTcwR1U3eFNVSmhtS3R3SFBBS3pMTzlITWFvS3dKWjdSZjhBWVBERHpLcFpCcWZ2d1FBSWZrRUNRb0FBQUFzQUFBQUFCQUFFQUFBQXpNSXVtSWxLOG95aHBIc25GWmZoWXVtQ1lVaERBUXhSSWRoSEJHcVJvS3cwUjhEWWxKZDh6MGZNRGdzR28vSXBISTVUQUFBSWZrRUNRb0FBQUFzQUFBQUFCQUFFQUFBQXpJSXVuSW5LMHJuWkJUd0dQTk1nUXdtZHNOZ1hHSlVsSVdFdVI1b1dVSXB6OHBBRUFNZTZUd2Z3eVlzR28vSXBGS1NBQUFoK1FRSkNnQUFBQ3dBQUFBQUVBQVFBQUFETXdpNklNS1FPUmZqZE9lODJwNHdHY2NjNENFdVFyYWR5bGVzb2pFTUJnc1VjMkc3c0RYM2xRR0JNTEFKaWJ1ZmJTbEtBQUFoK1FRSkNnQUFBQ3dBQUFBQUVBQVFBQUFETWdpNjNQN3dDUkhabkZWZG1nSHUybkZ3bFdDSTNXR2MzVFNXaFVGR3hUQVVrR0NidGdFTkJNSkFFSnN4Z01MV3pwRUFBQ0g1QkFrS0FBQUFMQUFBQUFBUUFCQUFBQU15Q0xyYy9qREtTYXRsUXRTY0tkY2VDQWpESUk3SGNRNEVNVENweXJDdVVCakNZUmdIVnRxbEFpQjFZaGlDbmxzUmtBQUFPd0FBQUFBQUFBQUFBQT09XCJcblx0Lz5cbjwvcD5cbjxkaXZcblx0W25nQ2xhc3NdPVwie1xuXHRcdGxvYWRpbmc6IGxvYWRpbmcoKVxuXHR9XCJcblx0Y2xhc3M9XCJkeW5hbWljLXRhYmxlXCJcbj5cblx0PGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG5cdFx0PGRpdiBjbGFzcz1cImNvbC1tZC03IGQtZmxleCBkLXNtLWZsZXggZC1tZC1ibG9jayBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTJcIj5cblx0XHRcdDxkaXYgKm5nSWY9XCJwZXJQYWdlVmFsdWVzKCkgJiYgcGVyUGFnZVZhbHVlcygpLmxlbmd0aFwiIGNsYXNzPVwiZC1ibG9jayBkLW1kLWlubGluZS1mbGV4IG1lLTAgbWUtbWQtM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtbGVuZ3RoXCI+XG5cdFx0XHRcdFx0PGxhYmVsXG5cdFx0XHRcdFx0XHQ+U2hvd1xuXHRcdFx0XHRcdFx0PHNlbGVjdFxuXHRcdFx0XHRcdFx0XHQoY2hhbmdlKT1cImNoYW5nZVBlclBhZ2UoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRcdGFyaWEtY29udHJvbHM9XCJkYXRhLXRhYmxlLWNvbWJpbmVcIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcblx0XHRcdFx0XHRcdFx0bmFtZT1cImRhdGEtdGFibGUtY29tYmluZV9sZW5ndGhcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8b3B0aW9uICpuZ0Zvcj1cImxldCBwZXJwIG9mIHBlclBhZ2VWYWx1ZXMoKVwiIFtzZWxlY3RlZF09XCJwZXJQYWdlKCkgPT09IHBlcnBcIiB2YWx1ZT1cInt7IHBlcnAgfX1cIj57eyBwZXJwIH19PC9vcHRpb24+XG5cdFx0XHRcdFx0XHQ8L3NlbGVjdD5cblx0XHRcdFx0XHRcdGVudHJpZXM8L2xhYmVsXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiAqbmdJZj1cImhlYWRlckFjdGlvbnMoKSAmJiBoZWFkZXJBY3Rpb25zKCkubGVuZ3RoXCIgY2xhc3M9XCJkLWJsb2NrIGQtaW5saW5lLWZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImR0LWJ1dHRvbnMgYnRuLWdyb3VwIGZsZXgtd3JhcFwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBoZWFkZXJBY3Rpb25zKClcIj5cblx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImhlYWRlckFjdGlvbihhY3Rpb24uYWN0aW9uTmFtZSlcIlxuXHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7ICdidG4tc2Vjb25kYXJ5JzogIWFjdGlvbi5idG5Db2xvciB9XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnV0dG9ucy1jb3B5IGJ1dHRvbnMtaHRtbDUgYnRuLXNtIHt7IGFjdGlvbi5hY3Rpb25OYW1lIH19IHt7IGFjdGlvbi5idG5Db2xvciB9fVwiXG5cdFx0XHRcdFx0XHRcdGlkPVwiaGVhZGVyLWFjdGlvbi17eyBhY3Rpb24uYWN0aW9uTmFtZSB9fVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj48aSAqbmdJZj1cImFjdGlvbi5mYUljb25cIiBjbGFzcz1cImZhIHt7IGFjdGlvbi5mYUljb24gfX1cIj48L2k+IHt7IGFjdGlvbi5sYWJlbCB9fTwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJlbmFibGVTZWFyY2goKVwiIGNsYXNzPVwiY29sLW1kLTUgZC1mbGV4IGQteGwtYmxvY2sganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXNlYXJjaFwiPlxuXHRcdFx0XHQ8bGFiZWxcblx0XHRcdFx0XHQ+U2VhcmNoOlxuXHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0KG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWFyY2hVcGRhdGUubmV4dCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFsobmdNb2RlbCldPVwic2VhcmNoXCJcblx0XHRcdFx0XHRcdGFyaWEtY29udHJvbHM9XCJkYXRhLXRhYmxlLWNvbWJpbmVcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcblx0XHRcdFx0XHRcdGlkPVwidGFibGUtc2VhcmNoXCJcblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiXCJcblx0XHRcdFx0XHRcdHR5cGU9XCJzZWFyY2hcIlxuXHRcdFx0XHQvPjwvbGFiZWw+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG5cdFx0PHRhYmxlXG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCd0YWJsZS1zdHJpcGVkJzogc3RyaXBlZCgpLFxuXHRcdFx0XHQndGFibGUtYm9yZGVyZWQnOiBib3JkZXJlZCgpLFxuXHRcdFx0XHQndGFibGUtaG92ZXInOiBob3ZlcmVkKClcblx0XHRcdH1cIlxuXHRcdFx0Y2xhc3M9XCJ0YWJsZSB0YWJsZS1maXhlZCBhbGlnbi1taWRkbGUge3sgdGFibGVTdHlsZSgpIH19XCJcblx0XHQ+XG5cdFx0XHQ8dGhlYWQgW2NsYXNzXT1cImhlYWRTdHlsZSgpXCI+XG5cdFx0XHRcdDx0cj5cblx0XHRcdFx0XHQ8dGggKm5nSWY9XCJyb3dDb3VudGVyXCIgY2xhc3M9XCJ0ZXh0LWVuZCBzbWFsbC1jb2x1bW5cIj4gTnIuPC90aD5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoZWFkIG9mIHRhYmxlSGVhZCgpXCI+XG5cdFx0XHRcdFx0XHQ8dGhcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIiFoZWFkLm5vdFNvcnRhYmxlICYmIHRhYmxlU29ydChoZWFkLmtleSlcIlxuXHRcdFx0XHRcdFx0XHQqbmdJZj1cIiFoZWFkLmhpZGRlblwiXG5cdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cImhlYWQuc29ydFwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiaGVhZGVyIHt7IGhlYWQubm90U29ydGFibGUgPyAnJyA6ICdzb3J0YWJsZScgfX0ge3sgaGVhZC5jZWxsQWxpZ24gfX1cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIFt0cmFuc2xhdGVdPVwiaGVhZC5rZXkudG9VcHBlckNhc2UoKVwiPnt7IGhlYWQubGFiZWwgfHwgaGVhZC5rZXkgfX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDx0aCAqbmdJZj1cInRhYmxlSGVhZFN0b3JhZ2UoKSB8fCAocm93QWN0aW9ucygpICYmIHJvd0FjdGlvbnMoKS5sZW5ndGgpXCIgY2xhc3M9XCJoZWFkZXIgc21hbGwtY29sdW1uIHRleHQtY2VudGVyIHAtMFwiIGRhdGEtd2lkdGg9XCI1MFwiPlxuXHRcdFx0XHRcdFx0PGFcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIm9wZW5UYWJsZUxheW91dE1vZGFsKHRhYmxlSGVhZE1vZGFsKVwiXG5cdFx0XHRcdFx0XHRcdCpuZ0lmPVwidGFibGVIZWFkU3RvcmFnZSgpXCJcblx0XHRcdFx0XHRcdFx0YXJpYS1jb250cm9scz1cImJhc2ljLWxpbmstZHJvcGRvd25cIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cIm1lbnUtYnV0dG9uIHRvZ2dsZS13aGl0ZSBiaWctdG9nZ2xlIGRyb3Bkb3duLW1lbnUtbGlua1wiXG5cdFx0XHRcdFx0XHQ+PC9hPlxuXHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdDwvdHI+XG5cdFx0XHQ8L3RoZWFkPlxuXHRcdFx0PHRib2R5PlxuXHRcdFx0XHQ8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiB0YWJsZURhdGEoKTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwie3sgcm93Wydyb3dDbGFzcyddIHx8ICcnIH19XCI+XG5cdFx0XHRcdFx0PHRoICpuZ0lmPVwicm93Q291bnRlcigpXCIgY2xhc3M9XCJ0ZXh0LWVuZFwiPiB7eyBpICsgY291bnRlciB9fS48L3RoPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhlYWQgb2YgdGFibGVIZWFkKClcIj5cblx0XHRcdFx0XHRcdDx0ZCAqbmdJZj1cIiFoZWFkLmhpZGRlblwiIGNsYXNzPVwiaGVhZGVyIHRleHQtbm93cmFwIHt7IGhlYWQuY2VsbEFsaWduIH19XCI+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkLnR5cGUgPT09ICdzZWxlY3QnXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwic2VsZWN0XCIgdHlwZT1cImNoZWNrYm94XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGVhZC50eXBlXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3sgcm93W2hlYWQua2V5XSB9fVxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWQudHlwZSA9PT0gJ2JhZGdlJ1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYmFkZ2Uge3sgcm93W2hlYWQua2V5ICsgJ0JhZGdlJ10gfX1cIj57eyByb3dbaGVhZC5rZXldIH19PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWQudHlwZSA9PT0gJ2RhdGUnXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3sgcm93W2hlYWQua2V5XSB8IGRhdGU6IFwiZGQuTU0ueXl5eSBISDptbTpzc1wiIH19XG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZC50eXBlID09PSAnc2xpZGVyJ1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzbGlkZXJDbGlja2VkLmVtaXQocm93KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtjaGVja2VkXT1cInJvd1toZWFkLmtleV1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInN3aXRjaGVkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJjaGVjay17eyByb3dbJ2lkJ10gfX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJjaGVjay17eyByb3dbJ2lkJ10gfX1cIj48L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWQudHlwZSA9PT0gJ2lucHV0J1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBbdmFsdWVdPVwicm93W2hlYWQua2V5XVwiIHR5cGU9XCJ0ZXh0XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDx0ZCAqbmdJZj1cInRhYmxlSGVhZFN0b3JhZ2UoKSB8fCAocm93QWN0aW9ucygpICYmIHJvd0FjdGlvbnMoKS5sZW5ndGgpXCIgY2xhc3M9XCJzbWFsbC1jb2x1bW5cIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtZW51IHRleHQtZW5kXCI+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiByb3dBY3Rpb25zKClcIj5cblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwicm93QWN0aW9uKGFjdGlvbi5hY3Rpb25OYW1lLCByb3cpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsgJ2J0bi1zZWNvbmRhcnknOiAhYWN0aW9uLmJ0bkNvbG9yIH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnV0dG9ucy1jb3B5IGJ1dHRvbnMtaHRtbDUgYnRuLXNtIG1zLTIge3sgYWN0aW9uLmFjdGlvbk5hbWUgfX0ge3sgYWN0aW9uLmJ0bkNvbG9yIH19XCJcblx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9XCJ7eyBhY3Rpb24ubGFiZWwgfX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+PGkgKm5nSWY9XCJhY3Rpb24uZmFJY29uXCIgY2xhc3M9XCJmYSB7eyBhY3Rpb24uZmFJY29uIH19XCI+PC9pPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHQ8L3RyPlxuXHRcdFx0PC90Ym9keT5cblx0XHQ8L3RhYmxlPlxuXHRcdDxhcy1saWItcGFnaW5hdGlvblxuXHRcdFx0KHBhZ2VDaGFuZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcblx0XHRcdCpuZ0lmPVwidG90YWxQYWdlcyA+IDFcIlxuXHRcdFx0W2FsaWduXT1cInBhZ2luYXRpb25BbGlnbm1lbnQoKVwiXG5cdFx0XHRbZW5hYmxlTG9nXT1cImVuYWJsZUxvZygpXCJcblx0XHRcdFtmaXJzdF09XCJwYWdlKCkgPT09IDBcIlxuXHRcdFx0W2xhc3RdPVwicGFnZSgpID09PSB0b3RhbFBhZ2VzIC0gMVwiXG5cdFx0XHRbcGFnZV09XCJwYWdlKClcIlxuXHRcdFx0W3RvdGFsUGFnZXNdPVwidG90YWxQYWdlc1wiXG5cdFx0PjwvYXMtbGliLXBhZ2luYXRpb24+XG5cdDwvZGl2PlxuXHQ8bmctdGVtcGxhdGUgI3RhYmxlSGVhZE1vZGFsPlxuXHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cblx0XHRcdDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiPkVkaXQgdGFibGUgaGVhZGVyPC9oND5cblx0XHRcdDxidXR0b24gKGNsaWNrKT1cIm1vZGFsQ2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuLWNsb3NlIGNsb3NlIHB1bGwtcmlnaHRcIiB0eXBlPVwiYnV0dG9uXCI+XG5cdFx0XHRcdDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+JnRpbWVzOzwvc3Bhbj5cblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0ZCBvZiB0YWJsZUhlYWQoKVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuXHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJoYW5kbGVUSGNoYW5nZSh0ZC5rZXkpXCJcblx0XHRcdFx0XHRcdFtjaGVja2VkXT1cIiF0ZC5oaWRkZW5cIlxuXHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cInRkLm1hbmRhdG9yeVwiXG5cdFx0XHRcdFx0XHRbcmVhZE9ubHldPVwidGQubWFuZGF0b3J5XCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG5cdFx0XHRcdFx0XHRpZD1cInt7IHRkLmtleSB9fVwiXG5cdFx0XHRcdFx0XHRyb2xlPVwic3dpdGNoXCJcblx0XHRcdFx0XHRcdHR5cGU9XCJjaGVja2JveFwiXG5cdFx0XHRcdFx0XHR2YWx1ZT1cInRydWVcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInt7IHRkLmtleSB9fVwiPnt7IHRkLmxhYmVsIH19IHt7IHRkLm1hbmRhdG9yeSA/IFwiKlwiIDogXCJcIiB9fTwvbGFiZWw+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8c21hbGwgY2xhc3M9XCJzbWFsbCB0ZXh0LW11dGVkIHB0LTJcIj4qIE1hbmRhdG9yeSBmaWVsZCBmb3IgdGhlIHZpZXc8L3NtYWxsPlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cblx0XHRcdDxidXR0b24gKGNsaWNrKT1cInJlc2V0VmFsdWVzKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgbWUtYXV0b1wiIHR5cGU9XCJidXR0b25cIj5SZXNldDwvYnV0dG9uPlxuXHRcdFx0PGJ1dHRvbiAoY2xpY2spPVwibW9kYWxDbG9zZSgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0cmFuc2xhdGU9XCJDTE9TRVwiIHR5cGU9XCJidXR0b25cIj5DbG9zZTwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class AsLibGenericTableService {
4
+ constructor() { }
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableService, providedIn: 'root' });
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableService, decorators: [{
9
+ type: Injectable,
10
+ args: [{
11
+ providedIn: 'root'
12
+ }]
13
+ }], ctorParameters: () => [] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXMtbGliLWdlbmVyaWMtdGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLWxpYi1nZW5lcmljLXRhYmxlL3NyYy9saWIvYXMtbGliLWdlbmVyaWMtdGFibGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLGdCQUFnQixDQUFDO3VHQUZOLHdCQUF3QjsyR0FBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzJGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzTGliR2VuZXJpY1RhYmxlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TooltipComponent {
4
+ tooltip = '';
5
+ left = 0;
6
+ top = 0;
7
+ constructor() { }
8
+ ngOnInit() { }
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: TooltipComponent, isStandalone: true, selector: "tooltip", ngImport: i0, template: "<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n", styles: [".my-tooltip{position:fixed;background-color:#000;border-radius:4px;color:#fff;font-family:Arial,serif;padding:3px 6px;font-size:13px;margin-top:5px;transform:translate(-50%)}.my-tooltip:before{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid black;position:absolute;left:calc(50% - 5px);top:-5px}\n"] });
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'tooltip', standalone: true, template: "<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n", styles: [".my-tooltip{position:fixed;background-color:#000;border-radius:4px;color:#fff;font-family:Arial,serif;padding:3px 6px;font-size:13px;margin-top:5px;transform:translate(-50%)}.my-tooltip:before{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid black;position:absolute;left:calc(50% - 5px);top:-5px}\n"] }]
15
+ }], ctorParameters: () => [] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcy1saWItZ2VuZXJpYy10YWJsZS9zcmMvbGliL2RpcmVjdGl2ZXMvY29tcG9uZW50L3Rvb2x0aXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtbGliLWdlbmVyaWMtdGFibGUvc3JjL2xpYi9kaXJlY3RpdmVzL2NvbXBvbmVudC90b29sdGlwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBUWxELE1BQU0sT0FBTyxnQkFBZ0I7SUFDNUIsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixJQUFJLEdBQVcsQ0FBQyxDQUFDO0lBQ2pCLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFFaEIsZ0JBQWUsQ0FBQztJQUVoQixRQUFRLEtBQVUsQ0FBQzt1R0FQUCxnQkFBZ0I7MkZBQWhCLGdCQUFnQixtRUNSN0IsK0dBR0E7OzJGREthLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDQyxTQUFTLGNBQ04sSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3Rvb2x0aXAnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZVVybDogJy4vdG9vbHRpcC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL3Rvb2x0aXAuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVG9vbHRpcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHRvb2x0aXA6IHN0cmluZyA9ICcnO1xuXHRsZWZ0OiBudW1iZXIgPSAwO1xuXHR0b3A6IG51bWJlciA9IDA7XG5cblx0Y29uc3RydWN0b3IoKSB7fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge31cbn1cbiIsIjxkaXYgW3N0eWxlLmxlZnRdPVwibGVmdCArICdweCdcIiBbc3R5bGUudG9wXT1cInRvcCArICdweCdcIiBjbGFzcz1cIm15LXRvb2x0aXBcIj5cblx0e3sgdG9vbHRpcCB9fVxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,61 @@
1
+ import { Directive, HostListener, Input, } from '@angular/core';
2
+ import { TooltipComponent } from '../component/tooltip.component';
3
+ import * as i0 from "@angular/core";
4
+ export class TooltipDirective {
5
+ elementRef;
6
+ appRef;
7
+ viewContainerRef;
8
+ tooltip = '';
9
+ componentRef = null;
10
+ constructor(elementRef, appRef, viewContainerRef) {
11
+ this.elementRef = elementRef;
12
+ this.appRef = appRef;
13
+ this.viewContainerRef = viewContainerRef;
14
+ }
15
+ onMouseEnter() {
16
+ if (this.componentRef === null) {
17
+ this.componentRef = this.viewContainerRef.createComponent(TooltipComponent);
18
+ this.componentRef.instance.text = this.tooltip;
19
+ this.setTooltipComponentProperties();
20
+ }
21
+ }
22
+ onMouseLeave() {
23
+ this.destroy();
24
+ }
25
+ ngOnDestroy() {
26
+ this.destroy();
27
+ }
28
+ destroy() {
29
+ if (this.componentRef !== null) {
30
+ this.appRef.detachView(this.componentRef.hostView);
31
+ this.componentRef.destroy();
32
+ this.componentRef = null;
33
+ }
34
+ }
35
+ setTooltipComponentProperties() {
36
+ if (this.componentRef !== null) {
37
+ this.componentRef.instance.tooltip = this.tooltip;
38
+ const { left, right, bottom } = this.elementRef.nativeElement.getBoundingClientRect();
39
+ this.componentRef.instance.left = (right - left) / 2 + left;
40
+ this.componentRef.instance.top = bottom;
41
+ }
42
+ }
43
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ApplicationRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
44
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: TooltipDirective, isStandalone: true, selector: "[tooltip]", inputs: { tooltip: "tooltip" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipDirective, decorators: [{
47
+ type: Directive,
48
+ args: [{
49
+ selector: '[tooltip]',
50
+ standalone: true
51
+ }]
52
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ApplicationRef }, { type: i0.ViewContainerRef }], propDecorators: { tooltip: [{
53
+ type: Input
54
+ }], onMouseEnter: [{
55
+ type: HostListener,
56
+ args: ['mouseenter']
57
+ }], onMouseLeave: [{
58
+ type: HostListener,
59
+ args: ['mouseleave']
60
+ }] } });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcy1saWItZ2VuZXJpYy10YWJsZS9zcmMvbGliL2RpcmVjdGl2ZXMvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUdULFlBQVksRUFFWixLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBTWxFLE1BQU0sT0FBTyxnQkFBZ0I7SUFNakI7SUFDQTtJQUNBO0lBUEQsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUVkLFlBQVksR0FBNkIsSUFBSSxDQUFDO0lBRXRELFlBQ1UsVUFBc0IsRUFDdEIsTUFBc0IsRUFDdEIsZ0JBQWtDO1FBRmxDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUU1QyxDQUFDO0lBR0QsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUMvQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUdELFlBQVk7UUFDVixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsRCxNQUFNLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3BGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7dUdBN0NVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUo1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7MklBRVUsT0FBTztzQkFBZixLQUFLO2dCQVlOLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZO2dCQVUxQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50L3Rvb2x0aXAuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3Rvb2x0aXBdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGlyZWN0aXZlIHtcbiAgQElucHV0KCkgdG9vbHRpcCA9ICcnO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gIG9uTW91c2VFbnRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChUb29sdGlwQ29tcG9uZW50KTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRleHQgPSB0aGlzLnRvb2x0aXA7XG4gICAgICB0aGlzLnNldFRvb2x0aXBDb21wb25lbnRQcm9wZXJ0aWVzKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VG9vbHRpcENvbXBvbmVudFByb3BlcnRpZXMoKSB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b29sdGlwID0gdGhpcy50b29sdGlwO1xuICAgICAgY29uc3Qge2xlZnQsIHJpZ2h0LCBib3R0b219ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gKHJpZ2h0IC0gbGVmdCkgLyAyICsgbGVmdDtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLWxpYi1nZW5lcmljLXRhYmxlL3NyYy9saWIvZXhwb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uQnV0dG9uIHtcblx0YWN0aW9uTmFtZTogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0ZmFJY29uPzogc3RyaW5nO1xuXHRidG5Db2xvcj86XG5cdFx0fCAnYnRuLWRlZmF1bHQnXG5cdFx0fCAnYnRuLXByaW1hcnknXG5cdFx0fCAnYnRuLXNlY29uZGFyeSdcblx0XHR8ICdidG4tc3VjY2Vzcydcblx0XHR8ICdidG4tZGFuZ2VyJ1xuXHRcdHwgJ2J0bi13YXJuaW5nJ1xuXHRcdHwgJ2J0bi1pbmZvJ1xuXHRcdHwgJ2J0bi1saWdodCdcblx0XHR8ICdidG4tZGFyayc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSGVhZCB7XG5cdGhpZGRlbj86IGJvb2xlYW47XG5cdGtleTogc3RyaW5nO1xuXHR0eXBlPzogJ3NlbGVjdCcgfCAnZGF0ZScgfCAnc2xpZGVyJyB8ICdpbnB1dCcgfCAnYmFkZ2UnO1xuXHRsYWJlbD86IHN0cmluZztcblx0c29ydD86ICcnIHwgJ2hlYWRlclNvcnREb3duJyB8ICdoZWFkZXJTb3J0VXAnO1xuXHRtYW5kYXRvcnk/OiBib29sZWFuO1xuXHRub3RTb3J0YWJsZT86IGJvb2xlYW47XG5cdGNlbGxBbGlnbj86ICcnIHwgJ3RleHQtY2VudGVyJyB8ICd0ZXh0LWVuZCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpbHRlclBhcmFtcyB7XG5cdHNvcnQ6IHN0cmluZztcblx0b3JkZXI6ICdhc2MnIHwgJ2Rlc2MnO1xuXHRwZXJQYWdlOiBudW1iZXI7XG5cdHNlYXJjaFN0cmluZzogc3RyaW5nO1xuXHRwYWdlOiBudW1iZXI7XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Public API Surface of as-lib-generic-table
3
+ */
4
+ export * from './lib/as-lib-generic-table.service';
5
+ export * from './lib/as-lib-generic-table.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FzLWxpYi1nZW5lcmljLXRhYmxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBhcy1saWItZ2VuZXJpYy10YWJsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2FzLWxpYi1nZW5lcmljLXRhYmxlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXMtbGliLWdlbmVyaWMtdGFibGUuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,298 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Component, Directive, Input, HostListener, input, output, Inject, effect } from '@angular/core';
3
+ import { Subject, debounceTime, distinctUntilChanged } from 'rxjs';
4
+ import { BsModalService } from 'ngx-bootstrap/modal';
5
+ import * as i1 from '@angular/common';
6
+ import { CommonModule } from '@angular/common';
7
+ import * as i2 from '@angular/forms';
8
+ import { FormsModule } from '@angular/forms';
9
+ import { AsLibPaginationComponent } from '@agentsmith.bgd/as-lib-pagination';
10
+
11
+ class AsLibGenericTableService {
12
+ constructor() { }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableService, providedIn: 'root' });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableService, decorators: [{
17
+ type: Injectable,
18
+ args: [{
19
+ providedIn: 'root'
20
+ }]
21
+ }], ctorParameters: () => [] });
22
+
23
+ class TooltipComponent {
24
+ tooltip = '';
25
+ left = 0;
26
+ top = 0;
27
+ constructor() { }
28
+ ngOnInit() { }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: TooltipComponent, isStandalone: true, selector: "tooltip", ngImport: i0, template: "<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n", styles: [".my-tooltip{position:fixed;background-color:#000;border-radius:4px;color:#fff;font-family:Arial,serif;padding:3px 6px;font-size:13px;margin-top:5px;transform:translate(-50%)}.my-tooltip:before{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid black;position:absolute;left:calc(50% - 5px);top:-5px}\n"] });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipComponent, decorators: [{
33
+ type: Component,
34
+ args: [{ selector: 'tooltip', standalone: true, template: "<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n", styles: [".my-tooltip{position:fixed;background-color:#000;border-radius:4px;color:#fff;font-family:Arial,serif;padding:3px 6px;font-size:13px;margin-top:5px;transform:translate(-50%)}.my-tooltip:before{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid black;position:absolute;left:calc(50% - 5px);top:-5px}\n"] }]
35
+ }], ctorParameters: () => [] });
36
+
37
+ class TooltipDirective {
38
+ elementRef;
39
+ appRef;
40
+ viewContainerRef;
41
+ tooltip = '';
42
+ componentRef = null;
43
+ constructor(elementRef, appRef, viewContainerRef) {
44
+ this.elementRef = elementRef;
45
+ this.appRef = appRef;
46
+ this.viewContainerRef = viewContainerRef;
47
+ }
48
+ onMouseEnter() {
49
+ if (this.componentRef === null) {
50
+ this.componentRef = this.viewContainerRef.createComponent(TooltipComponent);
51
+ this.componentRef.instance.text = this.tooltip;
52
+ this.setTooltipComponentProperties();
53
+ }
54
+ }
55
+ onMouseLeave() {
56
+ this.destroy();
57
+ }
58
+ ngOnDestroy() {
59
+ this.destroy();
60
+ }
61
+ destroy() {
62
+ if (this.componentRef !== null) {
63
+ this.appRef.detachView(this.componentRef.hostView);
64
+ this.componentRef.destroy();
65
+ this.componentRef = null;
66
+ }
67
+ }
68
+ setTooltipComponentProperties() {
69
+ if (this.componentRef !== null) {
70
+ this.componentRef.instance.tooltip = this.tooltip;
71
+ const { left, right, bottom } = this.elementRef.nativeElement.getBoundingClientRect();
72
+ this.componentRef.instance.left = (right - left) / 2 + left;
73
+ this.componentRef.instance.top = bottom;
74
+ }
75
+ }
76
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ApplicationRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
77
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: TooltipDirective, isStandalone: true, selector: "[tooltip]", inputs: { tooltip: "tooltip" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: TooltipDirective, decorators: [{
80
+ type: Directive,
81
+ args: [{
82
+ selector: '[tooltip]',
83
+ standalone: true
84
+ }]
85
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ApplicationRef }, { type: i0.ViewContainerRef }], propDecorators: { tooltip: [{
86
+ type: Input
87
+ }], onMouseEnter: [{
88
+ type: HostListener,
89
+ args: ['mouseenter']
90
+ }], onMouseLeave: [{
91
+ type: HostListener,
92
+ args: ['mouseleave']
93
+ }] } });
94
+
95
+ class AsLibGenericTableComponent {
96
+ loading = input(false);
97
+ striped = input(false);
98
+ bordered = input(false);
99
+ hovered = input(false);
100
+ enableSearch = input(true);
101
+ rowCounter = input(false);
102
+ enableLog = input(false);
103
+ perPage = input(10);
104
+ tableHead = input([]);
105
+ tableData = input([]);
106
+ tableHeadStorage = input('');
107
+ perPageValues = input([10, 20, 50, 100]);
108
+ headerActions = input([]);
109
+ rowActions = input([]);
110
+ tableStyle = input('');
111
+ headStyle = input('table-default');
112
+ paginationAlignment = input('justify-content-end');
113
+ totalItems = input(0);
114
+ page = input(0);
115
+ filterParamsChanged = output();
116
+ editRow = output();
117
+ sliderClicked = output();
118
+ headerActionClicked = output();
119
+ rowActionClicked = output();
120
+ tableHeadChanged = output();
121
+ bsModalRef;
122
+ searchUpdate = new Subject();
123
+ search = '';
124
+ totalPages = 0;
125
+ counter = 0;
126
+ sort;
127
+ sortOrder = 'asc';
128
+ modalService = Inject(BsModalService);
129
+ constructor() {
130
+ effect(() => {
131
+ console.log(`The count is:`, this.totalItems(), this.page());
132
+ this.counter = this.page() * this.perPage() + 1;
133
+ this.calculatePages();
134
+ });
135
+ }
136
+ ngOnInit() {
137
+ if (this.tableHeadStorage()) {
138
+ const storage = localStorage.getItem(this.tableHeadStorage());
139
+ if (storage) {
140
+ const hidden = JSON.parse(storage) || [];
141
+ this.tableHead().forEach(t => (t.hidden = hidden.includes(t.key)));
142
+ }
143
+ else {
144
+ localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));
145
+ }
146
+ }
147
+ this.sort = this.tableHead()[0].key;
148
+ this.log('totalPages', this.totalPages);
149
+ this.log('Table head', this.tableHead());
150
+ this.log('Table data', this.tableData());
151
+ this.log('Row actions', this.rowActions());
152
+ this.searchUpdate.pipe(debounceTime(500), distinctUntilChanged()).subscribe(_ => {
153
+ this.log('search', this.search);
154
+ const emitValue = {
155
+ page: 0,
156
+ sort: this.sort,
157
+ order: this.sortOrder,
158
+ perPage: this.perPage(),
159
+ searchString: this.search,
160
+ };
161
+ this.log('Search value change, sort values: ', emitValue);
162
+ this.filterParamsChanged.emit(emitValue);
163
+ });
164
+ if (!this.perPageValues().includes(this.perPage())) {
165
+ throw new Error('Per page value invalid');
166
+ }
167
+ this.log('Loading', this.loading());
168
+ }
169
+ /* eslint-disable @typescript-eslint/no-explicit-any */
170
+ openTableLayoutModal(tableHeadModal) {
171
+ this.log('Open layout');
172
+ this.bsModalRef = this.modalService.show(tableHeadModal, {
173
+ animated: true,
174
+ ignoreBackdropClick: true,
175
+ class: 'confirm-modal modal-sm',
176
+ initialState: {},
177
+ });
178
+ }
179
+ handleTHchange(key) {
180
+ this.log('change triggered', key);
181
+ this.tableHead().forEach(t => {
182
+ if (t.key === key) {
183
+ t.hidden = !t.hidden;
184
+ this.tableHeadStorage &&
185
+ localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));
186
+ }
187
+ });
188
+ }
189
+ tableSort(key) {
190
+ this.log('table sort key', key);
191
+ this.sort = key;
192
+ this.tableHead().forEach(h => {
193
+ if (h.key === key) {
194
+ if (h.sort === 'headerSortDown') {
195
+ this.sortOrder = 'desc';
196
+ h.sort = 'headerSortUp';
197
+ }
198
+ else {
199
+ h.sort = 'headerSortDown';
200
+ this.sortOrder = 'asc';
201
+ }
202
+ const emitValue = {
203
+ page: 0,
204
+ sort: this.sort,
205
+ order: this.sortOrder,
206
+ perPage: this.perPage(),
207
+ searchString: this.search,
208
+ };
209
+ this.log('Sort changed, filter values: ', emitValue);
210
+ this.filterParamsChanged.emit(emitValue);
211
+ }
212
+ else {
213
+ h.sort = '';
214
+ }
215
+ });
216
+ }
217
+ changePerPage($event) {
218
+ const perPage = parseInt($event.target.value, 10) || 25;
219
+ //this.perPage = perPage;
220
+ // this.page = 0;
221
+ this.log('changePerPage', perPage);
222
+ this.calculatePages();
223
+ this.filterParamsChanged.emit({
224
+ page: 0,
225
+ sort: this.sort,
226
+ order: this.sortOrder,
227
+ perPage: perPage,
228
+ searchString: this.search,
229
+ });
230
+ }
231
+ log(value, ...rest) {
232
+ if (this.enableLog() || localStorage.getItem('loggerEnable')) {
233
+ console.log(`AS Dynamic Table -> ${value}`, ...rest);
234
+ }
235
+ }
236
+ emitRow(row) {
237
+ this.log('edit row', row);
238
+ this.editRow.emit(row);
239
+ }
240
+ headerAction(actionName) {
241
+ this.log('Header action', actionName);
242
+ this.headerActionClicked.emit(actionName);
243
+ }
244
+ rowAction(action, value) {
245
+ this.log('Row action', action, value);
246
+ this.rowActionClicked.emit({ action, value });
247
+ }
248
+ pageChange(page) {
249
+ const emitValue = {
250
+ page,
251
+ sort: this.sort,
252
+ order: this.sortOrder,
253
+ perPage: this.perPage(),
254
+ searchString: this.search,
255
+ };
256
+ this.log('Page change, filter values: ', emitValue);
257
+ this.filterParamsChanged.emit(emitValue);
258
+ }
259
+ modalClose() {
260
+ const hiddenKeys = this.tableHead().filter(t => t.hidden).map(t => t.key);
261
+ this.log('Modal closed, saved keys', hiddenKeys);
262
+ this.tableHeadChanged.emit(hiddenKeys);
263
+ this.bsModalRef.hide();
264
+ }
265
+ //
266
+ resetValues() {
267
+ this.tableHeadChanged.emit(null);
268
+ this.bsModalRef.hide();
269
+ }
270
+ //
271
+ calculatePages() {
272
+ this.totalPages = Math.ceil(this.totalItems() / this.perPage());
273
+ this.log('total items/pages', this.totalItems(), this.totalPages);
274
+ }
275
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
276
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.1", type: AsLibGenericTableComponent, isStandalone: true, selector: "as-lib-generic-table", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, hovered: { classPropertyName: "hovered", publicName: "hovered", isSignal: true, isRequired: false, transformFunction: null }, enableSearch: { classPropertyName: "enableSearch", publicName: "enableSearch", isSignal: true, isRequired: false, transformFunction: null }, rowCounter: { classPropertyName: "rowCounter", publicName: "rowCounter", isSignal: true, isRequired: false, transformFunction: null }, enableLog: { classPropertyName: "enableLog", publicName: "enableLog", isSignal: true, isRequired: false, transformFunction: null }, perPage: { classPropertyName: "perPage", publicName: "perPage", isSignal: true, isRequired: false, transformFunction: null }, tableHead: { classPropertyName: "tableHead", publicName: "tableHead", isSignal: true, isRequired: false, transformFunction: null }, tableData: { classPropertyName: "tableData", publicName: "tableData", isSignal: true, isRequired: false, transformFunction: null }, tableHeadStorage: { classPropertyName: "tableHeadStorage", publicName: "tableHeadStorage", isSignal: true, isRequired: false, transformFunction: null }, perPageValues: { classPropertyName: "perPageValues", publicName: "perPageValues", isSignal: true, isRequired: false, transformFunction: null }, headerActions: { classPropertyName: "headerActions", publicName: "headerActions", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, headStyle: { classPropertyName: "headStyle", publicName: "headStyle", isSignal: true, isRequired: false, transformFunction: null }, paginationAlignment: { classPropertyName: "paginationAlignment", publicName: "paginationAlignment", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterParamsChanged: "filterParamsChanged", editRow: "editRow", sliderClicked: "sliderClicked", headerActionClicked: "headerActionClicked", rowActionClicked: "rowActionClicked", tableHeadChanged: "tableHeadChanged" }, ngImport: i0, template: "<p *ngIf=\"loading()\">\n\t<img\n\t\t*ngIf=\"loading()\"\n\t\tclass=\"pl-3\"\n\t\tsrc=\"data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==\"\n\t/>\n</p>\n<div\n\t[ngClass]=\"{\n\t\tloading: loading()\n\t}\"\n\tclass=\"dynamic-table\"\n>\n\t<div class=\"row mb-3\">\n\t\t<div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\">\n\t\t\t<div *ngIf=\"perPageValues() && perPageValues().length\" class=\"d-block d-md-inline-flex me-0 me-md-3\">\n\t\t\t\t<div class=\"table-length\">\n\t\t\t\t\t<label\n\t\t\t\t\t\t>Show\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t(change)=\"changePerPage($event)\"\n\t\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\t\tclass=\"form-select form-select-sm\"\n\t\t\t\t\t\t\tname=\"data-table-combine_length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option *ngFor=\"let perp of perPageValues()\" [selected]=\"perPage() === perp\" value=\"{{ perp }}\">{{ perp }}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\tentries</label\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"headerActions() && headerActions().length\" class=\"d-block d-inline-flex\">\n\t\t\t\t<div class=\"dt-buttons btn-group flex-wrap\">\n\t\t\t\t\t<ng-container *ngFor=\"let action of headerActions()\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t(click)=\"headerAction(action.actionName)\"\n\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\tid=\"header-action-{{ action.actionName }}\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i> {{ action.label }}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"enableSearch()\" class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n\t\t\t<div class=\"table-search\">\n\t\t\t\t<label\n\t\t\t\t\t>Search:\n\t\t\t\t\t<input\n\t\t\t\t\t\t(ngModelChange)=\"this.searchUpdate.next($event)\"\n\t\t\t\t\t\t[(ngModel)]=\"search\"\n\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\tclass=\"form-control form-control-sm\"\n\t\t\t\t\t\tid=\"table-search\"\n\t\t\t\t\t\tplaceholder=\"\"\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t/></label>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"table-responsive\">\n\t\t<table\n\t\t\t[ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n\t\t\tclass=\"table table-fixed align-middle {{ tableStyle() }}\"\n\t\t>\n\t\t\t<thead [class]=\"headStyle()\">\n\t\t\t\t<tr>\n\t\t\t\t\t<th *ngIf=\"rowCounter\" class=\"text-end small-column\"> Nr.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t(click)=\"!head.notSortable && tableSort(head.key)\"\n\t\t\t\t\t\t\t*ngIf=\"!head.hidden\"\n\t\t\t\t\t\t\t[ngClass]=\"head.sort\"\n\t\t\t\t\t\t\tclass=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n\t\t\t\t\t\t\t\t<span class=\"fa\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<th *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"header small-column text-center p-0\" data-width=\"50\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t(click)=\"openTableLayoutModal(tableHeadModal)\"\n\t\t\t\t\t\t\t*ngIf=\"tableHeadStorage()\"\n\t\t\t\t\t\t\taria-controls=\"basic-link-dropdown\"\n\t\t\t\t\t\t\tclass=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n\t\t\t\t\t\t></a>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr *ngFor=\"let row of tableData(); let i = index\" class=\"{{ row['rowClass'] || '' }}\">\n\t\t\t\t\t<th *ngIf=\"rowCounter()\" class=\"text-end\"> {{ i + counter }}.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<td *ngIf=\"!head.hidden\" class=\"header text-nowrap {{ head.cellAlign }}\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'select'\">\n\t\t\t\t\t\t\t\t<input class=\"select\" type=\"checkbox\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!head.type\">\n\t\t\t\t\t\t\t\t{{ row[head.key] }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'badge'\">\n\t\t\t\t\t\t\t\t<span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'date'\">\n\t\t\t\t\t\t\t\t{{ row[head.key] | date: \"dd.MM.yyyy HH:mm:ss\" }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'slider'\">\n\t\t\t\t\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t(change)=\"sliderClicked.emit(row)\"\n\t\t\t\t\t\t\t\t\t\t[checked]=\"row[head.key]\"\n\t\t\t\t\t\t\t\t\t\tclass=\"switched\"\n\t\t\t\t\t\t\t\t\t\tid=\"check-{{ row['id'] }}\"\n\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<label for=\"check-{{ row['id'] }}\"></label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'input'\">\n\t\t\t\t\t\t\t\t<input [value]=\"row[head.key]\" type=\"text\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<td *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"small-column\">\n\t\t\t\t\t\t<div class=\"menu text-end\">\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActions()\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t(click)=\"rowAction(action.actionName, row)\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\t\t\ttooltip=\"{{ action.label }}\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i></span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<as-lib-pagination\n\t\t\t(pageChange)=\"pageChange($event)\"\n\t\t\t*ngIf=\"totalPages > 1\"\n\t\t\t[align]=\"paginationAlignment()\"\n\t\t\t[enableLog]=\"enableLog()\"\n\t\t\t[first]=\"page() === 0\"\n\t\t\t[last]=\"page() === totalPages - 1\"\n\t\t\t[page]=\"page()\"\n\t\t\t[totalPages]=\"totalPages\"\n\t\t></as-lib-pagination>\n\t</div>\n\t<ng-template #tableHeadModal>\n\t\t<div class=\"modal-header\">\n\t\t\t<h4 class=\"modal-title pull-left\">Edit table header</h4>\n\t\t\t<button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n\t\t\t\t<span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"modal-body\">\n\t\t\t<ng-container *ngFor=\"let td of tableHead()\">\n\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t<input\n\t\t\t\t\t\t(change)=\"handleTHchange(td.key)\"\n\t\t\t\t\t\t[checked]=\"!td.hidden\"\n\t\t\t\t\t\t[disabled]=\"td.mandatory\"\n\t\t\t\t\t\t[readOnly]=\"td.mandatory\"\n\t\t\t\t\t\tclass=\"form-check-input\"\n\t\t\t\t\t\tid=\"{{ td.key }}\"\n\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<small class=\"small text-muted pt-2\">* Mandatory field for the view</small>\n\t\t</div>\n\t\t<div class=\"modal-footer\">\n\t\t\t<button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">Reset</button>\n\t\t\t<button (click)=\"modalClose()\" class=\"btn btn-primary\" translate=\"CLOSE\" type=\"button\">Close</button>\n\t\t</div>\n\t</ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip]", inputs: ["tooltip"] }, { kind: "component", type: AsLibPaginationComponent, selector: "as-lib-pagination", inputs: ["first", "last", "align", "enableLog", "totalPages", "page"], outputs: ["pageChange"] }] });
277
+ }
278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: AsLibGenericTableComponent, decorators: [{
279
+ type: Component,
280
+ args: [{ selector: 'as-lib-generic-table', standalone: true, imports: [
281
+ CommonModule,
282
+ FormsModule,
283
+ TooltipDirective,
284
+ TooltipComponent,
285
+ AsLibPaginationComponent
286
+ ], template: "<p *ngIf=\"loading()\">\n\t<img\n\t\t*ngIf=\"loading()\"\n\t\tclass=\"pl-3\"\n\t\tsrc=\"data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==\"\n\t/>\n</p>\n<div\n\t[ngClass]=\"{\n\t\tloading: loading()\n\t}\"\n\tclass=\"dynamic-table\"\n>\n\t<div class=\"row mb-3\">\n\t\t<div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\">\n\t\t\t<div *ngIf=\"perPageValues() && perPageValues().length\" class=\"d-block d-md-inline-flex me-0 me-md-3\">\n\t\t\t\t<div class=\"table-length\">\n\t\t\t\t\t<label\n\t\t\t\t\t\t>Show\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t(change)=\"changePerPage($event)\"\n\t\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\t\tclass=\"form-select form-select-sm\"\n\t\t\t\t\t\t\tname=\"data-table-combine_length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option *ngFor=\"let perp of perPageValues()\" [selected]=\"perPage() === perp\" value=\"{{ perp }}\">{{ perp }}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\tentries</label\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"headerActions() && headerActions().length\" class=\"d-block d-inline-flex\">\n\t\t\t\t<div class=\"dt-buttons btn-group flex-wrap\">\n\t\t\t\t\t<ng-container *ngFor=\"let action of headerActions()\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t(click)=\"headerAction(action.actionName)\"\n\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\tid=\"header-action-{{ action.actionName }}\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i> {{ action.label }}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"enableSearch()\" class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n\t\t\t<div class=\"table-search\">\n\t\t\t\t<label\n\t\t\t\t\t>Search:\n\t\t\t\t\t<input\n\t\t\t\t\t\t(ngModelChange)=\"this.searchUpdate.next($event)\"\n\t\t\t\t\t\t[(ngModel)]=\"search\"\n\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\tclass=\"form-control form-control-sm\"\n\t\t\t\t\t\tid=\"table-search\"\n\t\t\t\t\t\tplaceholder=\"\"\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t/></label>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"table-responsive\">\n\t\t<table\n\t\t\t[ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n\t\t\tclass=\"table table-fixed align-middle {{ tableStyle() }}\"\n\t\t>\n\t\t\t<thead [class]=\"headStyle()\">\n\t\t\t\t<tr>\n\t\t\t\t\t<th *ngIf=\"rowCounter\" class=\"text-end small-column\"> Nr.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t(click)=\"!head.notSortable && tableSort(head.key)\"\n\t\t\t\t\t\t\t*ngIf=\"!head.hidden\"\n\t\t\t\t\t\t\t[ngClass]=\"head.sort\"\n\t\t\t\t\t\t\tclass=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n\t\t\t\t\t\t\t\t<span class=\"fa\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<th *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"header small-column text-center p-0\" data-width=\"50\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t(click)=\"openTableLayoutModal(tableHeadModal)\"\n\t\t\t\t\t\t\t*ngIf=\"tableHeadStorage()\"\n\t\t\t\t\t\t\taria-controls=\"basic-link-dropdown\"\n\t\t\t\t\t\t\tclass=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n\t\t\t\t\t\t></a>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr *ngFor=\"let row of tableData(); let i = index\" class=\"{{ row['rowClass'] || '' }}\">\n\t\t\t\t\t<th *ngIf=\"rowCounter()\" class=\"text-end\"> {{ i + counter }}.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<td *ngIf=\"!head.hidden\" class=\"header text-nowrap {{ head.cellAlign }}\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'select'\">\n\t\t\t\t\t\t\t\t<input class=\"select\" type=\"checkbox\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!head.type\">\n\t\t\t\t\t\t\t\t{{ row[head.key] }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'badge'\">\n\t\t\t\t\t\t\t\t<span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'date'\">\n\t\t\t\t\t\t\t\t{{ row[head.key] | date: \"dd.MM.yyyy HH:mm:ss\" }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'slider'\">\n\t\t\t\t\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t(change)=\"sliderClicked.emit(row)\"\n\t\t\t\t\t\t\t\t\t\t[checked]=\"row[head.key]\"\n\t\t\t\t\t\t\t\t\t\tclass=\"switched\"\n\t\t\t\t\t\t\t\t\t\tid=\"check-{{ row['id'] }}\"\n\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<label for=\"check-{{ row['id'] }}\"></label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'input'\">\n\t\t\t\t\t\t\t\t<input [value]=\"row[head.key]\" type=\"text\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<td *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"small-column\">\n\t\t\t\t\t\t<div class=\"menu text-end\">\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActions()\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t(click)=\"rowAction(action.actionName, row)\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\t\t\ttooltip=\"{{ action.label }}\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i></span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<as-lib-pagination\n\t\t\t(pageChange)=\"pageChange($event)\"\n\t\t\t*ngIf=\"totalPages > 1\"\n\t\t\t[align]=\"paginationAlignment()\"\n\t\t\t[enableLog]=\"enableLog()\"\n\t\t\t[first]=\"page() === 0\"\n\t\t\t[last]=\"page() === totalPages - 1\"\n\t\t\t[page]=\"page()\"\n\t\t\t[totalPages]=\"totalPages\"\n\t\t></as-lib-pagination>\n\t</div>\n\t<ng-template #tableHeadModal>\n\t\t<div class=\"modal-header\">\n\t\t\t<h4 class=\"modal-title pull-left\">Edit table header</h4>\n\t\t\t<button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n\t\t\t\t<span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"modal-body\">\n\t\t\t<ng-container *ngFor=\"let td of tableHead()\">\n\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t<input\n\t\t\t\t\t\t(change)=\"handleTHchange(td.key)\"\n\t\t\t\t\t\t[checked]=\"!td.hidden\"\n\t\t\t\t\t\t[disabled]=\"td.mandatory\"\n\t\t\t\t\t\t[readOnly]=\"td.mandatory\"\n\t\t\t\t\t\tclass=\"form-check-input\"\n\t\t\t\t\t\tid=\"{{ td.key }}\"\n\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<small class=\"small text-muted pt-2\">* Mandatory field for the view</small>\n\t\t</div>\n\t\t<div class=\"modal-footer\">\n\t\t\t<button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">Reset</button>\n\t\t\t<button (click)=\"modalClose()\" class=\"btn btn-primary\" translate=\"CLOSE\" type=\"button\">Close</button>\n\t\t</div>\n\t</ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"] }]
287
+ }], ctorParameters: () => [] });
288
+
289
+ /*
290
+ * Public API Surface of as-lib-generic-table
291
+ */
292
+
293
+ /**
294
+ * Generated bundle index. Do not edit.
295
+ */
296
+
297
+ export { AsLibGenericTableComponent, AsLibGenericTableService };
298
+ //# sourceMappingURL=agentsmith.bgd-as-lib-generic-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentsmith.bgd-as-lib-generic-table.mjs","sources":["../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.service.ts","../../../projects/as-lib-generic-table/src/lib/directives/component/tooltip.component.ts","../../../projects/as-lib-generic-table/src/lib/directives/component/tooltip.component.html","../../../projects/as-lib-generic-table/src/lib/directives/tooltip/tooltip.directive.ts","../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.component.ts","../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.component.html","../../../projects/as-lib-generic-table/src/public-api.ts","../../../projects/as-lib-generic-table/src/agentsmith.bgd-as-lib-generic-table.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsLibGenericTableService {\n\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n\tselector: 'tooltip',\n standalone: true,\n\ttemplateUrl: './tooltip.component.html',\n\tstyleUrls: ['./tooltip.component.scss'],\n})\nexport class TooltipComponent implements OnInit {\n\ttooltip: string = '';\n\tleft: number = 0;\n\ttop: number = 0;\n\n\tconstructor() {}\n\n\tngOnInit(): void {}\n}\n","<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n","import {\n ApplicationRef,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostListener,\n Injector,\n Input,\n ViewContainerRef,\n} from '@angular/core';\nimport { TooltipComponent } from '../component/tooltip.component';\n\n@Directive({\n selector: '[tooltip]',\n standalone: true\n})\nexport class TooltipDirective {\n @Input() tooltip = '';\n\n private componentRef: ComponentRef<any> | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private appRef: ApplicationRef,\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.componentRef === null) {\n this.componentRef = this.viewContainerRef.createComponent(TooltipComponent);\n this.componentRef.instance.text = this.tooltip;\n this.setTooltipComponentProperties();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.destroy();\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n if (this.componentRef !== null) {\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n private setTooltipComponentProperties() {\n if (this.componentRef !== null) {\n this.componentRef.instance.tooltip = this.tooltip;\n const {left, right, bottom} = this.elementRef.nativeElement.getBoundingClientRect();\n this.componentRef.instance.left = (right - left) / 2 + left;\n this.componentRef.instance.top = bottom;\n }\n }\n}\n","import { Component, effect, Inject, input, OnInit, output, TemplateRef } from '@angular/core';\nimport { IActionButton, IFilterParams, ITableHead } from \"./exports\";\nimport { debounceTime, distinctUntilChanged, Subject } from \"rxjs\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { TooltipDirective } from \"./directives/tooltip/tooltip.directive\";\nimport { TooltipComponent } from \"./directives/component/tooltip.component\";\nimport { AsLibPaginationComponent } from \"@agentsmith.bgd/as-lib-pagination\";\n\n@Component({\n selector: 'as-lib-generic-table',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TooltipDirective,\n TooltipComponent,\n AsLibPaginationComponent\n ],\n templateUrl: './as-lib-generic-table.component.html',\n styleUrl: './as-lib-generic-table.component.scss'\n})\nexport class AsLibGenericTableComponent implements OnInit {\n\n\n loading = input(false);\n striped = input(false);\n bordered = input(false);\n hovered = input(false);\n enableSearch = input(true);\n rowCounter = input(false);\n enableLog = input(false);\n perPage = input(10);\n\n tableHead = input<ITableHead[]>([]);\n\n tableData = input<Record<string, never>[]>([]);\n\n tableHeadStorage = input<string>('');\n\n perPageValues = input<number[]>([10, 20, 50, 100]);\n\n headerActions = input<IActionButton[]>([]);\n\n rowActions = input<IActionButton[]>([]);\n\n tableStyle = input<'' | 'table-light' | 'table-dark'>('');\n\n headStyle = input<\n | 'table-default'\n | 'table-primary'\n | 'table-secondary'\n | 'table-success'\n | 'table-danger'\n | 'table-warning'\n | 'table-info'\n | 'table-light'\n | 'table-dark'>('table-default');\n paginationAlignment = input<'' | 'justify-content-center' | 'justify-content-end'>('justify-content-end');\n\n totalItems = input(0);\n\n page = input(0);\n\n filterParamsChanged = output<IFilterParams>();\n\n editRow = output<Record<string, never>>();\n\n sliderClicked = output<Record<string, never>>();\n\n headerActionClicked = output<string>();\n\n rowActionClicked = output<{ action: string; value: any }>();\n\n tableHeadChanged = output<string[] | null>();\n\n\n bsModalRef!: BsModalRef;\n searchUpdate: Subject<string> = new Subject();\n search = '';\n totalPages = 0;\n counter = 0;\n private sort!: string;\n private sortOrder: 'asc' | 'desc' = 'asc';\n\n private modalService: BsModalService = Inject(BsModalService)\n\n\n constructor() {\n effect(() => {\n console.log(`The count is:`, this.totalItems(), this.page());\n this.counter = this.page() * this.perPage() + 1\n this.calculatePages();\n });\n }\n\n ngOnInit(): void {\n if (this.tableHeadStorage()) {\n const storage = localStorage.getItem(this.tableHeadStorage());\n if (storage) {\n const hidden: string[] = (JSON.parse(storage) as string[]) || [];\n this.tableHead().forEach(t => (t.hidden = hidden.includes(t.key)));\n } else {\n localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));\n }\n }\n this.sort = this.tableHead()[0].key;\n this.log('totalPages', this.totalPages);\n this.log('Table head', this.tableHead());\n this.log('Table data', this.tableData());\n this.log('Row actions', this.rowActions());\n this.searchUpdate.pipe(debounceTime(500), distinctUntilChanged()).subscribe(_ => {\n this.log('search', this.search);\n const emitValue: IFilterParams = {\n page: 0,\n sort: this.sort,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Search value change, sort values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n });\n\n if (!this.perPageValues().includes(this.perPage())) {\n throw new Error('Per page value invalid');\n }\n this.log('Loading', this.loading());\n }\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n openTableLayoutModal(tableHeadModal: TemplateRef<any>): void {\n this.log('Open layout');\n this.bsModalRef = this.modalService.show(tableHeadModal, {\n animated: true,\n ignoreBackdropClick: true,\n class: 'confirm-modal modal-sm',\n initialState: {},\n });\n }\n\n handleTHchange(key: string): void {\n this.log('change triggered', key);\n this.tableHead().forEach(t => {\n if (t.key === key) {\n t.hidden = !t.hidden;\n this.tableHeadStorage &&\n localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));\n }\n });\n }\n\n tableSort(key: string): void {\n this.log('table sort key', key);\n this.sort = key;\n this.tableHead().forEach(h => {\n if (h.key === key) {\n if (h.sort === 'headerSortDown') {\n this.sortOrder = 'desc';\n h.sort = 'headerSortUp';\n } else {\n h.sort = 'headerSortDown';\n this.sortOrder = 'asc';\n }\n const emitValue: IFilterParams = {\n page: 0,\n sort: this.sort,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Sort changed, filter values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n } else {\n h.sort = '';\n }\n });\n }\n\n changePerPage($event: Event): void {\n const perPage = parseInt(($event.target as HTMLSelectElement).value, 10) || 25;\n //this.perPage = perPage;\n // this.page = 0;\n this.log('changePerPage', perPage);\n this.calculatePages();\n this.filterParamsChanged.emit({\n page: 0,\n sort: this.sort,\n order: this.sortOrder,\n perPage: perPage,\n searchString: this.search,\n });\n }\n\n log(value: any, ...rest: any[]): void {\n if (this.enableLog() || localStorage.getItem('loggerEnable')) {\n console.log(`AS Dynamic Table -> ${value}`, ...rest);\n }\n }\n\n emitRow(row: Record<string, never>) {\n this.log('edit row', row);\n this.editRow.emit(row);\n }\n\n headerAction(actionName: string) {\n this.log('Header action', actionName);\n this.headerActionClicked.emit(actionName);\n }\n\n rowAction(action: string, value: Record<string, never>) {\n this.log('Row action', action, value);\n this.rowActionClicked.emit({action, value});\n }\n\n pageChange(page: number) {\n const emitValue: IFilterParams = {\n page,\n sort: this.sort,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Page change, filter values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n }\n\n modalClose() {\n const hiddenKeys = this.tableHead().filter(t => t.hidden).map(t => t.key);\n this.log('Modal closed, saved keys', hiddenKeys);\n this.tableHeadChanged.emit(hiddenKeys);\n this.bsModalRef.hide();\n }\n\n //\n resetValues() {\n this.tableHeadChanged.emit(null);\n this.bsModalRef.hide();\n }\n\n //\n private calculatePages() {\n this.totalPages = Math.ceil(this.totalItems() / this.perPage());\n this.log('total items/pages', this.totalItems(), this.totalPages);\n }\n\n\n}\n","<p *ngIf=\"loading()\">\n\t<img\n\t\t*ngIf=\"loading()\"\n\t\tclass=\"pl-3\"\n\t\tsrc=\"data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==\"\n\t/>\n</p>\n<div\n\t[ngClass]=\"{\n\t\tloading: loading()\n\t}\"\n\tclass=\"dynamic-table\"\n>\n\t<div class=\"row mb-3\">\n\t\t<div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\">\n\t\t\t<div *ngIf=\"perPageValues() && perPageValues().length\" class=\"d-block d-md-inline-flex me-0 me-md-3\">\n\t\t\t\t<div class=\"table-length\">\n\t\t\t\t\t<label\n\t\t\t\t\t\t>Show\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t(change)=\"changePerPage($event)\"\n\t\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\t\tclass=\"form-select form-select-sm\"\n\t\t\t\t\t\t\tname=\"data-table-combine_length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<option *ngFor=\"let perp of perPageValues()\" [selected]=\"perPage() === perp\" value=\"{{ perp }}\">{{ perp }}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\tentries</label\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"headerActions() && headerActions().length\" class=\"d-block d-inline-flex\">\n\t\t\t\t<div class=\"dt-buttons btn-group flex-wrap\">\n\t\t\t\t\t<ng-container *ngFor=\"let action of headerActions()\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t(click)=\"headerAction(action.actionName)\"\n\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\tid=\"header-action-{{ action.actionName }}\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i> {{ action.label }}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div *ngIf=\"enableSearch()\" class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n\t\t\t<div class=\"table-search\">\n\t\t\t\t<label\n\t\t\t\t\t>Search:\n\t\t\t\t\t<input\n\t\t\t\t\t\t(ngModelChange)=\"this.searchUpdate.next($event)\"\n\t\t\t\t\t\t[(ngModel)]=\"search\"\n\t\t\t\t\t\taria-controls=\"data-table-combine\"\n\t\t\t\t\t\tclass=\"form-control form-control-sm\"\n\t\t\t\t\t\tid=\"table-search\"\n\t\t\t\t\t\tplaceholder=\"\"\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t/></label>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"table-responsive\">\n\t\t<table\n\t\t\t[ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n\t\t\tclass=\"table table-fixed align-middle {{ tableStyle() }}\"\n\t\t>\n\t\t\t<thead [class]=\"headStyle()\">\n\t\t\t\t<tr>\n\t\t\t\t\t<th *ngIf=\"rowCounter\" class=\"text-end small-column\"> Nr.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t(click)=\"!head.notSortable && tableSort(head.key)\"\n\t\t\t\t\t\t\t*ngIf=\"!head.hidden\"\n\t\t\t\t\t\t\t[ngClass]=\"head.sort\"\n\t\t\t\t\t\t\tclass=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n\t\t\t\t\t\t\t\t<span class=\"fa\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<th *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"header small-column text-center p-0\" data-width=\"50\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t(click)=\"openTableLayoutModal(tableHeadModal)\"\n\t\t\t\t\t\t\t*ngIf=\"tableHeadStorage()\"\n\t\t\t\t\t\t\taria-controls=\"basic-link-dropdown\"\n\t\t\t\t\t\t\tclass=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n\t\t\t\t\t\t></a>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr *ngFor=\"let row of tableData(); let i = index\" class=\"{{ row['rowClass'] || '' }}\">\n\t\t\t\t\t<th *ngIf=\"rowCounter()\" class=\"text-end\"> {{ i + counter }}.</th>\n\t\t\t\t\t<ng-container *ngFor=\"let head of tableHead()\">\n\t\t\t\t\t\t<td *ngIf=\"!head.hidden\" class=\"header text-nowrap {{ head.cellAlign }}\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'select'\">\n\t\t\t\t\t\t\t\t<input class=\"select\" type=\"checkbox\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!head.type\">\n\t\t\t\t\t\t\t\t{{ row[head.key] }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'badge'\">\n\t\t\t\t\t\t\t\t<span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'date'\">\n\t\t\t\t\t\t\t\t{{ row[head.key] | date: \"dd.MM.yyyy HH:mm:ss\" }}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'slider'\">\n\t\t\t\t\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t(change)=\"sliderClicked.emit(row)\"\n\t\t\t\t\t\t\t\t\t\t[checked]=\"row[head.key]\"\n\t\t\t\t\t\t\t\t\t\tclass=\"switched\"\n\t\t\t\t\t\t\t\t\t\tid=\"check-{{ row['id'] }}\"\n\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<label for=\"check-{{ row['id'] }}\"></label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"head.type === 'input'\">\n\t\t\t\t\t\t\t\t<input [value]=\"row[head.key]\" type=\"text\" />\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</ng-container>\n\t\t\t\t\t<td *ngIf=\"tableHeadStorage() || (rowActions() && rowActions().length)\" class=\"small-column\">\n\t\t\t\t\t\t<div class=\"menu text-end\">\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActions()\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t(click)=\"rowAction(action.actionName, row)\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n\t\t\t\t\t\t\t\t\tclass=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n\t\t\t\t\t\t\t\t\ttooltip=\"{{ action.label }}\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span><i *ngIf=\"action.faIcon\" class=\"fa {{ action.faIcon }}\"></i></span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<as-lib-pagination\n\t\t\t(pageChange)=\"pageChange($event)\"\n\t\t\t*ngIf=\"totalPages > 1\"\n\t\t\t[align]=\"paginationAlignment()\"\n\t\t\t[enableLog]=\"enableLog()\"\n\t\t\t[first]=\"page() === 0\"\n\t\t\t[last]=\"page() === totalPages - 1\"\n\t\t\t[page]=\"page()\"\n\t\t\t[totalPages]=\"totalPages\"\n\t\t></as-lib-pagination>\n\t</div>\n\t<ng-template #tableHeadModal>\n\t\t<div class=\"modal-header\">\n\t\t\t<h4 class=\"modal-title pull-left\">Edit table header</h4>\n\t\t\t<button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n\t\t\t\t<span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"modal-body\">\n\t\t\t<ng-container *ngFor=\"let td of tableHead()\">\n\t\t\t\t<div class=\"form-check form-switch\">\n\t\t\t\t\t<input\n\t\t\t\t\t\t(change)=\"handleTHchange(td.key)\"\n\t\t\t\t\t\t[checked]=\"!td.hidden\"\n\t\t\t\t\t\t[disabled]=\"td.mandatory\"\n\t\t\t\t\t\t[readOnly]=\"td.mandatory\"\n\t\t\t\t\t\tclass=\"form-check-input\"\n\t\t\t\t\t\tid=\"{{ td.key }}\"\n\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<small class=\"small text-muted pt-2\">* Mandatory field for the view</small>\n\t\t</div>\n\t\t<div class=\"modal-footer\">\n\t\t\t<button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">Reset</button>\n\t\t\t<button (click)=\"modalClose()\" class=\"btn btn-primary\" translate=\"CLOSE\" type=\"button\">Close</button>\n\t\t</div>\n\t</ng-template>\n</div>\n","/*\n * Public API Surface of as-lib-generic-table\n */\n\nexport * from './lib/as-lib-generic-table.service';\nexport * from './lib/as-lib-generic-table.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@agentsmith.bgd/as-lib-generic-table" />
5
+ export * from './public-api';
@@ -0,0 +1,59 @@
1
+ import { OnInit, TemplateRef } from '@angular/core';
2
+ import { IActionButton, IFilterParams, ITableHead } from "./exports";
3
+ import { Subject } from "rxjs";
4
+ import { BsModalRef } from "ngx-bootstrap/modal";
5
+ import * as i0 from "@angular/core";
6
+ export declare class AsLibGenericTableComponent implements OnInit {
7
+ loading: import("@angular/core").InputSignal<boolean>;
8
+ striped: import("@angular/core").InputSignal<boolean>;
9
+ bordered: import("@angular/core").InputSignal<boolean>;
10
+ hovered: import("@angular/core").InputSignal<boolean>;
11
+ enableSearch: import("@angular/core").InputSignal<boolean>;
12
+ rowCounter: import("@angular/core").InputSignal<boolean>;
13
+ enableLog: import("@angular/core").InputSignal<boolean>;
14
+ perPage: import("@angular/core").InputSignal<number>;
15
+ tableHead: import("@angular/core").InputSignal<ITableHead[]>;
16
+ tableData: import("@angular/core").InputSignal<Record<string, never>[]>;
17
+ tableHeadStorage: import("@angular/core").InputSignal<string>;
18
+ perPageValues: import("@angular/core").InputSignal<number[]>;
19
+ headerActions: import("@angular/core").InputSignal<IActionButton[]>;
20
+ rowActions: import("@angular/core").InputSignal<IActionButton[]>;
21
+ tableStyle: import("@angular/core").InputSignal<"" | "table-light" | "table-dark">;
22
+ headStyle: import("@angular/core").InputSignal<"table-light" | "table-dark" | "table-default" | "table-primary" | "table-secondary" | "table-success" | "table-danger" | "table-warning" | "table-info">;
23
+ paginationAlignment: import("@angular/core").InputSignal<"" | "justify-content-center" | "justify-content-end">;
24
+ totalItems: import("@angular/core").InputSignal<number>;
25
+ page: import("@angular/core").InputSignal<number>;
26
+ filterParamsChanged: import("@angular/core").OutputEmitterRef<IFilterParams>;
27
+ editRow: import("@angular/core").OutputEmitterRef<Record<string, never>>;
28
+ sliderClicked: import("@angular/core").OutputEmitterRef<Record<string, never>>;
29
+ headerActionClicked: import("@angular/core").OutputEmitterRef<string>;
30
+ rowActionClicked: import("@angular/core").OutputEmitterRef<{
31
+ action: string;
32
+ value: any;
33
+ }>;
34
+ tableHeadChanged: import("@angular/core").OutputEmitterRef<string[] | null>;
35
+ bsModalRef: BsModalRef;
36
+ searchUpdate: Subject<string>;
37
+ search: string;
38
+ totalPages: number;
39
+ counter: number;
40
+ private sort;
41
+ private sortOrder;
42
+ private modalService;
43
+ constructor();
44
+ ngOnInit(): void;
45
+ openTableLayoutModal(tableHeadModal: TemplateRef<any>): void;
46
+ handleTHchange(key: string): void;
47
+ tableSort(key: string): void;
48
+ changePerPage($event: Event): void;
49
+ log(value: any, ...rest: any[]): void;
50
+ emitRow(row: Record<string, never>): void;
51
+ headerAction(actionName: string): void;
52
+ rowAction(action: string, value: Record<string, never>): void;
53
+ pageChange(page: number): void;
54
+ modalClose(): void;
55
+ resetValues(): void;
56
+ private calculatePages;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<AsLibGenericTableComponent, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<AsLibGenericTableComponent, "as-lib-generic-table", never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "hovered": { "alias": "hovered"; "required": false; "isSignal": true; }; "enableSearch": { "alias": "enableSearch"; "required": false; "isSignal": true; }; "rowCounter": { "alias": "rowCounter"; "required": false; "isSignal": true; }; "enableLog": { "alias": "enableLog"; "required": false; "isSignal": true; }; "perPage": { "alias": "perPage"; "required": false; "isSignal": true; }; "tableHead": { "alias": "tableHead"; "required": false; "isSignal": true; }; "tableData": { "alias": "tableData"; "required": false; "isSignal": true; }; "tableHeadStorage": { "alias": "tableHeadStorage"; "required": false; "isSignal": true; }; "perPageValues": { "alias": "perPageValues"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "tableStyle": { "alias": "tableStyle"; "required": false; "isSignal": true; }; "headStyle": { "alias": "headStyle"; "required": false; "isSignal": true; }; "paginationAlignment": { "alias": "paginationAlignment"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; }, { "filterParamsChanged": "filterParamsChanged"; "editRow": "editRow"; "sliderClicked": "sliderClicked"; "headerActionClicked": "headerActionClicked"; "rowActionClicked": "rowActionClicked"; "tableHeadChanged": "tableHeadChanged"; }, never, never, true, never>;
59
+ }
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class AsLibGenericTableService {
3
+ constructor();
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<AsLibGenericTableService, never>;
5
+ static ɵprov: i0.ɵɵInjectableDeclaration<AsLibGenericTableService>;
6
+ }
@@ -0,0 +1,11 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class TooltipComponent implements OnInit {
4
+ tooltip: string;
5
+ left: number;
6
+ top: number;
7
+ constructor();
8
+ ngOnInit(): void;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<TooltipComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<TooltipComponent, "tooltip", never, {}, {}, never, never, true, never>;
11
+ }
@@ -0,0 +1,17 @@
1
+ import { ApplicationRef, ElementRef, ViewContainerRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class TooltipDirective {
4
+ private elementRef;
5
+ private appRef;
6
+ private viewContainerRef;
7
+ tooltip: string;
8
+ private componentRef;
9
+ constructor(elementRef: ElementRef, appRef: ApplicationRef, viewContainerRef: ViewContainerRef);
10
+ onMouseEnter(): void;
11
+ onMouseLeave(): void;
12
+ ngOnDestroy(): void;
13
+ destroy(): void;
14
+ private setTooltipComponentProperties;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<TooltipDirective, never>;
16
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TooltipDirective, "[tooltip]", never, { "tooltip": { "alias": "tooltip"; "required": false; }; }, {}, never, never, true, never>;
17
+ }
@@ -0,0 +1,23 @@
1
+ export interface IActionButton {
2
+ actionName: string;
3
+ label?: string;
4
+ faIcon?: string;
5
+ btnColor?: 'btn-default' | 'btn-primary' | 'btn-secondary' | 'btn-success' | 'btn-danger' | 'btn-warning' | 'btn-info' | 'btn-light' | 'btn-dark';
6
+ }
7
+ export interface ITableHead {
8
+ hidden?: boolean;
9
+ key: string;
10
+ type?: 'select' | 'date' | 'slider' | 'input' | 'badge';
11
+ label?: string;
12
+ sort?: '' | 'headerSortDown' | 'headerSortUp';
13
+ mandatory?: boolean;
14
+ notSortable?: boolean;
15
+ cellAlign?: '' | 'text-center' | 'text-end';
16
+ }
17
+ export interface IFilterParams {
18
+ sort: string;
19
+ order: 'asc' | 'desc';
20
+ perPage: number;
21
+ searchString: string;
22
+ page: number;
23
+ }
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@agentsmith.bgd/as-lib-generic-table",
3
+ "version": "0.0.2",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.1.0",
6
+ "@angular/core": "^18.1.0",
7
+ "@agentsmith.bgd/as-lib-pagination": "0.0.4",
8
+ "font-awesome": "^4.7.0",
9
+ "ngx-bootstrap": "^18.0.2",
10
+ "ngx-pipes": "^3.2.2",
11
+ "rxjs": "~7.8.0"
12
+ },
13
+ "dependencies": {
14
+ "tslib": "^2.3.0"
15
+ },
16
+ "sideEffects": false,
17
+ "module": "fesm2022/agentsmith.bgd-as-lib-generic-table.mjs",
18
+ "typings": "index.d.ts",
19
+ "exports": {
20
+ "./package.json": {
21
+ "default": "./package.json"
22
+ },
23
+ ".": {
24
+ "types": "./index.d.ts",
25
+ "esm2022": "./esm2022/agentsmith.bgd-as-lib-generic-table.mjs",
26
+ "esm": "./esm2022/agentsmith.bgd-as-lib-generic-table.mjs",
27
+ "default": "./fesm2022/agentsmith.bgd-as-lib-generic-table.mjs"
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,2 @@
1
+ export * from './lib/as-lib-generic-table.service';
2
+ export * from './lib/as-lib-generic-table.component';