@indice/ng-components 0.2.133-beta → 0.2.134

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.
Files changed (34) hide show
  1. package/README.md +4 -4
  2. package/_styles.css +25 -72
  3. package/bundles/indice-ng-components.umd.js +212 -119
  4. package/bundles/indice-ng-components.umd.js.map +1 -1
  5. package/esm2015/lib/controls/kpi-tile/kpi-tile.component.js +1 -1
  6. package/esm2015/lib/controls/list-view/list-column.component.js +1 -1
  7. package/esm2015/lib/controls/list-view/list-view-empty-state.component.js +2 -2
  8. package/esm2015/lib/controls/nav-links-list/nav-links-list.component.js +40 -0
  9. package/esm2015/lib/controls/notifications-indicator/notifications-indicator.component.js +68 -0
  10. package/esm2015/lib/controls/skeleton-loader/skeleton-loader.component.js +1 -1
  11. package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +70 -68
  12. package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +11 -6
  13. package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +5 -6
  14. package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +1 -3
  15. package/esm2015/lib/ng-components.module.js +7 -6
  16. package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +2 -2
  17. package/esm2015/lib/services/toaster.service.js +1 -1
  18. package/esm2015/lib/tokens.js +2 -1
  19. package/esm2015/lib/types.js +10 -7
  20. package/esm2015/public-api.js +2 -2
  21. package/fesm2015/indice-ng-components.js +189 -106
  22. package/fesm2015/indice-ng-components.js.map +1 -1
  23. package/lib/controls/nav-links-list/nav-links-list.component.d.ts +15 -0
  24. package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +23 -0
  25. package/lib/layouts/shell/shell-header/shell-header.component.d.ts +21 -24
  26. package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +3 -2
  27. package/lib/layouts/views/form-layout/form-layout.component.d.ts +2 -3
  28. package/lib/ng-components.module.d.ts +6 -5
  29. package/lib/tokens.d.ts +1 -0
  30. package/lib/types.d.ts +27 -10
  31. package/package.json +1 -1
  32. package/public-api.d.ts +1 -1
  33. package/esm2015/lib/pipes/obs-with-status.pipe.js +0 -26
  34. package/lib/pipes/obs-with-status.pipe.d.ts +0 -13
@@ -3,10 +3,10 @@ import { EventEmitter, PLATFORM_ID, Directive, Inject, Input, Output, Component,
3
3
  import * as i1 from '@angular/common';
4
4
  import { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common';
5
5
  import * as i1$1 from '@angular/router';
6
- import { NavigationStart, Router, ActivationStart, RouterModule } from '@angular/router';
6
+ import { NavigationStart, Router, ActivatedRoute, ActivationStart, RouterModule } from '@angular/router';
7
7
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
8
- import { BehaviorSubject, Subject, of, Observable, fromEvent } from 'rxjs';
9
- import { filter, map, debounceTime, distinctUntilChanged, startWith, catchError } from 'rxjs/operators';
8
+ import { BehaviorSubject, Subject, of, fromEvent } from 'rxjs';
9
+ import { filter, share, map, debounceTime, distinctUntilChanged } from 'rxjs/operators';
10
10
  import * as i2 from '@indice/ng-auth';
11
11
  import { AuthService, IndiceAuthModule } from '@indice/ng-auth';
12
12
 
@@ -294,30 +294,33 @@ Icons.SortDesc = 'ms-Icon ms-Icon--Descending';
294
294
  Icons.Details = ' ms-Icon ms-Icon--AccountActivity';
295
295
 
296
296
  class NavLink {
297
- constructor(text, path, exact = false, external = false, icon, isRead, creationDate) {
298
- this.isRead = false;
297
+ constructor(text, path, exact = false, external = false, icon, data) {
298
+ this.type = 'router';
299
299
  this.text = text;
300
300
  this.path = path;
301
301
  this.exact = exact;
302
302
  this.external = external;
303
303
  this.icon = icon;
304
- this.isRead = isRead;
305
- this.creationDate = creationDate;
304
+ this.data = data;
306
305
  }
307
306
  }
308
307
  class ExternalNavLink extends NavLink {
309
308
  constructor(text, path, openInNewTab, icon) {
310
309
  super(text, path, true, openInNewTab, icon);
310
+ this.type = 'external';
311
311
  }
312
312
  }
313
313
  class FragmentNavLink extends NavLink {
314
314
  constructor(text, path, icon) {
315
315
  super(text, path, true, true, icon);
316
+ this.type = 'fragment';
316
317
  }
317
318
  }
318
319
  class NotificationNavLink extends NavLink {
319
320
  constructor(text, path, isRead, creationDate) {
320
- super(text, path, true, false, undefined, isRead, creationDate);
321
+ super(text, path, true, false, undefined);
322
+ this.isRead = isRead;
323
+ this.creationDate = creationDate;
321
324
  }
322
325
  }
323
326
  class ViewAction {
@@ -371,7 +374,7 @@ class DefaultShellConfig {
371
374
  this.appLogoAlt = 'your app name here';
372
375
  this.showHeader = true;
373
376
  this.showUserNameOnHeader = false;
374
- this.showNotifications = false;
377
+ this.showAlertsOnHeader = false;
375
378
  this.showFooter = true;
376
379
  this.fluid = false;
377
380
  }
@@ -598,7 +601,7 @@ class ListViewEmptyStateComponent {
598
601
  }
599
602
  }
600
603
  ListViewEmptyStateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ListViewEmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
601
- ListViewEmptyStateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ListViewEmptyStateComponent, selector: "lib-list-view-empty-state", inputs: { title: "title", subTitle: ["sub-title", "subTitle"], newItemLabel: ["new-item-label", "newItemLabel"] }, ngImport: i0, template: "<div class=\"p-20\">\r\n <div class=\"text-center p-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-auto h-12 w-12 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4\" />\r\n </svg>\r\n <h3 class=\"mt-2 text-sm font-medium text-gray-900\">{{title}}</h3>\r\n <p class=\"mt-1 text-sm text-gray-500\">\r\n {{subTitle}}\r\n </p>\r\n <div class=\"mt-6\" *ngIf=\"false\">\r\n <button type=\"button\" class=\"inline-flex items-center px-4 py-2 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-gray-600 hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-1 focus:ring-gray-500\">\r\n <!-- Heroicon name: solid/plus -->\r\n <svg class=\"-ml-1 mr-2 h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\r\n <path vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\r\n </svg>\r\n {{newItemLabel}}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
604
+ ListViewEmptyStateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ListViewEmptyStateComponent, selector: "lib-list-view-empty-state", inputs: { title: "title", subTitle: ["sub-title", "subTitle"], newItemLabel: ["new-item-label", "newItemLabel"] }, ngImport: i0, template: "<div class=\"p-20\">\n <div class=\"text-center p-2\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-auto h-12 w-12 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4\" />\n </svg>\n <h3 class=\"mt-2 text-sm font-medium text-gray-900\">{{title}}</h3>\n <p class=\"mt-1 text-sm text-gray-500\">\n {{subTitle}}\n </p>\n <div class=\"mt-6\" *ngIf=\"false\">\n <button type=\"button\" class=\"inline-flex items-center px-4 py-2 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-gray-600 hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-1 focus:ring-gray-500\">\n <!-- Heroicon name: solid/plus -->\n <svg class=\"-ml-1 mr-2 h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n </svg>\n {{newItemLabel}}\n </button>\n </div>\n </div>\n</div>\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
602
605
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ListViewEmptyStateComponent, decorators: [{
603
606
  type: Component,
604
607
  args: [{
@@ -1394,7 +1397,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
1394
1397
  type: Output
1395
1398
  }] } });
1396
1399
 
1400
+ class NavLinksListComponent {
1401
+ constructor() {
1402
+ // tslint:disable-next-line:no-input-rename
1403
+ this.navLinkClass = 'nav-link';
1404
+ // tslint:disable-next-line:no-input-rename
1405
+ this.navLinkActiveClass = 'nav-link-active';
1406
+ // tslint:disable-next-line:no-input-rename
1407
+ this.containerClass = '';
1408
+ }
1409
+ ngOnInit() {
1410
+ }
1411
+ }
1412
+ NavLinksListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: NavLinksListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1413
+ NavLinksListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: NavLinksListComponent, selector: "lib-nav-links-list", inputs: { links: "links", activeFragment: ["active-fragment", "activeFragment"], navLinkClass: ["link-class", "navLinkClass"], navLinkActiveClass: ["link-active-class", "navLinkActiveClass"], containerClass: ["container-class", "containerClass"] }, ngImport: i0, template: "<div [class]=\"containerClass\">\n <ng-container *ngFor=\"let link of links | async\">\n <ng-container [ngSwitch]=\"link.type\">\n <a *ngSwitchCase=\"'router'\"\n href=\"#\"\n [routerLink]=\"[link.path]\"\n [routerLinkActive]=\"navLinkActiveClass\"\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\n [class]=\"navLinkClass\">\n {{ link.text }}\n </a>\n <a *ngSwitchCase=\"'external'\"\n [href]=\"link.path\"\n [attr.target]=\"link.external ? '_blank' : '_self'\"\n class=\"nav-link\">\n {{ link.text }}\n </a>\n <a *ngSwitchCase=\"'fragment'\"\n routerLink=\".\"\n [fragment]=\"link.path\"\n [class.active]=\"(activeFragment | async) === link.path\"\n class=\"nav-link\">\n {{ link.text }}\n </a>\n </ng-container>\n </ng-container>\n</div>\n", directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i1$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }], pipes: { "async": i1.AsyncPipe } });
1414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: NavLinksListComponent, decorators: [{
1415
+ type: Component,
1416
+ args: [{
1417
+ selector: 'lib-nav-links-list',
1418
+ templateUrl: './nav-links-list.component.html'
1419
+ }]
1420
+ }], ctorParameters: function () { return []; }, propDecorators: { links: [{
1421
+ type: Input
1422
+ }], activeFragment: [{
1423
+ type: Input,
1424
+ args: ['active-fragment']
1425
+ }], navLinkClass: [{
1426
+ type: Input,
1427
+ args: ['link-class']
1428
+ }], navLinkActiveClass: [{
1429
+ type: Input,
1430
+ args: ['link-active-class']
1431
+ }], containerClass: [{
1432
+ type: Input,
1433
+ args: ['container-class']
1434
+ }] } });
1435
+
1397
1436
  const APP_LINKS = new InjectionToken('APP_LINKS');
