@indice/ng-components 0.2.134-beta → 0.2.135

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 (28) hide show
  1. package/_styles.css +25 -72
  2. package/bundles/indice-ng-components.umd.js +212 -118
  3. package/bundles/indice-ng-components.umd.js.map +1 -1
  4. package/esm2015/lib/controls/nav-links-list/nav-links-list.component.js +40 -0
  5. package/esm2015/lib/controls/notifications-indicator/notifications-indicator.component.js +71 -0
  6. package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +70 -68
  7. package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +11 -6
  8. package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +5 -6
  9. package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +1 -3
  10. package/esm2015/lib/ng-components.module.js +7 -6
  11. package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +2 -2
  12. package/esm2015/lib/tokens.js +2 -1
  13. package/esm2015/lib/types.js +10 -7
  14. package/esm2015/public-api.js +2 -2
  15. package/fesm2015/indice-ng-components.js +189 -105
  16. package/fesm2015/indice-ng-components.js.map +1 -1
  17. package/lib/controls/nav-links-list/nav-links-list.component.d.ts +15 -0
  18. package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +20 -0
  19. package/lib/layouts/shell/shell-header/shell-header.component.d.ts +21 -24
  20. package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +3 -2
  21. package/lib/layouts/views/form-layout/form-layout.component.d.ts +2 -3
  22. package/lib/ng-components.module.d.ts +6 -5
  23. package/lib/tokens.d.ts +1 -0
  24. package/lib/types.d.ts +17 -10
  25. package/package.json +1 -1
  26. package/public-api.d.ts +1 -1
  27. package/esm2015/lib/pipes/obs-with-status.pipe.js +0 -26
  28. package/lib/pipes/obs-with-status.pipe.d.ts +0 -13
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/router'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@indice/ng-auth')) :
3
3
  typeof define === 'function' && define.amd ? define('@indice/ng-components', ['exports', '@angular/core', '@angular/common', '@angular/router', '@angular/forms', 'rxjs', 'rxjs/operators', '@indice/ng-auth'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.indice = global.indice || {}, global.indice['ng-components'] = {}), global.ng.core, global.ng.common, global.ng.router, global.ng.forms, global.rxjs, global.rxjs.operators, global.i2));
5
- }(this, (function (exports, i0, i1, i1$1, forms, rxjs, operators, i2) { 'use strict';
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.indice = global.indice || {}, global.indice["ng-components"] = {}), global.ng.core, global.ng.common, global.ng.router, global.ng.forms, global.rxjs, global.rxjs.operators, global.i2));
5
+ })(this, (function (exports, i0, i1, i1$1, forms, rxjs, operators, i2) { 'use strict';
6
6
 
7
7
  function _interopNamespace(e) {
8
8
  if (e && e.__esModule) return e;
@@ -13,14 +13,12 @@
13
13
  var d = Object.getOwnPropertyDescriptor(e, k);
14
14
  Object.defineProperty(n, k, d.get ? d : {
15
15
  enumerable: true,
16
- get: function () {
17
- return e[k];
18
- }
16
+ get: function () { return e[k]; }
19
17
  });
20
18
  }
21
19
  });
22
20
  }
23
- n['default'] = e;
21
+ n["default"] = e;
24
22
  return Object.freeze(n);
25
23
  }
26
24
 
@@ -255,10 +253,16 @@
255
253
  r[k] = a[j];
256
254
  return r;
257
255
  }
