mesauth-angular 0.2.4 → 0.2.6

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 CHANGED
@@ -258,7 +258,18 @@ A standalone component for displaying a slide-out notification panel with real-t
258
258
 
259
259
  ## Changelog
260
260
 
261
- ### v0.2.4 (Latest)
261
+ ### v0.2.6 (Latest)
262
+ - 🗑️ **Delete Button**: Added delete button for read notifications in the read tab
263
+ - 🎯 **Contextual Actions**: Unread notifications show "mark as read" button, read notifications show "delete" button
264
+ - 🎨 **Visual Feedback**: Delete button uses error color on hover for clear destructive action indication
265
+
266
+ ### v0.2.5
267
+ - 🗂️ **Notification Tabs**: Added tabs to separate unread and read notifications with unread tab as default
268
+ - 📊 **Tab Counters**: Display notification counts for each tab (Unread/Read)
269
+ - 🎯 **Improved UX**: Better organization of notifications with tab-based navigation
270
+ - 🔄 **Enhanced Filtering**: Load both read and unread notifications for seamless tab switching
271
+
272
+ ### v0.2.4
262
273
  - 🔔 **Notification UX**: Changed notification delete button to mark-as-read with checkmark icon
263
274
  - 🔄 **Badge Updates**: Added automatic badge counter refresh when notifications are marked as read
264
275
  - 🎯 **Event System**: Implemented event-driven communication between notification panel and badge components
package/dist/README.md CHANGED
@@ -258,7 +258,18 @@ A standalone component for displaying a slide-out notification panel with real-t
258
258
 
259
259
  ## Changelog
260
260
 
261
- ### v0.2.4 (Latest)
261
+ ### v0.2.6 (Latest)
262
+ - 🗑️ **Delete Button**: Added delete button for read notifications in the read tab
263
+ - 🎯 **Contextual Actions**: Unread notifications show "mark as read" button, read notifications show "delete" button
264
+ - 🎨 **Visual Feedback**: Delete button uses error color on hover for clear destructive action indication
265
+
266
+ ### v0.2.5
267
+ - 🗂️ **Notification Tabs**: Added tabs to separate unread and read notifications with unread tab as default
268
+ - 📊 **Tab Counters**: Display notification counts for each tab (Unread/Read)
269
+ - 🎯 **Improved UX**: Better organization of notifications with tab-based navigation
270
+ - 🔄 **Enhanced Filtering**: Load both read and unread notifications for seamless tab switching
271
+
272
+ ### v0.2.4
262
273
  - 🔔 **Notification UX**: Changed notification delete button to mark-as-read with checkmark icon
263
274
  - 🔄 **Badge Updates**: Added automatic badge counter refresh when notifications are marked as read
264
275
  - 🎯 **Event System**: Implemented event-driven communication between notification panel and badge components
@@ -15,11 +15,21 @@ export class NotificationPanelComponent {
15
15
  this.isOpen = false;
16
16
  this.notifications = [];
17
17
  this.currentTheme = 'light';
18
+ this.activeTab = 'unread'; // Default to unread tab
18
19
  this.destroy$ = new Subject();
19
20
  }