1437
+ const APP_NOTIFICATIONS = new InjectionToken('APP_NOTIFICATIONS');
1398
1438
  const SHELL_CONFIG = new InjectionToken('SHELL_CONFIG');
1399
1439
 
1400
1440
  class DynamicComponentHostDirective {
@@ -1643,102 +1683,154 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
1643
1683
  args: [{ providedIn: 'root' }]
1644
1684
  }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ApplicationRef }]; } });
1645
1685
 
1686
+ class NotificationsIndicatorComponent {
1687
+ constructor(notifications) {
1688
+ this.notifications = notifications;
1689
+ this.notificationsMenuVisible = true;
1690
+ this.menuExpanded = false;
1691
+ this.showNotifications = true;
1692
+ this.showUserNameOnHeader = true;
1693
+ this.unreadCount = 0;
1694
+ this.items = [];
1695
+ this.inboxAction = undefined;
1696
+ this.newArrival = false;
1697
+ }
1698
+ ngOnDestroy() {
1699
+ if (this.notificationsSub$) {
1700
+ this.notificationsSub$.unsubscribe();
1701
+ }
1702
+ }
1703
+ ngOnInit() {
1704
+ this.notificationsSub$ = this.notifications.messages.subscribe(result => {
1705
+ if (result.items) {
1706
+ this.newArrival = true;
1707
+ this.unreadCount = result.count;
1708
+ this.items = result.items;
1709
+ setTimeout(() => { this.newArrival = false; }, 1000);
1710
+ }
1711
+ });
1712
+ }
1713
+ toggleMenu() {
1714
+ this.menuExpanded = !this.menuExpanded;
1715
+ this.unreadCount = 0;
1716
+ }
1717
+ doInboxAction() {
1718
+ if (this.notifications.inboxAction) {
1719
+ this.notifications.inboxAction();
1720
+ }
1721
+ this.unreadCount = 0;
1722
+ }
1723
+ // this.notificationsSub$ = this.links.notifications?.pipe(map(result => {
1724
+ // this.allItemsLink = result.allNotifications;
1725
+ // this.items = result.items;
1726
+ // this.unreadCount = result.count;
1727
+ // }));
1728
+ // [this.notificationsLinksPath] as Observable<NotificationNavLink[]>;
1729
+ // this.allNotificationsLink = this.links[this.allNotificationsLinkPath] as Observable<NavLink>;
1730
+ // this.unreadNotificationsCountObs = this.links[this.notificationsCounterLinksPath] as Observable<number>;
1731
+ // this.getUnreadNotificationsCount();
1732
+ // tslint:disable-next-line:typedef
1733
+ onClickOutside($event) {
1734
+ this.menuExpanded = false;
1735
+ }
1736
+ }
1737
+ NotificationsIndicatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: NotificationsIndicatorComponent, deps: [{ token: APP_NOTIFICATIONS }], target: i0.ɵɵFactoryTarget.Component });
1738
+ NotificationsIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: NotificationsIndicatorComponent, selector: "lib-notifications-indicator", ngImport: i0, template: "<div class=\"relative\">\n <!-- Notifications Button -->\n <button type=\"button\" (click)=\"doInboxAction()\" aria-expanded=\"false\" aria-haspopup=\"true\">\n <span class=\"sr-only\">View notifications</span>\n <span class=\"avatar-container\">\n <span class=\"avatar-text\">\n <i class=\"ms-Icon \"\n [class.ms-Icon--MessageFill]=\"unreadCount > 0\"\n [class.text-sky-400]=\"unreadCount > 0\"\n [class.animate-notification]=\"newArrival\"\n [class.ms-Icon--Message]=\"unreadCount === 0\"></i>\n </span>\n <span *ngIf=\"unreadCount > 0\"\n [class.animate-pulse]=\"newArrival\"\n class=\"absolute top-0 right-0 inline-flex items-center justify-center -mt-1 ml-1 text-xs leading-none text-gray-100\">\n {{unreadCount}}\n </span>\n </span>\n </button>\n</div>\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: NotificationsIndicatorComponent, decorators: [{
1740
+ type: Component,
1741
+ args: [{
1742
+ selector: 'lib-notifications-indicator',
1743
+ templateUrl: './notifications-indicator.component.html'
1744
+ }]
1745
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1746
+ type: Inject,
1747
+ args: [APP_NOTIFICATIONS]
1748
+ }] }]; } });
1749
+
1646
1750
  class ShellHeaderComponent {
1647
- constructor(authService, router, links) {
1751
+ constructor(authService, router, route, config, links) {
1648
1752
  this.authService = authService;
1649
1753
  this.router = router;
1754
+ this.route = route;
1755
+ this.config = config;
1650
1756
  this.links = links;
1651
1757
  // tslint:disable-next-line:no-input-rename
1652
1758
  this.sectionLinksPath = 'main';
1653
- this.notificationLinksPath = 'notifications';
1654
- this.allNotificationsLinkPath = 'allNotifications';
1655
- this.border = true;
1656
- this.showNotifications = false;
1657
- this.showUserNameOnHeader = false;
1658
- this.notificationsMenuVisible = true;
1759
+ // tslint:disable-next-line:no-input-rename
1659
1760
  this.profileMenuVisible = true;
1761
+ // tslint:disable-next-line:no-input-rename
1762
+ this.showUserNameOnHeader = false;
1763
+ // tslint:disable-next-line:no-input-rename
1764
+ this.showAlerts = false;
1765
+ this.border = true;
1660
1766
  this.sectionLinks = of([]);
1661
- this.notificationLinks = of([]);
1662
- this.allNotificationsLink = of();
1663
1767
  this.mobileMenuExpanded = false;
1664
1768
  this.userMenuExpanded = false;
1665
- this.notificationsMenuExpanded = false;
1666
- this.routeSubject = new Observable();
1667
1769
  this.routerSub$ = null;
1668
1770
  this.userSub$ = null;
1669
1771
  this.statusSub$ = null;
1670
1772
  this.user = null;
1671
1773
  this.avatarName = null;
1672
- }
1673
- ngOnDestroy() {
1674
- if (this.routerSub$) {
1675
- this.routerSub$.unsubscribe();
1676
- }
1677
- // TODO: check authenticated user here before we start polling server status
1678
- if (this.statusSub$) {
1679
- this.statusSub$.unsubscribe();
1680
- }
1681
- if (this.userSub$) {
1682
- this.userSub$.unsubscribe();
1683
- }
1774
+ this.activeFragment = null;
1775
+ this.routeSubject = this.router.events.pipe(filter((event) => event instanceof NavigationStart));
1684
1776
  }
1685
1777
  ngOnInit() {
1686
- var _a, _b;
1687
- this.showNotifications = (_a = this.config) === null || _a === void 0 ? void 0 : _a.showNotifications;
1688
- this.showUserNameOnHeader = (_b = this.config) === null || _b === void 0 ? void 0 : _b.showUserNameOnHeader;
1778
+ this.activeFragment = this.route.fragment.pipe(share());
1689
1779
  this.sectionLinks = this.links[this.sectionLinksPath];
1690
- this.notificationLinks = this.links[this.notificationLinksPath];
1691
- this.allNotificationsLink = this.links[this.allNotificationsLinkPath];
1692
- this.routerSub$ = this.router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(event => {
1780
+ this.routerSub$ = this.routeSubject.subscribe((event) => {
1693
1781
  this.mobileMenuExpanded = false;
1694
1782
  this.userMenuExpanded = false;
1695
- this.notificationsMenuExpanded = false;
1696
1783
  });
1697
1784
  this.authService.loadUser().subscribe((user) => {
1698
- console.log(user);
1699
1785
  this.setCurrentUser(user);
1700
1786
  }, error => {
1701
- console.log(error);
1787
+ console.error(error);
1702
1788
  });
1703
1789
  // Detect user changes and display / or not user info accordingly...
1704
1790
  this.userSub$ = this.authService.user$.subscribe((user) => {
1705
1791
  // console.log('ShellHeaderComponent user subscription');
1706
1792
  this.setCurrentUser(user);
1707
1793
  });
1794
+ // set current lang if no current value from langs if any
1795
+ if (!this.currentLang && this.langs && this.langs.length > 0) {
1796
+ this.setCurrentLang(this.langs[0]);
1797
+ }
1708
1798
  }
1709
- setCurrentUser(user) {
1710
- var _a, _b;
1711
- this.user = user;
1712
- if (this.user && this.user.profile) {
1713
- this.avatarName = `${(_a = this.user.profile.given_name) === null || _a === void 0 ? void 0 : _a.charAt(0)}${(_b = this.user.profile.family_name) === null || _b === void 0 ? void 0 : _b.charAt(0)}`;
1714
- console.log('load user', this.avatarName);
1799
+ ngOnDestroy() {
1800
+ if (this.routerSub$) {
1801
+ this.routerSub$.unsubscribe();
1802
+ }
1803
+ // TODO: check authenticated user here before we start polling server status
1804
+ if (this.statusSub$) {
1805
+ this.statusSub$.unsubscribe();
1806
+ }
1807
+ if (this.userSub$) {
1808
+ this.userSub$.unsubscribe();
1715
1809
  }
1716
1810
  }
1717
1811
  // tslint:disable-next-line:typedef
1718
- onClickOutsideProfile($event) {
1812
+ onClickOutside($event) {
1719
1813
  this.userMenuExpanded = false;
1720
1814
  }
1721
- // tslint:disable-next-line:typedef
1722
- onClickOutsideNotifications($event) {
1723
- this.notificationsMenuExpanded = false;
1724
- }
1725
1815
  signin(event) {
1726
1816
  if (event) {
1727
1817
  event.preventDefault();
1728
1818
  }
1729
1819
  this.authService.signinRedirect();
1730
1820
  }
1731
- expandUserMenu() {
1732
- this.userMenuExpanded = !this.userMenuExpanded;
1733
- this.notificationsMenuExpanded = false;
1821
+ setCurrentUser(user) {
1822
+ var _a, _b;
1823
+ this.user = user;
1824
+ if (this.user && this.user.profile) {
1825
+ this.avatarName = `${(_a = this.user.profile.given_name) === null || _a === void 0 ? void 0 : _a.charAt(0)}${(_b = this.user.profile.family_name) === null || _b === void 0 ? void 0 : _b.charAt(0)}`.toUpperCase();
1826
+ }
1734
1827
  }
1735
- expandNotificationsMenu() {
1736
- this.notificationsMenuExpanded = !this.notificationsMenuExpanded;
1737
- this.userMenuExpanded = false;
1828
+ setCurrentLang(lang) {
1829
+ this.currentLang = lang;
1738
1830
  }
1739
1831
  }
1740
- ShellHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellHeaderComponent, deps: [{ token: AuthService }, { token: Router }, { token: APP_LINKS }], target: i0.ɵɵFactoryTarget.Component });
1741
- ShellHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellHeaderComponent, selector: "lib-shell-header", inputs: { sectionLinksPath: ["section-links", "sectionLinksPath"], notificationLinksPath: ["notification-links", "notificationLinksPath"], allNotificationsLinkPath: ["all-notifications", "allNotificationsLinkPath"], config: "config", border: "border" }, ngImport: i0, template: "<nav>\r\n <div class=\"shell-header-paddings\">\r\n <div [class]=\"border ? 'shell-header-border' : ''\">\r\n <div class=\"shell-header-menu-container\">\r\n <div class=\"shell-header-links-no-grow-container\">\r\n <div>\r\n <a href=\"#\"\r\n [routerLink]=\"['/']\"><img class=\"app-logo\"\r\n [src]=\"config.appLogo\"\r\n [alt]=\"config.appLogoAlt\" /></a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shell-header-link-container\">\r\n <ng-container *ngFor=\"let link of sectionLinks | async\">\r\n <a href=\"#\"\r\n [routerLink]=\"[link.path]\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\"\r\n [routerLinkActive]=\"['nav-link-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"shell-header-md-visible\">\r\n <div class=\"shell-header-links-no-grow-container\">\r\n\r\n <ng-container *ngFor=\"let link of links.profileActions | async\">\r\n <a class=\"shell-header-menu-rounded-button\"\r\n (clickOutside)=\"onClickOutsideProfile($event)\"\r\n [attr.href]=\"link.path\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\">\r\n <span class=\"sr-only\">{{ link.text }}</span>\r\n <i *ngIf=\"link.icon\"\r\n [class]=\"link.icon\"></i>\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Profile dropdown -->\r\n <div class=\"ml-2 relative\"\r\n (clickOutside)=\"onClickOutsideProfile($event)\"\r\n *ngIf=\"profileMenuVisible\">\r\n <div [ngClass]=\"{'shell-header-profile': showUserNameOnHeader}\">\r\n <div *ngIf=\"user && showUserNameOnHeader\"\r\n class=\"shell-header-profile-userName\">\r\n {{ user.profile.name }}\r\n </div>\r\n <button type=\"button\"\r\n *ngIf=\"user\"\r\n (click)=\"userMenuExpanded = !userMenuExpanded\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">Open user menu</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\">{{this.avatarName}}</span>\r\n </span>\r\n </button>\r\n\r\n <button type=\"button\"\r\n *ngIf=\"!user\"\r\n (click)=\"signin(null)\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">sign in</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\"><i class=\"ms-Icon ms-Icon--Signin\"></i></span>\r\n </span>\r\n </button>\r\n\r\n <div *ngIf=\"userMenuExpanded\"\r\n [ngClass]=\"showUserNameOnHeader ? 'shell-header-profile-dropdown-with-username' : 'shell-header-profile-dropdown'\"\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n aria-labelledby=\"user-menu\">\r\n <!-- <a href=\"#\" class=\"block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\" role=\"menuitem\">\u0391\u03C0\u03BF\u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7</a> -->\r\n <ng-container *ngFor=\"let link of links.profile | async\">\r\n <!-- <a *ngIf=\"link.external\" [attr.href]=\"link.path\" [attr.target]=\"'_blank'\" class=\"nav-link-profile\">\r\n {{ link.text }}\r\n </a> -->\r\n <a [routerLink]=\"link.path\"\r\n [routerLinkActive]=\"['nav-link-profile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link-profile\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Notifications dropdown -->\r\n <div class=\"ml-2 relative\"\r\n (clickOutside)=\"onClickOutsideNotifications($event)\"\r\n *ngIf=\"notificationsMenuVisible\">\r\n <!-- Notifications Button -->\r\n <button class=\"mobile-menu-rounded-button bg-transparent\"\r\n *ngIf=\"showNotifications\"\r\n (click)=\"expandNotificationsMenu()\"\r\n id=\"notifications-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">View notifications</span>\r\n <!-- Heroicon name: outline/bell -->\r\n <svg class=\"mobile-menu-rounded-button-icon-style\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" />\r\n </svg>\r\n </button>\r\n\r\n <div *ngIf=\"notificationsMenuExpanded\"\r\n [ngClass]=\"showUserNameOnHeader ? 'shell-header-notifications-dropdown-with-username' : 'shell-header-notifications-dropdown'\"\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n aria-labelledby=\"notifications-menu\">\r\n <div class=\"max-h-64 overflow-y-auto notification-messages min-h\">\r\n <ng-container *ngIf=\"!notificationLinks; else notificationsDropDown\"\r\n class=\"py-5\">\r\n <div class=\"nav-link-notifications hover:bg-transparent\">\r\n \u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2\r\n </div>\r\n </ng-container>\r\n <ng-template #notificationsDropDown>\r\n <ul class=\"pr-1.5\">\r\n <ng-container *ngIf=\"notificationLinks | async as obs; else loading\">\r\n <ng-container *ngFor=\"let link of obs\">\r\n <li class=\"mb-2\"\r\n [ngClass]=\"{'border-l-2 border-blue-500 bg-blue-50 hover:bg-blue-50': !link.isRead }\">\r\n <a [routerLink]=\"link.path\"\r\n class=\"nav-link-notifications grid grid-row\"\r\n [ngClass]=\"!link.isRead ? ' hover:bg-blue-50' : 'border-b border-gray-100'\">\r\n <span class=\"font-bold\">\r\n {{ link.text }}\r\n </span>\r\n <span class=\"font-thin tracking-tighter\">\r\n {{ link.creationDate | date: 'EEE, d MMMM' }}\r\n </span>\r\n </a>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #loading>\r\n <div class=\"h-32 flex items-center justify-center\">\r\n <div class=\"animate-pulse text-s text-gray-600\">Loading...</div>\r\n </div>\r\n </ng-template>\r\n \r\n\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <div class=\"p-1 rounded-sm\">\r\n <a [routerLink]=\"(allNotificationsLink | async)?.path\">\r\n <button type=\"button\"\r\n class=\"shell-header-notifications-dropdown-view-all-button\">\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03CC\u03BB\u03C9\u03BD</button>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mobile-menu-button-container\">\r\n <!-- Mobile menu button -->\r\n <button type=\"button\"\r\n (click)=\"mobileMenuExpanded = !mobileMenuExpanded\"\r\n class=\"mobile-menu-button\"\r\n aria-controls=\"mobile-menu\"\r\n [attr.aria-expanded]=\"mobileMenuExpanded\">\r\n <span class=\"sr-only\">Open main menu</span>\r\n <!--Heroicon name: outline/menu Menu open: \"hidden\", Menu closed: \"block\"-->\r\n <svg class=\"block h-6 w-6\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M4 6h16M4 12h16M4 18h16\" />\r\n </svg>\r\n <!--Heroicon name: outline/x Menu open: \"block\", Menu closed: \"hidden\"-->\r\n <svg class=\"hidden h-6 w-6\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Mobile menu, show/hide based on menu state. -->\r\n <div class=\"mobile-menu-container\"\r\n *ngIf=\"mobileMenuExpanded\"\r\n id=\"mobile-menu\">\r\n <div class=\"mobile-menu-link-container\">\r\n <ng-container *ngFor=\"let link of sectionLinks | async\">\r\n <a *ngIf=\"link.external\"\r\n [attr.href]=\"link.path\"\r\n [attr.target]=\"'_blank'\"\r\n class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n <a *ngIf=\"!link.external\"\r\n [routerLink]=\"link.path\"\r\n [routerLinkActive]=\"['nav-link-mobile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"!user\">\r\n <a href=\"#\"\r\n (click)=\"signin($event)\"\r\n class=\"nav-link-mobile\">\r\n <i class=\"ms-Icon ms-Icon--Signin mr-2\"></i>\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\r\n </a>\r\n </ng-container>\r\n </div>\r\n <div class=\"mobile-menu-user-info-container\"\r\n *ngIf=\"user\">\r\n <div class=\"mobile-menu-user-info-container-inner\">\r\n <div class=\"flex-shrink-0\">\r\n <span class=\"mobile-menu-avatar-container\">\r\n <span class=\"mobile-menu-avatar-name\">{{ this.avatarName }}</span>\r\n </span>\r\n </div>\r\n <div class=\"ml-3\">\r\n <div class=\"mobile-menu-user-name\">{{ user.profile.name }}</div>\r\n <div class=\"mobile-menu-user-email\">{{ user.profile.email }}</div>\r\n </div>\r\n <button class=\"mobile-menu-rounded-button\">\r\n <span class=\"sr-only\">View notifications</span>\r\n <!-- Heroicon name: outline/bell -->\r\n <svg class=\"mobile-menu-rounded-button-icon-style\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"mobile-menu-link-container\">\r\n <ng-container *ngFor=\"let link of links.profile | async\">\r\n <a *ngIf=\"link.external\"\r\n [attr.href]=\"link.path\"\r\n [attr.target]=\"'_blank'\"\r\n class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n <a [routerLink]=\"link.path\"\r\n [routerLinkActive]=\"['nav-link-mobile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n <!-- <a href=\"#\" class=\"block px-3 py-2 rounded-sm text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700\">\u0391\u03C0\u03BF\u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7</a> -->\r\n </div>\r\n </div>\r\n </div>\r\n</nav>", directives: [{ type: i1$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i1.AsyncPipe, "date": i1.DatePipe } });
1832
+ ShellHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellHeaderComponent, deps: [{ token: AuthService }, { token: Router }, { token: ActivatedRoute }, { token: SHELL_CONFIG }, { token: APP_LINKS }], target: i0.ɵɵFactoryTarget.Component });
1833
+ ShellHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellHeaderComponent, selector: "lib-shell-header", inputs: { sectionLinksPath: ["section-links", "sectionLinksPath"], profileMenuVisible: ["profile-menu", "profileMenuVisible"], showUserNameOnHeader: ["show-userName", "showUserNameOnHeader"], showAlerts: ["show-alerts", "showAlerts"], langs: "langs", currentLang: ["current-lang", "currentLang"], border: "border" }, ngImport: i0, template: "<nav>\r\n <div class=\"shell-header-paddings\">\r\n <div [class]=\"border ? 'shell-header-border' : ''\">\r\n <div class=\"shell-header-menu-container\">\r\n <div class=\"shell-header-logo-container\">\r\n <div>\r\n <a href=\"#\" [routerLink]=\"['/']\"><img class=\"app-logo\" [src]=\"config.appLogo\" [alt]=\"config.appLogoAlt\" /></a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shell-header-link-container\">\r\n <div class=\"shell-header-link-container-inner\">\r\n <lib-nav-links-list\r\n [links]=\"sectionLinks\"\r\n [active-fragment]=\"activeFragment\"\r\n [link-class]=\"'nav-link'\"\r\n [link-active-class]=\"'nav-link-active'\">\r\n </lib-nav-links-list>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"langs && langs.length > 1 && currentLang\" class=\"shell-header-links-far-container\">\r\n <button class=\"text-blue-300 hover:text-blue-500\">\r\n <span>{{currentLang}}</span>\r\n <i class=\"text-xs ml-1 ms-Icon ms-Icon--ChevronDown\"></i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"shell-header-md-visible\">\r\n <div class=\"shell-header-links-far-container\" (clickOutside)=\"onClickOutside($event)\">\r\n\r\n <lib-nav-links-list\r\n [links]=\"links.profileActions\"\r\n [active-fragment]=\"activeFragment\"\r\n [link-class]=\"'shell-header-menu-rounded-button'\"\r\n [link-active-class]=\"'shell-header-menu-rounded-button-active'\">\r\n </lib-nav-links-list>\r\n\r\n <!-- <ng-container *ngFor=\"let link of links.profileActions | async\">\r\n <a class=\"shell-header-menu-rounded-button\"\r\n (clickOutside)=\"onClickOutside($event)\"\r\n [attr.href]=\"link.path\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\">\r\n <span class=\"sr-only\">{{ link.text }}</span>\r\n <i *ngIf=\"link.icon\" [class]=\"link.icon\"></i>\r\n </a>\r\n </ng-container> -->\r\n\r\n <div *ngIf=\"showAlerts && user\" class=\"mr-2\">\r\n <lib-notifications-indicator></lib-notifications-indicator>\r\n </div>\r\n <!-- Profile dropdown -->\r\n <div *ngIf=\"profileMenuVisible\" class=\"ml-2 relative\" (clickOutside)=\"onClickOutside($event)\">\r\n <div [ngClass]=\"{'shell-header-profile': showUserNameOnHeader}\">\r\n <div *ngIf=\"user && showUserNameOnHeader\" class=\"shell-header-profile-userName\">\r\n {{ user.profile.name }}\r\n </div>\r\n <button type=\"button\" *ngIf=\"user\" (click)=\"userMenuExpanded = !userMenuExpanded\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">Open user menu</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\">{{this.avatarName}}</span>\r\n </span>\r\n </button>\r\n\r\n <button type=\"button\"\r\n *ngIf=\"!user\"\r\n (click)=\"signin(null)\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">sign in</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\"><i class=\"ms-Icon ms-Icon--Signin\"></i></span>\r\n </span>\r\n </button>\r\n\r\n <div *ngIf=\"userMenuExpanded\"\r\n [ngClass]=\"showUserNameOnHeader ? 'shell-header-profile-dropdown-with-username' : 'shell-header-profile-dropdown'\"\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n aria-labelledby=\"user-menu\">\r\n <lib-nav-links-list\r\n [links]=\"links.profile\"\r\n [active-fragment]=\"activeFragment\"\r\n [link-class]=\"'nav-link-profile'\"\r\n [link-active-class]=\"'nav-link-profile-active'\">\r\n </lib-nav-links-list>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mobile-menu-button-container\">\r\n <!-- Mobile menu button -->\r\n <button type=\"button\"\r\n (click)=\"mobileMenuExpanded = !mobileMenuExpanded\"\r\n class=\"mobile-menu-button\"\r\n aria-controls=\"mobile-menu\"\r\n [attr.aria-expanded]=\"mobileMenuExpanded\">\r\n <span class=\"sr-only\">Open main menu</span>\r\n <!--Heroicon name: outline/menu Menu open: \"hidden\", Menu closed: \"block\"-->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\"\r\n [class]=\"mobileMenuExpanded ? 'hidden':'block h-6 w-6'\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M4 6h16M4 12h16M4 18h16\" />\r\n </svg>\r\n <!--Heroicon name: outline/x Menu open: \"block\", Menu closed: \"hidden\"-->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\"\r\n [class]=\"mobileMenuExpanded ? 'block h-6 w-6':'hidden'\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Mobile menu, show/hide based on menu state. -->\r\n <div class=\"mobile-menu-container\" *ngIf=\"mobileMenuExpanded\" id=\"mobile-menu\">\r\n <lib-nav-links-list\r\n [links]=\"sectionLinks\"\r\n [active-fragment]=\"activeFragment\"\r\n [link-class]=\"'nav-link-mobile'\"\r\n [link-active-class]=\"'nav-link-mobile-active'\"\r\n [container-class]=\"'mobile-menu-link-container'\">\r\n </lib-nav-links-list>\r\n\r\n <div *ngIf=\"!user\">\r\n <a href=\"#\" (click)=\"signin($event)\" class=\"nav-link-mobile\">\r\n <i class=\"ms-Icon ms-Icon--Signin mr-2\"></i>\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\r\n </a>\r\n </div>\r\n\r\n <div class=\"mobile-menu-user-info-container\" *ngIf=\"user\">\r\n <div class=\"mobile-menu-user-info-container-inner\">\r\n <div class=\"flex-shrink-0\">\r\n <span class=\"mobile-menu-avatar-container\">\r\n <span class=\"mobile-menu-avatar-name\">{{ this.avatarName }}</span>\r\n </span>\r\n </div>\r\n <div class=\"ml-3\">\r\n <div class=\"mobile-menu-user-name\">{{ user.profile.name }}</div>\r\n <div class=\"mobile-menu-user-email\">{{ user.profile.email }}</div>\r\n </div>\r\n <button class=\"mobile-menu-rounded-button\">\r\n <span class=\"sr-only\">View notifications</span>\r\n <!-- Heroicon name: outline/bell -->\r\n <svg class=\"mobile-menu-rounded-button-icon-style\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <lib-nav-links-list\r\n [links]=\"links.profile\"\r\n [active-fragment]=\"activeFragment\"\r\n [link-class]=\"'nav-link-mobile'\"\r\n [link-active-class]=\"'nav-link-mobile-active'\"\r\n [container-class]=\"'mobile-menu-link-container'\">\r\n </lib-nav-links-list>\r\n </div>\r\n</nav>\r\n", components: [{ type: NavLinksListComponent, selector: "lib-nav-links-list", inputs: ["links", "active-fragment", "link-class", "link-active-class", "container-class"] }, { type: NotificationsIndicatorComponent, selector: "lib-notifications-indicator" }], directives: [{ type: i1$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
1742
1834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellHeaderComponent, decorators: [{
1743
1835
  type: Component,
1744
1836
  args: [{
@@ -1752,20 +1844,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
1752
1844
  }] }, { type: i1$1.Router, decorators: [{
1753
1845
  type: Inject,
1754
1846
  args: [Router]
1847
+ }] }, { type: i1$1.ActivatedRoute, decorators: [{
1848
+ type: Inject,
1849
+ args: [ActivatedRoute]
1850
+ }] }, { type: undefined, decorators: [{
1851
+ type: Inject,
1852
+ args: [SHELL_CONFIG]
1755
1853
  }] }, { type: undefined, decorators: [{
1756
1854
  type: Inject,
1757
1855
  args: [APP_LINKS]
1758
1856
  }] }]; }, propDecorators: { sectionLinksPath: [{
1759
1857
  type: Input,
1760
1858
  args: ['section-links']
1761
- }], notificationLinksPath: [{
1859
+ }], profileMenuVisible: [{
1762
1860
  type: Input,
1763
- args: ['notification-links']
1764
- }], allNotificationsLinkPath: [{
1861
+ args: ['profile-menu']
1862
+ }], showUserNameOnHeader: [{
1765
1863
  type: Input,
1766
- args: ['all-notifications']
1767
- }], config: [{
1864
+ args: ['show-userName']
1865
+ }], showAlerts: [{
1866
+ type: Input,
1867
+ args: ['show-alerts']
1868
+ }], langs: [{
1768
1869
  type: Input
1870
+ }], currentLang: [{
1871
+ type: Input,
1872
+ args: ['current-lang']
1769
1873
  }], border: [{
1770
1874
  type: Input
1771
1875
  }] } });
@@ -1789,14 +1893,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
1789
1893
  }] }]; } });
