mesauth-angular 0.2.15 → 0.2.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -61
- package/dist/README.md +139 -61
- package/dist/{fesm2020 → fesm2022}/mesauth-angular.mjs +796 -691
- package/dist/fesm2022/mesauth-angular.mjs.map +1 -0
- package/dist/index.d.ts +355 -9
- package/package.json +12 -12
- package/dist/esm2020/index.mjs +0 -10
- package/dist/esm2020/ma-user.component.mjs +0 -32
- package/dist/esm2020/mes-auth.interceptor.mjs +0 -29
- package/dist/esm2020/mes-auth.module.mjs +0 -23
- package/dist/esm2020/mes-auth.service.mjs +0 -175
- package/dist/esm2020/mesauth-angular.mjs +0 -5
- package/dist/esm2020/notification-badge.component.mjs +0 -71
- package/dist/esm2020/notification-panel.component.mjs +0 -333
- package/dist/esm2020/theme.service.mjs +0 -63
- package/dist/esm2020/toast-container.component.mjs +0 -83
- package/dist/esm2020/toast.service.mjs +0 -41
- package/dist/esm2020/user-profile.component.mjs +0 -223
- package/dist/fesm2015/mesauth-angular.mjs +0 -1042
- package/dist/fesm2015/mesauth-angular.mjs.map +0 -1
- package/dist/fesm2020/mesauth-angular.mjs.map +0 -1
- package/dist/ma-user.component.d.ts +0 -8
- package/dist/mes-auth.interceptor.d.ts +0 -13
- package/dist/mes-auth.module.d.ts +0 -6
- package/dist/mes-auth.service.d.ts +0 -121
- package/dist/notification-badge.component.d.ts +0 -20
- package/dist/notification-panel.component.d.ts +0 -36
- package/dist/package.json +0 -52
- package/dist/theme.service.d.ts +0 -19
- package/dist/toast-container.component.d.ts +0 -18
- package/dist/toast.service.d.ts +0 -18
- package/dist/user-profile.component.d.ts +0 -31
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
import { Component, HostBinding, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { NgIf, NgFor } from '@angular/common';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { takeUntil } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./mes-auth.service";
|
|
7
|
-
import * as i2 from "./toast.service";
|
|
8
|
-
import * as i3 from "./theme.service";
|
|
9
|
-
export class NotificationPanelComponent {
|
|
10
|
-
constructor(authService, toastService, themeService) {
|
|
11
|
-
this.authService = authService;
|
|
12
|
-
this.toastService = toastService;
|
|
13
|
-
this.themeService = themeService;
|
|
14
|
-
this.notificationRead = new EventEmitter();
|
|
15
|
-
this.isOpen = false;
|
|
16
|
-
this.notifications = [];
|
|
17
|
-
this.currentTheme = 'light';
|
|
18
|
-
this.activeTab = 'unread'; // Default to unread tab
|
|
19
|
-
this.destroy$ = new Subject();
|
|
20
|
-
}
|
|
21
|
-
get themeClass() {
|
|
22
|
-
return `theme-${this.currentTheme}`;
|
|
23
|
-
}
|
|
24
|
-
get unreadNotifications() {
|
|
25
|
-
return this.notifications.filter(n => !n.isRead);
|
|
26
|
-
}
|
|
27
|
-
get readNotifications() {
|
|
28
|
-
return this.notifications.filter(n => n.isRead);
|
|
29
|
-
}
|
|
30
|
-
get currentNotifications() {
|
|
31
|
-
return this.activeTab === 'unread' ? this.unreadNotifications : this.readNotifications;
|
|
32
|
-
}
|
|
33
|
-
getNotificationMessage(notification) {
|
|
34
|
-
return notification.messageHtml || notification.message || '';
|
|
35
|
-
}
|
|
36
|
-
ngOnInit() {
|
|
37
|
-
this.themeService.currentTheme$
|
|
38
|
-
.pipe(takeUntil(this.destroy$))
|
|
39
|
-
.subscribe(theme => {
|
|
40
|
-
this.currentTheme = theme;
|
|
41
|
-
});
|
|
42
|
-
this.loadNotifications();
|
|
43
|
-
// Listen for new real-time notifications
|
|
44
|
-
this.authService.notifications$
|
|
45
|
-
.pipe(takeUntil(this.destroy$))
|
|
46
|
-
.subscribe((notification) => {
|
|
47
|
-
// Show toast for new notification
|
|
48
|
-
this.toastService.show(notification.messageHtml || notification.message || '', notification.title, 'info', 5000);
|
|
49
|
-
// Reload notifications list
|
|
50
|
-
this.loadNotifications();
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
ngOnDestroy() {
|
|
54
|
-
this.destroy$.next();
|
|
55
|
-
this.destroy$.complete();
|
|
56
|
-
}
|
|
57
|
-
loadNotifications() {
|
|
58
|
-
this.authService.getNotifications(1, 50, true).subscribe({
|
|
59
|
-
next: (response) => {
|
|
60
|
-
this.notifications = response.items || [];
|
|
61
|
-
},
|
|
62
|
-
error: (err) => { }
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
open() {
|
|
66
|
-
this.isOpen = true;
|
|
67
|
-
this.activeTab = 'unread'; // Reset to unread tab when opening
|
|
68
|
-
}
|
|
69
|
-
close() {
|
|
70
|
-
this.isOpen = false;
|
|
71
|
-
}
|
|
72
|
-
switchTab(tab) {
|
|
73
|
-
this.activeTab = tab;
|
|
74
|
-
}
|
|
75
|
-
markAsRead(notificationId, event) {
|
|
76
|
-
if (event) {
|
|
77
|
-
event.stopPropagation();
|
|
78
|
-
}
|
|
79
|
-
this.authService.markAsRead(notificationId).subscribe({
|
|
80
|
-
next: () => {
|
|
81
|
-
const notification = this.notifications.find(n => n.id === notificationId);
|
|
82
|
-
if (notification) {
|
|
83
|
-
notification.isRead = true;
|
|
84
|
-
this.notificationRead.emit();
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
error: (err) => { }
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
markAllAsRead() {
|
|
91
|
-
this.authService.markAllAsRead().subscribe({
|
|
92
|
-
next: () => {
|
|
93
|
-
this.notifications.forEach(n => n.isRead = true);
|
|
94
|
-
this.notificationRead.emit();
|
|
95
|
-
},
|
|
96
|
-
error: (err) => { }
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
deleteAllRead() {
|
|
100
|
-
const readNotificationIds = this.notifications
|
|
101
|
-
.filter(n => n.isRead)
|
|
102
|
-
.map(n => n.id);
|
|
103
|
-
// Delete all read notifications
|
|
104
|
-
const deletePromises = readNotificationIds.map(id => this.authService.deleteNotification(id).toPromise());
|
|
105
|
-
Promise.all(deletePromises).then(() => {
|
|
106
|
-
// Remove all read notifications from the local array
|
|
107
|
-
this.notifications = this.notifications.filter(n => !n.isRead);
|
|
108
|
-
}).catch((err) => {
|
|
109
|
-
// If bulk delete fails, reload notifications to get current state
|
|
110
|
-
this.loadNotifications();
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
deleteAllUnread() {
|
|
114
|
-
const unreadNotificationIds = this.notifications
|
|
115
|
-
.filter(n => !n.isRead)
|
|
116
|
-
.map(n => n.id);
|
|
117
|
-
// Delete all unread notifications
|
|
118
|
-
const deletePromises = unreadNotificationIds.map(id => this.authService.deleteNotification(id).toPromise());
|
|
119
|
-
Promise.all(deletePromises).then(() => {
|
|
120
|
-
// Remove all unread notifications from the local array
|
|
121
|
-
this.notifications = this.notifications.filter(n => n.isRead);
|
|
122
|
-
}).catch((err) => {
|
|
123
|
-
// If bulk delete fails, reload notifications to get current state
|
|
124
|
-
this.loadNotifications();
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
delete(notificationId, event) {
|
|
128
|
-
event.stopPropagation();
|
|
129
|
-
this.authService.deleteNotification(notificationId).subscribe({
|
|
130
|
-
next: () => {
|
|
131
|
-
this.notifications = this.notifications.filter(n => n.id !== notificationId);
|
|
132
|
-
},
|
|
133
|
-
error: (err) => { }
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
formatDate(dateString) {
|
|
137
|
-
const date = new Date(dateString);
|
|
138
|
-
const now = new Date();
|
|
139
|
-
const diffMs = now.getTime() - date.getTime();
|
|
140
|
-
const diffMins = Math.floor(diffMs / 60000);
|
|
141
|
-
const diffHours = Math.floor(diffMs / 3600000);
|
|
142
|
-
const diffDays = Math.floor(diffMs / 86400000);
|
|
143
|
-
if (diffMins < 1)
|
|
144
|
-
return 'Now';
|
|
145
|
-
if (diffMins < 60)
|
|
146
|
-
return `${diffMins}m ago`;
|
|
147
|
-
if (diffHours < 24)
|
|
148
|
-
return `${diffHours}h ago`;
|
|
149
|
-
if (diffDays < 7)
|
|
150
|
-
return `${diffDays}d ago`;
|
|
151
|
-
return date.toLocaleDateString();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
NotificationPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NotificationPanelComponent, deps: [{ token: i1.MesAuthService }, { token: i2.ToastService }, { token: i3.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
155
|
-
NotificationPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NotificationPanelComponent, isStandalone: true, selector: "ma-notification-panel", outputs: { notificationRead: "notificationRead" }, host: { properties: { "class": "this.themeClass" } }, ngImport: i0, template: `
|
|
156
|
-
<div class="notification-panel" [class.open]="isOpen">
|
|
157
|
-
<!-- Header -->
|
|
158
|
-
<div class="panel-header">
|
|
159
|
-
<h3>Notifications</h3>
|
|
160
|
-
<button class="close-btn" (click)="close()" title="Close">✕</button>
|
|
161
|
-
</div>
|
|
162
|
-
|
|
163
|
-
<!-- Tabs -->
|
|
164
|
-
<div class="tabs">
|
|
165
|
-
<button
|
|
166
|
-
class="tab-btn"
|
|
167
|
-
[class.active]="activeTab === 'unread'"
|
|
168
|
-
(click)="switchTab('unread')"
|
|
169
|
-
>
|
|
170
|
-
Unread ({{ unreadNotifications.length }})
|
|
171
|
-
</button>
|
|
172
|
-
<button
|
|
173
|
-
class="tab-btn"
|
|
174
|
-
[class.active]="activeTab === 'read'"
|
|
175
|
-
(click)="switchTab('read')"
|
|
176
|
-
>
|
|
177
|
-
Read ({{ readNotifications.length }})
|
|
178
|
-
</button>
|
|
179
|
-
</div>
|
|
180
|
-
|
|
181
|
-
<!-- Notifications List -->
|
|
182
|
-
<div class="notifications-list">
|
|
183
|
-
<ng-container *ngIf="currentNotifications.length > 0">
|
|
184
|
-
<div
|
|
185
|
-
*ngFor="let notification of currentNotifications"
|
|
186
|
-
class="notification-item"
|
|
187
|
-
[class.unread]="!notification.isRead"
|
|
188
|
-
(click)="markAsRead(notification.id)"
|
|
189
|
-
>
|
|
190
|
-
<div class="notification-content">
|
|
191
|
-
<div class="notification-title">{{ notification.title }}</div>
|
|
192
|
-
<div class="notification-message" [innerHTML]="getNotificationMessage(notification)"></div>
|
|
193
|
-
<div class="notification-meta">
|
|
194
|
-
<span class="app-name">{{ notification.sourceAppName }}</span>
|
|
195
|
-
<span class="time">{{ formatDate(notification.createdAt) }}</span>
|
|
196
|
-
</div>
|
|
197
|
-
</div>
|
|
198
|
-
<button
|
|
199
|
-
class="read-btn"
|
|
200
|
-
(click)="markAsRead(notification.id, $event)"
|
|
201
|
-
title="Mark as read"
|
|
202
|
-
*ngIf="!notification.isRead"
|
|
203
|
-
>
|
|
204
|
-
✓
|
|
205
|
-
</button>
|
|
206
|
-
<button
|
|
207
|
-
class="delete-btn"
|
|
208
|
-
(click)="delete(notification.id, $event)"
|
|
209
|
-
title="Delete notification"
|
|
210
|
-
*ngIf="notification.isRead"
|
|
211
|
-
>
|
|
212
|
-
✓
|
|
213
|
-
</button>
|
|
214
|
-
</div>
|
|
215
|
-
</ng-container>
|
|
216
|
-
|
|
217
|
-
<ng-container *ngIf="currentNotifications.length === 0">
|
|
218
|
-
<div class="empty-state">
|
|
219
|
-
No {{ activeTab }} notifications
|
|
220
|
-
</div>
|
|
221
|
-
</ng-container>
|
|
222
|
-
</div>
|
|
223
|
-
|
|
224
|
-
<!-- Footer Actions -->
|
|
225
|
-
<div class="panel-footer" *ngIf="currentNotifications.length > 0">
|
|
226
|
-
<div class="footer-actions" *ngIf="activeTab === 'unread'">
|
|
227
|
-
<button class="action-btn" (click)="markAllAsRead()" *ngIf="unreadNotifications.length > 0">
|
|
228
|
-
Mark all as read
|
|
229
|
-
</button>
|
|
230
|
-
<button class="action-btn delete-all-btn" (click)="deleteAllUnread()" *ngIf="unreadNotifications.length > 0">
|
|
231
|
-
Delete all
|
|
232
|
-
</button>
|
|
233
|
-
</div>
|
|
234
|
-
<button class="action-btn delete-all-btn" (click)="deleteAllRead()" *ngIf="activeTab === 'read' && readNotifications.length > 0">
|
|
235
|
-
Delete all
|
|
236
|
-
</button>
|
|
237
|
-
</div>
|
|
238
|
-
</div>
|
|
239
|
-
`, isInline: true, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--success-color: #4caf50;--error-color: #f44336;--text-primary: #333;--text-secondary: #666;--text-muted: #999;--bg-primary: white;--bg-secondary: #f5f5f5;--bg-tertiary: #fafafa;--bg-hover: #f5f5f5;--bg-unread: #e3f2fd;--border-color: #e0e0e0;--border-light: #f0f0f0;--shadow: rgba(0, 0, 0, .1)}:host(.theme-dark){--primary-color: #90caf9;--primary-hover: #64b5f6;--success-color: #81c784;--error-color: #ef5350;--text-primary: #e0e0e0;--text-secondary: #b0b0b0;--text-muted: #888;--bg-primary: #1e1e1e;--bg-secondary: #2d2d2d;--bg-tertiary: #252525;--bg-hover: #333;--bg-unread: rgba(144, 202, 249, .1);--border-color: #404040;--border-light: #333;--shadow: rgba(0, 0, 0, .3)}.notification-panel{position:fixed;top:0;right:-350px;width:350px;height:100vh;background:var(--bg-primary);box-shadow:-2px 0 8px var(--shadow);display:flex;flex-direction:column;z-index:1000;transition:right .3s ease}.notification-panel.open{right:0}.panel-header{display:flex;justify-content:space-between;align-items:center;padding:16px;border-bottom:1px solid var(--border-color);background-color:var(--bg-secondary)}.panel-header h3{margin:0;font-size:18px;color:var(--text-primary)}.close-btn{background:none;border:none;font-size:20px;cursor:pointer;color:var(--text-secondary);padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;transition:color .2s}.close-btn:hover{color:var(--text-primary)}.tabs{display:flex;border-bottom:1px solid var(--border-color);background-color:var(--bg-secondary)}.tab-btn{flex:1;padding:12px 16px;background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:14px;font-weight:500;transition:all .2s;border-bottom:2px solid transparent}.tab-btn:hover{background-color:var(--bg-hover);color:var(--text-primary)}.tab-btn.active{color:var(--primary-color);border-bottom-color:var(--primary-color);background-color:var(--bg-primary)}.notifications-list{flex:1;overflow-y:auto}.notification-item{display:flex;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border-light);cursor:pointer;background-color:var(--bg-tertiary);transition:background-color .2s}.notification-item:hover{background-color:var(--bg-hover)}.notification-item.unread{background-color:var(--bg-unread)}.notification-content{flex:1;min-width:0}.notification-title{font-weight:600;color:var(--text-primary);font-size:14px;margin-bottom:4px}.notification-message{color:var(--text-secondary);font-size:13px;line-height:1.4;margin-bottom:6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.notification-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--text-muted)}.app-name{font-weight:500;color:var(--primary-color)}.read-btn{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:14px;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .2s}.read-btn:hover{color:var(--success-color)}.delete-btn{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:14px;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .2s}.delete-btn:hover{color:var(--error-color)}.empty-state{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:14px}.panel-footer{padding:12px 16px;border-top:1px solid var(--border-color);background-color:var(--bg-secondary)}.footer-actions{display:flex;gap:8px}.footer-actions .action-btn{flex:1}.action-btn{width:100%;padding:8px;background-color:var(--primary-color);color:#fff;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:background-color .2s}.action-btn:hover{background-color:var(--primary-hover)}.delete-all-btn{background-color:var(--error-color);color:#fff}.delete-all-btn:hover{background-color:#d32f2f}@media (max-width: 600px){.notification-panel{width:100%;right:-100%}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
240
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NotificationPanelComponent, decorators: [{
|
|
241
|
-
type: Component,
|
|
242
|
-
args: [{ selector: 'ma-notification-panel', standalone: true, imports: [NgIf, NgFor], template: `
|
|
243
|
-
<div class="notification-panel" [class.open]="isOpen">
|
|
244
|
-
<!-- Header -->
|
|
245
|
-
<div class="panel-header">
|
|
246
|
-
<h3>Notifications</h3>
|
|
247
|
-
<button class="close-btn" (click)="close()" title="Close">✕</button>
|
|
248
|
-
</div>
|
|
249
|
-
|
|
250
|
-
<!-- Tabs -->
|
|
251
|
-
<div class="tabs">
|
|
252
|
-
<button
|
|
253
|
-
class="tab-btn"
|
|
254
|
-
[class.active]="activeTab === 'unread'"
|
|
255
|
-
(click)="switchTab('unread')"
|
|
256
|
-
>
|
|
257
|
-
Unread ({{ unreadNotifications.length }})
|
|
258
|
-
</button>
|
|
259
|
-
<button
|
|
260
|
-
class="tab-btn"
|
|
261
|
-
[class.active]="activeTab === 'read'"
|
|
262
|
-
(click)="switchTab('read')"
|
|
263
|
-
>
|
|
264
|
-
Read ({{ readNotifications.length }})
|
|
265
|
-
</button>
|
|
266
|
-
</div>
|
|
267
|
-
|
|
268
|
-
<!-- Notifications List -->
|
|
269
|
-
<div class="notifications-list">
|
|
270
|
-
<ng-container *ngIf="currentNotifications.length > 0">
|
|
271
|
-
<div
|
|
272
|
-
*ngFor="let notification of currentNotifications"
|
|
273
|
-
class="notification-item"
|
|
274
|
-
[class.unread]="!notification.isRead"
|
|
275
|
-
(click)="markAsRead(notification.id)"
|
|
276
|
-
>
|
|
277
|
-
<div class="notification-content">
|
|
278
|
-
<div class="notification-title">{{ notification.title }}</div>
|
|
279
|
-
<div class="notification-message" [innerHTML]="getNotificationMessage(notification)"></div>
|
|
280
|
-
<div class="notification-meta">
|
|
281
|
-
<span class="app-name">{{ notification.sourceAppName }}</span>
|
|
282
|
-
<span class="time">{{ formatDate(notification.createdAt) }}</span>
|
|
283
|
-
</div>
|
|
284
|
-
</div>
|
|
285
|
-
<button
|
|
286
|
-
class="read-btn"
|
|
287
|
-
(click)="markAsRead(notification.id, $event)"
|
|
288
|
-
title="Mark as read"
|
|
289
|
-
*ngIf="!notification.isRead"
|
|
290
|
-
>
|
|
291
|
-
✓
|
|
292
|
-
</button>
|
|
293
|
-
<button
|
|
294
|
-
class="delete-btn"
|
|
295
|
-
(click)="delete(notification.id, $event)"
|
|
296
|
-
title="Delete notification"
|
|
297
|
-
*ngIf="notification.isRead"
|
|
298
|
-
>
|
|
299
|
-
✓
|
|
300
|
-
</button>
|
|
301
|
-
</div>
|
|
302
|
-
</ng-container>
|
|
303
|
-
|
|
304
|
-
<ng-container *ngIf="currentNotifications.length === 0">
|
|
305
|
-
<div class="empty-state">
|
|
306
|
-
No {{ activeTab }} notifications
|
|
307
|
-
</div>
|
|
308
|
-
</ng-container>
|
|
309
|
-
</div>
|
|
310
|
-
|
|
311
|
-
<!-- Footer Actions -->
|
|
312
|
-
<div class="panel-footer" *ngIf="currentNotifications.length > 0">
|
|
313
|
-
<div class="footer-actions" *ngIf="activeTab === 'unread'">
|
|
314
|
-
<button class="action-btn" (click)="markAllAsRead()" *ngIf="unreadNotifications.length > 0">
|
|
315
|
-
Mark all as read
|
|
316
|
-
</button>
|
|
317
|
-
<button class="action-btn delete-all-btn" (click)="deleteAllUnread()" *ngIf="unreadNotifications.length > 0">
|
|
318
|
-
Delete all
|
|
319
|
-
</button>
|
|
320
|
-
</div>
|
|
321
|
-
<button class="action-btn delete-all-btn" (click)="deleteAllRead()" *ngIf="activeTab === 'read' && readNotifications.length > 0">
|
|
322
|
-
Delete all
|
|
323
|
-
</button>
|
|
324
|
-
</div>
|
|
325
|
-
</div>
|
|
326
|
-
`, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--success-color: #4caf50;--error-color: #f44336;--text-primary: #333;--text-secondary: #666;--text-muted: #999;--bg-primary: white;--bg-secondary: #f5f5f5;--bg-tertiary: #fafafa;--bg-hover: #f5f5f5;--bg-unread: #e3f2fd;--border-color: #e0e0e0;--border-light: #f0f0f0;--shadow: rgba(0, 0, 0, .1)}:host(.theme-dark){--primary-color: #90caf9;--primary-hover: #64b5f6;--success-color: #81c784;--error-color: #ef5350;--text-primary: #e0e0e0;--text-secondary: #b0b0b0;--text-muted: #888;--bg-primary: #1e1e1e;--bg-secondary: #2d2d2d;--bg-tertiary: #252525;--bg-hover: #333;--bg-unread: rgba(144, 202, 249, .1);--border-color: #404040;--border-light: #333;--shadow: rgba(0, 0, 0, .3)}.notification-panel{position:fixed;top:0;right:-350px;width:350px;height:100vh;background:var(--bg-primary);box-shadow:-2px 0 8px var(--shadow);display:flex;flex-direction:column;z-index:1000;transition:right .3s ease}.notification-panel.open{right:0}.panel-header{display:flex;justify-content:space-between;align-items:center;padding:16px;border-bottom:1px solid var(--border-color);background-color:var(--bg-secondary)}.panel-header h3{margin:0;font-size:18px;color:var(--text-primary)}.close-btn{background:none;border:none;font-size:20px;cursor:pointer;color:var(--text-secondary);padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;transition:color .2s}.close-btn:hover{color:var(--text-primary)}.tabs{display:flex;border-bottom:1px solid var(--border-color);background-color:var(--bg-secondary)}.tab-btn{flex:1;padding:12px 16px;background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:14px;font-weight:500;transition:all .2s;border-bottom:2px solid transparent}.tab-btn:hover{background-color:var(--bg-hover);color:var(--text-primary)}.tab-btn.active{color:var(--primary-color);border-bottom-color:var(--primary-color);background-color:var(--bg-primary)}.notifications-list{flex:1;overflow-y:auto}.notification-item{display:flex;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border-light);cursor:pointer;background-color:var(--bg-tertiary);transition:background-color .2s}.notification-item:hover{background-color:var(--bg-hover)}.notification-item.unread{background-color:var(--bg-unread)}.notification-content{flex:1;min-width:0}.notification-title{font-weight:600;color:var(--text-primary);font-size:14px;margin-bottom:4px}.notification-message{color:var(--text-secondary);font-size:13px;line-height:1.4;margin-bottom:6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.notification-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--text-muted)}.app-name{font-weight:500;color:var(--primary-color)}.read-btn{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:14px;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .2s}.read-btn:hover{color:var(--success-color)}.delete-btn{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:14px;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .2s}.delete-btn:hover{color:var(--error-color)}.empty-state{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:14px}.panel-footer{padding:12px 16px;border-top:1px solid var(--border-color);background-color:var(--bg-secondary)}.footer-actions{display:flex;gap:8px}.footer-actions .action-btn{flex:1}.action-btn{width:100%;padding:8px;background-color:var(--primary-color);color:#fff;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:background-color .2s}.action-btn:hover{background-color:var(--primary-hover)}.delete-all-btn{background-color:var(--error-color);color:#fff}.delete-all-btn:hover{background-color:#d32f2f}@media (max-width: 600px){.notification-panel{width:100%;right:-100%}}\n"] }]
|
|
327
|
-
}], ctorParameters: function () { return [{ type: i1.MesAuthService }, { type: i2.ToastService }, { type: i3.ThemeService }]; }, propDecorators: { notificationRead: [{
|
|
328
|
-
type: Output
|
|
329
|
-
}], themeClass: [{
|
|
330
|
-
type: HostBinding,
|
|
331
|
-
args: ['class']
|
|
332
|
-
}] } });
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBNlczQyxNQUFNLE9BQU8sMEJBQTBCO0lBNEJyQyxZQUFvQixXQUEyQixFQUFVLFlBQTBCLEVBQVUsWUFBMEI7UUFBbkcsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQTNCN0cscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUt0RCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2Ysa0JBQWEsR0FBc0IsRUFBRSxDQUFDO1FBQ3RDLGlCQUFZLEdBQVUsT0FBTyxDQUFDO1FBQzlCLGNBQVMsR0FBc0IsUUFBUSxDQUFDLENBQUMsd0JBQXdCO1FBQ3pELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBa0JtRixDQUFDO0lBMUIzSCxJQUEwQixVQUFVO1FBQ2xDLE9BQU8sU0FBUyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQVFELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFD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QUM7O3VIQTFLVSwwQkFBMEI7MkdBQTFCLDBCQUEwQiwwTEF2VzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRlQsbS9IQXJGUyxJQUFJLDZGQUFFLEtBQUs7MkZBd1dWLDBCQUEwQjtrQkEzV3RDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsWUFDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0ZUOzJKQW9SUyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ21CLFVBQVU7c0JBQW5DLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1lc0F1dGhTZXJ2aWNlLCBOb3RpZmljYXRpb25EdG8sIFBhZ2VkTGlzdCwgUmVhbFRpbWVOb3RpZmljYXRpb25EdG8gfSBmcm9tICcuL21lcy1hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UsIFRoZW1lIH0gZnJvbSAnLi90aGVtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21hLW5vdGlmaWNhdGlvbi1wYW5lbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3JdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXBhbmVsXCIgW2NsYXNzLm9wZW5dPVwiaXNPcGVuXCI+XHJcbiAgICAgIDwhLS0gSGVhZGVyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGgzPk5vdGlmaWNhdGlvbnM8L2gzPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2UoKVwiIHRpdGxlPVwiQ2xvc2VcIj7inJU8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFRhYnMgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgIGNsYXNzPVwidGFiLWJ0blwiIFxyXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUYWIgPT09ICd1bnJlYWQnXCJcclxuICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ3VucmVhZCcpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBVbnJlYWQgKHt7IHVucmVhZE5vdGlmaWNhdGlvbnMubGVuZ3RoIH19KVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICBjbGFzcz1cInRhYi1idG5cIiBcclxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09PSAncmVhZCdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYigncmVhZCcpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBSZWFkICh7eyByZWFkTm90aWZpY2F0aW9ucy5sZW5ndGggfX0pXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBOb3RpZmljYXRpb25zIExpc3QgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb25zLWxpc3RcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudE5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vdGlmaWNhdGlvbiBvZiBjdXJyZW50Tm90aWZpY2F0aW9uc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9uLWl0ZW1cIlxyXG4gICAgICAgICAgICBbY2xhc3MudW5yZWFkXT1cIiFub3RpZmljYXRpb24uaXNSZWFkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hcmtBc1JlYWQobm90aWZpY2F0aW9uLmlkKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tdGl0bGVcIj57eyBub3RpZmljYXRpb24udGl0bGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLW1lc3NhZ2VcIiBbaW5uZXJIVE1MXT1cImdldE5vdGlmaWNhdGlvbk1lc3NhZ2Uobm90aWZpY2F0aW9uKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tbWV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtbmFtZVwiPnt7IG5vdGlmaWNhdGlvbi5zb3VyY2VBcHBOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+e3sgZm9ybWF0RGF0ZShub3RpZmljYXRpb24uY3JlYXRlZEF0KSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWFkLWJ0blwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJtYXJrQXNSZWFkKG5vdGlmaWNhdGlvbi5pZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJNYXJrIGFzIHJlYWRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIW5vdGlmaWNhdGlvbi5pc1JlYWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg4pyTXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWJ0blwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUobm90aWZpY2F0aW9uLmlkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBub3RpZmljYXRpb25cIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLmlzUmVhZFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDinJNcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnROb3RpZmljYXRpb25zLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XHJcbiAgICAgICAgICAgIE5vIHt7IGFjdGl2ZVRhYiB9fSBub3RpZmljYXRpb25zXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEZvb3RlciBBY3Rpb25zIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtZm9vdGVyXCIgKm5nSWY9XCJjdXJyZW50Tm90aWZpY2F0aW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1hY3Rpb25zXCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICd1bnJlYWQnXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIChjbGljayk9XCJtYXJrQWxsQXNSZWFkKClcIiAqbmdJZj1cInVucmVhZE5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICBNYXJrIGFsbCBhcyByZWFkXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIGRlbGV0ZS1hbGwtYnRuXCIgKGNsaWNrKT1cImRlbGV0ZUFsbFVucmVhZCgpXCIgKm5nSWY9XCJ1bnJlYWROb3RpZmljYXRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgRGVsZXRlIGFsbFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gZGVsZXRlLWFsbC1idG5cIiAoY2xpY2spPVwiZGVsZXRlQWxsUmVhZCgpXCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdyZWFkJyAmJiByZWFkTm90aWZpY2F0aW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICBEZWxldGUgYWxsXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgICA6aG9zdCB7XHJcbiAgICAgIC0tcHJpbWFyeS1jb2xvcjogIzE5NzZkMjtcclxuICAgICAgLS1wcmltYXJ5LWhvdmVyOiAjMTU2NWMwO1xyXG4gICAgICAtLXN1Y2Nlc3MtY29sb3I6ICM0Y2FmNTA7XHJcbiAgICAgIC0tZXJyb3ItY29sb3I6ICNmNDQzMzY7XHJcbiAgICAgIC0tdGV4dC1wcmltYXJ5OiAjMzMzO1xyXG4gICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjNjY2O1xyXG4gICAgICAtLXRleHQtbXV0ZWQ6ICM5OTk7XHJcbiAgICAgIC0tYmctcHJpbWFyeTogd2hpdGU7XHJcbiAgICAgIC0tYmctc2Vjb25kYXJ5OiAjZjVmNWY1O1xyXG4gICAgICAtLWJnLXRlcnRpYXJ5OiAjZmFmYWZhO1xyXG4gICAgICAtLWJnLWhvdmVyOiAjZjVmNWY1O1xyXG4gICAgICAtLWJnLXVucmVhZDogI2UzZjJmZDtcclxuICAgICAgLS1ib3JkZXItY29sb3I6ICNlMGUwZTA7XHJcbiAgICAgIC0tYm9yZGVyLWxpZ2h0OiAjZjBmMGYwO1xyXG4gICAgICAtLXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gICAgfVxyXG5cclxuICAgIDpob3N0KC50aGVtZS1kYXJrKSB7XHJcbiAgICAgIC0tcHJpbWFyeS1jb2xvcjogIzkwY2FmOTtcclxuICAgICAgLS1wcmltYXJ5LWhvdmVyOiAjNjRiNWY2O1xyXG4gICAgICAtLXN1Y2Nlc3MtY29sb3I6ICM4MWM3ODQ7XHJcbiAgICAgIC0tZXJyb3ItY29sb3I6ICNlZjUzNTA7XHJcbiAgICAgIC0tdGV4dC1wcmltYXJ5OiAjZTBlMGUwO1xyXG4gICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjYjBiMGIwO1xyXG4gICAgICAtLXRleHQtbXV0ZWQ6ICM4ODg7XHJcbiAgICAgIC0tYmctcHJpbWFyeTogIzFlMWUxZTtcclxuICAgICAgLS1iZy1zZWNvbmRhcnk6ICMyZDJkMmQ7XHJcbiAgICAgIC0tYmctdGVydGlhcnk6ICMyNTI1MjU7XHJcbiAgICAgIC0tYmctaG92ZXI6ICMzMzM7XHJcbiAgICAgIC0tYmctdW5yZWFkOiByZ2JhKDE0NCwgMjAyLCAyNDksIDAuMSk7XHJcbiAgICAgIC0tYm9yZGVyLWNvbG9yOiAjNDA0MDQwO1xyXG4gICAgICAtLWJvcmRlci1saWdodDogIzMzMztcclxuICAgICAgLS1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKTtcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9uLXBhbmVsIHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIHJpZ2h0OiAtMzUwcHg7XHJcbiAgICAgIHdpZHRoOiAzNTBweDtcclxuICAgICAgaGVpZ2h0OiAxMDB2aDtcclxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctcHJpbWFyeSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IC0ycHggMCA4cHggdmFyKC0tc2hhZG93KTtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgei1pbmRleDogMTAwMDtcclxuICAgICAgdHJhbnNpdGlvbjogcmlnaHQgMC4zcyBlYXNlO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tcGFuZWwub3BlbiB7XHJcbiAgICAgIHJpZ2h0OiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5wYW5lbC1oZWFkZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHBhZGRpbmc6IDE2cHg7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1zZWNvbmRhcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC5wYW5lbC1oZWFkZXIgaDMge1xyXG4gICAgICBtYXJnaW46IDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLmNsb3NlLWJ0biB7XHJcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgZm9udC1zaXplOiAyMHB4O1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XHJcbiAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIHdpZHRoOiAzMnB4O1xyXG4gICAgICBoZWlnaHQ6IDMycHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC5jbG9zZS1idG46aG92ZXIge1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAudGFicyB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1zZWNvbmRhcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC50YWItYnRuIHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xyXG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xyXG4gICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC50YWItYnRuOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctaG92ZXIpO1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAudGFiLWJ0bi5hY3RpdmUge1xyXG4gICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XHJcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1wcmltYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9ucy1saXN0IHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9uLWl0ZW0ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBnYXA6IDEycHg7XHJcbiAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctdGVydGlhcnkpO1xyXG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vdGlmaWNhdGlvbi1pdGVtOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctaG92ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24taXRlbS51bnJlYWQge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy11bnJlYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tY29udGVudCB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIG1pbi13aWR0aDogMDtcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9uLXRpdGxlIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tbWVzc2FnZSB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogNnB4O1xyXG4gICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcclxuICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xyXG4gICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tbWV0YSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLmFwcC1uYW1lIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC5yZWFkLWJ0biB7XHJcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgd2lkdGg6IDI0cHg7XHJcbiAgICAgIGhlaWdodDogMjRweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC5yZWFkLWJ0bjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS1zdWNjZXNzLWNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAuZGVsZXRlLWJ0biB7XHJcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgd2lkdGg6IDI0cHg7XHJcbiAgICAgIGhlaWdodDogMjRweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC5kZWxldGUtYnRuOmhvdmVyIHtcclxuICAgICAgY29sb3I6IHZhcigtLWVycm9yLWNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAuZW1wdHktc3RhdGUge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgIH1cclxuXHJcbiAgICAucGFuZWwtZm9vdGVyIHtcclxuICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xyXG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctc2Vjb25kYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAuZm9vdGVyLWFjdGlvbnMge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBnYXA6IDhweDtcclxuICAgIH1cclxuXHJcbiAgICAuZm9vdGVyLWFjdGlvbnMgLmFjdGlvbi1idG4ge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgfVxyXG5cclxuICAgIC5hY3Rpb24tYnRuIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIHBhZGRpbmc6IDhweDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XHJcbiAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC5hY3Rpb24tYnRuOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1ob3Zlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLmRlbGV0ZS1hbGwtYnRuIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpO1xyXG4gICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLmRlbGV0ZS1hbGwtYnRuOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmYyZjsgLyogRGFya2VyIHJlZCBmb3IgaG92ZXIgKi9cclxuICAgIH1cclxuXHJcbiAgICBAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcclxuICAgICAgLm5vdGlmaWNhdGlvbi1wYW5lbCB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgcmlnaHQ6IC0xMDAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSBub3RpZmljYXRpb25SZWFkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgdGhlbWVDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGB0aGVtZS0ke3RoaXMuY3VycmVudFRoZW1lfWA7XHJcbiAgfVxyXG5cclxuICBpc09wZW4gPSBmYWxzZTtcclxuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25EdG9bXSA9IFtdO1xyXG4gIGN1cnJlbnRUaGVtZTogVGhlbWUgPSAnbGlnaHQnO1xyXG4gIGFjdGl2ZVRhYjogJ3VucmVhZCcgfCAncmVhZCcgPSAndW5yZWFkJzsgLy8gRGVmYXVsdCB0byB1bnJlYWQgdGFiXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGdldCB1bnJlYWROb3RpZmljYXRpb25zKCk6IE5vdGlmaWNhdGlvbkR0b1tdIHtcclxuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4gIW4uaXNSZWFkKTtcclxuICB9XHJcblxyXG4gIGdldCByZWFkTm90aWZpY2F0aW9ucygpOiBOb3RpZmljYXRpb25EdG9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zLmZpbHRlcihuID0+IG4uaXNSZWFkKTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50Tm90aWZpY2F0aW9ucygpOiBOb3RpZmljYXRpb25EdG9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVUYWIgPT09ICd1bnJlYWQnID8gdGhpcy51bnJlYWROb3RpZmljYXRpb25zIDogdGhpcy5yZWFkTm90aWZpY2F0aW9ucztcclxuICB9XHJcblxyXG4gIGdldE5vdGlmaWNhdGlvbk1lc3NhZ2Uobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbi5tZXNzYWdlSHRtbCB8fCBub3RpZmljYXRpb24ubWVzc2FnZSB8fCAnJztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IE1lc0F1dGhTZXJ2aWNlLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGhlbWVTZXJ2aWNlLmN1cnJlbnRUaGVtZSRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHRoZW1lID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUaGVtZSA9IHRoZW1lO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWROb3RpZmljYXRpb25zKCk7XHJcblxyXG4gICAgLy8gTGlzdGVuIGZvciBuZXcgcmVhbC10aW1lIG5vdGlmaWNhdGlvbnNcclxuICAgIHRoaXMuYXV0aFNlcnZpY2Uubm90aWZpY2F0aW9ucyRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChub3RpZmljYXRpb246IFJlYWxUaW1lTm90aWZpY2F0aW9uRHRvKSA9PiB7XHJcbiAgICAgICAgLy8gU2hvdyB0b2FzdCBmb3IgbmV3IG5vdGlmaWNhdGlvblxyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coXHJcbiAgICAgICAgICBub3RpZmljYXRpb24ubWVzc2FnZUh0bWwgfHwgbm90aWZpY2F0aW9uLm1lc3NhZ2UgfHwgJycsXHJcbiAgICAgICAgICBub3RpZmljYXRpb24udGl0bGUsXHJcbiAgICAgICAgICAnaW5mbycsXHJcbiAgICAgICAgICA1MDAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBSZWxvYWQgbm90aWZpY2F0aW9ucyBsaXN0XHJcbiAgICAgICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWROb3RpZmljYXRpb25zKCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXROb3RpZmljYXRpb25zKDEsIDUwLCB0cnVlKS5zdWJzY3JpYmUoeyAvLyBpbmNsdWRlUmVhZCA9IHRydWUgdG8gZ2V0IGJvdGggcmVhZCBhbmQgdW5yZWFkXHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogUGFnZWRMaXN0PE5vdGlmaWNhdGlvbkR0bz4pID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSByZXNwb25zZS5pdGVtcyB8fCBbXTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHt9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9ICd1bnJlYWQnOyAvLyBSZXNldCB0byB1bnJlYWQgdGFiIHdoZW4gb3BlbmluZ1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoVGFiKHRhYjogJ3VucmVhZCcgfCAncmVhZCcpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xyXG4gIH1cclxuXHJcbiAgbWFya0FzUmVhZChub3RpZmljYXRpb25JZDogc3RyaW5nLCBldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm1hcmtBc1JlYWQobm90aWZpY2F0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZChuID0+IG4uaWQgPT09IG5vdGlmaWNhdGlvbklkKTtcclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uKSB7XHJcbiAgICAgICAgICBub3RpZmljYXRpb24uaXNSZWFkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uUmVhZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge31cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFya0FsbEFzUmVhZCgpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubWFya0FsbEFzUmVhZCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZm9yRWFjaChuID0+IG4uaXNSZWFkID0gdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25SZWFkLmVtaXQoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHt9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUFsbFJlYWQoKSB7XHJcbiAgICBjb25zdCByZWFkTm90aWZpY2F0aW9uSWRzID0gdGhpcy5ub3RpZmljYXRpb25zXHJcbiAgICAgIC5maWx0ZXIobiA9PiBuLmlzUmVhZClcclxuICAgICAgLm1hcChuID0+IG4uaWQpO1xyXG5cclxuICAgIC8vIERlbGV0ZSBhbGwgcmVhZCBub3RpZmljYXRpb25zXHJcbiAgICBjb25zdCBkZWxldGVQcm9taXNlcyA9IHJlYWROb3RpZmljYXRpb25JZHMubWFwKGlkID0+XHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZGVsZXRlTm90aWZpY2F0aW9uKGlkKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuXHJcbiAgICBQcm9taXNlLmFsbChkZWxldGVQcm9taXNlcykudGhlbigoKSA9PiB7XHJcbiAgICAgIC8vIFJlbW92ZSBhbGwgcmVhZCBub3RpZmljYXRpb25zIGZyb20gdGhlIGxvY2FsIGFycmF5XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMubm90aWZpY2F0aW9ucy5maWx0ZXIobiA9PiAhbi5pc1JlYWQpO1xyXG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAvLyBJZiBidWxrIGRlbGV0ZSBmYWlscywgcmVsb2FkIG5vdGlmaWNhdGlvbnMgdG8gZ2V0IGN1cnJlbnQgc3RhdGVcclxuICAgICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBbGxVbnJlYWQoKSB7XHJcbiAgICBjb25zdCB1bnJlYWROb3RpZmljYXRpb25JZHMgPSB0aGlzLm5vdGlmaWNhdGlvbnNcclxuICAgICAgLmZpbHRlcihuID0+ICFuLmlzUmVhZClcclxuICAgICAgLm1hcChuID0+IG4uaWQpO1xyXG5cclxuICAgIC8vIERlbGV0ZSBhbGwgdW5yZWFkIG5vdGlmaWNhdGlvbnNcclxuICAgIGNvbnN0IGRlbGV0ZVByb21pc2VzID0gdW5yZWFkTm90aWZpY2F0aW9uSWRzLm1hcChpZCA9PlxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmRlbGV0ZU5vdGlmaWNhdGlvbihpZCkudG9Qcm9taXNlKClcclxuICAgICk7XHJcblxyXG4gICAgUHJvbWlzZS5hbGwoZGVsZXRlUHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBSZW1vdmUgYWxsIHVucmVhZCBub3RpZmljYXRpb25zIGZyb20gdGhlIGxvY2FsIGFycmF5XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMubm90aWZpY2F0aW9ucy5maWx0ZXIobiA9PiBuLmlzUmVhZCk7XHJcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgIC8vIElmIGJ1bGsgZGVsZXRlIGZhaWxzLCByZWxvYWQgbm90aWZpY2F0aW9ucyB0byBnZXQgY3VycmVudCBzdGF0ZVxyXG4gICAgICB0aGlzLmxvYWROb3RpZmljYXRpb25zKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZShub3RpZmljYXRpb25JZDogc3RyaW5nLCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5kZWxldGVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4gbi5pZCAhPT0gbm90aWZpY2F0aW9uSWQpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge31cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGRpZmZNcyA9IG5vdy5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IGRpZmZNaW5zID0gTWF0aC5mbG9vcihkaWZmTXMgLyA2MDAwMCk7XHJcbiAgICBjb25zdCBkaWZmSG91cnMgPSBNYXRoLmZsb29yKGRpZmZNcyAvIDM2MDAwMDApO1xyXG4gICAgY29uc3QgZGlmZkRheXMgPSBNYXRoLmZsb29yKGRpZmZNcyAvIDg2NDAwMDAwKTtcclxuXHJcbiAgICBpZiAoZGlmZk1pbnMgPCAxKSByZXR1cm4gJ05vdyc7XHJcbiAgICBpZiAoZGlmZk1pbnMgPCA2MCkgcmV0dXJuIGAke2RpZmZNaW5zfW0gYWdvYDtcclxuICAgIGlmIChkaWZmSG91cnMgPCAyNCkgcmV0dXJuIGAke2RpZmZIb3Vyc31oIGFnb2A7XHJcbiAgICBpZiAoZGlmZkRheXMgPCA3KSByZXR1cm4gYCR7ZGlmZkRheXN9ZCBhZ29gO1xyXG4gICAgXHJcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class ThemeService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this._currentTheme = new BehaviorSubject('light');
|
|
7
|
-
this.currentTheme$ = this._currentTheme.asObservable();
|
|
8
|
-
this.observer = null;
|
|
9
|
-
this.detectTheme();
|
|
10
|
-
this.startWatching();
|
|
11
|
-
}
|
|
12
|
-
ngOnDestroy() {
|
|
13
|
-
this.stopWatching();
|
|
14
|
-
}
|
|
15
|
-
detectTheme() {
|
|
16
|
-
const html = document.documentElement;
|
|
17
|
-
const isDark = html.classList.contains('dark') ||
|
|
18
|
-
html.getAttribute('data-theme') === 'dark' ||
|
|
19
|
-
html.getAttribute('theme') === 'dark' ||
|
|
20
|
-
html.getAttribute('data-coreui-theme') === 'dark';
|
|
21
|
-
this._currentTheme.next(isDark ? 'dark' : 'light');
|
|
22
|
-
}
|
|
23
|
-
startWatching() {
|
|
24
|
-
if (typeof MutationObserver === 'undefined') {
|
|
25
|
-
// Fallback for older browsers - check periodically
|
|
26
|
-
setInterval(() => this.detectTheme(), 1000);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
this.observer = new MutationObserver(() => {
|
|
30
|
-
this.detectTheme();
|
|
31
|
-
});
|
|
32
|
-
this.observer.observe(document.documentElement, {
|
|
33
|
-
attributes: true,
|
|
34
|
-
attributeFilter: ['class', 'data-theme', 'theme', 'data-coreui-theme']
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
stopWatching() {
|
|
38
|
-
if (this.observer) {
|
|
39
|
-
this.observer.disconnect();
|
|
40
|
-
this.observer = null;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
get currentTheme() {
|
|
44
|
-
return this._currentTheme.value;
|
|
45
|
-
}
|
|
46
|
-
// Method to manually set theme if needed
|
|
47
|
-
setTheme(theme) {
|
|
48
|
-
this._currentTheme.next(theme);
|
|
49
|
-
}
|
|
50
|
-
// Re-detect theme from DOM
|
|
51
|
-
refreshTheme() {
|
|
52
|
-
this.detectTheme();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
ThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
56
|
-
ThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ThemeService, providedIn: 'root' });
|
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ThemeService, decorators: [{
|
|
58
|
-
type: Injectable,
|
|
59
|
-
args: [{
|
|
60
|
-
providedIn: 'root'
|
|
61
|
-
}]
|
|
62
|
-
}], ctorParameters: function () { return []; } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFPbkQsTUFBTSxPQUFPLFlBQVk7SUFLdkI7UUFKUSxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFRLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELGtCQUFhLEdBQXNCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEUsYUFBUSxHQUE0QixJQUFJLENBQUM7UUFHL0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sV0FBVztRQUNqQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLE1BQU07WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFNO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsS0FBSyxNQUFNLENBQUM7UUFFakUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxXQUFXLEVBQUU7WUFDM0MsbURBQW1EO1lBQ25ELFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO1lBQzlDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDO1NBQ3ZFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxRQUFRLENBQUMsS0FBWTtRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7eUdBNURVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgdHlwZSBUaGVtZSA9ICdsaWdodCcgfCAnZGFyayc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2N1cnJlbnRUaGVtZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGhlbWU+KCdsaWdodCcpO1xyXG4gIHB1YmxpYyBjdXJyZW50VGhlbWUkOiBPYnNlcnZhYmxlPFRoZW1lPiA9IHRoaXMuX2N1cnJlbnRUaGVtZS5hc09ic2VydmFibGUoKTtcclxuICBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5kZXRlY3RUaGVtZSgpO1xyXG4gICAgdGhpcy5zdGFydFdhdGNoaW5nKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcFdhdGNoaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRldGVjdFRoZW1lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgIGNvbnN0IGlzRGFyayA9IGh0bWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXJrJykgfHxcclxuICAgICAgICAgICAgICAgICAgIGh0bWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJykgPT09ICdkYXJrJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgaHRtbC5nZXRBdHRyaWJ1dGUoJ3RoZW1lJykgPT09ICdkYXJrJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgaHRtbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29yZXVpLXRoZW1lJykgPT09ICdkYXJrJztcclxuXHJcbiAgICB0aGlzLl9jdXJyZW50VGhlbWUubmV4dChpc0RhcmsgPyAnZGFyaycgOiAnbGlnaHQnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRXYXRjaGluZygpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gRmFsbGJhY2sgZm9yIG9sZGVyIGJyb3dzZXJzIC0gY2hlY2sgcGVyaW9kaWNhbGx5XHJcbiAgICAgIHNldEludGVydmFsKCgpID0+IHRoaXMuZGV0ZWN0VGhlbWUoKSwgMTAwMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRldGVjdFRoZW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XHJcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXHJcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcycsICdkYXRhLXRoZW1lJywgJ3RoZW1lJywgJ2RhdGEtY29yZXVpLXRoZW1lJ11cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wV2F0Y2hpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vYnNlcnZlcikge1xyXG4gICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgdGhpcy5vYnNlcnZlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudFRoZW1lKCk6IFRoZW1lIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGhlbWUudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdG8gbWFudWFsbHkgc2V0IHRoZW1lIGlmIG5lZWRlZFxyXG4gIHNldFRoZW1lKHRoZW1lOiBUaGVtZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VycmVudFRoZW1lLm5leHQodGhlbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gUmUtZGV0ZWN0IHRoZW1lIGZyb20gRE9NXHJcbiAgcmVmcmVzaFRoZW1lKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXRlY3RUaGVtZSgpO1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Component, HostBinding } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { takeUntil } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./toast.service";
|
|
7
|
-
import * as i2 from "./theme.service";
|
|
8
|
-
import * as i3 from "@angular/common";
|
|
9
|
-
export class ToastContainerComponent {
|
|
10
|
-
constructor(toastService, themeService) {
|
|
11
|
-
this.toastService = toastService;
|
|
12
|
-
this.themeService = themeService;
|
|
13
|
-
this.toasts = [];
|
|
14
|
-
this.currentTheme = 'light';
|
|
15
|
-
this.destroy$ = new Subject();
|
|
16
|
-
}
|
|
17
|
-
get themeClass() {
|
|
18
|
-
return `theme-${this.currentTheme}`;
|
|
19
|
-
}
|
|
20
|
-
ngOnInit() {
|
|
21
|
-
this.toastService.toasts
|
|
22
|
-
.pipe(takeUntil(this.destroy$))
|
|
23
|
-
.subscribe(toasts => {
|
|
24
|
-
this.toasts = toasts;
|
|
25
|
-
});
|
|
26
|
-
this.themeService.currentTheme$
|
|
27
|
-
.pipe(takeUntil(this.destroy$))
|
|
28
|
-
.subscribe(theme => {
|
|
29
|
-
this.currentTheme = theme;
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
ngOnDestroy() {
|
|
33
|
-
this.destroy$.next();
|
|
34
|
-
this.destroy$.complete();
|
|
35
|
-
}
|
|
36
|
-
close(id) {
|
|
37
|
-
this.toastService.remove(id);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
ToastContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ToastContainerComponent, deps: [{ token: i1.ToastService }, { token: i2.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
-
ToastContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ToastContainerComponent, isStandalone: true, selector: "ma-toast-container", host: { properties: { "class": "this.themeClass" } }, ngImport: i0, template: `
|
|
42
|
-
<div class="toast-container">
|
|
43
|
-
<div
|
|
44
|
-
*ngFor="let toast of toasts"
|
|
45
|
-
class="toast"
|
|
46
|
-
[class]="'toast-' + toast.type"
|
|
47
|
-
[@slideIn]
|
|
48
|
-
>
|
|
49
|
-
<div class="toast-content">
|
|
50
|
-
<div *ngIf="toast.title" class="toast-title">{{ toast.title }}</div>
|
|
51
|
-
<div class="toast-message" [innerHTML]="toast.message"></div>
|
|
52
|
-
</div>
|
|
53
|
-
<button class="toast-close" (click)="close(toast.id)" aria-label="Close">
|
|
54
|
-
✕
|
|
55
|
-
</button>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
`, isInline: true, styles: [":host{--info-color: #2196f3;--success-color: #4caf50;--warning-color: #ff9800;--error-color: #f44336;--text-primary: #333;--bg-primary: white;--shadow: rgba(0, 0, 0, .15);--text-secondary: #999;--border-color: rgba(0, 0, 0, .1)}:host(.theme-dark){--info-color: #64b5f6;--success-color: #81c784;--warning-color: #ffb74d;--error-color: #ef5350;--text-primary: #e0e0e0;--bg-primary: #1e1e1e;--shadow: rgba(0, 0, 0, .3);--text-secondary: #888;--border-color: rgba(255, 255, 255, .1)}.toast-container{position:fixed;top:20px;right:20px;z-index:9999;pointer-events:none}.toast{display:flex;align-items:flex-start;gap:12px;padding:12px 16px;margin-bottom:12px;border-radius:4px;background:var(--bg-primary);border:1px solid var(--border-color);box-shadow:0 4px 12px var(--shadow);pointer-events:auto;min-width:280px;max-width:400px;animation:slideIn .3s ease-out}.toast-content{flex:1}.toast-title{font-weight:600;font-size:14px;margin-bottom:4px}.toast-message{font-size:13px;line-height:1.4}.toast-close{background:none;border:none;cursor:pointer;font-size:18px;color:var(--text-secondary);padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .2s}.toast-close:hover{color:var(--text-primary)}.toast-info{border-left:4px solid var(--info-color)}.toast-info .toast-title{color:var(--info-color)}.toast-info .toast-message{color:var(--text-primary)}.toast-success{border-left:4px solid var(--success-color)}.toast-success .toast-title{color:var(--success-color)}.toast-success .toast-message{color:var(--text-primary)}.toast-warning{border-left:4px solid var(--warning-color)}.toast-warning .toast-title{color:var(--warning-color)}.toast-warning .toast-message{color:var(--text-primary)}.toast-error{border-left:4px solid var(--error-color)}.toast-error .toast-title{color:var(--error-color)}.toast-error .toast-message{color:var(--text-primary)}@keyframes slideIn{0%{transform:translate(400px);opacity:0}to{transform:translate(0);opacity:1}}@media (max-width: 600px){.toast-container{top:10px;right:10px;left:10px}.toast{min-width:auto;max-width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ToastContainerComponent, decorators: [{
|
|
60
|
-
type: Component,
|
|
61
|
-
args: [{ selector: 'ma-toast-container', standalone: true, imports: [CommonModule], template: `
|
|
62
|
-
<div class="toast-container">
|
|
63
|
-
<div
|
|
64
|
-
*ngFor="let toast of toasts"
|
|
65
|
-
class="toast"
|
|
66
|
-
[class]="'toast-' + toast.type"
|
|
67
|
-
[@slideIn]
|
|
68
|
-
>
|
|
69
|
-
<div class="toast-content">
|
|
70
|
-
<div *ngIf="toast.title" class="toast-title">{{ toast.title }}</div>
|
|
71
|
-
<div class="toast-message" [innerHTML]="toast.message"></div>
|
|
72
|
-
</div>
|
|
73
|
-
<button class="toast-close" (click)="close(toast.id)" aria-label="Close">
|
|
74
|
-
✕
|
|
75
|
-
</button>
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
`, styles: [":host{--info-color: #2196f3;--success-color: #4caf50;--warning-color: #ff9800;--error-color: #f44336;--text-primary: #333;--bg-primary: white;--shadow: rgba(0, 0, 0, .15);--text-secondary: #999;--border-color: rgba(0, 0, 0, .1)}:host(.theme-dark){--info-color: #64b5f6;--success-color: #81c784;--warning-color: #ffb74d;--error-color: #ef5350;--text-primary: #e0e0e0;--bg-primary: #1e1e1e;--shadow: rgba(0, 0, 0, .3);--text-secondary: #888;--border-color: rgba(255, 255, 255, .1)}.toast-container{position:fixed;top:20px;right:20px;z-index:9999;pointer-events:none}.toast{display:flex;align-items:flex-start;gap:12px;padding:12px 16px;margin-bottom:12px;border-radius:4px;background:var(--bg-primary);border:1px solid var(--border-color);box-shadow:0 4px 12px var(--shadow);pointer-events:auto;min-width:280px;max-width:400px;animation:slideIn .3s ease-out}.toast-content{flex:1}.toast-title{font-weight:600;font-size:14px;margin-bottom:4px}.toast-message{font-size:13px;line-height:1.4}.toast-close{background:none;border:none;cursor:pointer;font-size:18px;color:var(--text-secondary);padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .2s}.toast-close:hover{color:var(--text-primary)}.toast-info{border-left:4px solid var(--info-color)}.toast-info .toast-title{color:var(--info-color)}.toast-info .toast-message{color:var(--text-primary)}.toast-success{border-left:4px solid var(--success-color)}.toast-success .toast-title{color:var(--success-color)}.toast-success .toast-message{color:var(--text-primary)}.toast-warning{border-left:4px solid var(--warning-color)}.toast-warning .toast-title{color:var(--warning-color)}.toast-warning .toast-message{color:var(--text-primary)}.toast-error{border-left:4px solid var(--error-color)}.toast-error .toast-title{color:var(--error-color)}.toast-error .toast-message{color:var(--text-primary)}@keyframes slideIn{0%{transform:translate(400px);opacity:0}to{transform:translate(0);opacity:1}}@media (max-width: 600px){.toast-container{top:10px;right:10px;left:10px}.toast{min-width:auto;max-width:100%}}\n"] }]
|
|
79
|
-
}], ctorParameters: function () { return [{ type: i1.ToastService }, { type: i2.ThemeService }]; }, propDecorators: { themeClass: [{
|
|
80
|
-
type: HostBinding,
|
|
81
|
-
args: ['class']
|
|
82
|
-
}] } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2FzdC1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBc0wzQyxNQUFNLE9BQU8sdUJBQXVCO0lBU2xDLFlBQW9CLFlBQTBCLEVBQVUsWUFBMEI7UUFBOUQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUpsRixXQUFNLEdBQVksRUFBRSxDQUFDO1FBQ3JCLGlCQUFZLEdBQVUsT0FBTyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRThDLENBQUM7SUFSdEYsSUFBMEIsVUFBVTtRQUNsQyxPQUFPLFNBQVMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFRRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYTthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLEVBQVU7UUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDOztvSEFoQ1UsdUJBQXVCO3dHQUF2Qix1QkFBdUIsb0lBaEx4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQsMG9FQWxCUyxZQUFZOzJGQWlMWCx1QkFBdUI7a0JBcExuQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQ7OEhBZ0t5QixVQUFVO3NCQUFuQyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0IH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlLCBUaGVtZSB9IGZyb20gJy4vdGhlbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtYS10b2FzdC1jb250YWluZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJ0b2FzdC1jb250YWluZXJcIj5cclxuICAgICAgPGRpdiBcclxuICAgICAgICAqbmdGb3I9XCJsZXQgdG9hc3Qgb2YgdG9hc3RzXCJcclxuICAgICAgICBjbGFzcz1cInRvYXN0XCJcclxuICAgICAgICBbY2xhc3NdPVwiJ3RvYXN0LScgKyB0b2FzdC50eXBlXCJcclxuICAgICAgICBbQHNsaWRlSW5dXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9hc3QtY29udGVudFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInRvYXN0LnRpdGxlXCIgY2xhc3M9XCJ0b2FzdC10aXRsZVwiPnt7IHRvYXN0LnRpdGxlIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9hc3QtbWVzc2FnZVwiIFtpbm5lckhUTUxdPVwidG9hc3QubWVzc2FnZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ0b2FzdC1jbG9zZVwiIChjbGljayk9XCJjbG9zZSh0b2FzdC5pZClcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cclxuICAgICAgICAgIOKclVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgOmhvc3Qge1xyXG4gICAgICAtLWluZm8tY29sb3I6ICMyMTk2ZjM7XHJcbiAgICAgIC0tc3VjY2Vzcy1jb2xvcjogIzRjYWY1MDtcclxuICAgICAgLS13YXJuaW5nLWNvbG9yOiAjZmY5ODAwO1xyXG4gICAgICAtLWVycm9yLWNvbG9yOiAjZjQ0MzM2O1xyXG4gICAgICAtLXRleHQtcHJpbWFyeTogIzMzMztcclxuICAgICAgLS1iZy1wcmltYXJ5OiB3aGl0ZTtcclxuICAgICAgLS1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNSk7XHJcbiAgICAgIC0tdGV4dC1zZWNvbmRhcnk6ICM5OTk7XHJcbiAgICAgIC0tYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgICB9XHJcblxyXG4gICAgOmhvc3QoLnRoZW1lLWRhcmspIHtcclxuICAgICAgLS1pbmZvLWNvbG9yOiAjNjRiNWY2O1xyXG4gICAgICAtLXN1Y2Nlc3MtY29sb3I6ICM4MWM3ODQ7XHJcbiAgICAgIC0td2FybmluZy1jb2xvcjogI2ZmYjc0ZDtcclxuICAgICAgLS1lcnJvci1jb2xvcjogI2VmNTM1MDtcclxuICAgICAgLS10ZXh0LXByaW1hcnk6ICNlMGUwZTA7XHJcbiAgICAgIC0tYmctcHJpbWFyeTogIzFlMWUxZTtcclxuICAgICAgLS1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKTtcclxuICAgICAgLS10ZXh0LXNlY29uZGFyeTogIzg4ODtcclxuICAgICAgLS1ib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3QtY29udGFpbmVyIHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICB0b3A6IDIwcHg7XHJcbiAgICAgIHJpZ2h0OiAyMHB4O1xyXG4gICAgICB6LWluZGV4OiA5OTk5O1xyXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3Qge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICAgICAgZ2FwOiAxMnB4O1xyXG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctcHJpbWFyeSk7XHJcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XHJcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggdmFyKC0tc2hhZG93KTtcclxuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XHJcbiAgICAgIG1pbi13aWR0aDogMjgwcHg7XHJcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XHJcbiAgICAgIGFuaW1hdGlvbjogc2xpZGVJbiAwLjNzIGVhc2Utb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIC50b2FzdC1jb250ZW50IHtcclxuICAgICAgZmxleDogMTtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3QtdGl0bGUge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3QtbWVzc2FnZSB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3QtY2xvc2Uge1xyXG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xyXG4gICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICB3aWR0aDogMjRweDtcclxuICAgICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLnRvYXN0LWNsb3NlOmhvdmVyIHtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogVG9hc3QgdHlwZXMgKi9cclxuICAgIC50b2FzdC1pbmZvIHtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1pbmZvLWNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3QtaW5mbyAudG9hc3QtdGl0bGUge1xyXG4gICAgICBjb2xvcjogdmFyKC0taW5mby1jb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLnRvYXN0LWluZm8gLnRvYXN0LW1lc3NhZ2Uge1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3Qtc3VjY2VzcyB7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tc3VjY2Vzcy1jb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLnRvYXN0LXN1Y2Nlc3MgLnRvYXN0LXRpdGxlIHtcclxuICAgICAgY29sb3I6IHZhcigtLXN1Y2Nlc3MtY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC50b2FzdC1zdWNjZXNzIC50b2FzdC1tZXNzYWdlIHtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLnRvYXN0LXdhcm5pbmcge1xyXG4gICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLXdhcm5pbmctY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC50b2FzdC13YXJuaW5nIC50b2FzdC10aXRsZSB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS13YXJuaW5nLWNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAudG9hc3Qtd2FybmluZyAudG9hc3QtbWVzc2FnZSB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC50b2FzdC1lcnJvciB7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tZXJyb3ItY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC50b2FzdC1lcnJvciAudG9hc3QtdGl0bGUge1xyXG4gICAgICBjb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC50b2FzdC1lcnJvciAudG9hc3QtbWVzc2FnZSB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIEBrZXlmcmFtZXMgc2xpZGVJbiB7XHJcbiAgICAgIGZyb20ge1xyXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCk7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgfVxyXG4gICAgICB0byB7XHJcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcclxuICAgICAgLnRvYXN0LWNvbnRhaW5lciB7XHJcbiAgICAgICAgdG9wOiAxMHB4O1xyXG4gICAgICAgIHJpZ2h0OiAxMHB4O1xyXG4gICAgICAgIGxlZnQ6IDEwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC50b2FzdCB7XHJcbiAgICAgICAgbWluLXdpZHRoOiBhdXRvO1xyXG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IHRoZW1lQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgdGhlbWUtJHt0aGlzLmN1cnJlbnRUaGVtZX1gO1xyXG4gIH1cclxuXHJcbiAgdG9hc3RzOiBUb2FzdFtdID0gW107XHJcbiAgY3VycmVudFRoZW1lOiBUaGVtZSA9ICdsaWdodCc7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50b2FzdFNlcnZpY2UudG9hc3RzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh0b2FzdHMgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RzID0gdG9hc3RzO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRoZW1lU2VydmljZS5jdXJyZW50VGhlbWUkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh0aGVtZSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VGhlbWUgPSB0aGVtZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50b2FzdFNlcnZpY2UucmVtb3ZlKGlkKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class ToastService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.toasts$ = new BehaviorSubject([]);
|
|
7
|
-
this.toasts = this.toasts$.asObservable();
|
|
8
|
-
}
|
|
9
|
-
show(message, title, type = 'info', duration = 5000) {
|
|
10
|
-
const id = Math.random().toString(36).substr(2, 9);
|
|
11
|
-
const toast = {
|
|
12
|
-
id,
|
|
13
|
-
message,
|
|
14
|
-
title,
|
|
15
|
-
type,
|
|
16
|
-
duration
|
|
17
|
-
};
|
|
18
|
-
const currentToasts = this.toasts$.value;
|
|
19
|
-
this.toasts$.next([...currentToasts, toast]);
|
|
20
|
-
if (duration > 0) {
|
|
21
|
-
setTimeout(() => {
|
|
22
|
-
this.remove(id);
|
|
23
|
-
}, duration);
|
|
24
|
-
}
|
|
25
|
-
return id;
|
|
26
|
-
}
|
|
27
|
-
remove(id) {
|
|
28
|
-
const currentToasts = this.toasts$.value;
|
|
29
|
-
this.toasts$.next(currentToasts.filter(t => t.id !== id));
|
|
30
|
-
}
|
|
31
|
-
clear() {
|
|
32
|
-
this.toasts$.next([]);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
ToastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
36
|
-
ToastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ToastService, providedIn: 'root' });
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ToastService, decorators: [{
|
|
38
|
-
type: Injectable,
|
|
39
|
-
args: [{ providedIn: 'root' }]
|
|
40
|
-
}] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2FzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFXbkQsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFFVSxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVUsRUFBRSxDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUF3QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBZ0NsRTtJQTlCQyxJQUFJLENBQUMsT0FBZSxFQUFFLEtBQWMsRUFBRSxPQUFpRCxNQUFNLEVBQUUsV0FBbUIsSUFBSTtRQUNwSCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQVU7WUFDbkIsRUFBRTtZQUNGLE9BQU87WUFDUCxLQUFLO1lBQ0wsSUFBSTtZQUNKLFFBQVE7U0FDVCxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTdDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtZQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVTtRQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDOzt5R0FqQ1UsWUFBWTs2R0FBWixZQUFZLGNBREMsTUFBTTsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUb2FzdCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdHlwZTogJ2luZm8nIHwgJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJztcclxuICBkdXJhdGlvbj86IG51bWJlcjtcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFRvYXN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSB0b2FzdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUb2FzdFtdPihbXSk7XHJcbiAgcHVibGljIHRvYXN0czogT2JzZXJ2YWJsZTxUb2FzdFtdPiA9IHRoaXMudG9hc3RzJC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2hvdyhtZXNzYWdlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nLCB0eXBlOiAnaW5mbycgfCAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InID0gJ2luZm8nLCBkdXJhdGlvbjogbnVtYmVyID0gNTAwMCkge1xyXG4gICAgY29uc3QgaWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XHJcbiAgICBjb25zdCB0b2FzdDogVG9hc3QgPSB7XHJcbiAgICAgIGlkLFxyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICB0aXRsZSxcclxuICAgICAgdHlwZSxcclxuICAgICAgZHVyYXRpb25cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY3VycmVudFRvYXN0cyA9IHRoaXMudG9hc3RzJC52YWx1ZTtcclxuICAgIHRoaXMudG9hc3RzJC5uZXh0KFsuLi5jdXJyZW50VG9hc3RzLCB0b2FzdF0pO1xyXG5cclxuICAgIGlmIChkdXJhdGlvbiA+IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmUoaWQpO1xyXG4gICAgICB9LCBkdXJhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRUb2FzdHMgPSB0aGlzLnRvYXN0cyQudmFsdWU7XHJcbiAgICB0aGlzLnRvYXN0cyQubmV4dChjdXJyZW50VG9hc3RzLmZpbHRlcih0ID0+IHQuaWQgIT09IGlkKSk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMudG9hc3RzJC5uZXh0KFtdKTtcclxuICB9XHJcbn1cclxuIl19
|