20
21
  get themeClass() {
21
22
  return `theme-${this.currentTheme}`;
22
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
+ }
23
33
  ngOnInit() {
24
34
  this.themeService.currentTheme$
25
35
  .pipe(takeUntil(this.destroy$))
@@ -42,7 +52,7 @@ export class NotificationPanelComponent {
42
52
  this.destroy$.complete();
43
53
  }
44
54
  loadNotifications() {
45
- this.authService.getNotifications(1, 50, false).subscribe({
55
+ this.authService.getNotifications(1, 50, true).subscribe({
46
56
  next: (response) => {
47
57
  this.notifications = response.items || [];
48
58
  },
@@ -51,10 +61,14 @@ export class NotificationPanelComponent {
51
61
  }
52
62
  open() {
53
63
  this.isOpen = true;
64
+ this.activeTab = 'unread'; // Reset to unread tab when opening
54
65
  }
55
66
  close() {
56
67
  this.isOpen = false;
57
68
  }
69
+ switchTab(tab) {
70
+ this.activeTab = tab;
71
+ }
58
72
  markAsRead(notificationId, event) {
59
73
  if (event) {
60
74
  event.stopPropagation();
@@ -115,11 +129,29 @@ NotificationPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
115
129
  <button class="close-btn" (click)="close()" title="Close">✕</button>
116
130
  </div>
117
131
 
132
+ <!-- Tabs -->
133
+ <div class="tabs">
134
+ <button
135
+ class="tab-btn"
136
+ [class.active]="activeTab === 'unread'"
137
+ (click)="switchTab('unread')"
138
+ >
139
+ Unread ({{ unreadNotifications.length }})
140
+ </button>
141
+ <button
142
+ class="tab-btn"
143
+ [class.active]="activeTab === 'read'"
144
+ (click)="switchTab('read')"
145
+ >
146
+ Read ({{ readNotifications.length }})
147
+ </button>
148
+ </div>
149
+
118
150
  <!-- Notifications List -->
119
151
  <div class="notifications-list">
120
- <ng-container *ngIf="notifications.length > 0">
152
+ <ng-container *ngIf="currentNotifications.length > 0">
121
153
  <div
122
- *ngFor="let notification of notifications"
154
+ *ngFor="let notification of currentNotifications"
123
155
  class="notification-item"
124
156
  [class.unread]="!notification.isRead"
125
157
  (click)="markAsRead(notification.id)"
@@ -140,24 +172,32 @@ NotificationPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
140
172
  >
141
173
 
142
174
  </button>
175
+ <button
176
+ class="delete-btn"
177
+ (click)="delete(notification.id, $event)"
178
+ title="Delete notification"
179
+ *ngIf="notification.isRead"
180
+ >
181
+ 🗑️
182
+ </button>
143
183
  </div>
144
184
  </ng-container>
145
185
 
146
- <ng-container *ngIf="notifications.length === 0">
186
+ <ng-container *ngIf="currentNotifications.length === 0">
147
187
  <div class="empty-state">
148
- No notifications
188
+ No {{ activeTab }} notifications
149
189
  </div>
150
190
  </ng-container>
151
191
  </div>
152
192
 
153
193
  <!-- Footer Actions -->
154
- <div class="panel-footer" *ngIf="notifications.length > 0">
155
- <button class="action-btn" (click)="markAllAsRead()">
194
+ <div class="panel-footer" *ngIf="currentNotifications.length > 0">
195
+ <button class="action-btn" (click)="markAllAsRead()" *ngIf="activeTab === 'unread' && unreadNotifications.length > 0">
156
196
  Mark all as read
157
197
  </button>
158
198
  </div>
159
199
  </div>
160
- `, isInline: true, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--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;--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)}.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)}.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)}.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)}@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"] }] });
200
+ `, 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)}.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)}@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"] }] });
161
201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NotificationPanelComponent, decorators: [{
162
202
  type: Component,
163
203
  args: [{ selector: 'ma-notification-panel', standalone: true, imports: [NgIf, NgFor], template: `
@@ -168,11 +208,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
168
208
  <button class="close-btn" (click)="close()" title="Close">✕</button>
169
209
  </div>
170
210
 
211
+ <!-- Tabs -->
212
+ <div class="tabs">
213
+ <button
214
+ class="tab-btn"
215
+ [class.active]="activeTab === 'unread'"
216
+ (click)="switchTab('unread')"
217
+ >
218
+ Unread ({{ unreadNotifications.length }})
219
+ </button>
220
+ <button
221
+ class="tab-btn"
222
+ [class.active]="activeTab === 'read'"
223
+ (click)="switchTab('read')"
224
+ >
225
+ Read ({{ readNotifications.length }})
226
+ </button>
227
+ </div>
228
+
171
229
  <!-- Notifications List -->
172
230
  <div class="notifications-list">
173
- <ng-container *ngIf="notifications.length > 0">
231
+ <ng-container *ngIf="currentNotifications.length > 0">
174
232
  <div
175
- *ngFor="let notification of notifications"
233
+ *ngFor="let notification of currentNotifications"
176
234
  class="notification-item"
177
235
  [class.unread]="!notification.isRead"
178
236
  (click)="markAsRead(notification.id)"
@@ -193,28 +251,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
193
251
  >
194
252
 
195
253
  </button>
254
+ <button
255
+ class="delete-btn"
256
+ (click)="delete(notification.id, $event)"
257
+ title="Delete notification"
258
+ *ngIf="notification.isRead"
259
+ >
260
+ 🗑️
261
+ </button>
196
262
  </div>
197
263
  </ng-container>
198
264
 
199
- <ng-container *ngIf="notifications.length === 0">
265
+ <ng-container *ngIf="currentNotifications.length === 0">
200
266
  <div class="empty-state">
201
- No notifications
267
+ No {{ activeTab }} notifications
202
268
  </div>
203
269
  </ng-container>
204
270
  </div>
205
271
 
206
272
  <!-- Footer Actions -->
207
- <div class="panel-footer" *ngIf="notifications.length > 0">
208
- <button class="action-btn" (click)="markAllAsRead()">
273
+ <div class="panel-footer" *ngIf="currentNotifications.length > 0">
274
+ <button class="action-btn" (click)="markAllAsRead()" *ngIf="activeTab === 'unread' && unreadNotifications.length > 0">
209
275
  Mark all as read
210
276
  </button>
211
277
  </div>
212
278
  </div>
213
- `, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--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;--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)}.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)}.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)}.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)}@media (max-width: 600px){.notification-panel{width:100%;right:-100%}}\n"] }]
279
+ `, 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)}.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)}@media (max-width: 600px){.notification-panel{width:100%;right:-100%}}\n"] }]
214
280
  }], ctorParameters: function () { return [{ type: i1.MesAuthService }, { type: i2.ToastService }, { type: i3.ThemeService }]; }, propDecorators: { notificationRead: [{
215
281
  type: Output
216
282
  }], themeClass: [{
217
283
  type: HostBinding,
218
284
  args: ['class']
219
285
  }] } });
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBcVEzQyxNQUFNLE9BQU8sMEJBQTBCO0lBV3JDLFlBQW9CLFdBQTJCLEVBQVUsWUFBMEIsRUFBVSxZQUEwQjtRQUFuRyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBVjdHLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLdEQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQztRQUN0QyxpQkFBWSxHQUFVLE9BQU8sQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVtRixDQUFDO0lBVDNILElBQTBCLFVBQVU7UUFDbEMsT0FBTyxTQUFTLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBU0QsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYTthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RULG1pR0FuRFMsSUFBSSw2RkFBRSxLQUFLOzJGQWdRViwwQkFBMEI7a0JBblF0QyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFlBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RUOzJKQThNUyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ21CLFVBQVU7c0JBQW5DLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1lc0F1dGhTZXJ2aWNlLCBOb3RpZmljYXRpb25EdG8sIFBhZ2VkTGlzdCwgUmVhbFRpbWVOb3RpZmljYXRpb25EdG8gfSBmcm9tICcuL21lcy1hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UsIFRoZW1lIH0gZnJvbSAnLi90aGVtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21hLW5vdGlmaWNhdGlvbi1wYW5lbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3JdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXBhbmVsXCIgW2NsYXNzLm9wZW5dPVwiaXNPcGVuXCI+XHJcbiAgICAgIDwhLS0gSGVhZGVyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGgzPk5vdGlmaWNhdGlvbnM8L2gzPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2UoKVwiIHRpdGxlPVwiQ2xvc2VcIj7inJU8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE5vdGlmaWNhdGlvbnMgTGlzdCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbnMtbGlzdFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RpZmljYXRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBub3RpZmljYXRpb24gb2Ygbm90aWZpY2F0aW9uc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9uLWl0ZW1cIlxyXG4gICAgICAgICAgICBbY2xhc3MudW5yZWFkXT1cIiFub3RpZmljYXRpb24uaXNSZWFkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hcmtBc1JlYWQobm90aWZpY2F0aW9uLmlkKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tdGl0bGVcIj57eyAnWycgKyBub3RpZmljYXRpb24uc291cmNlQXBwTmFtZSArICddICcgKyBub3RpZmljYXRpb24udGl0bGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLW1lc3NhZ2VcIj57eyBub3RpZmljYXRpb24ubWVzc2FnZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tbWV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtbmFtZVwiPnt7IG5vdGlmaWNhdGlvbi5zb3VyY2VBcHBOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+e3sgZm9ybWF0RGF0ZShub3RpZmljYXRpb24uY3JlYXRlZEF0KSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWFkLWJ0blwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJtYXJrQXNSZWFkKG5vdGlmaWNhdGlvbi5pZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJNYXJrIGFzIHJlYWRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIW5vdGlmaWNhdGlvbi5pc1JlYWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg4pyTXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RpZmljYXRpb25zLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XHJcbiAgICAgICAgICAgIE5vIG5vdGlmaWNhdGlvbnNcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gRm9vdGVyIEFjdGlvbnMgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1mb290ZXJcIiAqbmdJZj1cIm5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKGNsaWNrKT1cIm1hcmtBbGxBc1JlYWQoKVwiPlxyXG4gICAgICAgICAgTWFyayBhbGwgYXMgcmVhZFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgOmhvc3Qge1xyXG4gICAgICAtLXByaW1hcnktY29sb3I6ICMxOTc2ZDI7XHJcbiAgICAgIC0tcHJpbWFyeS1ob3ZlcjogIzE1NjVjMDtcclxuICAgICAgLS1lcnJvci1jb2xvcjogI2Y0NDMzNjtcclxuICAgICAgLS10ZXh0LXByaW1hcnk6ICMzMzM7XHJcbiAgICAgIC0tdGV4dC1zZWNvbmRhcnk6ICM2NjY7XHJcbiAgICAgIC0tdGV4dC1tdXRlZDogIzk5OTtcclxuICAgICAgLS1iZy1wcmltYXJ5OiB3aGl0ZTtcclxuICAgICAgLS1iZy1zZWNvbmRhcnk6ICNmNWY1ZjU7XHJcbiAgICAgIC0tYmctdGVydGlhcnk6ICNmYWZhZmE7XHJcbiAgICAgIC0tYmctaG92ZXI6ICNmNWY1ZjU7XHJcbiAgICAgIC0tYmctdW5yZWFkOiAjZTNmMmZkO1xyXG4gICAgICAtLWJvcmRlci1jb2xvcjogI2UwZTBlMDtcclxuICAgICAgLS1ib3JkZXItbGlnaHQ6ICNmMGYwZjA7XHJcbiAgICAgIC0tc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgICB9XHJcblxyXG4gICAgOmhvc3QoLnRoZW1lLWRhcmspIHtcclxuICAgICAgLS1wcmltYXJ5LWNvbG9yOiAjOTBjYWY5O1xyXG4gICAgICAtLXByaW1hcnktaG92ZXI6ICM2NGI1ZjY7XHJcbiAgICAgIC0tZXJyb3ItY29sb3I6ICNlZjUzNTA7XHJcbiAgICAgIC0tdGV4dC1wcmltYXJ5OiAjZTBlMGUwO1xyXG4gICAgICAtLXRleHQtc2Vjb25kYXJ5OiAjYjBiMGIwO1xyXG4gICAgICAtLXRleHQtbXV0ZWQ6ICM4ODg7XHJcbiAgICAgIC0tYmctcHJpbWFyeTogIzFlMWUxZTtcclxuICAgICAgLS1iZy1zZWNvbmRhcnk6ICMyZDJkMmQ7XHJcbiAgICAgIC0tYmctdGVydGlhcnk6ICMyNTI1MjU7XHJcbiAgICAgIC0tYmctaG92ZXI6ICMzMzM7XHJcbiAgICAgIC0tYmctdW5yZWFkOiByZ2JhKDE0NCwgMjAyLCAyNDksIDAuMSk7XHJcbiAgICAgIC0tYm9yZGVyLWNvbG9yOiAjNDA0MDQwO1xyXG4gICAgICAtLWJvcmRlci1saWdodDogIzMzMztcclxuICAgICAgLS1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zKTtcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9uLXBhbmVsIHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIHJpZ2h0OiAtMzUwcHg7XHJcbiAgICAgIHdpZHRoOiAzNTBweDtcclxuICAgICAgaGVpZ2h0OiAxMDB2aDtcclxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctcHJpbWFyeSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IC0ycHggMCA4cHggdmFyKC0tc2hhZG93KTtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgei1pbmRleDogMTAwMDtcclxuICAgICAgdHJhbnNpdGlvbjogcmlnaHQgMC4zcyBlYXNlO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tcGFuZWwub3BlbiB7XHJcbiAgICAgIHJpZ2h0OiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5wYW5lbC1oZWFkZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHBhZGRpbmc6IDE2cHg7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1zZWNvbmRhcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC5wYW5lbC1oZWFkZXIgaDMge1xyXG4gICAgICBtYXJnaW46IDA7XHJcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLmNsb3NlLWJ0biB7XHJcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgZm9udC1zaXplOiAyMHB4O1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XHJcbiAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIHdpZHRoOiAzMnB4O1xyXG4gICAgICBoZWlnaHQ6IDMycHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC5jbG9zZS1idG46aG92ZXIge1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9ucy1saXN0IHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9uLWl0ZW0ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBnYXA6IDEycHg7XHJcbiAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctdGVydGlhcnkpO1xyXG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vdGlmaWNhdGlvbi1pdGVtOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctaG92ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24taXRlbS51bnJlYWQge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy11bnJlYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tY29udGVudCB7XHJcbiAgICAgIGZsZXg6IDE7XHJcbiAgICAgIG1pbi13aWR0aDogMDtcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9uLXRpdGxlIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tbWVzc2FnZSB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogNnB4O1xyXG4gICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcclxuICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xyXG4gICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tbWV0YSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLmFwcC1uYW1lIHtcclxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC5yZWFkLWJ0biB7XHJcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgd2lkdGg6IDI0cHg7XHJcbiAgICAgIGhlaWdodDogMjRweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC5yZWFkLWJ0bjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS1zdWNjZXNzLWNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAuZW1wdHktc3RhdGUge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgIH1cclxuXHJcbiAgICAucGFuZWwtZm9vdGVyIHtcclxuICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xyXG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctc2Vjb25kYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAuYWN0aW9uLWJ0biB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBwYWRkaW5nOiA4cHg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xyXG4gICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycztcclxuICAgIH1cclxuXHJcbiAgICAuYWN0aW9uLWJ0bjpob3ZlciB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktaG92ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xyXG4gICAgICAubm90aWZpY2F0aW9uLXBhbmVsIHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICByaWdodDogLTEwMCU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICBgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQE91dHB1dCgpIG5vdGlmaWNhdGlvblJlYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGdldCB0aGVtZUNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYHRoZW1lLSR7dGhpcy5jdXJyZW50VGhlbWV9YDtcclxuICB9XHJcblxyXG4gIGlzT3BlbiA9IGZhbHNlO1xyXG4gIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbkR0b1tdID0gW107XHJcbiAgY3VycmVudFRoZW1lOiBUaGVtZSA9ICdsaWdodCc7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IE1lc0F1dGhTZXJ2aWNlLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGhlbWVTZXJ2aWNlLmN1cnJlbnRUaGVtZSRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHRoZW1lID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUaGVtZSA9IHRoZW1lO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWROb3RpZmljYXRpb25zKCk7XHJcblxyXG4gICAgLy8gTGlzdGVuIGZvciBuZXcgcmVhbC10aW1lIG5vdGlmaWNhdGlvbnNcclxuICAgIHRoaXMuYXV0aFNlcnZpY2Uubm90aWZpY2F0aW9ucyRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChub3RpZmljYXRpb246IFJlYWxUaW1lTm90aWZpY2F0aW9uRHRvKSA9PiB7XHJcbiAgICAgICAgLy8gU2hvdyB0b2FzdCBmb3IgbmV3IG5vdGlmaWNhdGlvblxyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coXHJcbiAgICAgICAgICBub3RpZmljYXRpb24ubWVzc2FnZSxcclxuICAgICAgICAgICdbJyArIG5vdGlmaWNhdGlvbi5zb3VyY2VBcHBOYW1lICsgJ10gJyArIG5vdGlmaWNhdGlvbi50aXRsZSxcclxuICAgICAgICAgICdpbmZvJyxcclxuICAgICAgICAgIDUwMDBcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIFJlbG9hZCBub3RpZmljYXRpb25zIGxpc3RcclxuICAgICAgICB0aGlzLmxvYWROb3RpZmljYXRpb25zKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZE5vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE5vdGlmaWNhdGlvbnMoMSwgNTAsIGZhbHNlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcG9uc2U6IFBhZ2VkTGlzdDxOb3RpZmljYXRpb25EdG8+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zID0gcmVzcG9uc2UuaXRlbXMgfHwgW107XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7fVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbWFya0FzUmVhZChub3RpZmljYXRpb25JZDogc3RyaW5nLCBldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm1hcmtBc1JlYWQobm90aWZpY2F0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZChuID0+IG4uaWQgPT09IG5vdGlmaWNhdGlvbklkKTtcclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uKSB7XHJcbiAgICAgICAgICBub3RpZmljYXRpb24uaXNSZWFkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uUmVhZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge31cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFya0FsbEFzUmVhZCgpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubWFya0FsbEFzUmVhZCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZm9yRWFjaChuID0+IG4uaXNSZWFkID0gdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25SZWFkLmVtaXQoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHt9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZShub3RpZmljYXRpb25JZDogc3RyaW5nLCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5kZWxldGVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4gbi5pZCAhPT0gbm90aWZpY2F0aW9uSWQpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge31cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGRpZmZNcyA9IG5vdy5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IGRpZmZNaW5zID0gTWF0aC5mbG9vcihkaWZmTXMgLyA2MDAwMCk7XHJcbiAgICBjb25zdCBkaWZmSG91cnMgPSBNYXRoLmZsb29yKGRpZmZNcyAvIDM2MDAwMDApO1xyXG4gICAgY29uc3QgZGlmZkRheXMgPSBNYXRoLmZsb29yKGRpZmZNcyAvIDg2NDAwMDAwKTtcclxuXHJcbiAgICBpZiAoZGlmZk1pbnMgPCAxKSByZXR1cm4gJ05vdyc7XHJcbiAgICBpZiAoZGlmZk1pbnMgPCA2MCkgcmV0dXJuIGAke2RpZmZNaW5zfW0gYWdvYDtcclxuICAgIGlmIChkaWZmSG91cnMgPCAyNCkgcmV0dXJuIGAke2RpZmZIb3Vyc31oIGFnb2A7XHJcbiAgICBpZiAoZGlmZkRheXMgPCA3KSByZXR1cm4gYCR7ZGlmZkRheXN9ZCBhZ29gO1xyXG4gICAgXHJcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBbVYzQyxNQUFNLE9BQU8sMEJBQTBCO0lBd0JyQyxZQUFvQixXQUEyQixFQUFVLFlBQTBCLEVBQVUsWUFBMEI7UUFBbkcsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXZCN0cscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUt0RCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2Ysa0JBQWEsR0FBc0IsRUFBRSxDQUFDO1FBQ3RDLGlCQUFZLEdBQVUsT0FBTyxDQUFDO1FBQzlCLGNBQVMsR0FBc0IsUUFBUSxDQUFDLENBQUMsd0JBQXdCO1FBQ3pELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBY21GLENBQUM7SUF0QjNILElBQTBCLFVBQVU7UUFDbEMsT0FBTyxTQUFTLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBUUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7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bml0LCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1lc0F1dGhTZXJ2aWNlLCBOb3RpZmljYXRpb25EdG8sIFBhZ2VkTGlzdCwgUmVhbFRpbWVOb3RpZmljYXRpb25EdG8gfSBmcm9tICcuL21lcy1hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UsIFRoZW1lIH0gZnJvbSAnLi90aGVtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21hLW5vdGlmaWNhdGlvbi1wYW5lbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3JdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXBhbmVsXCIgW2NsYXNzLm9wZW5dPVwiaXNPcGVuXCI+XHJcbiAgICAgIDwhLS0gSGVhZGVyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGgzPk5vdGlmaWNhdGlvbnM8L2gzPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2UoKVwiIHRpdGxlPVwiQ2xvc2VcIj7inJU8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFRhYnMgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgIGNsYXNzPVwidGFiLWJ0blwiIFxyXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUYWIgPT09ICd1bnJlYWQnXCJcclxuICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ3VucmVhZCcpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBVbnJlYWQgKHt7IHVucmVhZE5vdGlmaWNhdGlvbnMubGVuZ3RoIH19KVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICBjbGFzcz1cInRhYi1idG5cIiBcclxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09PSAncmVhZCdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYigncmVhZCcpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBSZWFkICh7eyByZWFkTm90aWZpY2F0aW9ucy5sZW5ndGggfX0pXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBOb3RpZmljYXRpb25zIExpc3QgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb25zLWxpc3RcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudE5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vdGlmaWNhdGlvbiBvZiBjdXJyZW50Tm90aWZpY2F0aW9uc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9uLWl0ZW1cIlxyXG4gICAgICAgICAgICBbY2xhc3MudW5yZWFkXT1cIiFub3RpZmljYXRpb24uaXNSZWFkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hcmtBc1JlYWQobm90aWZpY2F0aW9uLmlkKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tdGl0bGVcIj57eyAnWycgKyBub3RpZmljYXRpb24uc291cmNlQXBwTmFtZSArICddICcgKyBub3RpZmljYXRpb24udGl0bGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLW1lc3NhZ2VcIj57eyBub3RpZmljYXRpb24ubWVzc2FnZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tbWV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtbmFtZVwiPnt7IG5vdGlmaWNhdGlvbi5zb3VyY2VBcHBOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+e3sgZm9ybWF0RGF0ZShub3RpZmljYXRpb24uY3JlYXRlZEF0KSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWFkLWJ0blwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJtYXJrQXNSZWFkKG5vdGlmaWNhdGlvbi5pZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJNYXJrIGFzIHJlYWRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIW5vdGlmaWNhdGlvbi5pc1JlYWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg4pyTXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWJ0blwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUobm90aWZpY2F0aW9uLmlkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBub3RpZmljYXRpb25cIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLmlzUmVhZFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDwn5eR77iPXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50Tm90aWZpY2F0aW9ucy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPlxyXG4gICAgICAgICAgICBObyB7eyBhY3RpdmVUYWIgfX0gbm90aWZpY2F0aW9uc1xyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBGb290ZXIgQWN0aW9ucyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlclwiICpuZ0lmPVwiY3VycmVudE5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKGNsaWNrKT1cIm1hcmtBbGxBc1JlYWQoKVwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAndW5yZWFkJyAmJiB1bnJlYWROb3RpZmljYXRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgIE1hcmsgYWxsIGFzIHJlYWRcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAgIDpob3N0IHtcclxuICAgICAgLS1wcmltYXJ5LWNvbG9yOiAjMTk3NmQyO1xyXG4gICAgICAtLXByaW1hcnktaG92ZXI6ICMxNTY1YzA7XHJcbiAgICAgIC0tc3VjY2Vzcy1jb2xvcjogIzRjYWY1MDtcclxuICAgICAgLS1lcnJvci1jb2xvcjogI2Y0NDMzNjtcclxuICAgICAgLS10ZXh0LXByaW1hcnk6ICMzMzM7XHJcbiAgICAgIC0tdGV4dC1zZWNvbmRhcnk6ICM2NjY7XHJcbiAgICAgIC0tdGV4dC1tdXRlZDogIzk5OTtcclxuICAgICAgLS1iZy1wcmltYXJ5OiB3aGl0ZTtcclxuICAgICAgLS1iZy1zZWNvbmRhcnk6ICNmNWY1ZjU7XHJcbiAgICAgIC0tYmctdGVydGlhcnk6ICNmYWZhZmE7XHJcbiAgICAgIC0tYmctaG92ZXI6ICNmNWY1ZjU7XHJcbiAgICAgIC0tYmctdW5yZWFkOiAjZTNmMmZkO1xyXG4gICAgICAtLWJvcmRlci1jb2xvcjogI2UwZTBlMDtcclxuICAgICAgLS1ib3JkZXItbGlnaHQ6ICNmMGYwZjA7XHJcbiAgICAgIC0tc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgICB9XHJcblxyXG4gICAgOmhvc3QoLnRoZW1lLWRhcmspIHtcclxuICAgICAgLS1wcmltYXJ5LWNvbG9yOiAjOTBjYWY5O1xyXG4gICAgICAtLXByaW1hcnktaG92ZXI6ICM2NGI1ZjY7XHJcbiAgICAgIC0tc3VjY2Vzcy1jb2xvcjogIzgxYzc4NDtcclxuICAgICAgLS1lcnJvci1jb2xvcjogI2VmNTM1MDtcclxuICAgICAgLS10ZXh0LXByaW1hcnk6ICNlMGUwZTA7XHJcbiAgICAgIC0tdGV4dC1zZWNvbmRhcnk6ICNiMGIwYjA7XHJcbiAgICAgIC0tdGV4dC1tdXRlZDogIzg4ODtcclxuICAgICAgLS1iZy1wcmltYXJ5OiAjMWUxZTFlO1xyXG4gICAgICAtLWJnLXNlY29uZGFyeTogIzJkMmQyZDtcclxuICAgICAgLS1iZy10ZXJ0aWFyeTogIzI1MjUyNTtcclxuICAgICAgLS1iZy1ob3ZlcjogIzMzMztcclxuICAgICAgLS1iZy11bnJlYWQ6IHJnYmEoMTQ0LCAyMDIsIDI0OSwgMC4xKTtcclxuICAgICAgLS1ib3JkZXItY29sb3I6ICM0MDQwNDA7XHJcbiAgICAgIC0tYm9yZGVyLWxpZ2h0OiAjMzMzO1xyXG4gICAgICAtLXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjMpO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tcGFuZWwge1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgcmlnaHQ6IC0zNTBweDtcclxuICAgICAgd2lkdGg6IDM1MHB4O1xyXG4gICAgICBoZWlnaHQ6IDEwMHZoO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1wcmltYXJ5KTtcclxuICAgICAgYm94LXNoYWRvdzogLTJweCAwIDhweCB2YXIoLS1zaGFkb3cpO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICB6LWluZGV4OiAxMDAwO1xyXG4gICAgICB0cmFuc2l0aW9uOiByaWdodCAwLjNzIGVhc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vdGlmaWNhdGlvbi1wYW5lbC5vcGVuIHtcclxuICAgICAgcmlnaHQ6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLnBhbmVsLWhlYWRlciB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgcGFkZGluZzogMTZweDtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLXNlY29uZGFyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLnBhbmVsLWhlYWRlciBoMyB7XHJcbiAgICAgIG1hcmdpbjogMDtcclxuICAgICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAuY2xvc2UtYnRuIHtcclxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBmb250LXNpemU6IDIwcHg7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgd2lkdGg6IDMycHg7XHJcbiAgICAgIGhlaWdodDogMzJweDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLmNsb3NlLWJ0bjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC50YWJzIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLXNlY29uZGFyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLnRhYi1idG4ge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XHJcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xyXG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnRhYi1idG46aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1ob3Zlcik7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC50YWItYnRuLmFjdGl2ZSB7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcclxuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLXByaW1hcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb25zLWxpc3Qge1xyXG4gICAgICBmbGV4OiAxO1xyXG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24taXRlbSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGdhcDogMTJweDtcclxuICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xyXG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy10ZXJ0aWFyeSk7XHJcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycztcclxuICAgIH1cclxuXHJcbiAgICAubm90aWZpY2F0aW9uLWl0ZW06aG92ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1ob3Zlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vdGlmaWNhdGlvbi1pdGVtLnVucmVhZCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJnLXVucmVhZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vdGlmaWNhdGlvbi1jb250ZW50IHtcclxuICAgICAgZmxleDogMTtcclxuICAgICAgbWluLXdpZHRoOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC5ub3RpZmljYXRpb24tdGl0bGUge1xyXG4gICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XHJcbiAgICB9XHJcblxyXG4gICAgLm5vdGlmaWNhdGlvbi1tZXNzYWdlIHtcclxuICAgICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcclxuICAgICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgICBsaW5lLWhlaWdodDogMS40O1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiA2cHg7XHJcbiAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xyXG4gICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XHJcbiAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICB9XHJcblxyXG4gICAgLm5vdGlmaWNhdGlvbi1tZXRhIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBmb250LXNpemU6IDEycHg7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAuYXBwLW5hbWUge1xyXG4gICAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLnJlYWQtYnRuIHtcclxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICB3aWR0aDogMjRweDtcclxuICAgICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLnJlYWQtYnRuOmhvdmVyIHtcclxuICAgICAgY29sb3I6IHZhcigtLXN1Y2Nlc3MtY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC5kZWxldGUtYnRuIHtcclxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICB3aWR0aDogMjRweDtcclxuICAgICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XHJcbiAgICB9XHJcblxyXG4gICAgLmRlbGV0ZS1idG46aG92ZXIge1xyXG4gICAgICBjb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC5lbXB0eS1zdGF0ZSB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTtcclxuICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5wYW5lbC1mb290ZXIge1xyXG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XHJcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1zZWNvbmRhcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC5hY3Rpb24tYnRuIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIHBhZGRpbmc6IDhweDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XHJcbiAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzO1xyXG4gICAgfVxyXG5cclxuICAgIC5hY3Rpb24tYnRuOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1ob3Zlcik7XHJcbiAgICB9XHJcblxyXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XHJcbiAgICAgIC5ub3RpZmljYXRpb24tcGFuZWwge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIHJpZ2h0OiAtMTAwJTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25QYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uUmVhZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IHRoZW1lQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgdGhlbWUtJHt0aGlzLmN1cnJlbnRUaGVtZX1gO1xyXG4gIH1cclxuXHJcbiAgaXNPcGVuID0gZmFsc2U7XHJcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW10gPSBbXTtcclxuICBjdXJyZW50VGhlbWU6IFRoZW1lID0gJ2xpZ2h0JztcclxuICBhY3RpdmVUYWI6ICd1bnJlYWQnIHwgJ3JlYWQnID0gJ3VucmVhZCc7IC8vIERlZmF1bHQgdG8gdW5yZWFkIHRhYlxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBnZXQgdW5yZWFkTm90aWZpY2F0aW9ucygpOiBOb3RpZmljYXRpb25EdG9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zLmZpbHRlcihuID0+ICFuLmlzUmVhZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmVhZE5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uRHRvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9ucy5maWx0ZXIobiA9PiBuLmlzUmVhZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudE5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uRHRvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiID09PSAndW5yZWFkJyA/IHRoaXMudW5yZWFkTm90aWZpY2F0aW9ucyA6IHRoaXMucmVhZE5vdGlmaWNhdGlvbnM7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBNZXNBdXRoU2VydmljZSwgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSwgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRoZW1lU2VydmljZS5jdXJyZW50VGhlbWUkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh0aGVtZSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VGhlbWUgPSB0aGVtZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucygpO1xyXG5cclxuICAgIC8vIExpc3RlbiBmb3IgbmV3IHJlYWwtdGltZSBub3RpZmljYXRpb25zXHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm5vdGlmaWNhdGlvbnMkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobm90aWZpY2F0aW9uOiBSZWFsVGltZU5vdGlmaWNhdGlvbkR0bykgPT4ge1xyXG4gICAgICAgIC8vIFNob3cgdG9hc3QgZm9yIG5ldyBub3RpZmljYXRpb25cclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KFxyXG4gICAgICAgICAgbm90aWZpY2F0aW9uLm1lc3NhZ2UsXHJcbiAgICAgICAgICAnWycgKyBub3RpZmljYXRpb24uc291cmNlQXBwTmFtZSArICddICcgKyBub3RpZmljYXRpb24udGl0bGUsXHJcbiAgICAgICAgICAnaW5mbycsXHJcbiAgICAgICAgICA1MDAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBSZWxvYWQgbm90aWZpY2F0aW9ucyBsaXN0XHJcbiAgICAgICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWROb3RpZmljYXRpb25zKCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXROb3RpZmljYXRpb25zKDEsIDUwLCB0cnVlKS5zdWJzY3JpYmUoeyAvLyBpbmNsdWRlUmVhZCA9IHRydWUgdG8gZ2V0IGJvdGggcmVhZCBhbmQgdW5yZWFkXHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogUGFnZWRMaXN0PE5vdGlmaWNhdGlvbkR0bz4pID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSByZXNwb25zZS5pdGVtcyB8fCBbXTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHt9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW4oKSB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9ICd1bnJlYWQnOyAvLyBSZXNldCB0byB1bnJlYWQgdGFiIHdoZW4gb3BlbmluZ1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoVGFiKHRhYjogJ3VucmVhZCcgfCAncmVhZCcpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xyXG4gIH1cclxuXHJcbiAgbWFya0FzUmVhZChub3RpZmljYXRpb25JZDogc3RyaW5nLCBldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm1hcmtBc1JlYWQobm90aWZpY2F0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZChuID0+IG4uaWQgPT09IG5vdGlmaWNhdGlvbklkKTtcclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uKSB7XHJcbiAgICAgICAgICBub3RpZmljYXRpb24uaXNSZWFkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uUmVhZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge31cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFya0FsbEFzUmVhZCgpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubWFya0FsbEFzUmVhZCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZm9yRWFjaChuID0+IG4uaXNSZWFkID0gdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25SZWFkLmVtaXQoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHt9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZShub3RpZmljYXRpb25JZDogc3RyaW5nLCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5kZWxldGVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4gbi5pZCAhPT0gbm90aWZpY2F0aW9uSWQpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge31cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGRpZmZNcyA9IG5vdy5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IGRpZmZNaW5zID0gTWF0aC5mbG9vcihkaWZmTXMgLyA2MDAwMCk7XHJcbiAgICBjb25zdCBkaWZmSG91cnMgPSBNYXRoLmZsb29yKGRpZmZNcyAvIDM2MDAwMDApO1xyXG4gICAgY29uc3QgZGlmZkRheXMgPSBNYXRoLmZsb29yKGRpZmZNcyAvIDg2NDAwMDAwKTtcclxuXHJcbiAgICBpZiAoZGlmZk1pbnMgPCAxKSByZXR1cm4gJ05vdyc7XHJcbiAgICBpZiAoZGlmZk1pbnMgPCA2MCkgcmV0dXJuIGAke2RpZmZNaW5zfW0gYWdvYDtcclxuICAgIGlmIChkaWZmSG91cnMgPCAyNCkgcmV0dXJuIGAke2RpZmZIb3Vyc31oIGFnb2A7XHJcbiAgICBpZiAoZGlmZkRheXMgPCA3KSByZXR1cm4gYCR7ZGlmZkRheXN9ZCBhZ29gO1xyXG4gICAgXHJcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -558,11 +558,21 @@ class NotificationPanelComponent {
558
558
  this.isOpen = false;
559
559
  this.notifications = [];
560
560
  this.currentTheme = 'light';
561
+ this.activeTab = 'unread'; // Default to unread tab
561
562
  this.destroy$ = new Subject();
562
563
  }
563
564
  get themeClass() {
564
565
  return `theme-${this.currentTheme}`;
565
566
  }
567
+ get unreadNotifications() {
568
+ return this.notifications.filter(n => !n.isRead);
569
+ }
570
+ get readNotifications() {
571
+ return this.notifications.filter(n => n.isRead);
572
+ }
573
+ get currentNotifications() {
574
+ return this.activeTab === 'unread' ? this.unreadNotifications : this.readNotifications;
575
+ }
566
576
  ngOnInit() {
567
577
  this.themeService.currentTheme$
568
578
  .pipe(takeUntil(this.destroy$))
@@ -585,7 +595,7 @@ class NotificationPanelComponent {
585
595
  this.destroy$.complete();
586
596
  }
587
597
  loadNotifications() {
588
- this.authService.getNotifications(1, 50, false).subscribe({
598
+ this.authService.getNotifications(1, 50, true).subscribe({
589
599
  next: (response) => {
590
600
  this.notifications = response.items || [];
591
601
  },
@@ -594,10 +604,14 @@ class NotificationPanelComponent {
594
604
  }
595
605
  open() {
596
606
  this.isOpen = true;
607
+ this.activeTab = 'unread'; // Reset to unread tab when opening
597
608
  }
598
609
  close() {
599
610
  this.isOpen = false;
600
611
  }
612
+ switchTab(tab) {
613
+ this.activeTab = tab;
614
+ }
601
615
  markAsRead(notificationId, event) {
602
616
  if (event) {
603
617
  event.stopPropagation();
@@ -658,11 +672,29 @@ NotificationPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
658
672
  <button class="close-btn" (click)="close()" title="Close">✕</button>
659
673
  </div>
660
674
 
675
+ <!-- Tabs -->
676
+ <div class="tabs">
677
+ <button
678
+ class="tab-btn"
679
+ [class.active]="activeTab === 'unread'"
680
+ (click)="switchTab('unread')"
681
+ >
682
+ Unread ({{ unreadNotifications.length }})
683
+ </button>
684
+ <button
685
+ class="tab-btn"
686
+ [class.active]="activeTab === 'read'"
687
+ (click)="switchTab('read')"
688
+ >
689
+ Read ({{ readNotifications.length }})
690
+ </button>
691
+ </div>
692
+
661
693
  <!-- Notifications List -->
662
694
  <div class="notifications-list">
663
- <ng-container *ngIf="notifications.length > 0">
695
+ <ng-container *ngIf="currentNotifications.length > 0">
664
696
  <div
665
- *ngFor="let notification of notifications"
697
+ *ngFor="let notification of currentNotifications"
666
698
  class="notification-item"
667
699
  [class.unread]="!notification.isRead"
668
700
  (click)="markAsRead(notification.id)"
@@ -683,24 +715,32 @@ NotificationPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
683
715
  >
684
716
 
685
717
  </button>
718
+ <button
719
+ class="delete-btn"
720
+ (click)="delete(notification.id, $event)"
721
+ title="Delete notification"
722
+ *ngIf="notification.isRead"
723
+ >
724
+ 🗑️
725
+ </button>
686
726
  </div>
687
727
  </ng-container>
688
728
 
689
- <ng-container *ngIf="notifications.length === 0">
729
+ <ng-container *ngIf="currentNotifications.length === 0">
690
730
  <div class="empty-state">
691
- No notifications
731
+ No {{ activeTab }} notifications
692
732
  </div>
693
733
  </ng-container>
694
734
  </div>
695
735
 
696
736
  <!-- Footer Actions -->
697
- <div class="panel-footer" *ngIf="notifications.length > 0">
698
- <button class="action-btn" (click)="markAllAsRead()">
737
+ <div class="panel-footer" *ngIf="currentNotifications.length > 0">
738
+ <button class="action-btn" (click)="markAllAsRead()" *ngIf="activeTab === 'unread' && unreadNotifications.length > 0">
699
739
  Mark all as read
700
740
  </button>
701
741
  </div>
702
742
  </div>
703
- `, isInline: true, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--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;--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)}.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)}.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)}.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)}@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"] }] });
743
+ `, 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)}.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)}@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"] }] });
704
744
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NotificationPanelComponent, decorators: [{
705
745
  type: Component,
706
746
  args: [{ selector: 'ma-notification-panel', standalone: true, imports: [NgIf, NgFor], template: `
