lib-portal-angular 0.0.33 → 0.0.35
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/lib/components/components.module.mjs +28 -14
- package/esm2022/lib/components/confirmation/confirmation.component.mjs +34 -0
- package/esm2022/lib/components/confirmation/confirmation.service.mjs +30 -0
- package/esm2022/lib/components/custom-pagination/custom-pagination.component.mjs +61 -0
- package/esm2022/lib/components/form/form.component.mjs +27 -18
- package/esm2022/lib/components/tables/data-table.component.mjs +173 -0
- package/esm2022/lib/components/tree-node/Itree-node.mjs +2 -0
- package/esm2022/lib/components/tree-node/tree-node.component.mjs +63 -0
- package/esm2022/lib/directive/autofocus-directive/autofocus.directive.mjs +19 -0
- package/esm2022/lib/lib-portal-angular.module.mjs +6 -3
- package/esm2022/public-api.mjs +6 -2
- package/fesm2022/lib-portal-angular.mjs +329 -59
- package/fesm2022/lib-portal-angular.mjs.map +1 -1
- package/lib/components/components.module.d.ts +9 -6
- package/lib/components/confirmation/confirmation.component.d.ts +14 -0
- package/lib/components/confirmation/confirmation.service.d.ts +9 -0
- package/lib/components/custom-pagination/custom-pagination.component.d.ts +17 -0
- package/lib/components/form/form.component.d.ts +8 -2
- package/lib/components/tables/data-table.component.d.ts +56 -0
- package/lib/components/tree-node/Itree-node.d.ts +7 -0
- package/lib/components/tree-node/tree-node.component.d.ts +17 -0
- package/lib/directive/autofocus-directive/autofocus.directive.d.ts +9 -0
- package/package.json +1 -1
- package/public-api.d.ts +5 -1
- package/esm2022/lib/components/tables/bootstrap-table.component.mjs +0 -115
- package/lib/components/tables/bootstrap-table.component.d.ts +0 -33
@@ -0,0 +1,173 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
import * as i1 from "@angular/common";
|
4
|
+
import * as i2 from "@angular/forms";
|
5
|
+
import * as i3 from "../custom-pagination/custom-pagination.component";
|
6
|
+
export class DataTableComponent {
|
7
|
+
constructor(cdr) {
|
8
|
+
this.cdr = cdr;
|
9
|
+
this.columns = [];
|
10
|
+
this.data = [];
|
11
|
+
this.itemsPerPageOptions = [5, 10, 15, 20];
|
12
|
+
this.defaultItemsPerPage = 10;
|
13
|
+
this.itemsPerPageLabel = 'Items per page:';
|
14
|
+
this.marginTop = 0;
|
15
|
+
this.marginBottom = 0;
|
16
|
+
this.marginLeft = 0;
|
17
|
+
this.marginRight = 0;
|
18
|
+
this.showActionColumn = false;
|
19
|
+
this.actionColumnLabel = 'Actions';
|
20
|
+
this.totalItems = 0;
|
21
|
+
this.tableFontColor = '#000';
|
22
|
+
this.tableFontSize = '14px';
|
23
|
+
this.fetchDataFunction = () => {
|
24
|
+
return Promise.reject('Implement the fetchDataFunction to fetch paginated data from the back-end.');
|
25
|
+
}; // Função de busca de dados
|
26
|
+
this.editPermissions = [];
|
27
|
+
this.deletePermissions = [];
|
28
|
+
this.viewPermissions = [];
|
29
|
+
this.userPermissions = [];
|
30
|
+
this.showPageInfo = true; // Controle de exibição da informação da página
|
31
|
+
this.pageText = 'Page'; // Texto para "Page"
|
32
|
+
this.ofText = 'of'; // Texto para "of"
|
33
|
+
this.sortChange = new EventEmitter();
|
34
|
+
this.pageChange = new EventEmitter();
|
35
|
+
this.itemsPerPageChange = new EventEmitter();
|
36
|
+
this.onEditTable = new EventEmitter();
|
37
|
+
this.onDeleteTable = new EventEmitter();
|
38
|
+
this.onViewTable = new EventEmitter();
|
39
|
+
this.currentPage = 1;
|
40
|
+
this.pagedData = [];
|
41
|
+
this.isLoading = false;
|
42
|
+
this.labelStyle = {
|
43
|
+
'font-family': 'Inter, Arial, sans-serif',
|
44
|
+
'font-size': '14px',
|
45
|
+
'color': '#000'
|
46
|
+
};
|
47
|
+
}
|
48
|
+
ngOnInit() {
|
49
|
+
this.fetchData();
|
50
|
+
this.setDefaultPermissions();
|
51
|
+
}
|
52
|
+
ngOnChanges(changes) {
|
53
|
+
if (changes['totalItems'] || changes['defaultItemsPerPage'] || changes['currentPage'] || changes['data']) {
|
54
|
+
this.fetchData();
|
55
|
+
}
|
56
|
+
}
|
57
|
+
setDefaultPermissions() {
|
58
|
+
if (!this.userPermissions || this.userPermissions.length === 0) {
|
59
|
+
this.userPermissions = ['edit', 'delete', 'view'];
|
60
|
+
}
|
61
|
+
}
|
62
|
+
async fetchData() {
|
63
|
+
if (this.fetchDataFunction) {
|
64
|
+
this.isLoading = true;
|
65
|
+
try {
|
66
|
+
const data = await this.fetchDataFunction(this.currentPage, this.defaultItemsPerPage);
|
67
|
+
this.pagedData = data.items;
|
68
|
+
this.totalItems = data.totalItems;
|
69
|
+
}
|
70
|
+
finally {
|
71
|
+
this.isLoading = false;
|
72
|
+
this.cdr.markForCheck(); // Força a detecção de mudanças
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
onSort(column) {
|
77
|
+
this.sortChange.emit(column);
|
78
|
+
}
|
79
|
+
onPageChange(page) {
|
80
|
+
this.currentPage = page;
|
81
|
+
this.pageChange.emit(page);
|
82
|
+
this.fetchData();
|
83
|
+
}
|
84
|
+
onItemsPerPageChange(event) {
|
85
|
+
const itemsPerPage = parseInt(event, 10);
|
86
|
+
this.defaultItemsPerPage = itemsPerPage;
|
87
|
+
this.currentPage = 1;
|
88
|
+
this.itemsPerPageChange.emit(itemsPerPage);
|
89
|
+
this.fetchData();
|
90
|
+
}
|
91
|
+
handleAction(action, item, index) {
|
92
|
+
switch (action) {
|
93
|
+
case 'edit':
|
94
|
+
this.onEditTable.emit({ item, index });
|
95
|
+
break;
|
96
|
+
case 'delete':
|
97
|
+
this.onDeleteTable.emit({ item, index });
|
98
|
+
break;
|
99
|
+
case 'view':
|
100
|
+
this.onViewTable.emit({ item, index });
|
101
|
+
break;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
hasPermission(requiredPermissions) {
|
105
|
+
if (!this.userPermissions || this.userPermissions.length === 0) {
|
106
|
+
return true;
|
107
|
+
}
|
108
|
+
return requiredPermissions.every(permission => this.userPermissions.includes(permission));
|
109
|
+
}
|
110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
111
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataTableComponent, selector: "sim-data-table", inputs: { columns: "columns", data: "data", itemsPerPageOptions: "itemsPerPageOptions", defaultItemsPerPage: "defaultItemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", marginTop: "marginTop", marginBottom: "marginBottom", marginLeft: "marginLeft", marginRight: "marginRight", showActionColumn: "showActionColumn", actionColumnLabel: "actionColumnLabel", totalItems: "totalItems", tableFontColor: "tableFontColor", tableFontSize: "tableFontSize", fetchDataFunction: "fetchDataFunction", editPermissions: "editPermissions", deletePermissions: "deletePermissions", viewPermissions: "viewPermissions", userPermissions: "userPermissions", showPageInfo: "showPageInfo", pageText: "pageText", ofText: "ofText" }, outputs: { sortChange: "sortChange", pageChange: "pageChange", itemsPerPageChange: "itemsPerPageChange", onEditTable: "onEditTable", onDeleteTable: "onDeleteTable", onViewTable: "onViewTable" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group\" [ngStyle]=\"{\n 'margin-top': marginTop + 'rem',\n 'margin-bottom': marginBottom + 'rem',\n 'margin-left': marginLeft + 'rem',\n 'margin-right': marginRight + 'rem'\n}\" style=\"text-align: right;\">\n <label for=\"itemsPerPageSelect\" style=\"margin-right: 0.5rem; margin-bottom: 0.7rem;\" [ngStyle]=\"labelStyle\">{{ itemsPerPageLabel }}</label>\n <select\n id=\"itemsPerPageSelect\"\n class=\"form-control form-control-sm d-inline-block w-auto\"\n [(ngModel)]=\"defaultItemsPerPage\"\n (ngModelChange)=\"onItemsPerPageChange($event)\">\n <option *ngFor=\"let option of itemsPerPageOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n</div>\n\n<div class=\"table-responsive\">\n <table class=\"table table-hover\" [ngStyle]=\"{ 'color': tableFontColor, 'font-size': tableFontSize }\">\n <thead>\n <tr>\n <ng-container *ngFor=\"let column of columns\">\n <th *ngIf=\"hasPermission(column.permissions || [])\" (click)=\"onSort(column.prop)\">\n {{ column.label }}\n </th>\n </ng-container>\n <th *ngIf=\"showActionColumn\">{{ actionColumnLabel }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of pagedData; let i = index\">\n <ng-container *ngFor=\"let column of columns\">\n <td *ngIf=\"hasPermission(column.permissions || [])\">\n {{ item[column.prop] }}\n </td>\n </ng-container>\n <td *ngIf=\"showActionColumn\">\n <div class=\"d-flex justify-content-center\">\n <div *ngIf=\"hasPermission(editPermissions)\" (click)=\"handleAction('edit', item, i)\" class=\"btn-icon edit mx-1\"></div>\n <div *ngIf=\"hasPermission(deletePermissions)\" (click)=\"handleAction('delete', item, i)\" class=\"btn-icon delete mx-1\"></div>\n <div *ngIf=\"hasPermission(viewPermissions)\" (click)=\"handleAction('view', item, i)\" class=\"btn-icon view mx-1\"></div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"text-center pagination-controls\">\n <custom-pagination\n [totalItems]=\"totalItems\"\n [itemsPerPage]=\"defaultItemsPerPage\"\n [currentPage]=\"currentPage\"\n [showPageInfo]=\"showPageInfo\"\n [pageText]=\"pageText\"\n [ofText]=\"ofText\"\n (pageChange)=\"onPageChange($event)\">\n </custom-pagination>\n</div>\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\";:host{font-family:Inter,Arial,sans-serif}.label-style{font-family:Inter,Arial,sans-serif;font-size:14px;color:#000}.table{font-family:Inter,Arial,sans-serif;color:var(--table-font-color, #000);font-size:var(--table-font-size, 14px);border-collapse:separate;border-spacing:0;border-radius:8px;overflow:hidden;border:.13rem solid #00444C}.table thead th{background-color:#00444c;color:#fff;padding:10px;border-bottom:1rem solid rgba(0,68,76,.8);border-right:1rem solid rgba(0,68,76,.8);border-radius:0}.table thead th:last-child{border-right:none}.table tbody td{padding:10px;border-bottom:.1rem solid rgba(0,68,76,.8);border-right:.1rem solid rgba(0,68,76,.8)}.table tbody tr:last-child td{border-bottom:none}.table tbody td:last-child{border-right:none}.table thead th:first-child{border-top-left-radius:0}.table thead th:last-child{border-top-right-radius:0}.table tbody tr:last-child td:first-child{border-bottom-left-radius:8px}.table tbody tr:last-child td:last-child{border-bottom-right-radius:8px}.btn-icon{width:24px;height:24px;background-size:cover;display:inline-block;cursor:pointer;margin-right:16px}.btn-icon.edit{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAABrUlEQVR4nGNgoDI44+PD9b++nona5jLsSC4UupOauvpVVdXLJ4WF128mJkZSzfCdxfViG5dueHtswcr/3/v7wfhxYeF1qvikuLtbbMXG/WduPPvy/+K9t/8PLVwFtuBlZeVLUHBRZHhMdzF3Wk//7XN3Xv27+fzrfxC+dPfNf5BP7qanr6DYcL2CxF2MLj7/oxp7/1+4+wZsCcgnm5Zuersls0KQIsP185N2gwxngOLw+p7/IJ8s37Tv4sbWVnGquJwBCYP4qb199/ImTKDQ8MKEndgM1y9MPOjXWcpLkeFGxYl7GF3pbLjBkHW5/sg1vL47Q8y6JOE0zQwPqEl8h244g6vPf928hH0UGQ4CU2akHbLOjcN0eX7intApWTwUGb6221vn0d7KD5s2VP93LEyAG+5UGn+bYsNBYM/chFlfz7X+B+Etm6r/OxQm/A+oTnpXPyVegmLDMzJcxULDgn883F8PtuDR3oqPs2enHaickEx+wYUMcpKDNps5+P4PDQv+uW9e8sIVfYFGDNQC/xkYGIOD/Z8nxwfujIvzlqaawTBQz8DABMJUNxgKAOk7VoIIOJGlAAAAAElFTkSuQmCC)}.btn-icon.delete{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 viewBox%3D%220%2C0%2C256%2C256%22 width%3D%2224px%22 height%3D%2224px%22%3E%3Cg fill%3D%22%23fb0909%22 fill-rule%3D%22nonzero%22 stroke%3D%22none%22 stroke-width%3D%221%22 stroke-linecap%3D%22butt%22 stroke-linejoin%3D%22miter%22 stroke-miterlimit%3D%2210%22 stroke-dasharray%3D%22%22 stroke-dashoffset%3D%220%22 font-family%3D%22none%22 font-weight%3D%22none%22 font-size%3D%22none%22 text-anchor%3D%22none%22 style%3D%22mix-blend-mode%3A normal%22%3E%3Cg transform%3D%22scale(2%2C2)%22%3E%3Cpath d%3D%22M49%2C1c-1.66%2C0 -3%2C1.34 -3%2C3c0%2C1.66 1.34%2C3 3%2C3h30c1.66%2C0 3%2C-1.34 3%2C-3c0%2C-1.66 -1.34%2C-3 -3%2C-3zM24%2C15c-7.17%2C0 -13%2C5.83 -13%2C13c0%2C7.17 5.83%2C13 13%2C13h77v63c0%2C9.37 -7.63%2C17 -17%2C17h-40c-9.37%2C0 -17%2C-7.63 -17%2C-17v-52c0%2C-1.66 -1.34%2C-3 -3%2C-3c-1.66%2C0 -3%2C1.34 -3%2C3v52c0%2C12.68 10.32%2C23 23%2C23h40c12.68%2C0 23%2C-10.32 23%2C-23v-63.35937c5.72%2C-1.36 10%2C-6.50062 10%2C-12.64062c0%2C-7.17 -5.83%2C-13 -13%2C-13zM24%2C21h80c3.86%2C0 7%2C3.14 7%2C7c0%2C3.86 -3.14%2C7 -7%2C7h-80c-3.86%2C0 -7%2C-3.14 -7%2C-7c0%2C-3.86 3.14%2C-7 7%2C-7zM50%2C55c-1.66%2C0 -3%2C1.34 -3%2C3v46c0%2C1.66 1.34%2C3 3%2C3c1.66%2C0 3%2C-1.34 3%2C-3v-46c0%2C-1.66 -1.34%2C-3 -3%2C-3zM78%2C55c-1.66%2C0 -3%2C1.34 -3%2C3v46c0%2C1.66 1.34%2C3 3%2C3c1.66%2C0 3%2C-1.34 3%2C-3v-46c0%2C-1.66 -1.34%2C-3 -3%2C-3z%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.btn-icon.view{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAQHQAAEB0B0blUQwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAcrSURBVHja7Zt5TBRXHMc1aZu09Y8mbdI/G5NqatukTUysu4iuSgHxrLYeKOsRrfGIpsa2aluDWiM0aivWgyogKDvDSjhEsevOsOCCCyjKjZy6FLmP5XC5+fW9gdnssos7CzM4u/CSbzhmMrOf73vv997v7XtTAGCKLblRhLsbpTgspYibEoqoQD/BCWSQUookKUWeltCKDZ6qiHdH4mNl9Y85VPj76EGkkwDbU7mUjprP2QCpmliKar7GReBZ9Uto4uxnSuVbrzRgXhL5Bbq5x8XgzUQGjmjA7EfBb6Kbsl0XfrAloPggsWmAlCZOuDg8qxLJA+Xb1gZQROMEMQAkFLnMwoD5KuX0iQKP5UaRRy0McFMr1vL9ksO5WshqroNtmSrxmaAm4i0MwNGRzxfse5wEvQP9gMuV8lwxtgK9ZQugyMt8PdxXdwfae3sY+JrODlh2P1aUs0VBDFiKYKsRNC7YhI26RNFOl3k3YGGSEgpaGxn4voEB2I+6gZjzBYcM2PWIglOFmbAgKWqEqEqApq4S2ILv5fJB5tEkyJBxfGo+HcW/AU3dnQxYYWsTrEm7ZXU98nmRCf7680JO8Nsz74Ghpwv4Lrj1/V36hF8DIp4VmF7Q3tsNh3K0pmt/FD00XaNRK3Dj2Ax/zUsDocrdmmf8xwD//Adg7Os1vYTUP4Ufs1MYx3HJNzQyTdCRvrgl41848CSZV+3NokfsqmMOgusf3IbS9hYrx6uNHeBzP8aZZoOjHwVwLcdXlVl0CTz2O9l0eOzD4G+oDyfX/8cEMyfMBwyCzQQnDZg0YNKASQOw1qTeggul2UyCNOEMWKmNg/ouo5jXA4QzYLHmJpS0NTPweFFEpMOkMAbg7C614YVpkvR7QfrEigHKymIT/DWUQLlMEMTN2l4wO1ucZYJX1+o5Z4VOYQBOgPpR1hdakc808+HXD6KssH8oK8xpaeCSjcEKFCixUY+b63hVemM1l9UoxwzIaak31e6j5lqLhc7NKKVl0+QqYzssSeGWFeJVI6FKCspReDXg6+RooGv1phc0dncyefcKs+GuDWWF61C6zLUZ4mdeLc+D2KpSXhWF4tCm9ERhgiBe/enu72OAcZOv7XzJ/N7T3w97kCETYiYoT78L+pdtFk3ueL5O9NCbFOdhfdQFfobBRWhUSKyuYFrDRTTdFTP4koRQuLvPD4p8fRjFHNwGHonhrbzMAzguQb82eSeEQdLuDSZ4VnEHtvYqZbJpLp0Net8OA9oGfO6m5XB+83d9171kWtYElzPAC8Pv8bUJH7RlLSD4IS1IQfhTXcqAJaqrEB0gtwG/DIK2msMPKsJ7oY/LGIDhcyPmQkPITEg++o1deEaesoOCGTCeQZKFb7s6nRFrgh14o2K57ANBDCD0T5kJ0tG8tHGHZ1UTOgsuH1lvG95L1oXkLUgQxF9OsgVniULC+6iuQF64NXxzyMeguSSD0rOfQtj+5Rbw13wWM31fkGHwSG4qDAzBZzbVgruN7HG84PWnZzAyNyHcZxFsDA7oEGRBBC9/dQ3lCs86WsETJTyvAz7ZDN7chJAfVoJvcIAwK0J4Fbh5aB8B3k+A/7YXIPHXa+eKHzus4HwNVCrcreANITMgO8TLCh6r/MwnsDfGf3S5wF+oHye8KIdVqfE2r+OaxjWOC24BXBZCTxSkjyrXHzA2QEe0pxV8W+hMqItczQXecQMah2q2taeb2RMwvCYfor7OfDgkHAO4tJgNujvMniK8k4yralv0YLjpYRO+6sYqrvCOG4A3PbKrPhhSoS8yjfG4ZbCFw9aU0e9AQ30+P/wrK/gm1OyTLy1wBN7aAClNXOSyOaLMbHMErj1sBFviqsqcBR6refhO0QNct8KZb45gS0ZTjWDD3VLVP6OC3xNz7FXPfTisCxDujnwo8/1C5e0GZn1PqJovCJ/jEHzZmVn24LGCLQyQaZTTBg8TcP9wa9MS4E80OnBdBR6NgjJiITtykUPwu+3Dg4RS7LR1XiBTbNldekEyVBXRJhMwfMoY4ZEGpCrycysDJHTkHHSxTzSLGklR0FimgyakF8iErEhPO/DHuT2bJoNGPDSFbjgpFgN+0t1i4LFqStLgTooS7l/2GBu8miidnZDwzogG4GNl6EadGAwgs9UmeBWagRYiZQ8zAcPv4ggvoYgOCU1I7Z4bZE6PqQn/1318rvip1gK+cJgJjsDjk6T4WBDnk6NMd7gX+eXgEVTCON7w6xKvwwn/I3Ay8JgFPFYOEqEhYXt8oP1gRxEliGE3Aprq0NFZc8k0mjcYM9TEDjdacQo9NEBILSSDL+7YtdMol8vh+x3bIV8bB2na2HpFSkzGL5pocjFFnn7lM2ji57lUlIdME/aevTPDnAwYT/n6+n6EwCsw/Ga5fCAo8Pi5vPT4D4V+r2gMQODxGB6pF+nb8XqvmAw4hFTp5+e3ejzf+z+xmopYfAdAyAAAAABJRU5ErkJggg==)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: "component", type: i3.CustomPaginationComponent, selector: "custom-pagination", inputs: ["totalItems", "itemsPerPage", "currentPage", "maxSize", "pageText", "ofText", "showPageInfo"], outputs: ["pageChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
112
|
+
}
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableComponent, decorators: [{
|
114
|
+
type: Component,
|
115
|
+
args: [{ selector: 'sim-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group\" [ngStyle]=\"{\n 'margin-top': marginTop + 'rem',\n 'margin-bottom': marginBottom + 'rem',\n 'margin-left': marginLeft + 'rem',\n 'margin-right': marginRight + 'rem'\n}\" style=\"text-align: right;\">\n <label for=\"itemsPerPageSelect\" style=\"margin-right: 0.5rem; margin-bottom: 0.7rem;\" [ngStyle]=\"labelStyle\">{{ itemsPerPageLabel }}</label>\n <select\n id=\"itemsPerPageSelect\"\n class=\"form-control form-control-sm d-inline-block w-auto\"\n [(ngModel)]=\"defaultItemsPerPage\"\n (ngModelChange)=\"onItemsPerPageChange($event)\">\n <option *ngFor=\"let option of itemsPerPageOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n</div>\n\n<div class=\"table-responsive\">\n <table class=\"table table-hover\" [ngStyle]=\"{ 'color': tableFontColor, 'font-size': tableFontSize }\">\n <thead>\n <tr>\n <ng-container *ngFor=\"let column of columns\">\n <th *ngIf=\"hasPermission(column.permissions || [])\" (click)=\"onSort(column.prop)\">\n {{ column.label }}\n </th>\n </ng-container>\n <th *ngIf=\"showActionColumn\">{{ actionColumnLabel }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of pagedData; let i = index\">\n <ng-container *ngFor=\"let column of columns\">\n <td *ngIf=\"hasPermission(column.permissions || [])\">\n {{ item[column.prop] }}\n </td>\n </ng-container>\n <td *ngIf=\"showActionColumn\">\n <div class=\"d-flex justify-content-center\">\n <div *ngIf=\"hasPermission(editPermissions)\" (click)=\"handleAction('edit', item, i)\" class=\"btn-icon edit mx-1\"></div>\n <div *ngIf=\"hasPermission(deletePermissions)\" (click)=\"handleAction('delete', item, i)\" class=\"btn-icon delete mx-1\"></div>\n <div *ngIf=\"hasPermission(viewPermissions)\" (click)=\"handleAction('view', item, i)\" class=\"btn-icon view mx-1\"></div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"text-center pagination-controls\">\n <custom-pagination\n [totalItems]=\"totalItems\"\n [itemsPerPage]=\"defaultItemsPerPage\"\n [currentPage]=\"currentPage\"\n [showPageInfo]=\"showPageInfo\"\n [pageText]=\"pageText\"\n [ofText]=\"ofText\"\n (pageChange)=\"onPageChange($event)\">\n </custom-pagination>\n</div>\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\";:host{font-family:Inter,Arial,sans-serif}.label-style{font-family:Inter,Arial,sans-serif;font-size:14px;color:#000}.table{font-family:Inter,Arial,sans-serif;color:var(--table-font-color, #000);font-size:var(--table-font-size, 14px);border-collapse:separate;border-spacing:0;border-radius:8px;overflow:hidden;border:.13rem solid #00444C}.table thead th{background-color:#00444c;color:#fff;padding:10px;border-bottom:1rem solid rgba(0,68,76,.8);border-right:1rem solid rgba(0,68,76,.8);border-radius:0}.table thead th:last-child{border-right:none}.table tbody td{padding:10px;border-bottom:.1rem solid rgba(0,68,76,.8);border-right:.1rem solid rgba(0,68,76,.8)}.table tbody tr:last-child td{border-bottom:none}.table tbody td:last-child{border-right:none}.table thead th:first-child{border-top-left-radius:0}.table thead th:last-child{border-top-right-radius:0}.table tbody tr:last-child td:first-child{border-bottom-left-radius:8px}.table tbody tr:last-child td:last-child{border-bottom-right-radius:8px}.btn-icon{width:24px;height:24px;background-size:cover;display:inline-block;cursor:pointer;margin-right:16px}.btn-icon.edit{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAABrUlEQVR4nGNgoDI44+PD9b++nona5jLsSC4UupOauvpVVdXLJ4WF128mJkZSzfCdxfViG5dueHtswcr/3/v7wfhxYeF1qvikuLtbbMXG/WduPPvy/+K9t/8PLVwFtuBlZeVLUHBRZHhMdzF3Wk//7XN3Xv27+fzrfxC+dPfNf5BP7qanr6DYcL2CxF2MLj7/oxp7/1+4+wZsCcgnm5Zuersls0KQIsP185N2gwxngOLw+p7/IJ8s37Tv4sbWVnGquJwBCYP4qb199/ImTKDQ8MKEndgM1y9MPOjXWcpLkeFGxYl7GF3pbLjBkHW5/sg1vL47Q8y6JOE0zQwPqEl8h244g6vPf928hH0UGQ4CU2akHbLOjcN0eX7intApWTwUGb6221vn0d7KD5s2VP93LEyAG+5UGn+bYsNBYM/chFlfz7X+B+Etm6r/OxQm/A+oTnpXPyVegmLDMzJcxULDgn883F8PtuDR3oqPs2enHaickEx+wYUMcpKDNps5+P4PDQv+uW9e8sIVfYFGDNQC/xkYGIOD/Z8nxwfujIvzlqaawTBQz8DABMJUNxgKAOk7VoIIOJGlAAAAAElFTkSuQmCC)}.btn-icon.delete{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 viewBox%3D%220%2C0%2C256%2C256%22 width%3D%2224px%22 height%3D%2224px%22%3E%3Cg fill%3D%22%23fb0909%22 fill-rule%3D%22nonzero%22 stroke%3D%22none%22 stroke-width%3D%221%22 stroke-linecap%3D%22butt%22 stroke-linejoin%3D%22miter%22 stroke-miterlimit%3D%2210%22 stroke-dasharray%3D%22%22 stroke-dashoffset%3D%220%22 font-family%3D%22none%22 font-weight%3D%22none%22 font-size%3D%22none%22 text-anchor%3D%22none%22 style%3D%22mix-blend-mode%3A normal%22%3E%3Cg transform%3D%22scale(2%2C2)%22%3E%3Cpath d%3D%22M49%2C1c-1.66%2C0 -3%2C1.34 -3%2C3c0%2C1.66 1.34%2C3 3%2C3h30c1.66%2C0 3%2C-1.34 3%2C-3c0%2C-1.66 -1.34%2C-3 -3%2C-3zM24%2C15c-7.17%2C0 -13%2C5.83 -13%2C13c0%2C7.17 5.83%2C13 13%2C13h77v63c0%2C9.37 -7.63%2C17 -17%2C17h-40c-9.37%2C0 -17%2C-7.63 -17%2C-17v-52c0%2C-1.66 -1.34%2C-3 -3%2C-3c-1.66%2C0 -3%2C1.34 -3%2C3v52c0%2C12.68 10.32%2C23 23%2C23h40c12.68%2C0 23%2C-10.32 23%2C-23v-63.35937c5.72%2C-1.36 10%2C-6.50062 10%2C-12.64062c0%2C-7.17 -5.83%2C-13 -13%2C-13zM24%2C21h80c3.86%2C0 7%2C3.14 7%2C7c0%2C3.86 -3.14%2C7 -7%2C7h-80c-3.86%2C0 -7%2C-3.14 -7%2C-7c0%2C-3.86 3.14%2C-7 7%2C-7zM50%2C55c-1.66%2C0 -3%2C1.34 -3%2C3v46c0%2C1.66 1.34%2C3 3%2C3c1.66%2C0 3%2C-1.34 3%2C-3v-46c0%2C-1.66 -1.34%2C-3 -3%2C-3zM78%2C55c-1.66%2C0 -3%2C1.34 -3%2C3v46c0%2C1.66 1.34%2C3 3%2C3c1.66%2C0 3%2C-1.34 3%2C-3v-46c0%2C-1.66 -1.34%2C-3 -3%2C-3z%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.btn-icon.view{background-image:url(data:image/png;base64,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)}\n"] }]
|
116
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { columns: [{
|
117
|
+
type: Input
|
118
|
+
}], data: [{
|
119
|
+
type: Input
|
120
|
+
}], itemsPerPageOptions: [{
|
121
|
+
type: Input
|
122
|
+
}], defaultItemsPerPage: [{
|
123
|
+
type: Input
|
124
|
+
}], itemsPerPageLabel: [{
|
125
|
+
type: Input
|
126
|
+
}], marginTop: [{
|
127
|
+
type: Input
|
128
|
+
}], marginBottom: [{
|
129
|
+
type: Input
|
130
|
+
}], marginLeft: [{
|
131
|
+
type: Input
|
132
|
+
}], marginRight: [{
|
133
|
+
type: Input
|
134
|
+
}], showActionColumn: [{
|
135
|
+
type: Input
|
136
|
+
}], actionColumnLabel: [{
|
137
|
+
type: Input
|
138
|
+
}], totalItems: [{
|
139
|
+
type: Input
|
140
|
+
}], tableFontColor: [{
|
141
|
+
type: Input
|
142
|
+
}], tableFontSize: [{
|
143
|
+
type: Input
|
144
|
+
}], fetchDataFunction: [{
|
145
|
+
type: Input
|
146
|
+
}], editPermissions: [{
|
147
|
+
type: Input
|
148
|
+
}], deletePermissions: [{
|
149
|
+
type: Input
|
150
|
+
}], viewPermissions: [{
|
151
|
+
type: Input
|
152
|
+
}], userPermissions: [{
|
153
|
+
type: Input
|
154
|
+
}], showPageInfo: [{
|
155
|
+
type: Input
|
156
|
+
}], pageText: [{
|
157
|
+
type: Input
|
158
|
+
}], ofText: [{
|
159
|
+
type: Input
|
160
|
+
}], sortChange: [{
|
161
|
+
type: Output
|
162
|
+
}], pageChange: [{
|
163
|
+
type: Output
|
164
|
+
}], itemsPerPageChange: [{
|
165
|
+
type: Output
|
166
|
+
}], onEditTable: [{
|
167
|
+
type: Output
|
168
|
+
}], onDeleteTable: [{
|
169
|
+
type: Output
|
170
|
+
}], onViewTable: [{
|
171
|
+
type: Output
|
172
|
+
}] } });
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItcG9ydGFsLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRckosTUFBTSxPQUFPLGtCQUFrQjtJQTJDN0IsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUExQ2pDLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUNqQix3QkFBbUIsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELHdCQUFtQixHQUFXLEVBQUUsQ0FBQztRQUNqQyxzQkFBaUIsR0FBVyxpQkFBaUIsQ0FBQztRQUM5QyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLHNCQUFpQixHQUFXLFNBQVMsQ0FBQztRQUN0QyxlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQVcsTUFBTSxDQUFDO1FBQ2hDLGtCQUFhLEdBQVcsTUFBTSxDQUFDO1FBQy9CLHNCQUFpQixHQUEwRixHQUFHLEVB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QjtrQkFOOUIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTt3R0FHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW0tZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGNvbHVtbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjBdO1xuICBASW5wdXQoKSBkZWZhdWx0SXRlbXNQZXJQYWdlOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlTGFiZWw6IHN0cmluZyA9ICdJdGVtcyBwZXIgcGFnZTonO1xuICBASW5wdXQoKSBtYXJnaW5Ub3A6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIG1hcmdpbkJvdHRvbTogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgbWFyZ2luTGVmdDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgbWFyZ2luUmlnaHQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHNob3dBY3Rpb25Db2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1uTGFiZWw6IHN0cmluZyA9ICdBY3Rpb25zJztcbiAgQElucHV0KCkgdG90YWxJdGVtczogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgdGFibGVGb250Q29sb3I6IHN0cmluZyA9ICcjMDAwJztcbiAgQElucHV0KCkgdGFibGVGb250U2l6ZTogc3RyaW5nID0gJzE0cHgnO1xuICBASW5wdXQoKSBmZXRjaERhdGFGdW5jdGlvbjogKHBhZ2U6IG51bWJlciwgaXRlbXNQZXJQYWdlOiBudW1iZXIpID0+IFByb21pc2U8eyBpdGVtczogYW55W10sIHRvdGFsSXRlbXM6IG51bWJlciB9PiA9ICgpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0ltcGxlbWVudCB0aGUgZmV0Y2hEYXRhRnVuY3Rpb24gdG8gZmV0Y2ggcGFnaW5hdGVkIGRhdGEgZnJvbSB0aGUgYmFjay1lbmQuJyk7XG4gIH07IC8vIEZ1bsOnw6NvIGRlIGJ1c2NhIGRlIGRhZG9zXG4gIEBJbnB1dCgpIGVkaXRQZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgZGVsZXRlUGVybWlzc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIHZpZXdQZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgdXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBzaG93UGFnZUluZm86IGJvb2xlYW4gPSB0cnVlOyAvLyBDb250cm9sZSBkZSBleGliacOnw6NvIGRhIGluZm9ybWHDp8OjbyBkYSBww6FnaW5hXG4gIEBJbnB1dCgpIHBhZ2VUZXh0OiBzdHJpbmcgPSAnUGFnZSc7IC8vIFRleHRvIHBhcmEgXCJQYWdlXCJcbiAgQElucHV0KCkgb2ZUZXh0OiBzdHJpbmcgPSAnb2YnOyAvLyBUZXh0byBwYXJhIFwib2ZcIlxuXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaXRlbXNQZXJQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uRWRpdFRhYmxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uRGVsZXRlVGFibGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25WaWV3VGFibGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xuICBwYWdlZERhdGE6IGFueVtdID0gW107XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIGxhYmVsU3R5bGUgPSB7XG4gICAgJ2ZvbnQtZmFtaWx5JzogJ0ludGVyLCBBcmlhbCwgc2Fucy1zZXJpZicsXG4gICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4JyxcbiAgICAnY29sb3InOiAnIzAwMCdcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgdGhpcy5zZXREZWZhdWx0UGVybWlzc2lvbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sndG90YWxJdGVtcyddIHx8IGNoYW5nZXNbJ2RlZmF1bHRJdGVtc1BlclBhZ2UnXSB8fCBjaGFuZ2VzWydjdXJyZW50UGFnZSddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBzZXREZWZhdWx0UGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKCF0aGlzLnVzZXJQZXJtaXNzaW9ucyB8fCB0aGlzLnVzZXJQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudXNlclBlcm1pc3Npb25zID0gWydlZGl0JywgJ2RlbGV0ZScsICd2aWV3J107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCkge1xuICAgIGlmICh0aGlzLmZldGNoRGF0YUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaERhdGFGdW5jdGlvbih0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLmRlZmF1bHRJdGVtc1BlclBhZ2UpO1xuICAgICAgICB0aGlzLnBhZ2VkRGF0YSA9IGRhdGEuaXRlbXM7XG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGRhdGEudG90YWxJdGVtcztcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyAvLyBGb3LDp2EgYSBkZXRlY8Onw6NvIGRlIG11ZGFuw6dhc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU29ydChjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KGNvbHVtbik7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQocGFnZSk7XG4gICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgfVxuXG4gIG9uSXRlbXNQZXJQYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpdGVtc1BlclBhZ2UgPSBwYXJzZUludChldmVudCwgMTApO1xuICAgIHRoaXMuZGVmYXVsdEl0ZW1zUGVyUGFnZSA9IGl0ZW1zUGVyUGFnZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLml0ZW1zUGVyUGFnZUNoYW5nZS5lbWl0KGl0ZW1zUGVyUGFnZSk7XG4gICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbihhY3Rpb246IHN0cmluZywgaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICB0aGlzLm9uRWRpdFRhYmxlLmVtaXQoeyBpdGVtLCBpbmRleCB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLm9uRGVsZXRlVGFibGUuZW1pdCh7IGl0ZW0sIGluZGV4IH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICB0aGlzLm9uVmlld1RhYmxlLmVtaXQoeyBpdGVtLCBpbmRleCB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFzUGVybWlzc2lvbihyZXF1aXJlZFBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy51c2VyUGVybWlzc2lvbnMgfHwgdGhpcy51c2VyUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVpcmVkUGVybWlzc2lvbnMuZXZlcnkocGVybWlzc2lvbiA9PiB0aGlzLnVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW25nU3R5bGVdPVwie1xuICAnbWFyZ2luLXRvcCc6IG1hcmdpblRvcCArICdyZW0nLFxuICAnbWFyZ2luLWJvdHRvbSc6IG1hcmdpbkJvdHRvbSArICdyZW0nLFxuICAnbWFyZ2luLWxlZnQnOiBtYXJnaW5MZWZ0ICsgJ3JlbScsXG4gICdtYXJnaW4tcmlnaHQnOiBtYXJnaW5SaWdodCArICdyZW0nXG59XCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtcIj5cbiAgPGxhYmVsIGZvcj1cIml0ZW1zUGVyUGFnZVNlbGVjdFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwLjVyZW07IG1hcmdpbi1ib3R0b206IDAuN3JlbTtcIiBbbmdTdHlsZV09XCJsYWJlbFN0eWxlXCI+e3sgaXRlbXNQZXJQYWdlTGFiZWwgfX08L2xhYmVsPlxuICA8c2VsZWN0XG4gICAgaWQ9XCJpdGVtc1BlclBhZ2VTZWxlY3RcIlxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBkLWlubGluZS1ibG9jayB3LWF1dG9cIlxuICAgIFsobmdNb2RlbCldPVwiZGVmYXVsdEl0ZW1zUGVyUGFnZVwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25JdGVtc1BlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpdGVtc1BlclBhZ2VPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxuICA8L3NlbGVjdD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlclwiIFtuZ1N0eWxlXT1cInsgJ2NvbG9yJzogdGFibGVGb250Q29sb3IsICdmb250LXNpemUnOiB0YWJsZUZvbnRTaXplIH1cIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCI+XG4gICAgICAgICAgPHRoICpuZ0lmPVwiaGFzUGVybWlzc2lvbihjb2x1bW4ucGVybWlzc2lvbnMgfHwgW10pXCIgKGNsaWNrKT1cIm9uU29ydChjb2x1bW4ucHJvcClcIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi5sYWJlbCB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8dGggKm5nSWY9XCJzaG93QWN0aW9uQ29sdW1uXCI+e3sgYWN0aW9uQ29sdW1uTGFiZWwgfX08L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwYWdlZERhdGE7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNQZXJtaXNzaW9uKGNvbHVtbi5wZXJtaXNzaW9ucyB8fCBbXSlcIj5cbiAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLnByb3BdIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNob3dBY3Rpb25Db2x1bW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNQZXJtaXNzaW9uKGVkaXRQZXJtaXNzaW9ucylcIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKCdlZGl0JywgaXRlbSwgaSlcIiBjbGFzcz1cImJ0bi1pY29uIGVkaXQgbXgtMVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc1Blcm1pc3Npb24oZGVsZXRlUGVybWlzc2lvbnMpXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbignZGVsZXRlJywgaXRlbSwgaSlcIiBjbGFzcz1cImJ0bi1pY29uIGRlbGV0ZSBteC0xXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzUGVybWlzc2lvbih2aWV3UGVybWlzc2lvbnMpXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbigndmlldycsIGl0ZW0sIGkpXCIgY2xhc3M9XCJidG4taWNvbiB2aWV3IG14LTFcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcGFnaW5hdGlvbi1jb250cm9sc1wiPlxuICA8Y3VzdG9tLXBhZ2luYXRpb25cbiAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcbiAgICBbaXRlbXNQZXJQYWdlXT1cImRlZmF1bHRJdGVtc1BlclBhZ2VcIlxuICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXG4gICAgW3Nob3dQYWdlSW5mb109XCJzaG93UGFnZUluZm9cIlxuICAgIFtwYWdlVGV4dF09XCJwYWdlVGV4dFwiXG4gICAgW29mVGV4dF09XCJvZlRleHRcIlxuICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gIDwvY3VzdG9tLXBhZ2luYXRpb24+XG48L2Rpdj5cbiJdfQ==
|
@@ -0,0 +1,2 @@
|
|
1
|
+
export {};
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRyZWUtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS1ub2RlL0l0cmVlLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVRyZWVOb2RlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogSVRyZWVOb2RlW107XG59XG4iXX0=
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
import * as i1 from "@angular/common";
|
4
|
+
export class TreeNodeComponent {
|
5
|
+
constructor() {
|
6
|
+
this.title = '';
|
7
|
+
this.nodes = [];
|
8
|
+
this.isRoot = true;
|
9
|
+
this.nodeSelected = new EventEmitter();
|
10
|
+
}
|
11
|
+
ngOnInit() {
|
12
|
+
if (this.isRoot && !this.title) {
|
13
|
+
this.title = 'Tree Node';
|
14
|
+
}
|
15
|
+
}
|
16
|
+
onNodeSelected(node, event) {
|
17
|
+
node.selected = event.target.checked;
|
18
|
+
if (node.children) {
|
19
|
+
this.toggleChildren(node.children, node.selected);
|
20
|
+
}
|
21
|
+
this.nodeSelected.emit(node);
|
22
|
+
}
|
23
|
+
toggleChildren(children, selected) {
|
24
|
+
children.forEach(child => {
|
25
|
+
child.selected = selected;
|
26
|
+
if (child.children) {
|
27
|
+
this.toggleChildren(child.children, selected);
|
28
|
+
}
|
29
|
+
});
|
30
|
+
}
|
31
|
+
onChildNodeSelected(node) {
|
32
|
+
this.updateParentSelection(this.nodes);
|
33
|
+
this.nodeSelected.emit(node);
|
34
|
+
}
|
35
|
+
updateParentSelection(nodes) {
|
36
|
+
nodes.forEach(node => {
|
37
|
+
if (node.children) {
|
38
|
+
const allChildrenDeselected = node.children.every(child => !child.selected);
|
39
|
+
node.selected = !allChildrenDeselected;
|
40
|
+
// Recursive call for nested parents
|
41
|
+
this.updateParentSelection(node.children);
|
42
|
+
}
|
43
|
+
});
|
44
|
+
}
|
45
|
+
toggleCollapse(node) {
|
46
|
+
node.collapsed = !node.collapsed;
|
47
|
+
}
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
49
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeNodeComponent, selector: "sim-tree-node", inputs: { title: "title", nodes: "nodes", isRoot: "isRoot" }, outputs: { nodeSelected: "nodeSelected" }, ngImport: i0, template: "<div *ngIf=\"isRoot\" class=\"tree-title\">{{ title || 'Tree Node' }}</div>\n<ul class=\"tree\">\n <li *ngFor=\"let node of nodes\">\n <div class=\"node-content\">\n <span *ngIf=\"node.children\" class=\"toggle-icon\" (click)=\"toggleCollapse(node)\"\n [ngClass]=\"{'collapsed-icon': node.collapsed, 'expanded-icon': !node.collapsed}\">\n {{ node.collapsed ? '\u25B6' : '\u25BC' }}\n </span>\n <label class=\"custom-checkbox\">\n <input type=\"checkbox\" [checked]=\"node.selected\" (change)=\"onNodeSelected(node, $event)\" />\n <span class=\"checkmark\"></span>\n </label>\n <label class=\"node-label\">{{ node.name }}</label>\n </div>\n <sim-tree-node *ngIf=\"node.children && !node.collapsed\" [nodes]=\"node.children\" [isRoot]=\"false\" (nodeSelected)=\"onChildNodeSelected(node)\"></sim-tree-node>\n </li>\n</ul>\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\";.tree{list-style-type:none;margin:0;padding:0;position:relative;font-family:Inter,sans-serif}.tree li{margin:0;padding:0 0 0 2em;line-height:2em;position:relative;font-size:14px;transition:all .3s ease}.tree li:before{content:\"\";position:absolute;top:0;left:0;border-left:1px solid #ccc;bottom:.75em;transition:border-color .3s ease}.tree li:after{content:\"\";position:absolute;top:1em;left:0;border-top:1px solid #ccc;width:1em;transition:border-color .3s ease}.tree li:last-child:before{height:1em}.node-content{display:flex;align-items:center;color:#333;transition:color .3s ease}.node-content:hover .node-label{color:#00444c;box-shadow:0 4px 8px #0000001a}.toggle-icon{cursor:pointer;margin-right:.5em;font-size:1em;transition:transform .3s ease,color .3s ease}.collapsed-icon{color:orange}.expanded-icon{color:green}.node-content input[type=checkbox]{display:none}.custom-checkbox{position:relative;display:inline-flex;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.checkmark{position:relative;height:14px;width:14px;background-color:#fff;border:2px solid #00444C;border-radius:3px;transition:background-color .3s ease,border-color .3s ease}.custom-checkbox input:checked+.checkmark{background-color:#00444c;border-color:#00444c;transition:background-color .3s ease,border-color .3s ease}.custom-checkbox .checkmark:after{content:\"\";position:absolute;display:none;left:4px;top:1px;width:3px;height:8px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg);transition:transform .3s ease}.custom-checkbox input:checked+.checkmark:after{display:block}.node-label{margin-left:.5em;transition:color .3s ease,box-shadow .3s ease}.node-content input{margin-right:.5em;transition:transform .3s ease}.tree-title{font-weight:600;margin-bottom:10px;font-size:18px;color:#00444c;transition:color .3s ease}\n"], dependencies: [{ 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: "component", type: TreeNodeComponent, selector: "sim-tree-node", inputs: ["title", "nodes", "isRoot"], outputs: ["nodeSelected"] }] }); }
|
50
|
+
}
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeNodeComponent, decorators: [{
|
52
|
+
type: Component,
|
53
|
+
args: [{ selector: 'sim-tree-node', template: "<div *ngIf=\"isRoot\" class=\"tree-title\">{{ title || 'Tree Node' }}</div>\n<ul class=\"tree\">\n <li *ngFor=\"let node of nodes\">\n <div class=\"node-content\">\n <span *ngIf=\"node.children\" class=\"toggle-icon\" (click)=\"toggleCollapse(node)\"\n [ngClass]=\"{'collapsed-icon': node.collapsed, 'expanded-icon': !node.collapsed}\">\n {{ node.collapsed ? '\u25B6' : '\u25BC' }}\n </span>\n <label class=\"custom-checkbox\">\n <input type=\"checkbox\" [checked]=\"node.selected\" (change)=\"onNodeSelected(node, $event)\" />\n <span class=\"checkmark\"></span>\n </label>\n <label class=\"node-label\">{{ node.name }}</label>\n </div>\n <sim-tree-node *ngIf=\"node.children && !node.collapsed\" [nodes]=\"node.children\" [isRoot]=\"false\" (nodeSelected)=\"onChildNodeSelected(node)\"></sim-tree-node>\n </li>\n</ul>\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\";.tree{list-style-type:none;margin:0;padding:0;position:relative;font-family:Inter,sans-serif}.tree li{margin:0;padding:0 0 0 2em;line-height:2em;position:relative;font-size:14px;transition:all .3s ease}.tree li:before{content:\"\";position:absolute;top:0;left:0;border-left:1px solid #ccc;bottom:.75em;transition:border-color .3s ease}.tree li:after{content:\"\";position:absolute;top:1em;left:0;border-top:1px solid #ccc;width:1em;transition:border-color .3s ease}.tree li:last-child:before{height:1em}.node-content{display:flex;align-items:center;color:#333;transition:color .3s ease}.node-content:hover .node-label{color:#00444c;box-shadow:0 4px 8px #0000001a}.toggle-icon{cursor:pointer;margin-right:.5em;font-size:1em;transition:transform .3s ease,color .3s ease}.collapsed-icon{color:orange}.expanded-icon{color:green}.node-content input[type=checkbox]{display:none}.custom-checkbox{position:relative;display:inline-flex;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.checkmark{position:relative;height:14px;width:14px;background-color:#fff;border:2px solid #00444C;border-radius:3px;transition:background-color .3s ease,border-color .3s ease}.custom-checkbox input:checked+.checkmark{background-color:#00444c;border-color:#00444c;transition:background-color .3s ease,border-color .3s ease}.custom-checkbox .checkmark:after{content:\"\";position:absolute;display:none;left:4px;top:1px;width:3px;height:8px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg);transition:transform .3s ease}.custom-checkbox input:checked+.checkmark:after{display:block}.node-label{margin-left:.5em;transition:color .3s ease,box-shadow .3s ease}.node-content input{margin-right:.5em;transition:transform .3s ease}.tree-title{font-weight:600;margin-bottom:10px;font-size:18px;color:#00444c;transition:color .3s ease}\n"] }]
|
54
|
+
}], propDecorators: { title: [{
|
55
|
+
type: Input
|
56
|
+
}], nodes: [{
|
57
|
+
type: Input
|
58
|
+
}], isRoot: [{
|
59
|
+
type: Input
|
60
|
+
}], nodeSelected: [{
|
61
|
+
type: Output
|
62
|
+
}] } });
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItcG9ydGFsLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBUS9FLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFNYSxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFVBQUssR0FBZ0IsRUFBRSxDQUFDO1FBQ3hCLFdBQU0sR0FBWSxJQUFJLENBQUM7UUFDdEIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0tBNkMxRDtJQTNDRyxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBZSxFQUFFLEtBQVU7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFxQixFQUFFLFFBQWlCO1FBQ25ELFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDMUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDakQ7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFlO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWtCO1FBQ3BDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLHFCQUFxQixDQUFDO2dCQUV2QyxvQ0FBb0M7Z0JBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDN0M7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBZTtRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNyQyxDQUFDOytHQWhEUSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw4SkNSOUIsdTNCQWlCQSxpeUVEVGEsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNJLGVBQWU7OEJBS2hCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVHJlZU5vZGUgfSBmcm9tICcuL0l0cmVlLW5vZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NpbS10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RyZWUtbm9kZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgbm9kZXM6IElUcmVlTm9kZVtdID0gW107XG4gICAgQElucHV0KCkgaXNSb290OiBib29sZWFuID0gdHJ1ZTtcbiAgICBAT3V0cHV0KCkgbm9kZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJVHJlZU5vZGU+KCk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSb290ICYmICF0aGlzLnRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gJ1RyZWUgTm9kZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVTZWxlY3RlZChub2RlOiBJVHJlZU5vZGUsIGV2ZW50OiBhbnkpIHtcbiAgICAgICAgbm9kZS5zZWxlY3RlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBub2RlLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KG5vZGUpO1xuICAgIH1cblxuICAgIHRvZ2dsZUNoaWxkcmVuKGNoaWxkcmVuOiBJVHJlZU5vZGVbXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjaGlsZC5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoaWxkTm9kZVNlbGVjdGVkKG5vZGU6IElUcmVlTm9kZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhcmVudFNlbGVjdGlvbih0aGlzLm5vZGVzKTtcbiAgICAgICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYXJlbnRTZWxlY3Rpb24obm9kZXM6IElUcmVlTm9kZVtdKSB7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsbENoaWxkcmVuRGVzZWxlY3RlZCA9IG5vZGUuY2hpbGRyZW4uZXZlcnkoY2hpbGQgPT4gIWNoaWxkLnNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICBub2RlLnNlbGVjdGVkID0gIWFsbENoaWxkcmVuRGVzZWxlY3RlZDtcblxuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZSBjYWxsIGZvciBuZXN0ZWQgcGFyZW50c1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyZW50U2VsZWN0aW9uKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0b2dnbGVDb2xsYXBzZShub2RlOiBJVHJlZU5vZGUpIHtcbiAgICAgICAgbm9kZS5jb2xsYXBzZWQgPSAhbm9kZS5jb2xsYXBzZWQ7XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImlzUm9vdFwiIGNsYXNzPVwidHJlZS10aXRsZVwiPnt7IHRpdGxlIHx8ICdUcmVlIE5vZGUnIH19PC9kaXY+XG48dWwgY2xhc3M9XCJ0cmVlXCI+XG4gIDxsaSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBub2Rlc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJub2RlLWNvbnRlbnRcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5jaGlsZHJlblwiIGNsYXNzPVwidG9nZ2xlLWljb25cIiAoY2xpY2spPVwidG9nZ2xlQ29sbGFwc2Uobm9kZSlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2NvbGxhcHNlZC1pY29uJzogbm9kZS5jb2xsYXBzZWQsICdleHBhbmRlZC1pY29uJzogIW5vZGUuY29sbGFwc2VkfVwiPlxuICAgICAgICB7eyBub2RlLmNvbGxhcHNlZCA/ICfilrYnIDogJ+KWvCcgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwibm9kZS5zZWxlY3RlZFwiIChjaGFuZ2UpPVwib25Ob2RlU2VsZWN0ZWQobm9kZSwgJGV2ZW50KVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCI+PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cIm5vZGUtbGFiZWxcIj57eyBub2RlLm5hbWUgfX08L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxzaW0tdHJlZS1ub2RlICpuZ0lmPVwibm9kZS5jaGlsZHJlbiAmJiAhbm9kZS5jb2xsYXBzZWRcIiBbbm9kZXNdPVwibm9kZS5jaGlsZHJlblwiIFtpc1Jvb3RdPVwiZmFsc2VcIiAobm9kZVNlbGVjdGVkKT1cIm9uQ2hpbGROb2RlU2VsZWN0ZWQobm9kZSlcIj48L3NpbS10cmVlLW5vZGU+XG4gIDwvbGk+XG48L3VsPlxuIl19
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { Directive } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export class AutofocusDirective {
|
4
|
+
constructor(elementRef) {
|
5
|
+
this.elementRef = elementRef;
|
6
|
+
}
|
7
|
+
ngAfterViewInit() {
|
8
|
+
this.elementRef.nativeElement.focus();
|
9
|
+
}
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AutofocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
11
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: AutofocusDirective, selector: "[appAutofocus]", ngImport: i0 }); }
|
12
|
+
}
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AutofocusDirective, decorators: [{
|
14
|
+
type: Directive,
|
15
|
+
args: [{
|
16
|
+
selector: '[appAutofocus]'
|
17
|
+
}]
|
18
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2ZvY3VzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZS9hdXRvZm9jdXMtZGlyZWN0aXZlL2F1dG9mb2N1cy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7O0FBS3JFLE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFJLENBQUM7SUFFL0MsZUFBZTtRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLENBQUM7K0dBTFEsa0JBQWtCO21HQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbYXBwQXV0b2ZvY3VzXSdcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2ZvY3VzRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG59XG4iXX0=
|
@@ -1,12 +1,14 @@
|
|
1
1
|
import { NgModule } from '@angular/core';
|
2
2
|
import { NotificationService } from './components/alert/notification.service';
|
3
3
|
import { ComponentsModule } from './components/components.module';
|
4
|
+
import { ConfirmationService } from './components/confirmation/confirmation.service';
|
4
5
|
import * as i0 from "@angular/core";
|
5
6
|
export class LibPortalAngularModule {
|
6
7
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LibPortalAngularModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
7
8
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: LibPortalAngularModule, imports: [ComponentsModule], exports: [ComponentsModule] }); }
|
8
9
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LibPortalAngularModule, providers: [
|
9
|
-
NotificationService
|
10
|
+
NotificationService,
|
11
|
+
ConfirmationService
|
10
12
|
], imports: [ComponentsModule, ComponentsModule] }); }
|
11
13
|
}
|
12
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LibPortalAngularModule, decorators: [{
|
@@ -19,8 +21,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
19
21
|
ComponentsModule,
|
20
22
|
],
|
21
23
|
providers: [
|
22
|
-
NotificationService
|
24
|
+
NotificationService,
|
25
|
+
ConfirmationService
|
23
26
|
],
|
24
27
|
}]
|
25
28
|
}] });
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXBvcnRhbC1hbmd1bGFyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2xpYi1wb3J0YWwtYW5ndWxhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7QUFjckYsTUFBTSxPQUFPLHNCQUFzQjsrR0FBdEIsc0JBQXNCO2dIQUF0QixzQkFBc0IsWUFWL0IsZ0JBQWdCLGFBR2hCLGdCQUFnQjtnSEFPUCxzQkFBc0IsYUFMdEI7WUFDVCxtQkFBbUI7WUFDbkIsbUJBQW1CO1NBQ3BCLFlBUkMsZ0JBQWdCLEVBR2hCLGdCQUFnQjs7NEZBT1Asc0JBQXNCO2tCQVpsQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxnQkFBZ0I7cUJBQ2pCO29CQUNELFNBQVMsRUFBRTt3QkFDVCxtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vY29tcG9uZW50cy9hbGVydC9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRzTW9kdWxlIH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbXBvbmVudHMubW9kdWxlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICcuL2NvbXBvbmVudHMvY29uZmlybWF0aW9uL2NvbmZpcm1hdGlvbi5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbXBvbmVudHNNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBDb21wb25lbnRzTW9kdWxlLCAgICBcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBDb25maXJtYXRpb25TZXJ2aWNlXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYlBvcnRhbEFuZ3VsYXJNb2R1bGUgeyB9XG4iXX0=
|
package/esm2022/public-api.mjs
CHANGED
@@ -11,13 +11,16 @@ export * from './lib/components/button/button.component';
|
|
11
11
|
export * from './lib/components/card/card.component';
|
12
12
|
export * from './lib/components/checkbox/checkbox.component';
|
13
13
|
export * from './lib/components/code-highlight/code-highlight.component';
|
14
|
+
export * from './lib/components/confirmation/confirmation.component';
|
15
|
+
export * from './lib/components/custom-pagination/custom-pagination.component';
|
14
16
|
export * from './lib/components/form/form.component';
|
15
17
|
export * from './lib/components/imput/input.component';
|
16
18
|
export * from './lib/components/multi-select/multi-select.component';
|
17
19
|
export * from './lib/components/radio/radio.component';
|
18
20
|
export * from './lib/components/select/select.component';
|
19
|
-
export * from './lib/components/tables/
|
21
|
+
export * from './lib/components/tables/data-table.component';
|
20
22
|
export * from './lib/components/textarea/textarea.component';
|
23
|
+
export * from './lib/components/tree-node/tree-node.component';
|
21
24
|
// Enums
|
22
25
|
export * from './lib/enum/ButtonClassesEnum';
|
23
26
|
// Módulos
|
@@ -25,4 +28,5 @@ export * from './lib/components/components.module';
|
|
25
28
|
export * from './lib/lib-portal-angular.module';
|
26
29
|
// Service
|
27
30
|
export * from './lib/components/alert/notification.service';
|
28
|
-
|
31
|
+
export * from './lib/components/confirmation/confirmation.service';
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILGNBQWM7QUFDZCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsZ0VBQWdFLENBQUM7QUFDL0UsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLGdEQUFnRCxDQUFDO0FBRS9ELFFBQVE7QUFDUixjQUFjLDhCQUE4QixDQUFDO0FBRTdDLFVBQVU7QUFDVixjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsVUFBVTtBQUNWLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxvREFBb0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygc2ltLWxpYlxuICpcbiAqIEVzdGUgYXJxdWl2byBleHBvcnRhIHRvZG9zIG9zIGNvbXBvbmVudGVzLCBlbnVtcyBlIG3Ds2R1bG9zIG5lY2Vzc8Ohcmlvc1xuICogcGFyYSBxdWUgb3MgY29uc3VtaWRvcmVzIGRhIGJpYmxpb3RlY2EgcG9zc2FtIHV0aWxpesOhLWxvcyBlbSBzdWFzIGFwbGljYcOnw7Vlcy5cbiAqL1xuXG4vLyBDb21wb25lbnRlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hbGVydC9hbGVydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQvY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb2RlLWhpZ2hsaWdodC9jb2RlLWhpZ2hsaWdodC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb25maXJtYXRpb24vY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2N1c3RvbS1wYWdpbmF0aW9uL2N1c3RvbS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pbXB1dC9pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGVzL2RhdGEtdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGV4dGFyZWEvdGV4dGFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQnO1xuXG4vLyBFbnVtc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW51bS9CdXR0b25DbGFzc2VzRW51bSc7XG5cbi8vIE3Ds2R1bG9zXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbXBvbmVudHMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xpYi1wb3J0YWwtYW5ndWxhci5tb2R1bGUnO1xuXG4vLyBTZXJ2aWNlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FsZXJ0L25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29uZmlybWF0aW9uL2NvbmZpcm1hdGlvbi5zZXJ2aWNlJztcblxuIl19
|