258
- function __spreadArray(to, from) {
259
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
260
- to[j] = from[i];
261
- return to;
256
+ function __spreadArray(to, from, pack) {
257
+ if (pack || arguments.length === 2)
258
+ for (var i = 0, l = from.length, ar; i < l; i++) {
259
+ if (ar || !(i in from)) {
260
+ if (!ar)
261
+ ar = Array.prototype.slice.call(from, 0, i);
262
+ ar[i] = from[i];
263
+ }
264
+ }
265
+ return to.concat(ar || Array.prototype.slice.call(from));
262
266
  }
263
267
  function __await(v) {
264
268
  return this instanceof __await ? (this.v = v, this) : new __await(v);
@@ -659,38 +663,44 @@
659
663
  Icons.Details = ' ms-Icon ms-Icon--AccountActivity';
660
664
 
661
665
  var NavLink = /** @class */ (function () {
662
- function NavLink(text, path, exact, external, icon, isRead, creationDate) {
666
+ function NavLink(text, path, exact, external, icon, data) {
663
667
  if (exact === void 0) { exact = false; }
664
668
  if (external === void 0) { external = false; }
665
- this.isRead = false;
669
+ this.type = 'router';
666
670
  this.text = text;
667
671
  this.path = path;
668
672
  this.exact = exact;
669
673
  this.external = external;
670
674
  this.icon = icon;
671
- this.isRead = isRead;
672
- this.creationDate = creationDate;
675
+ this.data = data;
673
676
  }
674
677
  return NavLink;
675
678
  }());
676
679
  var ExternalNavLink = /** @class */ (function (_super) {
677
680
  __extends(ExternalNavLink, _super);
678
681
  function ExternalNavLink(text, path, openInNewTab, icon) {
679
- return _super.call(this, text, path, true, openInNewTab, icon) || this;
682
+ var _this = _super.call(this, text, path, true, openInNewTab, icon) || this;
683
+ _this.type = 'external';
684
+ return _this;
680
685
  }
681
686
  return ExternalNavLink;
682
687
  }(NavLink));
683
688
  var FragmentNavLink = /** @class */ (function (_super) {
684
689
  __extends(FragmentNavLink, _super);
685
690
  function FragmentNavLink(text, path, icon) {
686
- return _super.call(this, text, path, true, true, icon) || this;
691
+ var _this = _super.call(this, text, path, true, true, icon) || this;
692
+ _this.type = 'fragment';
693
+ return _this;
687
694
  }
688
695
  return FragmentNavLink;
689
696
  }(NavLink));
690
697
  var NotificationNavLink = /** @class */ (function (_super) {
691
698
  __extends(NotificationNavLink, _super);
692
699
  function NotificationNavLink(text, path, isRead, creationDate) {
693
- return _super.call(this, text, path, true, false, undefined, isRead, creationDate) || this;
700
+ var _this = _super.call(this, text, path, true, false, undefined) || this;
701
+ _this.isRead = isRead;
702
+ _this.creationDate = creationDate;
703
+ return _this;
694
704
  }
695
705
  return NotificationNavLink;
696
706
  }(NavLink));
@@ -756,7 +766,7 @@
756
766
  this.appLogoAlt = 'your app name here';
757
767
  this.showHeader = true;
758
768
  this.showUserNameOnHeader = false;
759
- this.showNotifications = false;
769
+ this.showAlertsOnHeader = false;
760
770
  this.showFooter = true;
761
771
  this.fluid = false;
762
772
  }
@@ -1813,7 +1823,45 @@
1813
1823
  type: i0.Output
1814
1824
  }] } });
1815
1825
 
1826
+ var NavLinksListComponent = /** @class */ (function () {
1827
+ function NavLinksListComponent() {
1828
+ // tslint:disable-next-line:no-input-rename
1829
+ this.navLinkClass = 'nav-link';
1830
+ // tslint:disable-next-line:no-input-rename
1831
+ this.navLinkActiveClass = 'nav-link-active';
1832
+ // tslint:disable-next-line:no-input-rename
1833
+ this.containerClass = '';
1834
+ }
1835
+ NavLinksListComponent.prototype.ngOnInit = function () {
1836
+ };
1837
+ return NavLinksListComponent;
1838
+ }());
1839
+ NavLinksListComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: NavLinksListComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
1840
+ NavLinksListComponent.ɵcmp = i0__namespace.ɵɵ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__namespace, template: "<div [class]=\"containerClass\">\r\n <ng-container *ngFor=\"let link of links | async\">\r\n <ng-container [ngSwitch]=\"link.type\">\r\n <a *ngSwitchCase=\"'router'\"\r\n href=\"#\"\r\n [routerLink]=\"[link.path]\"\r\n [routerLinkActive]=\"navLinkActiveClass\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n [class]=\"navLinkClass\">\r\n {{ link.text }}\r\n </a>\r\n <a *ngSwitchCase=\"'external'\"\r\n [href]=\"link.path\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\"\r\n class=\"nav-link\">\r\n {{ link.text }}\r\n </a>\r\n <a *ngSwitchCase=\"'fragment'\"\r\n routerLink=\".\"\r\n [fragment]=\"link.path\"\r\n [class.active]=\"(activeFragment | async) === link.path\"\r\n class=\"nav-link\">\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n", directives: [{ type: i1__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1__namespace$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i1__namespace$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }], pipes: { "async": i1__namespace.AsyncPipe } });
1841
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: NavLinksListComponent, decorators: [{
1842
+ type: i0.Component,
1843
+ args: [{
1844
+ selector: 'lib-nav-links-list',
1845
+ templateUrl: './nav-links-list.component.html'
1846
+ }]
1847
+ }], ctorParameters: function () { return []; }, propDecorators: { links: [{
1848
+ type: i0.Input
1849
+ }], activeFragment: [{
1850
+ type: i0.Input,
1851
+ args: ['active-fragment']
1852
+ }], navLinkClass: [{
1853
+ type: i0.Input,
1854
+ args: ['link-class']
1855
+ }], navLinkActiveClass: [{
1856
+ type: i0.Input,
1857
+ args: ['link-active-class']
1858
+ }], containerClass: [{
1859
+ type: i0.Input,
1860
+ args: ['container-class']
1861
+ }] } });
1862
+
1816
1863
  var APP_LINKS = new i0.InjectionToken('APP_LINKS');
1864
+ var APP_NOTIFICATIONS = new i0.InjectionToken('APP_NOTIFICATIONS');
1817
1865
  var SHELL_CONFIG = new i0.InjectionToken('SHELL_CONFIG');
1818
1866
 