1790
1894
 
1791
1895
  class ShellLayoutComponent {
1792
- constructor(router, location, config, componentLoaderFactory) {
1896
+ constructor(document, router, location, config, componentLoaderFactory) {
1897
+ this.document = document;
1793
1898
  this.router = router;
1794
1899
  this.location = location;
1795
1900
  this.config = config;
1796
1901
  this.componentLoaderFactory = componentLoaderFactory;
1797
1902
  this.dynamicComponentHosts = null;
1798
- this.routerSub$ = null;
1799
1903
  this.showRightPaneSM = false;
1904
+ this.routerSub$ = null;
1800
1905
  this.activeConfig = new DefaultShellConfig();
1801
1906
  this.loaded = false;
1802
1907
  if (!config) {
@@ -1857,8 +1962,8 @@ class ShellLayoutComponent {
1857
1962
  }
1858
1963
  }
1859
1964
  }
1860
- ShellLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellLayoutComponent, deps: [{ token: i1$1.Router }, { token: i1.Location }, { token: SHELL_CONFIG }, { token: ComponentLoaderFactory }], target: i0.ɵɵFactoryTarget.Component });
1861
- ShellLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellLayoutComponent, selector: "lib-shell-layout", viewQueries: [{ propertyName: "dynamicComponentHosts", predicate: DynamicComponentHostDirective, descendants: true }], ngImport: i0, template: "<div *ngIf=\"loaded\"\r\n [style.display]=\"!loaded ? 'none':'block'\"\r\n class=\"shell-container active-side-pane\">\r\n <div class=\"shell-header-container\"\r\n *ngIf=\"activeConfig.showHeader\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-header-container-inner-fluid' : 'shell-header-container-inner'\">\r\n\r\n <ng-container *ngIf=\"activeConfig.customHeaderComponent\">\r\n <div appDynamicComponentHost=\"Header\"></div>\r\n </ng-container>\r\n\r\n <lib-shell-header *ngIf=\"!activeConfig.customHeaderComponent\"\r\n [config]=\"activeConfig\"></lib-shell-header>\r\n </div>\r\n </div>\r\n\r\n <main [class]=\"activeConfig.showHeader ? 'shell-content-container' : 'shell-content-container-no-header'\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-content-container-inner-fluid' : 'shell-content-container-inner'\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n </main>\r\n\r\n <div class=\"shell-footer-container\"\r\n *ngIf=\"activeConfig.showFooter\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-footer-container-inner-fluid' : 'shell-footer-container-inner'\">\r\n <ng-container *ngIf=\"activeConfig.customFooterComponent\">\r\n <div appDynamicComponentHost\r\n hostName=\"Footer\"></div>\r\n </ng-container>\r\n <lib-shell-footer *ngIf=\"!activeConfig.customFooterComponent\"></lib-shell-footer>\r\n </div>\r\n </div>\r\n\r\n <lib-side-pane #rightPane>\r\n <router-outlet name=\"rightpane\"\r\n (activate)=\"rightPane.onSidePaneActivated($event)\"\r\n (deactivate)=\"rightPane.onSidePaneDeactivated($event)\"></router-outlet>\r\n </lib-side-pane>\r\n\r\n <lib-toaster-container></lib-toaster-container>\r\n\r\n</div>\r\n", components: [{ type: ShellHeaderComponent, selector: "lib-shell-header", inputs: ["section-links", "notification-links", "all-notifications", "config", "border"] }, { type: ShellFooterComponent, selector: "lib-shell-footer" }, { type: SidePaneComponent, selector: "lib-side-pane", inputs: ["visible"], outputs: ["onComplete"] }, { type: ToasterContainerComponent, selector: "lib-toaster-container" }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentHostDirective, selector: "[appDynamicComponentHost]", inputs: ["hostName"] }, { type: i1$1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
1965
+ ShellLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellLayoutComponent, deps: [{ token: DOCUMENT }, { token: i1$1.Router }, { token: i1.Location }, { token: SHELL_CONFIG }, { token: ComponentLoaderFactory }], target: i0.ɵɵFactoryTarget.Component });
1966
+ ShellLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellLayoutComponent, selector: "lib-shell-layout", viewQueries: [{ propertyName: "dynamicComponentHosts", predicate: DynamicComponentHostDirective, descendants: true }], ngImport: i0, template: "<div *ngIf=\"loaded\" [style.display]=\"!loaded ? 'none':'block'\" class=\"shell-container active-side-pane\">\r\n\r\n <div class=\"shell-header-container\" *ngIf=\"activeConfig.showHeader\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-header-container-inner-fluid' : 'shell-header-container-inner'\">\r\n <ng-container *ngIf=\"activeConfig.customHeaderComponent\">\r\n <div appDynamicComponentHost =\"Header\"></div>\r\n </ng-container>\r\n <lib-shell-header *ngIf=\"!activeConfig.customHeaderComponent\"\r\n [langs]=\"activeConfig.langs\"\r\n [show-userName]=\"activeConfig.showUserNameOnHeader\"\r\n [show-alerts]=\"activeConfig.showAlertsOnHeader\"></lib-shell-header>\r\n </div>\r\n </div>\r\n\r\n <main [class]=\"activeConfig.showHeader ? 'shell-content-container' : 'shell-content-container-no-header'\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-content-container-inner-fluid' : 'shell-content-container-inner'\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n </main>\r\n\r\n <div class=\"shell-footer-container\" *ngIf=\"activeConfig.showFooter\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-footer-container-inner-fluid' : 'shell-footer-container-inner'\">\r\n <ng-container *ngIf=\"activeConfig.customFooterComponent\">\r\n <div appDynamicComponentHost hostName=\"Footer\"></div>\r\n </ng-container>\r\n <lib-shell-footer *ngIf=\"!activeConfig.customFooterComponent\"></lib-shell-footer>\r\n </div>\r\n </div>\r\n\r\n <lib-side-pane #rightPane>\r\n <router-outlet name=\"rightpane\" (activate)=\"rightPane.onSidePaneActivated($event)\" (deactivate)=\"rightPane.onSidePaneDeactivated($event)\"></router-outlet>\r\n </lib-side-pane>\r\n\r\n <lib-toaster-container></lib-toaster-container>\r\n\r\n</div>\r\n", components: [{ type: ShellHeaderComponent, selector: "lib-shell-header", inputs: ["section-links", "profile-menu", "show-userName", "show-alerts", "langs", "current-lang", "border"] }, { type: ShellFooterComponent, selector: "lib-shell-footer" }, { type: SidePaneComponent, selector: "lib-side-pane", inputs: ["visible"], outputs: ["onComplete"] }, { type: ToasterContainerComponent, selector: "lib-toaster-container" }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentHostDirective, selector: "[appDynamicComponentHost]", inputs: ["hostName"] }, { type: i1$1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
1862
1967
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellLayoutComponent, decorators: [{
1863
1968
  type: Component,
1864
1969
  args: [{
@@ -1866,7 +1971,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
1866
1971
  selector: 'lib-shell-layout',
1867
1972
  templateUrl: './shell-layout.component.html',
1868
1973
  }]
1869
- }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1.Location }, { type: undefined, decorators: [{
1974
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1975
+ type: Inject,
1976
+ args: [DOCUMENT]
1977
+ }] }, { type: i1$1.Router }, { type: i1.Location }, { type: undefined, decorators: [{
1870
1978
  type: Inject,
1871
1979
  args: [SHELL_CONFIG]
1872
1980
  }] }, { type: ComponentLoaderFactory }]; }, propDecorators: { dynamicComponentHosts: [{
@@ -1995,11 +2103,9 @@ class ModelViewLayoutComponent {
1995
2103
  ngOnInit() {
1996
2104
  }
1997
2105
  onSidePaneActivated($event) {
1998
- //console.log('onSidePaneActivated', $event);
1999
2106
  this.showRightPaneSM = true;
2000
2107
  }
2001
2108
  onSidePaneDeactivated($event) {
2002
- //console.log('onSidePaneActivated', $event);
2003
2109
  this.showRightPaneSM = false;
2004
2110
  }
2005
2111
  closeSidePane() {
@@ -2126,8 +2232,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
2126
2232
  }] } });
