mesauth-angular 1.3.2 → 1.3.3
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 +305 -305
- package/fesm2022/mesauth-angular.mjs +170 -170
- package/fesm2022/mesauth-angular.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -267,10 +267,10 @@ class MesAuthService {
|
|
|
267
267
|
refreshUser() {
|
|
268
268
|
return this.fetchCurrentUser();
|
|
269
269
|
}
|
|
270
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
271
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
270
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MesAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
271
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MesAuthService });
|
|
272
272
|
}
|
|
273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MesAuthService, decorators: [{
|
|
274
274
|
type: Injectable
|
|
275
275
|
}], ctorParameters: () => [] });
|
|
276
276
|
|
|
@@ -325,13 +325,13 @@ const mesAuthInterceptor = (req, next) => {
|
|
|
325
325
|
};
|
|
326
326
|
|
|
327
327
|
class MesAuthModule {
|
|
328
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
329
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
330
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
328
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MesAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
329
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: MesAuthModule });
|
|
330
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MesAuthModule, providers: [
|
|
331
331
|
MesAuthService
|
|
332
332
|
] });
|
|
333
333
|
}
|
|
334
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
334
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MesAuthModule, decorators: [{
|
|
335
335
|
type: NgModule,
|
|
336
336
|
args: [{
|
|
337
337
|
providers: [
|
|
@@ -390,10 +390,10 @@ class ThemeService {
|
|
|
390
390
|
refreshTheme() {
|
|
391
391
|
this.detectTheme();
|
|
392
392
|
}
|
|
393
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
394
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
393
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
394
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThemeService, providedIn: 'root' });
|
|
395
395
|
}
|
|
396
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
396
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThemeService, decorators: [{
|
|
397
397
|
type: Injectable,
|
|
398
398
|
args: [{
|
|
399
399
|
providedIn: 'root'
|
|
@@ -540,101 +540,101 @@ class UserProfileComponent {
|
|
|
540
540
|
onNotificationClick() {
|
|
541
541
|
this.notificationClick.emit();
|
|
542
542
|
}
|
|
543
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
544
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
545
|
-
<div class="user-profile-container">
|
|
546
|
-
<!-- Not logged in -->
|
|
547
|
-
<ng-container *ngIf="!currentUser()">
|
|
548
|
-
<button class="login-btn" (click)="onLogin()">
|
|
549
|
-
Login
|
|
550
|
-
</button>
|
|
551
|
-
</ng-container>
|
|
552
|
-
|
|
553
|
-
<!-- Logged in -->
|
|
554
|
-
<ng-container *ngIf="currentUser()">
|
|
555
|
-
<div class="user-header">
|
|
556
|
-
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
557
|
-
<span class="icon">🔔</span>
|
|
558
|
-
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
559
|
-
</button>
|
|
560
|
-
|
|
561
|
-
<div class="user-menu-wrapper">
|
|
562
|
-
<button class="user-menu-btn" (click)="toggleDropdown()">
|
|
563
|
-
<img
|
|
564
|
-
*ngIf="currentUser().fullName || currentUser().userName"
|
|
565
|
-
[src]="getAvatarUrl(currentUser())"
|
|
566
|
-
[alt]="currentUser().fullName || currentUser().userName"
|
|
567
|
-
class="avatar"
|
|
568
|
-
/>
|
|
569
|
-
<span *ngIf="!(currentUser().fullName || currentUser().userName)" class="avatar-initial">
|
|
570
|
-
{{ getLastNameInitial(currentUser()) }}
|
|
571
|
-
</span>
|
|
572
|
-
</button>
|
|
573
|
-
|
|
574
|
-
<div class="mes-dropdown-menu" *ngIf="dropdownOpen">
|
|
575
|
-
<div class="mes-dropdown-header">
|
|
576
|
-
{{ currentUser().fullName || currentUser().userName }}
|
|
577
|
-
</div>
|
|
578
|
-
<button class="mes-dropdown-item profile-link" (click)="onViewProfile()">
|
|
579
|
-
View Profile
|
|
580
|
-
</button>
|
|
581
|
-
<button class="mes-dropdown-item logout-item" (click)="onLogout()">
|
|
582
|
-
Logout
|
|
583
|
-
</button>
|
|
584
|
-
</div>
|
|
585
|
-
</div>
|
|
586
|
-
</div>
|
|
587
|
-
</ng-container>
|
|
588
|
-
</div>
|
|
543
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserProfileComponent, deps: [{ token: MesAuthService }, { token: i2.Router }, { token: ThemeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
544
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: UserProfileComponent, isStandalone: true, selector: "ma-user-profile", outputs: { notificationClick: "notificationClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, properties: { "class": "this.themeClass" } }, ngImport: i0, template: `
|
|
545
|
+
<div class="user-profile-container">
|
|
546
|
+
<!-- Not logged in -->
|
|
547
|
+
<ng-container *ngIf="!currentUser()">
|
|
548
|
+
<button class="login-btn" (click)="onLogin()">
|
|
549
|
+
Login
|
|
550
|
+
</button>
|
|
551
|
+
</ng-container>
|
|
552
|
+
|
|
553
|
+
<!-- Logged in -->
|
|
554
|
+
<ng-container *ngIf="currentUser()">
|
|
555
|
+
<div class="user-header">
|
|
556
|
+
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
557
|
+
<span class="icon">🔔</span>
|
|
558
|
+
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
559
|
+
</button>
|
|
560
|
+
|
|
561
|
+
<div class="user-menu-wrapper">
|
|
562
|
+
<button class="user-menu-btn" (click)="toggleDropdown()">
|
|
563
|
+
<img
|
|
564
|
+
*ngIf="currentUser().fullName || currentUser().userName"
|
|
565
|
+
[src]="getAvatarUrl(currentUser())"
|
|
566
|
+
[alt]="currentUser().fullName || currentUser().userName"
|
|
567
|
+
class="avatar"
|
|
568
|
+
/>
|
|
569
|
+
<span *ngIf="!(currentUser().fullName || currentUser().userName)" class="avatar-initial">
|
|
570
|
+
{{ getLastNameInitial(currentUser()) }}
|
|
571
|
+
</span>
|
|
572
|
+
</button>
|
|
573
|
+
|
|
574
|
+
<div class="mes-dropdown-menu" *ngIf="dropdownOpen">
|
|
575
|
+
<div class="mes-dropdown-header">
|
|
576
|
+
{{ currentUser().fullName || currentUser().userName }}
|
|
577
|
+
</div>
|
|
578
|
+
<button class="mes-dropdown-item profile-link" (click)="onViewProfile()">
|
|
579
|
+
View Profile
|
|
580
|
+
</button>
|
|
581
|
+
<button class="mes-dropdown-item logout-item" (click)="onLogout()">
|
|
582
|
+
Logout
|
|
583
|
+
</button>
|
|
584
|
+
</div>
|
|
585
|
+
</div>
|
|
586
|
+
</div>
|
|
587
|
+
</ng-container>
|
|
588
|
+
</div>
|
|
589
589
|
`, isInline: true, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--primary-light: rgba(25, 118, 210, .1);--error-color: #f44336;--error-light: #ffebee;--text-primary: #333;--text-secondary: #666;--text-muted: #999;--bg-primary: white;--bg-secondary: #f5f5f5;--bg-tertiary: #fafafa;--bg-hover: #f5f5f5;--border-color: #e0e0e0;--border-light: #f0f0f0;--shadow: rgba(0, 0, 0, .15);--shadow-light: rgba(0, 0, 0, .1)}:host(.theme-dark){--primary-color: #90caf9;--primary-hover: #64b5f6;--primary-light: rgba(144, 202, 249, .1);--error-color: #ef5350;--error-light: rgba(239, 83, 80, .1);--text-primary: #e0e0e0;--text-secondary: #b0b0b0;--text-muted: #888;--bg-primary: #1e1e1e;--bg-secondary: #2d2d2d;--bg-tertiary: #252525;--bg-hover: #333;--border-color: #404040;--border-light: #333;--shadow: rgba(0, 0, 0, .3);--shadow-light: rgba(0, 0, 0, .2)}.user-profile-container{display:flex;align-items:center;gap:16px;padding:0 16px}.login-btn{padding:8px 16px;background-color:var(--primary-color);color:#fff;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:background-color .3s}.login-btn:hover{background-color:var(--primary-hover)}.user-header{display:flex;align-items:center;gap:16px}.notification-btn{position:relative;background:none;border:none;font-size:24px;cursor:pointer;padding:8px;transition:opacity .2s}.notification-btn:hover{opacity:.7}.icon{display:inline-block}.badge{position:absolute;top:0;right:0;background-color:var(--error-color);color:#fff;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.user-menu-wrapper{position:relative}.user-menu-btn{background:none;border:none;cursor:pointer;padding:4px;border-radius:50%;transition:background-color .2s;display:flex;align-items:center;justify-content:center}.user-menu-btn:hover{background-color:var(--primary-light)}.avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;background-color:#e0e0e0}.avatar-initial{width:40px;height:40px;border-radius:50%;background-color:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px}.mes-dropdown-menu{position:absolute;top:calc(100% + 8px);right:0;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:4px;box-shadow:0 2px 8px var(--shadow);min-width:200px;z-index:1000;overflow:hidden}.mes-dropdown-header{padding:12px 16px;border-bottom:1px solid var(--border-light);font-weight:600;color:var(--text-primary);font-size:14px}.mes-dropdown-item{display:block;width:100%;padding:12px 16px;border:none;background:none;text-align:left;cursor:pointer;font-size:14px;color:var(--text-primary);text-decoration:none;transition:background-color .2s}.mes-dropdown-item:hover{background-color:var(--bg-hover)}.profile-link{color:var(--primary-color)}.logout-item{border-top:1px solid var(--border-light);color:var(--error-color)}.logout-item:hover{background-color:var(--error-light)}.user-info{display:flex;flex-direction:column;gap:2px}.user-name{font-weight:500;font-size:14px;color:var(--text-primary)}.user-position{font-size:12px;color:var(--text-secondary)}.logout-btn{background:none;border:none;font-size:20px;cursor:pointer;color:var(--text-secondary);padding:4px 8px;transition:color .2s}.logout-btn:hover{color:var(--primary-color)}@media(max-width:768px){.user-info{display:none}.avatar{width:32px;height:32px}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
590
590
|
}
|
|
591
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
591
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserProfileComponent, decorators: [{
|
|
592
592
|
type: Component,
|
|
593
|
-
args: [{ selector: 'ma-user-profile', standalone: true, imports: [NgIf], template: `
|
|
594
|
-
<div class="user-profile-container">
|
|
595
|
-
<!-- Not logged in -->
|
|
596
|
-
<ng-container *ngIf="!currentUser()">
|
|
597
|
-
<button class="login-btn" (click)="onLogin()">
|
|
598
|
-
Login
|
|
599
|
-
</button>
|
|
600
|
-
</ng-container>
|
|
601
|
-
|
|
602
|
-
<!-- Logged in -->
|
|
603
|
-
<ng-container *ngIf="currentUser()">
|
|
604
|
-
<div class="user-header">
|
|
605
|
-
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
606
|
-
<span class="icon">🔔</span>
|
|
607
|
-
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
608
|
-
</button>
|
|
609
|
-
|
|
610
|
-
<div class="user-menu-wrapper">
|
|
611
|
-
<button class="user-menu-btn" (click)="toggleDropdown()">
|
|
612
|
-
<img
|
|
613
|
-
*ngIf="currentUser().fullName || currentUser().userName"
|
|
614
|
-
[src]="getAvatarUrl(currentUser())"
|
|
615
|
-
[alt]="currentUser().fullName || currentUser().userName"
|
|
616
|
-
class="avatar"
|
|
617
|
-
/>
|
|
618
|
-
<span *ngIf="!(currentUser().fullName || currentUser().userName)" class="avatar-initial">
|
|
619
|
-
{{ getLastNameInitial(currentUser()) }}
|
|
620
|
-
</span>
|
|
621
|
-
</button>
|
|
622
|
-
|
|
623
|
-
<div class="mes-dropdown-menu" *ngIf="dropdownOpen">
|
|
624
|
-
<div class="mes-dropdown-header">
|
|
625
|
-
{{ currentUser().fullName || currentUser().userName }}
|
|
626
|
-
</div>
|
|
627
|
-
<button class="mes-dropdown-item profile-link" (click)="onViewProfile()">
|
|
628
|
-
View Profile
|
|
629
|
-
</button>
|
|
630
|
-
<button class="mes-dropdown-item logout-item" (click)="onLogout()">
|
|
631
|
-
Logout
|
|
632
|
-
</button>
|
|
633
|
-
</div>
|
|
634
|
-
</div>
|
|
635
|
-
</div>
|
|
636
|
-
</ng-container>
|
|
637
|
-
</div>
|
|
593
|
+
args: [{ selector: 'ma-user-profile', standalone: true, imports: [NgIf], template: `
|
|
594
|
+
<div class="user-profile-container">
|
|
595
|
+
<!-- Not logged in -->
|
|
596
|
+
<ng-container *ngIf="!currentUser()">
|
|
597
|
+
<button class="login-btn" (click)="onLogin()">
|
|
598
|
+
Login
|
|
599
|
+
</button>
|
|
600
|
+
</ng-container>
|
|
601
|
+
|
|
602
|
+
<!-- Logged in -->
|
|
603
|
+
<ng-container *ngIf="currentUser()">
|
|
604
|
+
<div class="user-header">
|
|
605
|
+
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
606
|
+
<span class="icon">🔔</span>
|
|
607
|
+
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
608
|
+
</button>
|
|
609
|
+
|
|
610
|
+
<div class="user-menu-wrapper">
|
|
611
|
+
<button class="user-menu-btn" (click)="toggleDropdown()">
|
|
612
|
+
<img
|
|
613
|
+
*ngIf="currentUser().fullName || currentUser().userName"
|
|
614
|
+
[src]="getAvatarUrl(currentUser())"
|
|
615
|
+
[alt]="currentUser().fullName || currentUser().userName"
|
|
616
|
+
class="avatar"
|
|
617
|
+
/>
|
|
618
|
+
<span *ngIf="!(currentUser().fullName || currentUser().userName)" class="avatar-initial">
|
|
619
|
+
{{ getLastNameInitial(currentUser()) }}
|
|
620
|
+
</span>
|
|
621
|
+
</button>
|
|
622
|
+
|
|
623
|
+
<div class="mes-dropdown-menu" *ngIf="dropdownOpen">
|
|
624
|
+
<div class="mes-dropdown-header">
|
|
625
|
+
{{ currentUser().fullName || currentUser().userName }}
|
|
626
|
+
</div>
|
|
627
|
+
<button class="mes-dropdown-item profile-link" (click)="onViewProfile()">
|
|
628
|
+
View Profile
|
|
629
|
+
</button>
|
|
630
|
+
<button class="mes-dropdown-item logout-item" (click)="onLogout()">
|
|
631
|
+
Logout
|
|
632
|
+
</button>
|
|
633
|
+
</div>
|
|
634
|
+
</div>
|
|
635
|
+
</div>
|
|
636
|
+
</ng-container>
|
|
637
|
+
</div>
|
|
638
638
|
`, styles: [":host{--primary-color: #1976d2;--primary-hover: #1565c0;--primary-light: rgba(25, 118, 210, .1);--error-color: #f44336;--error-light: #ffebee;--text-primary: #333;--text-secondary: #666;--text-muted: #999;--bg-primary: white;--bg-secondary: #f5f5f5;--bg-tertiary: #fafafa;--bg-hover: #f5f5f5;--border-color: #e0e0e0;--border-light: #f0f0f0;--shadow: rgba(0, 0, 0, .15);--shadow-light: rgba(0, 0, 0, .1)}:host(.theme-dark){--primary-color: #90caf9;--primary-hover: #64b5f6;--primary-light: rgba(144, 202, 249, .1);--error-color: #ef5350;--error-light: rgba(239, 83, 80, .1);--text-primary: #e0e0e0;--text-secondary: #b0b0b0;--text-muted: #888;--bg-primary: #1e1e1e;--bg-secondary: #2d2d2d;--bg-tertiary: #252525;--bg-hover: #333;--border-color: #404040;--border-light: #333;--shadow: rgba(0, 0, 0, .3);--shadow-light: rgba(0, 0, 0, .2)}.user-profile-container{display:flex;align-items:center;gap:16px;padding:0 16px}.login-btn{padding:8px 16px;background-color:var(--primary-color);color:#fff;border:none;border-radius:4px;cursor:pointer;font-weight:500;transition:background-color .3s}.login-btn:hover{background-color:var(--primary-hover)}.user-header{display:flex;align-items:center;gap:16px}.notification-btn{position:relative;background:none;border:none;font-size:24px;cursor:pointer;padding:8px;transition:opacity .2s}.notification-btn:hover{opacity:.7}.icon{display:inline-block}.badge{position:absolute;top:0;right:0;background-color:var(--error-color);color:#fff;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.user-menu-wrapper{position:relative}.user-menu-btn{background:none;border:none;cursor:pointer;padding:4px;border-radius:50%;transition:background-color .2s;display:flex;align-items:center;justify-content:center}.user-menu-btn:hover{background-color:var(--primary-light)}.avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;background-color:#e0e0e0}.avatar-initial{width:40px;height:40px;border-radius:50%;background-color:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px}.mes-dropdown-menu{position:absolute;top:calc(100% + 8px);right:0;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:4px;box-shadow:0 2px 8px var(--shadow);min-width:200px;z-index:1000;overflow:hidden}.mes-dropdown-header{padding:12px 16px;border-bottom:1px solid var(--border-light);font-weight:600;color:var(--text-primary);font-size:14px}.mes-dropdown-item{display:block;width:100%;padding:12px 16px;border:none;background:none;text-align:left;cursor:pointer;font-size:14px;color:var(--text-primary);text-decoration:none;transition:background-color .2s}.mes-dropdown-item:hover{background-color:var(--bg-hover)}.profile-link{color:var(--primary-color)}.logout-item{border-top:1px solid var(--border-light);color:var(--error-color)}.logout-item:hover{background-color:var(--error-light)}.user-info{display:flex;flex-direction:column;gap:2px}.user-name{font-weight:500;font-size:14px;color:var(--text-primary)}.user-position{font-size:12px;color:var(--text-secondary)}.logout-btn{background:none;border:none;font-size:20px;cursor:pointer;color:var(--text-secondary);padding:4px 8px;transition:color .2s}.logout-btn:hover{color:var(--primary-color)}@media(max-width:768px){.user-info{display:none}.avatar{width:32px;height:32px}}\n"] }]
|
|
639
639
|
}], ctorParameters: () => [{ type: MesAuthService }, { type: i2.Router }, { type: ThemeService }, { type: i0.ChangeDetectorRef }], propDecorators: { notificationClick: [{
|
|
640
640
|
type: Output
|
|
@@ -674,10 +674,10 @@ class ToastService {
|
|
|
674
674
|
clear() {
|
|
675
675
|
this.toasts$.next([]);
|
|
676
676
|
}
|
|
677
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
678
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
677
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
678
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ToastService, providedIn: 'root' });
|
|
679
679
|
}
|
|
680
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
680
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ToastService, decorators: [{
|
|
681
681
|
type: Injectable,
|
|
682
682
|
args: [{ providedIn: 'root' }]
|
|
683
683
|
}] });
|
|
@@ -714,45 +714,45 @@ class ToastContainerComponent {
|
|
|
714
714
|
close(id) {
|
|
715
715
|
this.toastService.remove(id);
|
|
716
716
|
}
|
|
717
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
718
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
719
|
-
<div class="toast-container">
|
|
720
|
-
<div
|
|
721
|
-
*ngFor="let toast of toasts"
|
|
722
|
-
class="toast"
|
|
723
|
-
[class]="'toast-' + toast.type"
|
|
724
|
-
[@slideIn]
|
|
725
|
-
>
|
|
726
|
-
<div class="toast-content">
|
|
727
|
-
<div *ngIf="toast.title" class="toast-title">{{ toast.title }}</div>
|
|
728
|
-
<div class="toast-message" [innerHTML]="toast.message"></div>
|
|
729
|
-
</div>
|
|
730
|
-
<button class="toast-close" (click)="close(toast.id)" aria-label="Close">
|
|
731
|
-
✕
|
|
732
|
-
</button>
|
|
733
|
-
</div>
|
|
734
|
-
</div>
|
|
717
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ToastContainerComponent, deps: [{ token: ToastService }, { token: ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
718
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: ToastContainerComponent, isStandalone: true, selector: "ma-toast-container", host: { properties: { "class": "this.themeClass" } }, ngImport: i0, template: `
|
|
719
|
+
<div class="toast-container">
|
|
720
|
+
<div
|
|
721
|
+
*ngFor="let toast of toasts"
|
|
722
|
+
class="toast"
|
|
723
|
+
[class]="'toast-' + toast.type"
|
|
724
|
+
[@slideIn]
|
|
725
|
+
>
|
|
726
|
+
<div class="toast-content">
|
|
727
|
+
<div *ngIf="toast.title" class="toast-title">{{ toast.title }}</div>
|
|
728
|
+
<div class="toast-message" [innerHTML]="toast.message"></div>
|
|
729
|
+
</div>
|
|
730
|
+
<button class="toast-close" (click)="close(toast.id)" aria-label="Close">
|
|
731
|
+
✕
|
|
732
|
+
</button>
|
|
733
|
+
</div>
|
|
734
|
+
</div>
|
|
735
735
|
`, 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"] }] });
|
|
736
736
|
}
|
|
737
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
737
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ToastContainerComponent, decorators: [{
|
|
738
738
|
type: Component,
|
|
739
|
-
args: [{ selector: 'ma-toast-container', standalone: true, imports: [CommonModule], template: `
|
|
740
|
-
<div class="toast-container">
|
|
741
|
-
<div
|
|
742
|
-
*ngFor="let toast of toasts"
|
|
743
|
-
class="toast"
|
|
744
|
-
[class]="'toast-' + toast.type"
|
|
745
|
-
[@slideIn]
|
|
746
|
-
>
|
|
747
|
-
<div class="toast-content">
|
|
748
|
-
<div *ngIf="toast.title" class="toast-title">{{ toast.title }}</div>
|
|
749
|
-
<div class="toast-message" [innerHTML]="toast.message"></div>
|
|
750
|
-
</div>
|
|
751
|
-
<button class="toast-close" (click)="close(toast.id)" aria-label="Close">
|
|
752
|
-
✕
|
|
753
|
-
</button>
|
|
754
|
-
</div>
|
|
755
|
-
</div>
|
|
739
|
+
args: [{ selector: 'ma-toast-container', standalone: true, imports: [CommonModule], template: `
|
|
740
|
+
<div class="toast-container">
|
|
741
|
+
<div
|
|
742
|
+
*ngFor="let toast of toasts"
|
|
743
|
+
class="toast"
|
|
744
|
+
[class]="'toast-' + toast.type"
|
|
745
|
+
[@slideIn]
|
|
746
|
+
>
|
|
747
|
+
<div class="toast-content">
|
|
748
|
+
<div *ngIf="toast.title" class="toast-title">{{ toast.title }}</div>
|
|
749
|
+
<div class="toast-message" [innerHTML]="toast.message"></div>
|
|
750
|
+
</div>
|
|
751
|
+
<button class="toast-close" (click)="close(toast.id)" aria-label="Close">
|
|
752
|
+
✕
|
|
753
|
+
</button>
|
|
754
|
+
</div>
|
|
755
|
+
</div>
|
|
756
756
|
`, 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"] }]
|
|
757
757
|
}], ctorParameters: () => [{ type: ToastService }, { type: ThemeService }], propDecorators: { themeClass: [{
|
|
758
758
|
type: HostBinding,
|
|
@@ -992,8 +992,8 @@ class NotificationPanelComponent {
|
|
|
992
992
|
}
|
|
993
993
|
return normalized;
|
|
994
994
|
}
|
|
995
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
996
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
995
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NotificationPanelComponent, deps: [{ token: MesAuthService }, { token: ToastService }, { token: ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
996
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: NotificationPanelComponent, isStandalone: true, selector: "ma-notification-panel", outputs: { notificationRead: "notificationRead" }, host: { properties: { "class": "this.themeClass" } }, ngImport: i0, template: `
|
|
997
997
|
<div class="notification-panel" [class.open]="isOpen">
|
|
998
998
|
<!-- Header -->
|
|
999
999
|
<div class="panel-header">
|
|
@@ -1097,7 +1097,7 @@ class NotificationPanelComponent {
|
|
|
1097
1097
|
</div>
|
|
1098
1098
|
`, isInline: true, styles: [":host{display:block;position:relative;--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){display:block;position:relative;--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:1030;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:12px;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}.modal-overlay{position:fixed;inset:0;width:100vw;height:100vh;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1060}.modal-container{background:var(--bg-primary);border-radius:8px;width:90%;max-width:600px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 4px 20px var(--shadow)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border-color);background-color:var(--bg-secondary);border-radius:8px 8px 0 0}.modal-header h3{margin:0;font-size:18px;color:var(--text-primary)}.modal-meta{display:flex;justify-content:space-between;padding:8px 20px;font-size:12px;color:var(--text-muted);background-color:var(--bg-tertiary);border-bottom:1px solid var(--border-light)}.modal-body{padding:20px;overflow-y:auto;flex:1;color:var(--text-primary);font-size:14px;line-height:1.6}.modal-footer{padding:12px 20px;border-top:1px solid var(--border-color);background-color:var(--bg-secondary);border-radius:0 0 8px 8px;display:flex;justify-content:flex-end}.modal-footer .action-btn{width:auto;padding:8px 24px}@media(max-width:600px){.notification-panel{width:100%;right:-100%}.modal-container{width:95%;max-height:90vh}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
1099
1099
|
}
|
|
1100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
1100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NotificationPanelComponent, decorators: [{
|
|
1101
1101
|
type: Component,
|
|
1102
1102
|
args: [{ selector: 'ma-notification-panel', standalone: true, imports: [NgIf, NgFor], template: `
|
|
1103
1103
|
<div class="notification-panel" [class.open]="isOpen">
|
|
@@ -1222,23 +1222,23 @@ class MaUserComponent {
|
|
|
1222
1222
|
this.userProfile.loadUnreadCount();
|
|
1223
1223
|
}
|
|
1224
1224
|
}
|
|
1225
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
1226
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
1227
|
-
<ma-toast-container></ma-toast-container>
|
|
1228
|
-
<div class="user-header">
|
|
1229
|
-
<ma-user-profile (notificationClick)="notificationPanel.open()"></ma-user-profile>
|
|
1230
|
-
</div>
|
|
1231
|
-
<ma-notification-panel #notificationPanel (notificationRead)="onNotificationRead()"></ma-notification-panel>
|
|
1225
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MaUserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1226
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: MaUserComponent, isStandalone: true, selector: "ma-user", viewQueries: [{ propertyName: "userProfile", first: true, predicate: UserProfileComponent, descendants: true }], ngImport: i0, template: `
|
|
1227
|
+
<ma-toast-container></ma-toast-container>
|
|
1228
|
+
<div class="user-header">
|
|
1229
|
+
<ma-user-profile (notificationClick)="notificationPanel.open()"></ma-user-profile>
|
|
1230
|
+
</div>
|
|
1231
|
+
<ma-notification-panel #notificationPanel (notificationRead)="onNotificationRead()"></ma-notification-panel>
|
|
1232
1232
|
`, isInline: true, styles: [".user-header{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "component", type: ToastContainerComponent, selector: "ma-toast-container" }, { kind: "component", type: UserProfileComponent, selector: "ma-user-profile", outputs: ["notificationClick"] }, { kind: "component", type: NotificationPanelComponent, selector: "ma-notification-panel", outputs: ["notificationRead"] }] });
|
|
1233
1233
|
}
|
|
1234
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
1234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: MaUserComponent, decorators: [{
|
|
1235
1235
|
type: Component,
|
|
1236
|
-
args: [{ selector: 'ma-user', standalone: true, imports: [ToastContainerComponent, UserProfileComponent, NotificationPanelComponent], template: `
|
|
1237
|
-
<ma-toast-container></ma-toast-container>
|
|
1238
|
-
<div class="user-header">
|
|
1239
|
-
<ma-user-profile (notificationClick)="notificationPanel.open()"></ma-user-profile>
|
|
1240
|
-
</div>
|
|
1241
|
-
<ma-notification-panel #notificationPanel (notificationRead)="onNotificationRead()"></ma-notification-panel>
|
|
1236
|
+
args: [{ selector: 'ma-user', standalone: true, imports: [ToastContainerComponent, UserProfileComponent, NotificationPanelComponent], template: `
|
|
1237
|
+
<ma-toast-container></ma-toast-container>
|
|
1238
|
+
<div class="user-header">
|
|
1239
|
+
<ma-user-profile (notificationClick)="notificationPanel.open()"></ma-user-profile>
|
|
1240
|
+
</div>
|
|
1241
|
+
<ma-notification-panel #notificationPanel (notificationRead)="onNotificationRead()"></ma-notification-panel>
|
|
1242
1242
|
`, styles: [".user-header{display:flex;justify-content:flex-end}\n"] }]
|
|
1243
1243
|
}], propDecorators: { userProfile: [{
|
|
1244
1244
|
type: ViewChild,
|
|
@@ -1304,21 +1304,21 @@ class NotificationBadgeComponent {
|
|
|
1304
1304
|
onNotificationClick() {
|
|
1305
1305
|
this.notificationClick.emit();
|
|
1306
1306
|
}
|
|
1307
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
1308
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
1309
|
-
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
1310
|
-
<span class="icon">🔔</span>
|
|
1311
|
-
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
1312
|
-
</button>
|
|
1307
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NotificationBadgeComponent, deps: [{ token: MesAuthService }, { token: ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1308
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: NotificationBadgeComponent, isStandalone: true, selector: "ma-notification-badge", outputs: { notificationClick: "notificationClick" }, host: { properties: { "class": "this.themeClass" } }, ngImport: i0, template: `
|
|
1309
|
+
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
1310
|
+
<span class="icon">🔔</span>
|
|
1311
|
+
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
1312
|
+
</button>
|
|
1313
1313
|
`, isInline: true, styles: [":host{--error-color: #f44336}:host(.theme-dark){--error-color: #ef5350}.notification-btn{position:relative;background:none;border:none;font-size:24px;cursor:pointer;padding:8px;transition:opacity .2s}.notification-btn:hover{opacity:.7}.icon{display:inline-block}.badge{position:absolute;top:0;right:0;background-color:var(--error-color);color:#fff;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
1314
1314
|
}
|
|
1315
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
1315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: NotificationBadgeComponent, decorators: [{
|
|
1316
1316
|
type: Component,
|
|
1317
|
-
args: [{ selector: 'ma-notification-badge', standalone: true, imports: [NgIf], template: `
|
|
1318
|
-
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
1319
|
-
<span class="icon">🔔</span>
|
|
1320
|
-
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
1321
|
-
</button>
|
|
1317
|
+
args: [{ selector: 'ma-notification-badge', standalone: true, imports: [NgIf], template: `
|
|
1318
|
+
<button class="notification-btn" (click)="onNotificationClick()" title="Notifications">
|
|
1319
|
+
<span class="icon">🔔</span>
|
|
1320
|
+
<span class="badge" *ngIf="unreadCount > 0">{{ unreadCount }}</span>
|
|
1321
|
+
</button>
|
|
1322
1322
|
`, styles: [":host{--error-color: #f44336}:host(.theme-dark){--error-color: #ef5350}.notification-btn{position:relative;background:none;border:none;font-size:24px;cursor:pointer;padding:8px;transition:opacity .2s}.notification-btn:hover{opacity:.7}.icon{display:inline-block}.badge{position:absolute;top:0;right:0;background-color:var(--error-color);color:#fff;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}\n"] }]
|
|
1323
1323
|
}], ctorParameters: () => [{ type: MesAuthService }, { type: ThemeService }], propDecorators: { notificationClick: [{
|
|
1324
1324
|
type: Output
|