1819
1867
  var DynamicComponentHostDirective = /** @class */ (function () {
@@ -2067,104 +2115,161 @@
2067
2115
  args: [{ providedIn: 'root' }]
2068
2116
  }], ctorParameters: function () { return [{ type: i0__namespace.ComponentFactoryResolver }, { type: i0__namespace.Injector }, { type: i0__namespace.ApplicationRef }]; } });
2069
2117
 
2118
+ var NotificationsIndicatorComponent = /** @class */ (function () {
2119
+ function NotificationsIndicatorComponent(notifications) {
2120
+ this.notifications = notifications;
2121
+ this.menuExpanded = false;
2122
+ this.unreadCount = 0;
2123
+ this.items = [];
2124
+ this.inboxAction = undefined;
2125
+ this.newArrival = false;
2126
+ }
2127
+ NotificationsIndicatorComponent.prototype.ngOnDestroy = function () {
2128
+ if (this.notificationsSub$) {
2129
+ this.notificationsSub$.unsubscribe();
2130
+ }
2131
+ };
2132
+ NotificationsIndicatorComponent.prototype.ngOnInit = function () {
2133
+ var _this = this;
2134
+ this.notificationsSub$ = this.notifications.messages.subscribe(function (result) {
2135
+ if (result.items) {
2136
+ _this.newArrival = true;
2137
+ _this.unreadCount = result.count;
2138
+ _this.items = result.items;
2139
+ setTimeout(function () { _this.newArrival = false; }, 1000);
2140
+ }
2141
+ });
2142
+ };
2143
+ NotificationsIndicatorComponent.prototype.toggleMenu = function () {
2144
+ this.menuExpanded = !this.menuExpanded;
2145
+ this.unreadCount = 0;
2146
+ };
2147
+ NotificationsIndicatorComponent.prototype.doInboxAction = function () {
2148
+ if (this.notifications.inboxAction) {
2149
+ this.notifications.inboxAction();
2150
+ }
2151
+ else {
2152
+ this.menuExpanded = true;
2153
+ }
2154
+ this.unreadCount = 0;
2155
+ };
2156
+ // this.notificationsSub$ = this.links.notifications?.pipe(map(result => {
2157
+ // this.allItemsLink = result.allNotifications;
2158
+ // this.items = result.items;
2159
+ // this.unreadCount = result.count;
2160
+ // }));
2161
+ // [this.notificationsLinksPath] as Observable<NotificationNavLink[]>;
2162
+ // this.allNotificationsLink = this.links[this.allNotificationsLinkPath] as Observable<NavLink>;
2163
+ // this.unreadNotificationsCountObs = this.links[this.notificationsCounterLinksPath] as Observable<number>;
2164
+ // this.getUnreadNotificationsCount();
2165
+ // tslint:disable-next-line:typedef
2166
+ NotificationsIndicatorComponent.prototype.onClickOutside = function ($event) {
2167
+ this.menuExpanded = false;
2168
+ };
2169
+ return NotificationsIndicatorComponent;
2170
+ }());
2171
+ NotificationsIndicatorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: NotificationsIndicatorComponent, deps: [{ token: APP_NOTIFICATIONS }], target: i0__namespace.ɵɵFactoryTarget.Component });
2172
+ NotificationsIndicatorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: NotificationsIndicatorComponent, selector: "lib-notifications-indicator", ngImport: i0__namespace, template: "<div class=\"relative\"\r\n(clickOutside)=\"onClickOutside($event)\">\r\n <!-- Notifications Button -->\r\n <button type=\"button\"\r\n (click)=\"doInboxAction()\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\">\r\n <span class=\"sr-only\">View notifications</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\">\r\n <i class=\"ms-Icon\"\r\n [class.ms-Icon--MessageFill]=\"unreadCount > 0\"\r\n [class.text-sky-400]=\"unreadCount > 0\"\r\n [class.animate-notification]=\"newArrival\"\r\n [class.ms-Icon--Message]=\"unreadCount === 0\">\r\n </i>\r\n </span>\r\n <span\r\n *ngIf=\"unreadCount > 0\"\r\n [class.animate-pulse]=\"newArrival\"\r\n class=\"absolute top-0 right-0 inline-flex items-center justify-center -mt-1 ml-1 text-xs leading-none text-gray-100 ordinal\">\r\n {{ unreadCount }}\r\n </span>\r\n </span>\r\n </button>\r\n\r\n <!-- Notifications dropdown -->\r\n <div *ngIf=\"menuExpanded\" class=\"header-notifications-dropdown-with-username\" role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"messages-menu\">\r\n <div class=\"max-h-64 overflow-y-auto notification-messages min-h\">\r\n <ng-container *ngIf=\"!items; else messagesDropDown\" class=\"py-5\">\r\n <div class=\"notifications-nav-link hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\r\n </ng-container>\r\n <ng-template #messagesDropDown>\r\n <ul class=\"pr-1.5\">\r\n <ng-container *ngIf=\"items; else loading\">\r\n <ng-container *ngIf=\"items.length <= 0\" class=\"py-5\">\r\n <div class=\"notifications-nav-link hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\r\n </ng-container>\r\n <ng-container *ngFor=\"let message of items\">\r\n <li class=\"mb-2\" [ngClass]=\"{ 'border-l-2 border-blue-500 bg-blue-50 hover:bg-blue-50': !message.data.isRead }\">\r\n <div class=\"flex justify-between\">\r\n <div class=\"flex-grow\">\r\n <a\r\n [routerLink]=\"message.path\"\r\n class=\"notifications-nav-link grid\"\r\n [ngClass]=\"!message.data.isRead ? ' hover:bg-blue-50' : 'border-b border-gray-100'\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <div class=\"font-thin tracking-tighter\">\r\n {{ message.data.creationDate | date: \"EEE, d MMMM\" }}\r\n </div>\r\n <div class=\"font-bold\">\r\n {{ message.data.text }}\r\n </div>\r\n </div>\r\n </a>\r\n </div>\r\n </div>\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 </ul>\r\n </ng-template>\r\n </div>\r\n <div class=\"p-1 rounded-sm\">\r\n <a [routerLink]=\"'/messages'\">\r\n <button type=\"button\" class=\"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", styles: [".notifications-nav-link{@apply block py-3 pl-3 pr-2 text-xs text-gray-700 hover:bg-gray-50;}.header-notifications{@apply flex gap-3 items-center;}.header-notifications-dropdown-button{@apply max-w-xs focus:outline-none rounded-full flex items-center text-sm ring-1 ring-blue-300 focus:ring-offset-1 focus:ring-offset-blue-800 focus:ring-blue-400 transition ease-in duration-100;}.header-notifications-dropdown{@apply z-50 origin-top-right absolute right-0 pt-3 pl-2 mt-2 w-80 rounded-sm shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none;}.header-notifications-dropdown-with-username{@apply z-50 origin-top-right absolute right-0 pt-3 pl-1.5 mt-1 w-80 rounded-sm shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none;}.header-notifications-dropdown-view-all-button{@apply items-center align-text-bottom font-medium w-full px-2.5 py-2.5 text-xs text-gray-600 focus:outline-none;}.notification-messages::-webkit-scrollbar{width:7px;height:7px;background:transparent;cursor:pointer}.notification-messages::-webkit-scrollbar-thumb{@apply bg-gray-600;}.notification-messages::-webkit-scrollbar-thumb:hover{@apply bg-gray-700;}\n"], directives: [{ type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i1__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1__namespace$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }], pipes: { "date": i1__namespace.DatePipe } });
2173
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: NotificationsIndicatorComponent, decorators: [{
2174
+ type: i0.Component,
2175
+ args: [{
2176
+ selector: 'lib-notifications-indicator',
2177
+ templateUrl: './notifications-indicator.component.html',
2178
+ styleUrls: ['./notifications-indicator.component.scss']
2179
+ }]
2180
+ }], ctorParameters: function () {
2181
+ return [{ type: undefined, decorators: [{
2182
+ type: i0.Inject,
2183
+ args: [APP_NOTIFICATIONS]
2184
+ }] }];
2185
+ } });
2186
+
2070
2187
  var ShellHeaderComponent = /** @class */ (function () {
2071
- function ShellHeaderComponent(authService, router, links) {
2188
+ function ShellHeaderComponent(authService, router, route, config, links) {
2072
2189
  this.authService = authService;
2073
2190
  this.router = router;
2191
+ this.route = route;
2192
+ this.config = config;
2074
2193
  this.links = links;
2075
2194
  // tslint:disable-next-line:no-input-rename
2076
2195
  this.sectionLinksPath = 'main';
2077
- this.notificationLinksPath = 'notifications';
2078
- this.allNotificationsLinkPath = 'allNotifications';
2079
- this.border = true;
2080
- this.showNotifications = false;
2081
- this.showUserNameOnHeader = false;
2082
- this.notificationsMenuVisible = true;
2196
+ // tslint:disable-next-line:no-input-rename
2083
2197
  this.profileMenuVisible = true;
2198
+ // tslint:disable-next-line:no-input-rename
2199
+ this.showUserNameOnHeader = false;
2200
+ // tslint:disable-next-line:no-input-rename
2201
+ this.showAlerts = false;
2202
+ this.border = true;
2084
2203
  this.sectionLinks = rxjs.of([]);
2085
- this.notificationLinks = rxjs.of([]);
2086
- this.allNotificationsLink = rxjs.of();
2087
2204
  this.mobileMenuExpanded = false;
2088
2205
  this.userMenuExpanded = false;
2089
- this.notificationsMenuExpanded = false;
2090
- this.routeSubject = new rxjs.Observable();
2091
2206
  this.routerSub$ = null;
2092
2207
  this.userSub$ = null;
2093
2208
  this.statusSub$ = null;
2094
2209
  this.user = null;
2095
2210
  this.avatarName = null;
2211
+ this.activeFragment = null;
2212
+ this.routeSubject = this.router.events.pipe(operators.filter(function (event) { return event instanceof i1$1.NavigationStart; }));
2096
2213
  }
2097
- ShellHeaderComponent.prototype.ngOnDestroy = function () {
2098
- if (this.routerSub$) {
2099
- this.routerSub$.unsubscribe();
2100
- }
2101
- // TODO: check authenticated user here before we start polling server status
2102
- if (this.statusSub$) {
2103
- this.statusSub$.unsubscribe();
2104
- }
2105
- if (this.userSub$) {
2106
- this.userSub$.unsubscribe();
2107
- }
2108
- };
2109
2214
  ShellHeaderComponent.prototype.ngOnInit = function () {
2110
2215
  var _this = this;
2111
- var _a, _b;
2112
- this.showNotifications = (_a = this.config) === null || _a === void 0 ? void 0 : _a.showNotifications;
2113
- this.showUserNameOnHeader = (_b = this.config) === null || _b === void 0 ? void 0 : _b.showUserNameOnHeader;
2216
+ this.activeFragment = this.route.fragment.pipe(operators.share());
2114
2217
  this.sectionLinks = this.links[this.sectionLinksPath];
2115
- this.notificationLinks = this.links[this.notificationLinksPath];
2116
- this.allNotificationsLink = this.links[this.allNotificationsLinkPath];
2117
- this.routerSub$ = this.router.events.pipe(operators.filter(function (event) { return event instanceof i1$1.NavigationStart; })).subscribe(function (event) {
2218
+ this.routerSub$ = this.routeSubject.subscribe(function (event) {
2118
2219
  _this.mobileMenuExpanded = false;
2119
2220
  _this.userMenuExpanded = false;
2120
- _this.notificationsMenuExpanded = false;
2121
2221
  });
2122
2222
  this.authService.loadUser().subscribe(function (user) {
2123
- console.log(user);
2124
2223
  _this.setCurrentUser(user);
2125
2224
  }, function (error) {
2126
- console.log(error);
2225
+ console.error(error);
2127
2226
  });
2128
2227
  // Detect user changes and display / or not user info accordingly...
2129
2228
  this.userSub$ = this.authService.user$.subscribe(function (user) {
2130
2229
  // console.log('ShellHeaderComponent user subscription');
2131
2230
  _this.setCurrentUser(user);
2132
2231
  });
2232
+ // set current lang if no current value from langs if any
2233
+ if (!this.currentLang && this.langs && this.langs.length > 0) {
2234
+ this.setCurrentLang(this.langs[0]);
2235
+ }
2133
2236
  };
2134
- ShellHeaderComponent.prototype.setCurrentUser = function (user) {
2135
- var _a, _b;
2136
- this.user = user;
2137
- if (this.user && this.user.profile) {
2138
- 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));
2139
- console.log('load user', this.avatarName);
2237
+ ShellHeaderComponent.prototype.ngOnDestroy = function () {
2238
+ if (this.routerSub$) {
2239
+ this.routerSub$.unsubscribe();
2240
+ }
2241
+ // TODO: check authenticated user here before we start polling server status
2242
+ if (this.statusSub$) {
2243
+ this.statusSub$.unsubscribe();
2244
+ }
2245
+ if (this.userSub$) {
2246
+ this.userSub$.unsubscribe();
2140
2247
  }
2141
2248
  };
2142
2249
  // tslint:disable-next-line:typedef
2143
- ShellHeaderComponent.prototype.onClickOutsideProfile = function ($event) {
2250
+ ShellHeaderComponent.prototype.onClickOutside = function ($event) {
2144
2251
  this.userMenuExpanded = false;
2145
2252
  };
2146
- // tslint:disable-next-line:typedef
2147
- ShellHeaderComponent.prototype.onClickOutsideNotifications = function ($event) {
2148
- this.notificationsMenuExpanded = false;
2149
- };
2150
2253
  ShellHeaderComponent.prototype.signin = function (event) {
2151
2254
  if (event) {
2152
2255
  event.preventDefault();
2153
2256
  }
2154
2257
  this.authService.signinRedirect();
2155
2258
  };
2156
- ShellHeaderComponent.prototype.expandUserMenu = function () {
2157
- this.userMenuExpanded = !this.userMenuExpanded;
2158
- this.notificationsMenuExpanded = false;
2259
+ ShellHeaderComponent.prototype.setCurrentUser = function (user) {
2260
+ var _a, _b;
2261
+ this.user = user;
2262
+ if (this.user && this.user.profile) {
2263
+ 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();
2264
+ }
2159
2265
  };
2160
- ShellHeaderComponent.prototype.expandNotificationsMenu = function () {
2161
- this.notificationsMenuExpanded = !this.notificationsMenuExpanded;
2162
- this.userMenuExpanded = false;
2266
+ ShellHeaderComponent.prototype.setCurrentLang = function (lang) {
2267
+ this.currentLang = lang;
2163
2268
  };
2164
2269
  return ShellHeaderComponent;
2165
2270
  }());
2166
- ShellHeaderComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ShellHeaderComponent, deps: [{ token: i2.AuthService }, { token: i1$1.Router }, { token: APP_LINKS }], target: i0__namespace.ɵɵFactoryTarget.Component });
2167
- ShellHeaderComponent.ɵcmp = i0__namespace.ɵɵ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__namespace, 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\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 <div class=\"flex justify-between\">\r\n <div class=\"flex-grow\">\r\n <a [routerLink]=\"link.path\"\r\n class=\"nav-link-notifications grid\"\r\n [ngClass]=\"!link.isRead ? ' hover:bg-blue-50' : 'border-b border-gray-100'\">\r\n <div class=\"flex flex-col\">\r\n <div class=\"font-thin tracking-tighter\">\r\n {{ link.creationDate | date: 'EEE, d MMMM' }}\r\n </div>\r\n <div class=\"font-bold\">\r\n {{ link.text }}\r\n </div>\r\n </div>\r\n </a>\r\n </div>\r\n <!-- <div class=\"flex-none font-thin tracking-tighter\">\r\n <button type=\"button\"\r\n title=\"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE\"\r\n class=\"text-red-600 hover:text-red-900\">\r\n <span class=\"ms-Icon ms-Icon--Delete\"></span>\r\n </button>\r\n </div> -->\r\n </div>\r\n </li>\r\n\r\n\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 <a [routerLink]=\"(allNotificationsLink | async)?.path\">\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 </a>\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__namespace$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i1__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i1__namespace.AsyncPipe, "date": i1__namespace.DatePipe } });
2271
+ ShellHeaderComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ShellHeaderComponent, deps: [{ token: i2.AuthService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: SHELL_CONFIG }, { token: APP_LINKS }], target: i0__namespace.ɵɵFactoryTarget.Component });
2272
+ ShellHeaderComponent.ɵcmp = i0__namespace.ɵɵ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__namespace, 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 <!-- Username -->\r\n <div *ngIf=\"profileMenuVisible\" class=\"ml-2 relative\">\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 </div>\r\n </div>\r\n\r\n <!-- Notifications dropdown -->\r\n <div *ngIf=\"showAlerts && user\" class=\"ml-2\">\r\n <lib-notifications-indicator></lib-notifications-indicator>\r\n </div>\r\n\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 <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__namespace$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i1__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i1__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
2168
2273
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ShellHeaderComponent, decorators: [{
2169
2274
  type: i0.Component,
2170
2275
  args: [{
@@ -2179,6 +2284,12 @@
2179
2284
  }] }, { type: i1__namespace$1.Router, decorators: [{
2180
2285
  type: i0.Inject,
2181
2286
  args: [i1$1.Router]
2287
+ }] }, { type: i1__namespace$1.ActivatedRoute, decorators: [{
2288
+ type: i0.Inject,
2289
+ args: [i1$1.ActivatedRoute]
2290
+ }] }, { type: undefined, decorators: [{
2291
+ type: i0.Inject,
2292
+ args: [SHELL_CONFIG]
2182
2293
  }] }, { type: undefined, decorators: [{
2183
2294
  type: i0.Inject,
2184
2295
  args: [APP_LINKS]
@@ -2186,14 +2297,20 @@
2186
2297
  }, propDecorators: { sectionLinksPath: [{
2187
2298
  type: i0.Input,
2188
2299
  args: ['section-links']
2189
- }], notificationLinksPath: [{
2300
+ }], profileMenuVisible: [{
2190
2301
  type: i0.Input,
2191
- args: ['notification-links']
2192
- }], allNotificationsLinkPath: [{
2302
+ args: ['profile-menu']
2303
+ }], showUserNameOnHeader: [{
2193
2304
  type: i0.Input,
2194
- args: ['all-notifications']
2195
- }], config: [{
2305
+ args: ['show-userName']
2306
+ }], showAlerts: [{
2307
+ type: i0.Input,
2308
+ args: ['show-alerts']
2309
+ }], langs: [{
2196
2310
  type: i0.Input
2311
+ }], currentLang: [{
2312
+ type: i0.Input,
2313
+ args: ['current-lang']
2197
2314
  }], border: [{
2198
2315
  type: i0.Input
2199
2316
  }] } });
@@ -2220,14 +2337,15 @@
2220
2337
  } });