@@ -711,11 +751,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
711
751
  <button class="close-btn" (click)="close()" title="Close">✕</button>
712
752
  </div>
713
753
 
754
+ <!-- Tabs -->
755
+ <div class="tabs">
756
+ <button
757
+ class="tab-btn"
758
+ [class.active]="activeTab === 'unread'"
759
+ (click)="switchTab('unread')"
760
+ >
761
+ Unread ({{ unreadNotifications.length }})
762
+ </button>
763
+ <button
764
+ class="tab-btn"
765
+ [class.active]="activeTab === 'read'"
766
+ (click)="switchTab('read')"
767
+ >
768
+ Read ({{ readNotifications.length }})
769
+ </button>
770
+ </div>
771
+
714
772
  <!-- Notifications List -->
715
773
  <div class="notifications-list">
716
- <ng-container *ngIf="notifications.length > 0">
774
+ <ng-container *ngIf="currentNotifications.length > 0">
717
775
  <div
718
- *ngFor="let notification of notifications"
776
+ *ngFor="let notification of currentNotifications"
719
777
  class="notification-item"
720
778
  [class.unread]="!notification.isRead"
721
779
  (click)="markAsRead(notification.id)"
@@ -736,24 +794,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
736
794
  >
737
795
 
738
796
  </button>