2127
2233
 
2128
2234
  class FormLayoutComponent {
2129
- constructor(_router) {
2130
- this._router = _router;
2235
+ constructor(router$) {
2236
+ this.router$ = router$;
2131
2237
  this.title = null;
2132
2238
  // tslint:disable-next-line:no-input-rename
2133
2239
  this.searchPlaceholder = 'αναζήτηση';
@@ -2139,7 +2245,6 @@ class FormLayoutComponent {
2139
2245
  // tslint:disable-next-line:no-output-on-prefix
2140
2246
  this.onSearch = new EventEmitter();
2141
2247
  this.onComplete = new EventEmitter();
2142
- this.showRightPaneSM = false;
2143
2248
  }
2144
2249
  ngOnInit() {
2145
2250
  var _a;
@@ -2168,10 +2273,10 @@ class FormLayoutComponent {
2168
2273
  }
2169
2274
  routerLinkActionClick(action, relative = false) {
2170
2275
  if (action.outlet) {
2171
- this._router.navigate(['', { outlets: { formRightPane: action.link } }]);
2276
+ this.router$.navigate(['', { outlets: { formRightPane: action.link } }]);
2172
2277
  }
2173
2278
  else {
2174
- this._router.navigate([action.link]);
2279
+ this.router$.navigate([action.link]);
2175
2280
  }
2176
2281
  }
2177
2282
  }
@@ -2308,7 +2413,7 @@ class PageNotFoundComponent {
2308
2413
  }
2309
2414
  }
2310
2415
  PageNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: PageNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2311
- PageNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: PageNotFoundComponent, selector: "lib-page-not-found", ngImport: i0, template: "<lib-view-layout [show-header]=\"false\"\r\n title=\"404 - \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5!\">\r\n <div class=\"bg-gray-600 view-container\">\r\n <div class=\"max-w-2xl mx-auto text-center py-16 px-4 sm:py-20 sm:px-6 lg:px-8\">\r\n <h2 class=\"text-3xl font-extrabold text-white sm:text-4xl\">\r\n <span class=\"block\">404</span>\r\n </h2>\r\n <p class=\"mt-4 text-lg leading-6 text-gray-200\">\u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B7 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03C0\u03BF\u03C5 \u03B6\u03B7\u03C4\u03AE\u03C3\u03B1\u03C4\u03B5!</p>\r\n <a href=\"/\"\r\n class=\"mt-8 inline-flex items-center justify-center px-5 py-3 border border-transparent text-base font-sm rounded-sm text-gray-600 bg-white hover:bg-gray-50 sm:w-auto\">\r\n \u03C0\u03B1\u03C4\u03AE\u03C3\u03C4\u03B5 \u03B5\u03B4\u03CE \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03C3\u03C4\u03C1\u03AD\u03C8\u03B5\u03C4\u03B5\r\n </a>\r\n </div>\r\n </div>\r\n</lib-view-layout>", components: [{ type: ViewLayoutComponent, selector: "lib-view-layout", inputs: ["show-header", "fluid", "title", "icon", "actions", "busy", "search-placeholder", "view", "meta-items"], outputs: ["onAction", "onSearch"] }] });
2416
+ PageNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: PageNotFoundComponent, selector: "lib-page-not-found", ngImport: i0, template: "<lib-view-layout [show-header]=\"false\" title=\"404 - \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5!\">\r\n <div class=\"text-gray-900\">\r\n <div class=\"max-w-4xl mx-auto text-center py-16 px-4 sm:py-20 sm:px-6 lg:px-8\">\r\n <h2 class=\"text-3xl font-extrabold sm:text-4xl\">\r\n <span class=\"block\">404</span>\r\n </h2>\r\n <p class=\"mt-4 text-lg leading-6 text-gray-800\">\u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B7 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03C0\u03BF\u03C5 \u03B6\u03B7\u03C4\u03AE\u03C3\u03B1\u03C4\u03B5!</p>\r\n <a href=\"/\"\r\n class=\"mt-8 inline-flex items-center justify-center px-5 py-3 border border-transparent text-base font-sm rounded-sm text-gray-600 bg-white hover:bg-gray-50 sm:w-auto\">\r\n \u03C0\u03B1\u03C4\u03AE\u03C3\u03C4\u03B5 \u03B5\u03B4\u03CE \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03C3\u03C4\u03C1\u03AD\u03C8\u03B5\u03C4\u03B5\r\n </a>\r\n </div>\r\n </div>\r\n</lib-view-layout>\r\n", components: [{ type: ViewLayoutComponent, selector: "lib-view-layout", inputs: ["show-header", "fluid", "title", "icon", "actions", "busy", "search-placeholder", "view", "meta-items"], outputs: ["onAction", "onSearch"] }] });
2312
2417
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: PageNotFoundComponent, decorators: [{
2313
2418
  type: Component,
2314
2419
  args: [{
@@ -2412,28 +2517,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
2412
2517
  }]
2413
2518
  }] });