2221
2338
 
2222
2339
  var ShellLayoutComponent = /** @class */ (function () {
2223
- function ShellLayoutComponent(router, location, config, componentLoaderFactory) {
2340
+ function ShellLayoutComponent(document, router, location, config, componentLoaderFactory) {
2341
+ this.document = document;
2224
2342
  this.router = router;
2225
2343
  this.location = location;
2226
2344
  this.config = config;
2227
2345
  this.componentLoaderFactory = componentLoaderFactory;
2228
2346
  this.dynamicComponentHosts = null;
2229
- this.routerSub$ = null;
2230
2347
  this.showRightPaneSM = false;
2348
+ this.routerSub$ = null;
2231
2349
  this.activeConfig = new DefaultShellConfig();
2232
2350
  this.loaded = false;
2233
2351
  if (!config) {
@@ -2291,8 +2409,8 @@
2291
2409
  };
2292
2410
  return ShellLayoutComponent;
2293
2411
  }());
2294
- ShellLayoutComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ShellLayoutComponent, deps: [{ token: i1__namespace$1.Router }, { token: i1__namespace.Location }, { token: SHELL_CONFIG }, { token: ComponentLoaderFactory }], target: i0__namespace.ɵɵFactoryTarget.Component });
2295
- ShellLayoutComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellLayoutComponent, selector: "lib-shell-layout", viewQueries: [{ propertyName: "dynamicComponentHosts", predicate: DynamicComponentHostDirective, descendants: true }], ngImport: i0__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentHostDirective, selector: "[appDynamicComponentHost]", inputs: ["hostName"] }, { type: i1__namespace$1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
2412
+ ShellLayoutComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ShellLayoutComponent, deps: [{ token: i1.DOCUMENT }, { token: i1__namespace$1.Router }, { token: i1__namespace.Location }, { token: SHELL_CONFIG }, { token: ComponentLoaderFactory }], target: i0__namespace.ɵɵFactoryTarget.Component });
2413
+ ShellLayoutComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellLayoutComponent, selector: "lib-shell-layout", viewQueries: [{ propertyName: "dynamicComponentHosts", predicate: DynamicComponentHostDirective, descendants: true }], ngImport: i0__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentHostDirective, selector: "[appDynamicComponentHost]", inputs: ["hostName"] }, { type: i1__namespace$1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
2296
2414
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ShellLayoutComponent, decorators: [{
2297
2415
  type: i0.Component,
2298
2416
  args: [{
@@ -2301,7 +2419,10 @@
2301
2419
  templateUrl: './shell-layout.component.html',
2302
2420
  }]
2303
2421
  }], ctorParameters: function () {
2304
- return [{ type: i1__namespace$1.Router }, { type: i1__namespace.Location }, { type: undefined, decorators: [{
2422
+ return [{ type: undefined, decorators: [{
2423
+ type: i0.Inject,
2424
+ args: [i1.DOCUMENT]
2425
+ }] }, { type: i1__namespace$1.Router }, { type: i1__namespace.Location }, { type: undefined, decorators: [{
2305
2426
  type: i0.Inject,
2306
2427
  args: [SHELL_CONFIG]
2307
2428
  }] }, { type: ComponentLoaderFactory }];
@@ -2432,11 +2553,9 @@
2432
2553
  ModelViewLayoutComponent.prototype.ngOnInit = function () {
2433
2554
  };
2434
2555
  ModelViewLayoutComponent.prototype.onSidePaneActivated = function ($event) {
2435
- //console.log('onSidePaneActivated', $event);
2436
2556
  this.showRightPaneSM = true;
2437
2557
  };
2438
2558
  ModelViewLayoutComponent.prototype.onSidePaneDeactivated = function ($event) {
2439
- //console.log('onSidePaneActivated', $event);
2440
2559
  this.showRightPaneSM = false;
2441
2560
  };
2442
2561
  ModelViewLayoutComponent.prototype.closeSidePane = function () {
@@ -2566,8 +2685,8 @@
2566
2685
  }] } });
2567
2686
 
2568
2687
  var FormLayoutComponent = /** @class */ (function () {
2569
- function FormLayoutComponent(_router) {
2570
- this._router = _router;
2688
+ function FormLayoutComponent(router$) {
2689
+ this.router$ = router$;
2571
2690
  this.title = null;
2572
2691
  // tslint:disable-next-line:no-input-rename
2573
2692
  this.searchPlaceholder = 'αναζήτηση';
@@ -2579,7 +2698,6 @@
2579
2698
  // tslint:disable-next-line:no-output-on-prefix
2580
2699
  this.onSearch = new i0.EventEmitter();
2581
2700
  this.onComplete = new i0.EventEmitter();
2582
- this.showRightPaneSM = false;
2583
2701
  }
2584
2702
  FormLayoutComponent.prototype.ngOnInit = function () {
2585
2703
  var _a;
@@ -2609,10 +2727,10 @@
2609
2727
  FormLayoutComponent.prototype.routerLinkActionClick = function (action, relative) {
2610
2728
  if (relative === void 0) { relative = false; }
2611
2729
  if (action.outlet) {
2612
- this._router.navigate(['', { outlets: { formRightPane: action.link } }]);
2730
+ this.router$.navigate(['', { outlets: { formRightPane: action.link } }]);
2613
2731
  }
2614
2732
  else {
2615
- this._router.navigate([action.link]);
2733
+ this.router$.navigate([action.link]);
2616
2734
  }
2617
2735
  };
2618
2736
  return FormLayoutComponent;
@@ -2765,7 +2883,7 @@
2765
2883
  return PageNotFoundComponent;
2766
2884
  }());
2767
2885
  PageNotFoundComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: PageNotFoundComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
2768
- PageNotFoundComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: PageNotFoundComponent, selector: "lib-page-not-found", ngImport: i0__namespace, 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"] }] });
2886
+ PageNotFoundComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: PageNotFoundComponent, selector: "lib-page-not-found", ngImport: i0__namespace, 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"] }] });
2769
2887
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: PageNotFoundComponent, decorators: [{
2770
2888
  type: i0.Component,
2771
2889
  args: [{
@@ -2877,31 +2995,6 @@
2877
2995
  }]
2878
2996
  }] });
2879
2997
 
2880
- var defaultError = 'Something went wrong';
2881
- var ObsWithStatusPipe = /** @class */ (function () {
2882
- function ObsWithStatusPipe() {
2883
- }
2884
- ObsWithStatusPipe.prototype.transform = function (val) {
2885
- return val.pipe(operators.map(function (value) {
2886
- return {
2887
- loading: value.type === 'start',
2888
- error: value.type === 'error' ? defaultError : '',
2889
- value: value.type ? value.value : value,
2890
- };
2891
- }), operators.startWith({ loading: true }), operators.catchError(function (error) { return rxjs.of({ loading: false, error: typeof error === 'string' ? error : defaultError }); }));
2892
- };
2893
- return ObsWithStatusPipe;
2894
- }());
2895
- ObsWithStatusPipe.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ObsWithStatusPipe, deps: [], target: i0__namespace.ɵɵFactoryTarget.Pipe });
2896
- ObsWithStatusPipe.ɵpipe = i0__namespace.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ObsWithStatusPipe, name: "obsWithStatus", pure: false });
2897
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0__namespace, type: ObsWithStatusPipe, decorators: [{
2898
- type: i0.Pipe,
2899
- args: [{
2900
- name: 'obsWithStatus',
2901
- pure: false
2902
- }]
2903
- }] });
2904
-
2905
2998
  var BaseListComponent = /** @class */ (function () {
2906
2999
  function BaseListComponent(route$, router$) {
2907
3000
  this.route$ = route$;
@@ -3581,7 +3674,8 @@
3581
3674
  // pipes
3582
3675
  AddressPipe,
3583
3676
  DurationFormatPipe,
3584
- ObsWithStatusPipe
3677
+ NavLinksListComponent,
3678
+ NotificationsIndicatorComponent
3585
3679
  ], imports: [i1.CommonModule,
3586
3680
  i1$1.RouterModule,
3587
3681
  i2.IndiceAuthModule], exports: [ClickOutsideDirective,
@@ -3609,7 +3703,6 @@
3609
3703
  UnauthorizedComponent,
3610
3704
  AddressPipe,
3611
3705
  DurationFormatPipe,
3612
- ObsWithStatusPipe,
3613
3706
  CollapsiblePanelComponent,
3614
3707
  SidePaneComponent,
3615
3708
  DatepickerComponent,
@@ -3666,7 +3759,8 @@
3666
3759
  // pipes
3667
3760
  AddressPipe,
3668
3761
  DurationFormatPipe,
3669
- ObsWithStatusPipe
3762
+ NavLinksListComponent,
3763
+ NotificationsIndicatorComponent
3670
3764
  ],
3671
3765
  imports: [
3672
3766
  i1.CommonModule,
@@ -3699,7 +3793,6 @@
3699
3793
  UnauthorizedComponent,
3700
3794
  AddressPipe,
3701
3795
  DurationFormatPipe,
3702
- ObsWithStatusPipe,
3703
3796
  CollapsiblePanelComponent,
3704
3797
  SidePaneComponent,
3705
3798
  DatepickerComponent,
@@ -3718,6 +3811,7 @@
3718
3811
  */
3719
3812
 
3720
3813
  exports.APP_LINKS = APP_LINKS;
3814
+ exports.APP_NOTIFICATIONS = APP_NOTIFICATIONS;
3721
3815
  exports.AddressPipe = AddressPipe;
3722
3816
  exports.AuthCallbackComponent = AuthCallbackComponent;
3723
3817
  exports.AuthRenewComponent = AuthRenewComponent;
@@ -3753,8 +3847,8 @@
3753
3847
  exports.ModelViewLayoutComponent = ModelViewLayoutComponent;
3754
3848
  exports.NULL_TOAST = NULL_TOAST;
3755
3849
  exports.NavLink = NavLink;
3850
+ exports.NavLinksListComponent = NavLinksListComponent;
3756
3851
  exports.NotificationNavLink = NotificationNavLink;
3757
- exports.ObsWithStatusPipe = ObsWithStatusPipe;
3758
3852
  exports.PageNotFoundComponent = PageNotFoundComponent;
3759
3853
  exports.PagerComponent = PagerComponent;
3760
3854
  exports.RouterViewAction = RouterViewAction;
@@ -3776,5 +3870,5 @@
3776
3870
 
3777
3871
  Object.defineProperty(exports, '__esModule', { value: true });
3778
3872
 
3779
- })));
3873
+ }));
3780
3874
  //# sourceMappingURL=indice-ng-components.umd.js.map