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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQTBJL0MsTUFBTSxPQUFPLGNBQWM7SUF2STNCO1FBd0lXLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQWdCO1lBQzdCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUdRLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWlELENBQUM7UUFFMUYsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFtQixLQUFLLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7S0EwRXZCO0lBeEVDLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxD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QUM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQVEsRUFBRSxJQUFZO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDOytHQTNGVSxjQUFjO21HQUFkLGNBQWMsa1RBbklmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUVULDJvR0FwRVMsWUFBWTs7NEZBb0lYLGNBQWM7a0JBdkkxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FVDs4QkFpRVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBUXdCLFlBQVk7c0JBQXpDLFlBQVk7dUJBQUMsY0FBYztnQkFDbEIsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiwgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhZHUtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYWR1LXRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiYWR1LXRhYmxlXCIgW2NsYXNzLmFkdS10YWJsZS1zdHJpcGVkXT1cImNvbmZpZy5zdHJpcGVkXCIgW2NsYXNzLmFkdS10YWJsZS1ob3ZlcmFibGVdPVwiY29uZmlnLmhvdmVyYWJsZVwiPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJhZHUtdGFibGUtaGVhZGVyXCI+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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQyxlQUFlLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBVy9CLE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQ1UsTUFBc0IsRUFDdEIsUUFBNkI7UUFEN0IsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFML0Isc0JBQWlCLEdBQTZCLElBQUksQ0FBQztRQUNuRCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUFLdEMsQ0FBQztJQUVMLElBQUksQ0FBYSxTQUFrQixFQUFFLFNBQXNCLEVBQUU7UUFDM0QsOEJBQThCO1FBQzlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdELGtCQUFrQjtRQUNsQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7UUFDMUMsSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFbEQsZ0NBQWdDO1FBQ2hDLElBQUksTUFBTSxDQUFDLGVBQWUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELFFBQVEsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7WUFDdkMsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDekIsUUFBUSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztZQUN0QyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDbkMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDaEQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTdDLGlCQUFpQjtRQUNqQixZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLFlBQVksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEMsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQ2xELG1CQUFtQixFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ2xDLFdBQVcsRUFBRSxrQkFBa0I7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhELGlCQUFpQjtRQUNqQixJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFnQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNiLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELENBQUM7WUFDSCxDQUFDLENBQUM7WUFDRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLENBQUMsTUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6QyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQXNDO1NBQy9ELENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFFOUIsd0JBQXdCO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUV4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQW1CO1FBQ2hELE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQW1CO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO1FBQ2pDLE9BQU8sK0JBQStCLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7K0dBMUdVLFlBQVk7bUhBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgQ29tcG9uZW50UmVmLCBBcHBsaWNhdGlvblJlZiwgY3JlYXRlQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb2RhbENvbmZpZyB9IGZyb20gJy4uL21vZGVscy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxSZWY8VCA9IGFueT4ge1xuICBjbG9zZTogKHJlc3VsdD86IFQpID0+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=