797
+ <button
798
+ class="delete-btn"
799
+ (click)="delete(notification.id, $event)"
800
+ title="Delete notification"
801
+ *ngIf="notification.isRead"
802
+ >
803
+ 🗑️
804
+ </button>
739
805
  </div>
740
806
  </ng-container>
741
807
 
742
- <ng-container *ngIf="notifications.length === 0">
808
+ <ng-container *ngIf="currentNotifications.length === 0">
743
809
  <div class="empty-state">
744
- No notifications
810
+ No {{ activeTab }} notifications
745
811
  </div>
746
812
  </ng-container>
747
813
  </div>
748
814
 
749
815
  <!-- Footer Actions -->
750
- <div class="panel-footer" *ngIf="notifications.length > 0">
751
- <button class="action-btn" (click)="markAllAsRead()">
816
+ <div class="panel-footer" *ngIf="currentNotifications.length > 0">
817
+ <button class="action-btn" (click)="markAllAsRead()" *ngIf="activeTab === 'unread' && unreadNotifications.length > 0">
752
818
  Mark all as read
753
819
  </button>
754
820
  </div>
755
821
  </div>
756
- `, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--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;--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)}.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)}.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)}.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)}@media (max-width: 600px){.notification-panel{width:100%;right:-100%}}\n"] }]
822
+ `, 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)}.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)}@media (max-width: 600px){.notification-panel{width:100%;right:-100%}}\n"] }]
757
823
  }], ctorParameters: function () { return [{ type: MesAuthService }, { type: ToastService }, { type: ThemeService }]; }, propDecorators: { notificationRead: [{
758
824
  type: Output
759
825
  }], themeClass: [{