2414
2519
 
2415
- const defaultError = 'Something went wrong';
2416
- class ObsWithStatusPipe {
2417
- transform(val) {
2418
- return val.pipe(map((value) => {
2419
- return {
2420
- loading: value.type === 'start',
2421
- error: value.type === 'error' ? defaultError : '',
2422
- value: value.type ? value.value : value,
2423
- };
2424
- }), startWith({ loading: true }), catchError(error => of({ loading: false, error: typeof error === 'string' ? error : defaultError })));
2425
- }
2426
- }
2427
- ObsWithStatusPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ObsWithStatusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2428
- ObsWithStatusPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ObsWithStatusPipe, name: "obsWithStatus", pure: false });
2429
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ObsWithStatusPipe, decorators: [{
2430
- type: Pipe,
2431
- args: [{
2432
- name: 'obsWithStatus',
2433
- pure: false
2434
- }]
2435
- }] });
2436
-
2437
2520
  class BaseListComponent {
2438
2521
  constructor(route$, router$) {
2439
2522
  this.route$ = route$;
@@ -3104,7 +3187,8 @@ IndiceComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
3104
3187
  // pipes
3105
3188
  AddressPipe,
3106
3189
  DurationFormatPipe,
3107
- ObsWithStatusPipe], imports: [CommonModule,
3190
+ NavLinksListComponent,
3191
+ NotificationsIndicatorComponent], imports: [CommonModule,
3108
3192
  RouterModule,
3109
3193
  IndiceAuthModule], exports: [ClickOutsideDirective,
3110
3194
  DropDownMenuComponent,
@@ -3131,7 +3215,6 @@ IndiceComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
3131
3215
  UnauthorizedComponent,
3132
3216
  AddressPipe,
3133
3217
  DurationFormatPipe,
3134
- ObsWithStatusPipe,
3135
3218
  CollapsiblePanelComponent,
3136
3219
  SidePaneComponent,
3137
3220
  DatepickerComponent,
@@ -3188,7 +3271,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
3188
3271
  // pipes
3189
3272
  AddressPipe,
3190
3273
  DurationFormatPipe,
3191
- ObsWithStatusPipe
3274
+ NavLinksListComponent,
3275
+ NotificationsIndicatorComponent
3192
3276
  ],
3193
3277
  imports: [
3194
3278
  CommonModule,
@@ -3221,7 +3305,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
3221
3305
  UnauthorizedComponent,
3222
3306
  AddressPipe,
3223
3307
  DurationFormatPipe,
3224
- ObsWithStatusPipe,
3225
3308
  CollapsiblePanelComponent,
3226
3309
  SidePaneComponent,
3227
3310
  DatepickerComponent,
@@ -3239,5 +3322,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImpor
3239
3322
  * Generated bundle index. Do not edit.
3240
3323
  */
3241
3324
 
3242
- export { APP_LINKS, AddressPipe, AuthCallbackComponent, AuthRenewComponent, AvatarInitialsComponent, BaseListComponent, ClickOutsideDirective, CollapsiblePanelComponent, ComponentLoaderFactory, DatepickerComponent, DefaultShellConfig, DropDownMenuComponent, DurationFormatPipe, ErrorComponent, ExternalNavLink, FormLayoutComponent, FragmentNavLink, HeaderMetaItem, Icons, IndiceComponentsModule, KpiTileComponent, ListColumnComponent, ListDetailsSectionComponent, ListTileComponent, ListViewComponent, ListViewEmptyStateComponent, ListViewType, LoggedOutComponent, MODAL_CONFIG_DEFAULT_OVERRIDE, MenuOption, Modal, ModalOptions, ModalService, ModelViewLayoutComponent, NULL_TOAST, NavLink, NotificationNavLink, ObsWithStatusPipe, PageNotFoundComponent, PagerComponent, RouterViewAction, SCREEN_SIZE, SHELL_CONFIG, ShellFooterComponent, ShellHeaderComponent, ShellLayoutComponent, SidePaneComponent, SidePaneOverlayType, SidePaneSize, SideViewLayoutComponent, SkeletonLoaderComponent, SwitchViewAction, ToastType, ToasterComponent, ToasterContainerComponent, ToasterService, ToggleComponent, UnauthorizedComponent, ViewAction, ViewLayoutComponent };
3325
+ export { APP_LINKS, APP_NOTIFICATIONS, AddressPipe, AuthCallbackComponent, AuthRenewComponent, AvatarInitialsComponent, BaseListComponent, ClickOutsideDirective, CollapsiblePanelComponent, ComponentLoaderFactory, DatepickerComponent, DefaultShellConfig, DropDownMenuComponent, DurationFormatPipe, ErrorComponent, ExternalNavLink, FormLayoutComponent, FragmentNavLink, HeaderMetaItem, Icons, IndiceComponentsModule, KpiTileComponent, ListColumnComponent, ListDetailsSectionComponent, ListTileComponent, ListViewComponent, ListViewEmptyStateComponent, ListViewType, LoggedOutComponent, MODAL_CONFIG_DEFAULT_OVERRIDE, MenuOption, Modal, ModalOptions, ModalService, ModelViewLayoutComponent, NULL_TOAST, NavLink, NavLinksListComponent, NotificationNavLink, PageNotFoundComponent, PagerComponent, RouterViewAction, SCREEN_SIZE, SHELL_CONFIG, ShellFooterComponent, ShellHeaderComponent, ShellLayoutComponent, SidePaneComponent, SidePaneOverlayType, SidePaneSize, SideViewLayoutComponent, SkeletonLoaderComponent, SwitchViewAction, ToastType, ToasterComponent, ToasterContainerComponent, ToasterService, ToggleComponent, UnauthorizedComponent, ViewAction, ViewLayoutComponent };
3243
3326
  //# sourceMappingURL=indice-ng-components.js.map