hopesf-angular-dev-utils 1.0.0
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/LICENSE +21 -0
- package/README.md +60 -0
- package/esm2022/hopesf-angular-dev-utils.mjs +5 -0
- package/esm2022/lib/components/button/button.component.mjs +68 -0
- package/esm2022/lib/components/card/card.component.mjs +78 -0
- package/esm2022/lib/components/input/input.component.mjs +141 -0
- package/esm2022/lib/components/modal/modal.component.mjs +102 -0
- package/esm2022/lib/components/spinner/spinner.component.mjs +44 -0
- package/esm2022/lib/components/table/table.component.mjs +240 -0
- package/esm2022/lib/models/types.mjs +2 -0
- package/esm2022/lib/services/modal.service.mjs +102 -0
- package/esm2022/public-api.mjs +15 -0
- package/fesm2022/hopesf-angular-dev-utils.mjs +765 -0
- package/fesm2022/hopesf-angular-dev-utils.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/button/button.component.d.ts +16 -0
- package/lib/components/card/card.component.d.ts +12 -0
- package/lib/components/input/input.component.d.ts +27 -0
- package/lib/components/modal/modal.component.d.ts +17 -0
- package/lib/components/spinner/spinner.component.d.ts +11 -0
- package/lib/components/table/table.component.d.ts +29 -0
- package/lib/models/types.d.ts +27 -0
- package/lib/services/modal.service.d.ts +21 -0
- package/package.json +49 -0
- package/public-api.d.ts +8 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ContentChild } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
export class TableComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.data = [];
|
|
8
|
+
this.columns = [];
|
|
9
|
+
this.config = {
|
|
10
|
+
sortable: true,
|
|
11
|
+
pageable: true,
|
|
12
|
+
pageSize: 10,
|
|
13
|
+
striped: true,
|
|
14
|
+
hoverable: true
|
|
15
|
+
};
|
|
16
|
+
this.rowClicked = new EventEmitter();
|
|
17
|
+
this.sortChanged = new EventEmitter();
|
|
18
|
+
this.sortColumn = '';
|
|
19
|
+
this.sortDirection = 'asc';
|
|
20
|
+
this.currentPage = 1;
|
|
21
|
+
this.hasEmptyState = false;
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
this.config = { ...this.getDefaultConfig(), ...this.config };
|
|
25
|
+
}
|
|
26
|
+
get sortedData() {
|
|
27
|
+
if (!this.config.sortable || !this.sortColumn) {
|
|
28
|
+
return this.data;
|
|
29
|
+
}
|
|
30
|
+
return [...this.data].sort((a, b) => {
|
|
31
|
+
const aVal = this.getNestedValue(a, this.sortColumn);
|
|
32
|
+
const bVal = this.getNestedValue(b, this.sortColumn);
|
|
33
|
+
if (aVal < bVal)
|
|
34
|
+
return this.sortDirection === 'asc' ? -1 : 1;
|
|
35
|
+
if (aVal > bVal)
|
|
36
|
+
return this.sortDirection === 'asc' ? 1 : -1;
|
|
37
|
+
return 0;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
get paginatedData() {
|
|
41
|
+
if (!this.config.pageable) {
|
|
42
|
+
return this.sortedData;
|
|
43
|
+
}
|
|
44
|
+
const start = (this.currentPage - 1) * (this.config.pageSize || 10);
|
|
45
|
+
const end = start + (this.config.pageSize || 10);
|
|
46
|
+
return this.sortedData.slice(start, end);
|
|
47
|
+
}
|
|
48
|
+
get totalPages() {
|
|
49
|
+
return Math.ceil(this.data.length / (this.config.pageSize || 10));
|
|
50
|
+
}
|
|
51
|
+
onSort(column) {
|
|
52
|
+
if (!column.sortable || !this.config.sortable)
|
|
53
|
+
return;
|
|
54
|
+
if (this.sortColumn === column.key) {
|
|
55
|
+
this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.sortColumn = column.key;
|
|
59
|
+
this.sortDirection = 'asc';
|
|
60
|
+
}
|
|
61
|
+
this.sortChanged.emit({ column: column.key, direction: this.sortDirection });
|
|
62
|
+
}
|
|
63
|
+
goToPage(page) {
|
|
64
|
+
if (page >= 1 && page <= this.totalPages) {
|
|
65
|
+
this.currentPage = page;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
getCellValue(row, column) {
|
|
69
|
+
if (column.cellTemplate) {
|
|
70
|
+
return column.cellTemplate(row);
|
|
71
|
+
}
|
|
72
|
+
return this.getNestedValue(row, column.key);
|
|
73
|
+
}
|
|
74
|
+
getNestedValue(obj, path) {
|
|
75
|
+
return path.split('.').reduce((current, prop) => current?.[prop], obj);
|
|
76
|
+
}
|
|
77
|
+
getDefaultConfig() {
|
|
78
|
+
return {
|
|
79
|
+
sortable: true,
|
|
80
|
+
pageable: true,
|
|
81
|
+
pageSize: 10,
|
|
82
|
+
striped: true,
|
|
83
|
+
hoverable: true
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
87
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableComponent, isStandalone: true, selector: "adu-table", inputs: { data: "data", columns: "columns", config: "config" }, outputs: { rowClicked: "rowClicked", sortChanged: "sortChanged" }, queries: [{ propertyName: "cellTemplate", first: true, predicate: ["cellTemplate"], descendants: true }], ngImport: i0, template: `
|
|
88
|
+
<div class="adu-table-container">
|
|
89
|
+
<table class="adu-table" [class.adu-table-striped]="config.striped" [class.adu-table-hoverable]="config.hoverable">
|
|
90
|
+
<thead class="adu-table-header">
|
|
91
|
+
<tr>
|
|
92
|
+
<th
|
|
93
|
+
*ngFor="let column of columns"
|
|
94
|
+
[style.width]="column.width"
|
|
95
|
+
[class.adu-table-sortable]="column.sortable && config.sortable"
|
|
96
|
+
(click)="onSort(column)"
|
|
97
|
+
class="adu-table-th"
|
|
98
|
+
>
|
|
99
|
+
<div class="flex items-center justify-between">
|
|
100
|
+
<span>{{ column.label }}</span>
|
|
101
|
+
<span *ngIf="column.sortable && config.sortable" class="adu-table-sort-icon">
|
|
102
|
+
<span *ngIf="sortColumn === column.key">
|
|
103
|
+
{{ sortDirection === 'asc' ? '↑' : '↓' }}
|
|
104
|
+
</span>
|
|
105
|
+
<span *ngIf="sortColumn !== column.key" class="text-gray-300">↕</span>
|
|
106
|
+
</span>
|
|
107
|
+
</div>
|
|
108
|
+
</th>
|
|
109
|
+
</tr>
|
|
110
|
+
</thead>
|
|
111
|
+
<tbody class="adu-table-body">
|
|
112
|
+
<tr *ngFor="let row of paginatedData; let i = index" class="adu-table-row">
|
|
113
|
+
<td *ngFor="let column of columns" class="adu-table-td">
|
|
114
|
+
<ng-container *ngIf="cellTemplate; else defaultCell">
|
|
115
|
+
<ng-container *ngTemplateOutlet="cellTemplate; context: { $implicit: row, column: column }"></ng-container>
|
|
116
|
+
</ng-container>
|
|
117
|
+
<ng-template #defaultCell>
|
|
118
|
+
{{ getCellValue(row, column) }}
|
|
119
|
+
</ng-template>
|
|
120
|
+
</td>
|
|
121
|
+
</tr>
|
|
122
|
+
<tr *ngIf="paginatedData.length === 0" class="adu-table-empty">
|
|
123
|
+
<td [attr.colspan]="columns.length" class="text-center py-8 text-gray-500">
|
|
124
|
+
<ng-content select="[empty-state]"></ng-content>
|
|
125
|
+
<span *ngIf="!hasEmptyState">No data available</span>
|
|
126
|
+
</td>
|
|
127
|
+
</tr>
|
|
128
|
+
</tbody>
|
|
129
|
+
</table>
|
|
130
|
+
|
|
131
|
+
<!-- Pagination -->
|
|
132
|
+
<div *ngIf="config.pageable && totalPages > 1" class="adu-table-pagination">
|
|
133
|
+
<button
|
|
134
|
+
class="adu-pagination-btn"
|
|
135
|
+
[disabled]="currentPage === 1"
|
|
136
|
+
(click)="goToPage(currentPage - 1)"
|
|
137
|
+
>
|
|
138
|
+
Previous
|
|
139
|
+
</button>
|
|
140
|
+
|
|
141
|
+
<div class="adu-pagination-info">
|
|
142
|
+
Page {{ currentPage }} of {{ totalPages }}
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
<button
|
|
146
|
+
class="adu-pagination-btn"
|
|
147
|
+
[disabled]="currentPage === totalPages"
|
|
148
|
+
(click)="goToPage(currentPage + 1)"
|
|
149
|
+
>
|
|
150
|
+
Next
|
|
151
|
+
</button>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
`, isInline: true, styles: [".adu-table-container{width:100%;overflow-x:auto;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.adu-table{width:100%;border-collapse:collapse}.adu-table-header{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-table-th{padding:.75rem 1.5rem;text-align:left;font-size:.75rem;line-height:1rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.adu-table-sortable{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.adu-table-sortable:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.adu-table-sort-icon{margin-left:.5rem;display:inline-block}.adu-table-body>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse));--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.adu-table-row{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.adu-table-striped .adu-table-row:nth-child(2n){--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-table-hoverable .adu-table-row:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.adu-table-td{padding:1rem 1.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.adu-table-empty{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-table-pagination{display:flex;align-items:center;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1));padding:.75rem 1.5rem}.adu-pagination-btn{border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.adu-pagination-btn:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-pagination-btn:disabled{cursor:not-allowed;opacity:.5}.adu-pagination-info{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
155
|
+
}
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
|
|
157
|
+
type: Component,
|
|
158
|
+
args: [{ selector: 'adu-table', standalone: true, imports: [CommonModule], template: `
|
|
159
|
+
<div class="adu-table-container">
|
|
160
|
+
<table class="adu-table" [class.adu-table-striped]="config.striped" [class.adu-table-hoverable]="config.hoverable">
|
|
161
|
+
<thead class="adu-table-header">
|
|
162
|
+
<tr>
|
|
163
|
+
<th
|
|
164
|
+
*ngFor="let column of columns"
|
|
165
|
+
[style.width]="column.width"
|
|
166
|
+
[class.adu-table-sortable]="column.sortable && config.sortable"
|
|
167
|
+
(click)="onSort(column)"
|
|
168
|
+
class="adu-table-th"
|
|
169
|
+
>
|
|
170
|
+
<div class="flex items-center justify-between">
|
|
171
|
+
<span>{{ column.label }}</span>
|
|
172
|
+
<span *ngIf="column.sortable && config.sortable" class="adu-table-sort-icon">
|
|
173
|
+
<span *ngIf="sortColumn === column.key">
|
|
174
|
+
{{ sortDirection === 'asc' ? '↑' : '↓' }}
|
|
175
|
+
</span>
|
|
176
|
+
<span *ngIf="sortColumn !== column.key" class="text-gray-300">↕</span>
|
|
177
|
+
</span>
|
|
178
|
+
</div>
|
|
179
|
+
</th>
|
|
180
|
+
</tr>
|
|
181
|
+
</thead>
|
|
182
|
+
<tbody class="adu-table-body">
|
|
183
|
+
<tr *ngFor="let row of paginatedData; let i = index" class="adu-table-row">
|
|
184
|
+
<td *ngFor="let column of columns" class="adu-table-td">
|
|
185
|
+
<ng-container *ngIf="cellTemplate; else defaultCell">
|
|
186
|
+
<ng-container *ngTemplateOutlet="cellTemplate; context: { $implicit: row, column: column }"></ng-container>
|
|
187
|
+
</ng-container>
|
|
188
|
+
<ng-template #defaultCell>
|
|
189
|
+
{{ getCellValue(row, column) }}
|
|
190
|
+
</ng-template>
|
|
191
|
+
</td>
|
|
192
|
+
</tr>
|
|
193
|
+
<tr *ngIf="paginatedData.length === 0" class="adu-table-empty">
|
|
194
|
+
<td [attr.colspan]="columns.length" class="text-center py-8 text-gray-500">
|
|
195
|
+
<ng-content select="[empty-state]"></ng-content>
|
|
196
|
+
<span *ngIf="!hasEmptyState">No data available</span>
|
|
197
|
+
</td>
|
|
198
|
+
</tr>
|
|
199
|
+
</tbody>
|
|
200
|
+
</table>
|
|
201
|
+
|
|
202
|
+
<!-- Pagination -->
|
|
203
|
+
<div *ngIf="config.pageable && totalPages > 1" class="adu-table-pagination">
|
|
204
|
+
<button
|
|
205
|
+
class="adu-pagination-btn"
|
|
206
|
+
[disabled]="currentPage === 1"
|
|
207
|
+
(click)="goToPage(currentPage - 1)"
|
|
208
|
+
>
|
|
209
|
+
Previous
|
|
210
|
+
</button>
|
|
211
|
+
|
|
212
|
+
<div class="adu-pagination-info">
|
|
213
|
+
Page {{ currentPage }} of {{ totalPages }}
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
<button
|
|
217
|
+
class="adu-pagination-btn"
|
|
218
|
+
[disabled]="currentPage === totalPages"
|
|
219
|
+
(click)="goToPage(currentPage + 1)"
|
|
220
|
+
>
|
|
221
|
+
Next
|
|
222
|
+
</button>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
`, styles: [".adu-table-container{width:100%;overflow-x:auto;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.adu-table{width:100%;border-collapse:collapse}.adu-table-header{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-table-th{padding:.75rem 1.5rem;text-align:left;font-size:.75rem;line-height:1rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.adu-table-sortable{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.adu-table-sortable:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.adu-table-sort-icon{margin-left:.5rem;display:inline-block}.adu-table-body>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse));--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.adu-table-row{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.adu-table-striped .adu-table-row:nth-child(2n){--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-table-hoverable .adu-table-row:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.adu-table-td{padding:1rem 1.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.adu-table-empty{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-table-pagination{display:flex;align-items:center;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1));padding:.75rem 1.5rem}.adu-pagination-btn{border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.adu-pagination-btn:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.adu-pagination-btn:disabled{cursor:not-allowed;opacity:.5}.adu-pagination-info{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}\n"] }]
|
|
226
|
+
}], propDecorators: { data: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], columns: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], config: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], cellTemplate: [{
|
|
233
|
+
type: ContentChild,
|
|
234
|
+
args: ['cellTemplate']
|
|
235
|
+
}], rowClicked: [{
|
|
236
|
+
type: Output
|
|
237
|
+
}], sortChanged: [{
|
|
238
|
+
type: Output
|
|
239
|
+
}] } });
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQTBJL0MsTUFBTSxPQUFPLGNBQWM7SUF2STNCO1FBd0lXLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQWdCO1lBQzdCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUdRLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWlELENBQUM7UUFFMUYsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFtQixLQUFLLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7S0EwRXZCO0lBeEVDLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJELElBQUksSUFBSSxHQUFHLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksR0FBRyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBc0I7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBWTtRQUNuQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFNLEVBQUUsTUFBc0I7UUFDekMsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQVEsRUFBRSxJQUFZO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDOytHQTNGVSxjQUFjO21HQUFkLGNBQWMsa1RBbklmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUVULDJvR0FwRVMsWUFBWTs7NEZBb0lYLGNBQWM7a0JBdkkxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FVDs4QkFpRVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBUXdCLFlBQVk7c0JBQXpDLFlBQVk7dUJBQUMsY0FBYztnQkFDbEIsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiwgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhZHUtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYWR1LXRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiYWR1LXRhYmxlXCIgW2NsYXNzLmFkdS10YWJsZS1zdHJpcGVkXT1cImNvbmZpZy5zdHJpcGVkXCIgW2NsYXNzLmFkdS10YWJsZS1ob3ZlcmFibGVdPVwiY29uZmlnLmhvdmVyYWJsZVwiPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJhZHUtdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFkdS10YWJsZS1zb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGUgJiYgY29uZmlnLnNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU29ydChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhZHUtdGFibGUtdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlICYmIGNvbmZpZy5zb3J0YWJsZVwiIGNsYXNzPVwiYWR1LXRhYmxlLXNvcnQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1uID09PSBjb2x1bW4ua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ+KGkScgOiAn4oaTJyB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1uICE9PSBjb2x1bW4ua2V5XCIgY2xhc3M9XCJ0ZXh0LWdyYXktMzAwXCI+4oaVPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImFkdS10YWJsZS1ib2R5XCI+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgcGFnaW5hdGVkRGF0YTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYWR1LXRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIGNsYXNzPVwiYWR1LXRhYmxlLXRkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdENlbGxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBjb2x1bW46IGNvbHVtbiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsPlxuICAgICAgICAgICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgKm5nSWY9XCJwYWdpbmF0ZWREYXRhLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiYWR1LXRhYmxlLWVtcHR5XCI+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktOCB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlbXB0eS1zdGF0ZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWhhc0VtcHR5U3RhdGVcIj5ObyBkYXRhIGF2YWlsYWJsZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG5cbiAgICAgIDwhLS0gUGFnaW5hdGlvbiAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcucGFnZWFibGUgJiYgdG90YWxQYWdlcyA+IDFcIiBjbGFzcz1cImFkdS10YWJsZS1wYWdpbmF0aW9uXCI+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgY2xhc3M9XCJhZHUtcGFnaW5hdGlvbi1idG5cIiBcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxuICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpXCJcbiAgICAgICAgPlxuICAgICAgICAgIFByZXZpb3VzXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZHUtcGFnaW5hdGlvbi1pbmZvXCI+XG4gICAgICAgICAgUGFnZSB7eyBjdXJyZW50UGFnZSB9fSBvZiB7eyB0b3RhbFBhZ2VzIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgY2xhc3M9XCJhZHUtcGFnaW5hdGlvbi1idG5cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlc1wiXG4gICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlICsgMSlcIlxuICAgICAgICA+XG4gICAgICAgICAgTmV4dFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLmFkdS10YWJsZS1jb250YWluZXIge1xuICAgICAgQGFwcGx5IHctZnVsbCBvdmVyZmxvdy14LWF1dG8gYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwO1xuICAgIH1cblxuICAgIC5hZHUtdGFibGUge1xuICAgICAgQGFwcGx5IHctZnVsbCBib3JkZXItY29sbGFwc2U7XG4gICAgfVxuXG4gICAgLmFkdS10YWJsZS1oZWFkZXIge1xuICAgICAgQGFwcGx5IGJnLWdyYXktNTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwO1xuICAgIH1cblxuICAgIC5hZHUtdGFibGUtdGgge1xuICAgICAgQGFwcGx5IHB4LTYgcHktMyB0ZXh0LWxlZnQgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlcjtcbiAgICB9XG5cbiAgICAuYWR1LXRhYmxlLXNvcnRhYmxlIHtcbiAgICAgIEBhcHBseSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCB0cmFuc2l0aW9uLWNvbG9ycztcbiAgICB9XG5cbiAgICAuYWR1LXRhYmxlLXNvcnQtaWNvbiB7XG4gICAgICBAYXBwbHkgbWwtMiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuXG4gICAgLmFkdS10YWJsZS1ib2R5IHtcbiAgICAgIEBhcHBseSBkaXZpZGUteSBkaXZpZGUtZ3JheS0yMDA7XG4gICAgfVxuXG4gICAgLmFkdS10YWJsZS1yb3cge1xuICAgICAgQGFwcGx5IHRyYW5zaXRpb24tY29sb3JzO1xuICAgIH1cblxuICAgIC5hZHUtdGFibGUtc3RyaXBlZCAuYWR1LXRhYmxlLXJvdzpudGgtY2hpbGQoZXZlbikge1xuICAgICAgQGFwcGx5IGJnLWdyYXktNTA7XG4gICAgfVxuXG4gICAgLmFkdS10YWJsZS1ob3ZlcmFibGUgLmFkdS10YWJsZS1yb3c6aG92ZXIge1xuICAgICAgQGFwcGx5IGJnLWJsdWUtNTA7XG4gICAgfVxuXG4gICAgLmFkdS10YWJsZS10ZCB7XG4gICAgICBAYXBwbHkgcHgtNiBweS00IHRleHQtc20gdGV4dC1ncmF5LTkwMDtcbiAgICB9XG5cbiAgICAuYWR1LXRhYmxlLWVtcHR5IHtcbiAgICAgIEBhcHBseSBiZy1ncmF5LTUwO1xuICAgIH1cblxuICAgIC5hZHUtdGFibGUtcGFnaW5hdGlvbiB7XG4gICAgICBAYXBwbHkgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTYgcHktMyBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgYmctZ3JheS01MDtcbiAgICB9XG5cbiAgICAuYWR1LXBhZ2luYXRpb24tYnRuIHtcbiAgICAgIEBhcHBseSBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZDtcbiAgICAgIEBhcHBseSBob3ZlcjpiZy1ncmF5LTUwIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzO1xuICAgIH1cblxuICAgIC5hZHUtcGFnaW5hdGlvbi1pbmZvIHtcbiAgICAgIEBhcHBseSB0ZXh0LXNtIHRleHQtZ3JheS03MDA7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PiB7XG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbjxUPltdID0gW107XG4gIEBJbnB1dCgpIGNvbmZpZzogVGFibGVDb25maWcgPSB7XG4gICAgc29ydGFibGU6IHRydWUsXG4gICAgcGFnZWFibGU6IHRydWUsXG4gICAgcGFnZVNpemU6IDEwLFxuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgaG92ZXJhYmxlOiB0cnVlXG4gIH07XG5cbiAgQENvbnRlbnRDaGlsZCgnY2VsbFRlbXBsYXRlJykgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IHN0cmluZzsgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB9PigpO1xuXG4gIHNvcnRDb2x1bW4gPSAnJztcbiAgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcbiAgY3VycmVudFBhZ2UgPSAxO1xuICBoYXNFbXB0eVN0YXRlID0gZmFsc2U7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLCAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgZ2V0IHNvcnRlZERhdGEoKTogVFtdIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNvcnRhYmxlIHx8ICF0aGlzLnNvcnRDb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi50aGlzLmRhdGFdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFWYWwgPSB0aGlzLmdldE5lc3RlZFZhbHVlKGEsIHRoaXMuc29ydENvbHVtbik7XG4gICAgICBjb25zdCBiVmFsID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShiLCB0aGlzLnNvcnRDb2x1bW4pO1xuXG4gICAgICBpZiAoYVZhbCA8IGJWYWwpIHJldHVybiB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgaWYgKGFWYWwgPiBiVmFsKSByZXR1cm4gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRlZERhdGEoKTogVFtdIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnBhZ2VhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0ZWREYXRhO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqICh0aGlzLmNvbmZpZy5wYWdlU2l6ZSB8fCAxMCk7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyAodGhpcy5jb25maWcucGFnZVNpemUgfHwgMTApO1xuICAgIHJldHVybiB0aGlzLnNvcnRlZERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBnZXQgdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5kYXRhLmxlbmd0aCAvICh0aGlzLmNvbmZpZy5wYWdlU2l6ZSB8fCAxMCkpO1xuICB9XG5cbiAgb25Tb3J0KGNvbHVtbjogVGFibGVDb2x1bW48VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSB8fCAhdGhpcy5jb25maWcuc29ydGFibGUpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnNvcnRDb2x1bW4gPT09IGNvbHVtbi5rZXkpIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uID0gY29sdW1uLmtleTtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgIH1cblxuICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdCh7IGNvbHVtbjogY29sdW1uLmtleSwgZGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb24gfSk7XG4gIH1cblxuICBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAocGFnZSA+PSAxICYmIHBhZ2UgPD0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICB9XG4gIH1cblxuICBnZXRDZWxsVmFsdWUocm93OiBULCBjb2x1bW46IFRhYmxlQ29sdW1uPFQ+KTogYW55IHtcbiAgICBpZiAoY29sdW1uLmNlbGxUZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuIGNvbHVtbi5jZWxsVGVtcGxhdGUocm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4ua2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGN1cnJlbnQsIHByb3ApID0+IGN1cnJlbnQ/Lltwcm9wXSwgb2JqKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdENvbmZpZygpOiBUYWJsZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgcGFnZWFibGU6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICBzdHJpcGVkOiB0cnVlLFxuICAgICAgaG92ZXJhYmxlOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZGVscy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQnV0dG9uVmFyaWFudCA9ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnZ2hvc3QnO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJztcblxuZXhwb3J0IHR5cGUgSW5wdXRUeXBlID0gJ3RleHQnIHwgJ2VtYWlsJyB8ICdwYXNzd29yZCcgfCAnbnVtYmVyJyB8ICd0ZWwnIHwgJ3VybCc7XG5leHBvcnQgdHlwZSBJbnB1dFNpemUgPSAnc20nIHwgJ21kJyB8ICdsZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW48VCA9IGFueT4ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICB3aWR0aD86IHN0cmluZztcbiAgY2VsbFRlbXBsYXRlPzogKHJvdzogVCkgPT4gc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnIHtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBwYWdlYWJsZT86IGJvb2xlYW47XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBzdHJpcGVkPzogYm9vbGVhbjtcbiAgaG92ZXJhYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2RhbENvbmZpZyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBzaXplPzogJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICdmdWxsJztcbiAgY2xvc2VPbkJhY2tkcm9wPzogYm9vbGVhbjtcbiAgY2xvc2VPbkVzY2FwZT86IGJvb2xlYW47XG4gIHNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFNwaW5uZXJTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuZXhwb3J0IHR5cGUgU3Bpbm5lckNvbG9yID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnd2hpdGUnO1xuIl19
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Injectable, createComponent } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ModalService {
|
|
5
|
+
constructor(appRef, injector) {
|
|
6
|
+
this.appRef = appRef;
|
|
7
|
+
this.injector = injector;
|
|
8
|
+
this.modalComponentRef = null;
|
|
9
|
+
this.closeSubject = new Subject();
|
|
10
|
+
}
|
|
11
|
+
open(component, config = {}) {
|
|
12
|
+
// Close existing modal if any
|
|
13
|
+
if (this.modalComponentRef) {
|
|
14
|
+
this.close();
|
|
15
|
+
}
|
|
16
|
+
// Create modal wrapper
|
|
17
|
+
const modalWrapper = document.createElement('div');
|
|
18
|
+
modalWrapper.className = this.getModalWrapperClasses(config);
|
|
19
|
+
// Create backdrop
|
|
20
|
+
const backdrop = document.createElement('div');
|
|
21
|
+
backdrop.className = 'adu-modal-backdrop';
|
|
22
|
+
if (config.closeOnBackdrop !== false) {
|
|
23
|
+
backdrop.onclick = () => this.close();
|
|
24
|
+
}
|
|
25
|
+
// Create modal content
|
|
26
|
+
const modalContent = document.createElement('div');
|
|
27
|
+
modalContent.className = this.getModalContentClasses(config);
|
|
28
|
+
modalContent.onclick = (e) => e.stopPropagation();
|
|
29
|
+
// Create close button if needed
|
|
30
|
+
if (config.showCloseButton !== false) {
|
|
31
|
+
const closeBtn = document.createElement('button');
|
|
32
|
+
closeBtn.className = 'adu-modal-close';
|
|
33
|
+
closeBtn.innerHTML = '×';
|
|
34
|
+
closeBtn.onclick = () => this.close();
|
|
35
|
+
modalContent.appendChild(closeBtn);
|
|
36
|
+
}
|
|
37
|
+
// Add title if provided
|
|
38
|
+
if (config.title) {
|
|
39
|
+
const titleEl = document.createElement('div');
|
|
40
|
+
titleEl.className = 'adu-modal-title';
|
|
41
|
+
titleEl.textContent = config.title;
|
|
42
|
+
modalContent.appendChild(titleEl);
|
|
43
|
+
}
|
|
44
|
+
// Create component container
|
|
45
|
+
const componentContainer = document.createElement('div');
|
|
46
|
+
componentContainer.className = 'adu-modal-body';
|
|
47
|
+
modalContent.appendChild(componentContainer);
|
|
48
|
+
// Assemble modal
|
|
49
|
+
modalWrapper.appendChild(backdrop);
|
|
50
|
+
modalWrapper.appendChild(modalContent);
|
|
51
|
+
document.body.appendChild(modalWrapper);
|
|
52
|
+
// Create and attach component
|
|
53
|
+
this.modalComponentRef = createComponent(component, {
|
|
54
|
+
environmentInjector: this.injector,
|
|
55
|
+
hostElement: componentContainer
|
|
56
|
+
});
|
|
57
|
+
this.appRef.attachView(this.modalComponentRef.hostView);
|
|
58
|
+
// Handle ESC key
|
|
59
|
+
if (config.closeOnEscape !== false) {
|
|
60
|
+
const escHandler = (e) => {
|
|
61
|
+
if (e.key === 'Escape') {
|
|
62
|
+
this.close();
|
|
63
|
+
document.removeEventListener('keydown', escHandler);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
document.addEventListener('keydown', escHandler);
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
close: (result) => this.close(result),
|
|
70
|
+
afterClosed: () => this.closeSubject
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
close(result) {
|
|
74
|
+
if (this.modalComponentRef) {
|
|
75
|
+
this.appRef.detachView(this.modalComponentRef.hostView);
|
|
76
|
+
this.modalComponentRef.destroy();
|
|
77
|
+
this.modalComponentRef = null;
|
|
78
|
+
// Remove modal from DOM
|
|
79
|
+
const modals = document.querySelectorAll('.adu-modal-wrapper');
|
|
80
|
+
modals.forEach(modal => modal.remove());
|
|
81
|
+
this.closeSubject.next(result);
|
|
82
|
+
this.closeSubject.complete();
|
|
83
|
+
this.closeSubject = new Subject();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
getModalWrapperClasses(config) {
|
|
87
|
+
return 'adu-modal-wrapper';
|
|
88
|
+
}
|
|
89
|
+
getModalContentClasses(config) {
|
|
90
|
+
const size = config.size || 'md';
|
|
91
|
+
return `adu-modal-content adu-modal-${size}`;
|
|
92
|
+
}
|
|
93
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalService, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
94
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalService, providedIn: 'root' }); }
|
|
95
|
+
}
|
|
96
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalService, decorators: [{
|
|
97
|
+
type: Injectable,
|
|
98
|
+
args: [{
|
|
99
|
+
providedIn: 'root'
|
|
100
|
+
}]
|
|
101
|
+
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }] });
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQyxlQUFlLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBVy9CLE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQ1UsTUFBc0IsRUFDdEIsUUFBNkI7UUFEN0IsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFML0Isc0JBQWlCLEdBQTZCLElBQUksQ0FBQztRQUNuRCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUFLdEMsQ0FBQztJQUVMLElBQUksQ0FBYSxTQUFrQixFQUFFLFNBQXNCLEVBQUU7UUFDM0QsOEJBQThCO1FBQzlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdELGtCQUFrQjtRQUNsQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7UUFDMUMsSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hD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QUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFFOUIsd0JBQXdCO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUV4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQW1CO1FBQ2hELE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQW1CO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO1FBQ2pDLE9BQU8sK0JBQStCLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7K0dBMUdVLFlBQVk7bUhBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgQ29tcG9uZW50UmVmLCBBcHBsaWNhdGlvblJlZiwgY3JlYXRlQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb2RhbENvbmZpZyB9IGZyb20gJy4uL21vZGVscy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxSZWY8VCA9IGFueT4ge1xuICBjbG9zZTogKHJlc3VsdD86IFQpID0+IHZvaWQ7XG4gIGFmdGVyQ2xvc2VkOiAoKSA9PiBTdWJqZWN0PFQgfCB1bmRlZmluZWQ+O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuICBwcml2YXRlIG1vZGFsQ29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNsb3NlU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvclxuICApIHsgfVxuXG4gIG9wZW48VCwgUiA9IGFueT4oY29tcG9uZW50OiBUeXBlPFQ+LCBjb25maWc6IE1vZGFsQ29uZmlnID0ge30pOiBNb2RhbFJlZjxSPiB7XG4gICAgLy8gQ2xvc2UgZXhpc3RpbmcgbW9kYWwgaWYgYW55XG4gICAgaWYgKHRoaXMubW9kYWxDb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgbW9kYWwgd3JhcHBlclxuICAgIGNvbnN0IG1vZGFsV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIG1vZGFsV3JhcHBlci5jbGFzc05hbWUgPSB0aGlzLmdldE1vZGFsV3JhcHBlckNsYXNzZXMoY29uZmlnKTtcblxuICAgIC8vIENyZWF0ZSBiYWNrZHJvcFxuICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYmFja2Ryb3AuY2xhc3NOYW1lID0gJ2FkdS1tb2RhbC1iYWNrZHJvcCc7XG4gICAgaWYgKGNvbmZpZy5jbG9zZU9uQmFja2Ryb3AgIT09IGZhbHNlKSB7XG4gICAgICBiYWNrZHJvcC5vbmNsaWNrID0gKCkgPT4gdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBtb2RhbCBjb250ZW50XG4gICAgY29uc3QgbW9kYWxDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbW9kYWxDb250ZW50LmNsYXNzTmFtZSA9IHRoaXMuZ2V0TW9kYWxDb250ZW50Q2xhc3Nlcyhjb25maWcpO1xuICAgIG1vZGFsQ29udGVudC5vbmNsaWNrID0gKGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBDcmVhdGUgY2xvc2UgYnV0dG9uIGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcuc2hvd0Nsb3NlQnV0dG9uICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgY2xvc2VCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgIGNsb3NlQnRuLmNsYXNzTmFtZSA9ICdhZHUtbW9kYWwtY2xvc2UnO1xuICAgICAgY2xvc2VCdG4uaW5uZXJIVE1MID0gJ8OXJztcbiAgICAgIGNsb3NlQnRuLm9uY2xpY2sgPSAoKSA9PiB0aGlzLmNsb3NlKCk7XG4gICAgICBtb2RhbENvbnRlbnQuYXBwZW5kQ2hpbGQoY2xvc2VCdG4pO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aXRsZSBpZiBwcm92aWRlZFxuICAgIGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgIGNvbnN0IHRpdGxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRpdGxlRWwuY2xhc3NOYW1lID0gJ2FkdS1tb2RhbC10aXRsZSc7XG4gICAgICB0aXRsZUVsLnRleHRDb250ZW50ID0gY29uZmlnLnRpdGxlO1xuICAgICAgbW9kYWxDb250ZW50LmFwcGVuZENoaWxkKHRpdGxlRWwpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjb21wb25lbnQgY29udGFpbmVyXG4gICAgY29uc3QgY29tcG9uZW50Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29tcG9uZW50Q29udGFpbmVyLmNsYXNzTmFtZSA9ICdhZHUtbW9kYWwtYm9keSc7XG4gICAgbW9kYWxDb250ZW50LmFwcGVuZENoaWxkKGNvbXBvbmVudENvbnRhaW5lcik7XG5cbiAgICAvLyBBc3NlbWJsZSBtb2RhbFxuICAgIG1vZGFsV3JhcHBlci5hcHBlbmRDaGlsZChiYWNrZHJvcCk7XG4gICAgbW9kYWxXcmFwcGVyLmFwcGVuZENoaWxkKG1vZGFsQ29udGVudCk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbFdyYXBwZXIpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCBhdHRhY2ggY29tcG9uZW50XG4gICAgdGhpcy5tb2RhbENvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG4gICAgICBob3N0RWxlbWVudDogY29tcG9uZW50Q29udGFpbmVyXG4gICAgfSk7XG5cbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMubW9kYWxDb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuXG4gICAgLy8gSGFuZGxlIEVTQyBrZXlcbiAgICBpZiAoY29uZmlnLmNsb3NlT25Fc2NhcGUgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBlc2NIYW5kbGVyID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXNjSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXNjSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3NlOiAocmVzdWx0PzogUikgPT4gdGhpcy5jbG9zZShyZXN1bHQpLFxuICAgICAgYWZ0ZXJDbG9zZWQ6ICgpID0+IHRoaXMuY2xvc2VTdWJqZWN0IGFzIFN1YmplY3Q8UiB8IHVuZGVmaW5lZD5cbiAgICB9O1xuICB9XG5cbiAgY2xvc2UocmVzdWx0PzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kYWxDb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5tb2RhbENvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICB0aGlzLm1vZGFsQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubW9kYWxDb21wb25lbnRSZWYgPSBudWxsO1xuXG4gICAgICAvLyBSZW1vdmUgbW9kYWwgZnJvbSBET01cbiAgICAgIGNvbnN0IG1vZGFscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hZHUtbW9kYWwtd3JhcHBlcicpO1xuICAgICAgbW9kYWxzLmZvckVhY2gobW9kYWwgPT4gbW9kYWwucmVtb3ZlKCkpO1xuXG4gICAgICB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KHJlc3VsdCk7XG4gICAgICB0aGlzLmNsb3NlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5jbG9zZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb2RhbFdyYXBwZXJDbGFzc2VzKGNvbmZpZzogTW9kYWxDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiAnYWR1LW1vZGFsLXdyYXBwZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb2RhbENvbnRlbnRDbGFzc2VzKGNvbmZpZzogTW9kYWxDb25maWcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNpemUgPSBjb25maWcuc2l6ZSB8fCAnbWQnO1xuICAgIHJldHVybiBgYWR1LW1vZGFsLWNvbnRlbnQgYWR1LW1vZGFsLSR7c2l6ZX1gO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of angular-dev-utils
|
|
3
|
+
*/
|
|
4
|
+
// Components
|
|
5
|
+
export * from './lib/components/button/button.component';
|
|
6
|
+
export * from './lib/components/input/input.component';
|
|
7
|
+
export * from './lib/components/card/card.component';
|
|
8
|
+
export * from './lib/components/modal/modal.component';
|
|
9
|
+
export * from './lib/components/table/table.component';
|
|
10
|
+
export * from './lib/components/spinner/spinner.component';
|
|
11
|
+
// Services
|
|
12
|
+
export * from './lib/services/modal.service';
|
|
13
|
+
// Models & Types
|
|
14
|
+
export * from './lib/models/types';
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsYUFBYTtBQUNiLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDRDQUE0QyxDQUFDO0FBRTNELFdBQVc7QUFDWCxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLGlCQUFpQjtBQUNqQixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBhbmd1bGFyLWRldi11dGlsc1xuICovXG5cbi8vIENvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudCc7XG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tb2RhbC5zZXJ2aWNlJztcblxuLy8gTW9kZWxzICYgVHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy90eXBlcyc7XG4iXX0=
|